返回小栈
深入解析Oracle rdba结构及os层rdba解析工具分享
orastar2020-03-23 14:24:48

一、概念介绍



         rdbaOracle数据块头部offset 4~7的一个结构,大小为4 bytes,由表空间相对文件号(tablespace relative file numbers)和块号2部分组成。本文主要说明以下问题,

    1、  FILE#(File identification number):数据文件唯一标识,database级唯一;

    2、  RFILE#(Tablespace relative datafile number):表空间相对文件号,tablespace级唯一;

    3、  File#取值范围为:1~65533;

    4、  RFILE#的取值范围为: 1~1023,大于1023时重置为1保持表空间内唯一;

    5、  file#<1024,file#=rfile#,否则file#自增,rfile重置为1自增;

   6、  rdba4 bytes组成,共32 bits,offset 22~3110 bits)表示RFILE#,offset 0~2122 bits)表示:block#;

   7、  Oracle Physical Database Limits中(Database files         Maximum per tablespace        Operating system dependent; usually 1022),2^10 = 1024-1(去掉0),所以rfile#在单个表空间内最多1023个,官方文档和mos中提到的1022,有点不准确;

     8、  分享osrdba解析工具,方便大家解析rdbadump数据块,工具下载方法:请关注公众号,回复“rdba”。

  对文章内容有疑问的欢迎留言讨论,感谢您的阅读,如果您觉得有所收获,也欢迎把文章分享给您的朋友。



二、RDBA结构解析



alter session settracefile_identifier='orastar_hdrseg_after_trunc_10';

oradebug setmypid

alter system dump datafile 5 block 130;

oradebug close_trace

oradebug tracefile_name

 

***头部信息如下,

buffer tsn: 6 rdba: 0x01400082 (5/130)

scn: 0x0000.00347db2 seq: 0x01 flg: 0x04tail: 0x7db22301

frmt: 0x02 chkval: 0xfd95 type:0x23=PAGETABLE SEGMENT HEADER

 

1 rdba结构解析

 

小结:

1、  rdba4 bytes组成,共32 bits,offset 22~3110 bits)表示 RFILE#,offset 0~2122 bits表示:block#。

 

三、RFILE#的取值范围



create tablespace hsql datafile'/oradata/epmsn/hsql1.dbf' size 1024k autoextend off;

 

spool /home/oracle/cr_tb.sql

set serveroutput on

DECLARE

c_sql varchar2(100) := '';

begin

for i in 2..1030 loop

c_sql := 'alter tablespace hsql adddatafile '||'''/oradata/epmsn/hsql'||i||'.dbf'' size 1024K;';

dbms_output.put_line(c_sql);

end loop;

end;

/

 

@cr_tb.sql

 

Tablespace altered.

 

alter tablespace hsql add datafile'/oradata/epmsn/hsql1024.dbf'  size 1024K

*

ERROR at line 1:

ORA-01686: max # files (1023) reached forthe tablespace HSQL

 

 

 

     1000      1000/oradata/epmsn/hsql995.dbf             6

     1001      1001/oradata/epmsn/hsql996.dbf             6

     1002      1002/oradata/epmsn/hsql997.dbf             6

     1003      1003/oradata/epmsn/hsql998.dbf             6

     1004      1004/oradata/epmsn/hsql999.dbf             6

     1005      1005/oradata/epmsn/hsql1000.dbf           6

     1006      1006/oradata/epmsn/hsql1001.dbf           6

     1007      1007/oradata/epmsn/hsql1002.dbf           6

     1008      1008/oradata/epmsn/hsql1003.dbf           6

     1009      1009/oradata/epmsn/hsql1004.dbf           6

     1010      1010/oradata/epmsn/hsql1005.dbf           6

     1011      1011/oradata/epmsn/hsql1006.dbf           6

     1012      1012/oradata/epmsn/hsql1007.dbf           6

     1013      1013/oradata/epmsn/hsql1008.dbf           6

     1014      1014/oradata/epmsn/hsql1009.dbf           6

     1015      1015/oradata/epmsn/hsql1010.dbf           6

     1016      1016/oradata/epmsn/hsql1011.dbf           6

     1017      1017/oradata/epmsn/hsql1012.dbf           6

     1018      1018/oradata/epmsn/hsql1013.dbf           6

     1019      1019/oradata/epmsn/hsql1014.dbf           6

     1020      1020/oradata/epmsn/hsql1015.dbf           6

     1021      1021/oradata/epmsn/hsql1016.dbf           6

     1022      1022 /oradata/epmsn/hsql1017.dbf          6

     1023      1023/oradata/epmsn/hsql1018.dbf           6

     1024         1 /oradata/epmsn/hsql1019.dbf          6

     1025         2 /oradata/epmsn/hsql1020.dbf          6

     1026         3 /oradata/epmsn/hsql1021.dbf          6

     1027         4 /oradata/epmsn/hsql1022.dbf          6

     1028         6 /oradata/epmsn/hsql1023.dbf          6

 

1028 rows selected.

 

SQL>

 

SQL> select ts#,count(1) from v$datafilegroup by ts#;

 

      TS#   COUNT(1)

---------- ----------

          1         1

          6     1023

          2         1

          4         2

          0         1

 

SQL>

小结:

1、 FILE#(File identification number):数据文件唯一标识,database级唯一;

2、  RFILE#(Tablespace relativedatafile number):表空间相对文件号,tablespace级唯一;

3、  File#取值范围为: 1~65533;

4、  RFILE#的取值范围为: 1~1023,大于1023时重置为1保持表空间内唯一;

5、  file#<1024,file#=rfile#,否则file#自增,rfile重置为1自增;

6、  rdba4 bytes组成,共32 bits,offset 22~3110 bits)表示 RFILE#,offset 0~2122 bits表示:block#;

7、  Oracle Physical Database Limits中(Database filesMaximumper tablespace  Operating systemdependent; usually 1022),2^10 = 1024-1(去掉0),所以rfile#在单个表空间内最多1023个,官方文档和mos中提到的1022,有点不准确。



四、osrdba解析工具



mkdir -p /home/oracle/orastar

mv ora_rdba /home/oracle/orastar

export PATH=/home/oracle/orastar/:$PATH



五、说明



1、以上内容为个人多次测试结果,由于个人原因,如有分析不足之处还请见谅及指正。

2、文章涉及内容,请勿生产环境模拟。

 


纸上得来终觉浅,绝知此事要躬行。--陆游



感谢您的阅读,如果您觉得有所收获,也欢迎把文章分享给您的朋友。




 


0
0