Oracle中 根据 file# 和 block# 找到对象
我们在10046生产的trace 文件里经常看到下面的信息. 表示系统在等待散列读取某个文件号的某个块开始的8个块.
WAIT #6: nam='db file scattered read' ela= 438472 file#=6 block#=2641 blocks=8
WAIT #6: nam='db file scattered read' ela= 1039 file#=6 block#=833 blocks=8 obj#=90054 tim=878243950382
WAIT #6: nam='db file scattered read' ela= 835 file#=10 block#=22961 blocks=8 obj#=90054 tim=878243957168
WAIT #6: nam='db file scattered read' ela= 815 file#=11 block#=7409 blocks=8 obj#=90054 tim=878243966696
...
因为我们想要根据file#,block#去找到系统正在读取哪个object(segment). 现在主要有三种方式 1. 查询dba_extents 表,效率比较差.
select segment_name from dba_extents where and rownum = 1 and file_id = 6 and 2641 between block_id and block_id + blocks - 1;
SEGMENT_NAME
--------------------
T1_N1 Elapsed: 00:02:43.84 Statistics
----------------------------------------------------------
4676 recursive calls
2 db block gets
4077424 consistent gets
6492 physical reads
0 redo size
418 bytes sent via SQL*Net to client
400 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
5 sorts (memory)
0 sorts (disk)
1 rows processed
2. 查询v$BH view, 查询很快,
SQL> desc v$bh
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
FILE# NUMBER
BLOCK# NUMBER
CLASS# NUMBER
STATUS VARCHAR2(10)
XNC NUMBER
FORCED_READS NUMBER
FORCED_WRITES NUMBER
LOCK_ELEMENT_ADDR RAW(4)
LOCK_ELEMENT_NAME NUMBER
LOCK_ELEMENT_CLASS NUMBER
DIRTY VARCHAR2(1)
TEMP VARCHAR2(1)
PING VARCHAR2(1)
STALE VARCHAR2(1)
DIRECT VARCHAR2(1)
NEW CHAR(1)
OBJD NUMBER
TS# NUMBER
LOBID NUMBER
CACHEHINT NUMBER
SQL> select objd, file#,block#,class#,ts#,cachehint,status,dirty from v$bh where file#=2 and block#=59101;
OBJD FILE# BLOCK# CLASS# TS# CACHEHINT STATUS DI
---------- ---------- ---------- ---------- ---------- ---------- -------------------- --
6373 2 59101 1 1 15 xcur N
3. dump出那个block块,查找object id.
alter system dump datafile 6 block 2641;
file which_obj2:
define __FILE = &1
define __BLOCK = &2
alter system dump datafile &__FILE block &__BLOCK;
set serveroutput on
declare
v_dba varchar2(100);
v_type varchar2(100);
v_obj_id number;
v_obj_name varchar2(100);
begin
for r in (select column_value as t from table(get_trace_file1)) loop
if regexp_like(r.t, 'buffer tsn:') then
dbms_output.put_line('------------------------------------------------');
v_dba := regexp_substr(r.t, '[[:digit:]]+/[[:digit:]]+');
dbms_output.put_line(rpad('dba = ',20)|| v_dba);
end if;
if regexp_like(r.t, 'type: 0x([[:xdigit:]]+)=([[:print:]]+)') then
v_type := substr(regexp_substr(r.t, '=[[:print:]]+'), 2);
dbms_output.put_line(rpad('type = ',20)|| v_type);
end if;
if regexp_like(r.t, 'seg/obj:') then
v_obj_id := to_dec(substr(regexp_substr(r.t,
'seg/obj: 0x[[:xdigit:]]+'), 12));
select object_name into v_obj_name from all_objects
where data_object_id = v_obj_id;
dbms_output.put_line(rpad('object_id = ',20)|| v_obj_id);
dbms_output.put_line(rpad('object_name = ',20)|| v_obj_name);
end if;
if regexp_like(r.t, 'Objd: [[:digit:]]+') then
v_obj_id := substr(regexp_substr(r.t, 'Objd: [[:digit:]]+'), 7);
select object_name into v_obj_name from all_objects
where data_object_id = v_obj_id;
dbms_output.put_line(rpad('object_id = ',20)|| v_obj_id);
dbms_output.put_line(rpad('object_name = ',20)|| v_obj_name);
end if;
end loop;
dbms_output.put_line('------------------------------------------------');
end;
/
@which_obj2 6 2641
old 1: alter system dump datafile &__FILE block &__BLOCK
new 1: alter system dump datafile 6 block 2641
System altered.
Elapsed: 00:00:00.01
------------------------------------------------
dba = 6/2641
type = FIRST LEVEL BITMAP BLOCK
object_id = 9005
Elapsed: 00:00:00.045
object_name = T1_N1
------------------------------------------------
PL/SQL procedure successfully completed.
Oracle中 根据 file# 和 block# 找到对象的更多相关文章
- ORA-01578 ORACLE data block corrupted (file # 29, block # 2889087)
BW数据库后台报错如下:F:\oracle\SBP\saptrace\diag\rdbms\sbp\sbp\trace ORA-01578: ORACLE data block corrupted ( ...
- oracle中的表空间(tablespace)、方案(schema)、段(segment)、区(extent)、块(block)
数据文件和日志文件是数据库中最重要的文件.它们是数据存储的地方.每个数据库至少有一个与之相关的数据文件,通常情况下不只一个,有很多.数据在数据文件中是如何组织的?要了解这些内容我们首先必须理解什么是表 ...
- ORA-01578: ORACLE data block corrupted (file # 3, block # 1675)
警告日志中发现如下报错信息: ORA-01578: ORACLE data block corrupted (file # 3, block # 1675)ORA-01110: data file 3 ...
- oracle中的数据对象
oracle中的数据对象有表.视图.索引.序列等 表的相关操作 1.创建表 方式一: 方式二:create table person( create table person1 id number(1 ...
- AIR 中的 File 对象 所访问的文件夹位置
AIR 中的 File 对象 所访问的文件夹位置 Link 关于File.cacheDirectory的一点说明 According to the Apple guidelines, data tha ...
- Oracle中删除用户下所有对象的多种方法
Oracle删除用户下所有对象的方法未必人人都会,下面就为您介绍两种常用的Oracle删除用户下所有对象的方法,希望对您学习Oracle删除用户方面能有所帮助. 方法1: drop user XX ...
- 解决ORA-29857:表空间中存在域索引和/或次级对象 & ORA-01940:无法删除当前连接的用户问题 分类: oracle sde 2015-07-30 20:13 8人阅读 评论(0) 收藏
今天ArcGIS的SDE发生了一点小故障,导致系统表丢失,所以需要重建一下SDE数据库,在删除SDE用户和所在的表空间过程中遇到下面两个ORA错误,解决方法如下: 1)删除表空间时报错:ORA-298 ...
- oracle中使用impdp数据泵导入数据提示“ORA-31684:对象类型已经存在”错误的解决
转载请注明出处:http://blog.csdn.net/dongdong9223/article/details/47448751 本文出自[我是干勾鱼的博客] oracle中使用impdp数据泵导 ...
- react找到对象数组中指定的值
找到对象数组中指定的值var array = [ { label: "Custom", value: "0" }, ...
随机推荐
- ajax利用json进行服务器与客户端的通信
1.JQuery中$.ajax()方法参数详解 http://blog.sina.com.cn/s/blog_4f925fc30100la36.html 2.服务器端获取String que=requ ...
- Spring对加载的bean之间循环依赖的处理
根据下面文档的叙述,简言之: 对于相互之间通过构造函数注入相互循环依赖的情况,Spring会抛出BeanCurrentlyInCreationException错误. 如果AB两个beans是通过属性 ...
- 【iHMI43 4.3寸液晶模块】demo竖屏例程(版本1.01)发布
============================== 技术论坛:http://www.eeschool.org 博客地址:http://xiaomagee.cnblogs.com 官方网店:h ...
- Apache POI使用详解
Apache POI使用详解 1.POI结构与常用类 (1)POI介绍 Apache POI是Apache软件基金会的开源项目,POI提供API给Java程序对Microsoft Office格式档案 ...
- Apache Storm 衍生项目之1 -- storm-yarn
欢迎转载,转载请注明出处,徽沪一郎. 概要 storm是一个近似于实时的计算框架,甩开hadoop上的原生mapreduce计算框架不只一条街.如果能将storm引入到hadoop中,对存储于hdfs ...
- laravel transaction : laravel 的事务是不支持eloquent的, 要用DB::的方式
数据库事务处理# 你可以使用 transaction 方法,去执行一组数据库事务处理的操作: DB::transaction(function() { DB::table('users')->u ...
- 在 MySQL 中查找含有目标字段的表
要查询数据库中哪些表含有目标字段,可以使用语句: SELECT TABLE_SCHEMA,TABLE_NAME FROM information_schema.`COLUMNS` WHERE COLU ...
- 使用Xcode GPU Frame Caputre教程
http://blog.manbolo.com/2012/11/20/using-xcode-opengl-es-frame-capture 这里是原文,因为它版本比较老和它demo的限制,所以也想写 ...
- PHP pear安装
PHP pear安装 Posted on 2012-07-06 10:19 bug yang 阅读(5787) 评论(0) 编辑 收藏 转自:http://wangye.org/blog/archiv ...
- [转]PHP高效率写法(详解原因)
1.尽量静态化: 如果一个方法能被静态,那就声明它为静态的,速度可提高1/4,甚至我测试的时候,这个提高了近三倍. 当然了,这个测试方法需要在十万级以上次执行,效果才明显. 其实静态方法和非静 ...