我们在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# 找到对象的更多相关文章

  1. 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 ( ...

  2. oracle中的表空间(tablespace)、方案(schema)、段(segment)、区(extent)、块(block)

    数据文件和日志文件是数据库中最重要的文件.它们是数据存储的地方.每个数据库至少有一个与之相关的数据文件,通常情况下不只一个,有很多.数据在数据文件中是如何组织的?要了解这些内容我们首先必须理解什么是表 ...

  3. 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 ...

  4. oracle中的数据对象

    oracle中的数据对象有表.视图.索引.序列等 表的相关操作 1.创建表 方式一: 方式二:create table person( create table person1 id number(1 ...

  5. AIR 中的 File 对象 所访问的文件夹位置

    AIR 中的 File 对象 所访问的文件夹位置 Link 关于File.cacheDirectory的一点说明 According to the Apple guidelines, data tha ...

  6. Oracle中删除用户下所有对象的多种方法

      Oracle删除用户下所有对象的方法未必人人都会,下面就为您介绍两种常用的Oracle删除用户下所有对象的方法,希望对您学习Oracle删除用户方面能有所帮助. 方法1: drop user XX ...

  7. 解决ORA-29857:表空间中存在域索引和/或次级对象 & ORA-01940:无法删除当前连接的用户问题 分类: oracle sde 2015-07-30 20:13 8人阅读 评论(0) 收藏

    今天ArcGIS的SDE发生了一点小故障,导致系统表丢失,所以需要重建一下SDE数据库,在删除SDE用户和所在的表空间过程中遇到下面两个ORA错误,解决方法如下: 1)删除表空间时报错:ORA-298 ...

  8. oracle中使用impdp数据泵导入数据提示“ORA-31684:对象类型已经存在”错误的解决

    转载请注明出处:http://blog.csdn.net/dongdong9223/article/details/47448751 本文出自[我是干勾鱼的博客] oracle中使用impdp数据泵导 ...

  9. react找到对象数组中指定的值

    找到对象数组中指定的值var array = [            { label: "Custom", value: "0" },            ...

随机推荐

  1. jQuery 写的插件图片上下切换幻灯效果

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. 关于HTML条件注释你可能不知道的一些事儿

    最近经常看到类似这样的HTML代码片段,很多前端开发人员应该都熟悉: 1 <!--[if lt IE 7]>      <html class="ie6"> ...

  3. FileStorage Read String Start With Number Need Quotation Mark 读取数字开头的字符串需要加引号

    // Write data FileStorage fs("test.yml", FileStorage::WRITE); fs << "MyString&q ...

  4. 在vs2013中配置openGL(绝对可靠 !)

    首先要下载glut.h glut32.dll glut32.lib.(这个在glut-3.7.6-bin的包里面,可以直接下载 ) 然后: glut.h:放到 D:\vs2013\VC\include ...

  5. hdu Super Jumping

    简单的dp,最优子结构是dp[i],即从0~i来看,是的dp[i]最大,然后找到最大中的最大就可以了, 转移方程是:dp[i]=max{dp[i],dp[j]+value[i]},注意这里有两个判断条 ...

  6. cookie 换肤

    jquery.Cookies.js /** * Cookie plugin * * Copyright (c) 2006 ziqiu.zhang * Dual licensed under the M ...

  7. 浅谈Java中的Set、List、Map的区别

    http://developer.51cto.com/art/201309/410205_all.htm

  8. android之Chronometer

    首先定义activity_main.xml文件 代码如下: <LinearLayout xmlns:android="http://schemas.android.com/apk/re ...

  9. linux下六大IPC机制【转】

    转自http://blog.sina.com.cn/s/blog_587c016a0100nfeq.html linux下进程间通信IPC的几种主要手段简介: 管道(Pipe)及有名管道(named ...

  10. 用MSoffice里的绘图工具

    试过一些绘图表的工具,在xbeta推荐的替代visio一文中介绍的一些软件.之前用得最多的就是Dia,在linux下也有.现在才发现在微软的office下的绘图工具已经足够我使用了,不需要专业的图形符 ...