9_深入解析Oracle rdba結構及os層rdba解析工具分享

orastar發表於2020-03-08

一、概念介紹



         rdba Oracle 資料塊頭部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、   rdba 4 bytes 組成,共32 bits,offset 22~31 10 bits )表示RFILE#,offset 0~21 22 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、    分享os rdba 解析工具,方便大家解析rdba dump 資料塊,工具下載方法:請關注公眾號“ 資料庫技術筆記”,回覆“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、    rdba 4 bytes 組成,共 32 bits,offset 22~31 10 bits )表示  RFILE# ,offset 0~21 22 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、    rdba 4 bytes 組成,共 32 bits,offset 22~31 10 bits )表示  RFILE# ,offset 0~21 22 bits 表示: block#;

7、    Oracle Physical Database Limits 中( Database filesMaximumper tablespace  Operating systemdependent; usually 1022 ), 2^10 = 1024-1( 去掉 0), 所以 rfile# 在單個表空間內最多 1023 個,官方文件和 mos 中提到的 1022 ,有點不準確。



四、 os rdba 解析工具



mkdir -p /home/oracle/orastar

mv ora_rdba  /home/oracle/orastar

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



五、說明



1 、以上內容為個人多次測試結果,由於個人原因,如有分析不足之處還請見諒及指正。

2 、文章涉及內容,請勿 生產環境模擬。

 

紙上得來終覺淺,絕知此事要躬行。--陸游


感謝您的閱讀,如果您覺得有所收穫,也歡迎把文章分享給您的朋友。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31442014/viewspace-2679026/,如需轉載,請註明出處,否則將追究法律責任。

相關文章