ORACLE資料塊轉儲及RDBA的轉換

2021-09-21 17:00:17 字數 1910 閱讀 6566

很多時候我們在進行進一步研究時需要轉儲(dump)oracle的資料塊,以研究其內容,oracle提供了很好的方式,我們通過以下例子簡單說明一下:

很多人經常提出的乙個問題是,rdba是如何轉換的?

rdba: 0x004062ba (1/25274)

我們通過這個例子介紹一下.

rdba從oracle6->oracle7->oracle8發生了三次改變:

在oracle6中,rdba由6位2進製數表示,也就是說資料塊最多只能有2^6=64個資料檔案(去掉全0和全1, 實際上最多只能代表62個檔案)

在oracle7中,rdba中的檔案號增加為10位,為了向後相容,從block號的高位拿出4位作為檔案號的高位.這樣從6->7的rowid無需發生變化.

而資料檔案的個數理論上則擴充套件到了1022個(去掉全0和全1),在oracle7中,rowid格式為:bbbbbbbb.rrrr.ffff

在oracle8中,檔案號仍然用10位表示,只是不再需要置換,為了向後相容,同時引入了相對檔案號(rfile#),所以從oracle7到oracle8,rowid仍然無需發生變化.

在oracle8i中,oracle引入了dataobj#,rowid的格式變為:oooooofffbbbbbbsss,oracle通過dataobj#進一步向上定為表空間等,從而使每個表空間

的資料檔案數量理論上可以達到1022個

舉例說明如下:

在oracle6中:

比如: file 8, block 56892

26位block號==56892

vv vvvvvvvv vvvvvvvv vvvvvvvv

00100000 00000000 11011110 00111100

^^^^^^

6位檔案號==8

在oracle7中:

比如:file 255, block 56892

11111100 11000000 11011110 00111100

f c c 0 d e 3 c

\_____/\___/\_______________________/

| | |

| | block = 0xde3c = 56892

\_____________

| \

v v

0011 111111 = 0xff = 255 --注意這裡高位和低位要置換才能得出正確的file#

在oracle8中:

比如:file 255, block 56892

11111100 11000000 11011110 00111100

f c c 0 d e 3 c

\_____/\___/\_______________________/

| | |

| | block = 0xde3c = 56892

\_____________

| \

v v

0011 1111 0011 = 03f3 = 1011 --這就是相對檔案號

對於我們測試中的例子:

rdba: 0x004062ba (1/25274)

也就是:0000 0000 0100 0000 0110 0010 1011 1010

前10位為rfile#: 0000 0000 01 = 1

後22位為block#:00 0000 0110 0010 1011 1010 = 25274

附件:

ORACLE資料塊轉儲及RDBA的轉換

很多時候我們在進行進一步研究時需要轉儲 dump oracle的資料塊,以研究其內容,oracle提供了很好的方式,我們通過以下例子簡單說明一下 很多人經常提出的乙個問題是,rdba是如何轉換的?rdba 0x004062ba 1 25274 我們通過這個例子介紹一下.rdba從oracle6 or...

linux日誌轉儲及指令碼操作

假設目前有兩台主機 server傳送日誌 client lockey 接受日誌並對日誌進行處理 1.傳送方的日誌系統配置 2.接受方的日誌系統配置 3.在傳送方產生日誌,監控接收方的接收情況,可以看到當傳送方產生一條日誌的時候,接收方就會顯示出來 日誌監控的命令 本示例指令碼執行在接收端,即轉儲的日...

mysql 不能轉儲 mysqldump資料庫轉儲

mysqldump資料庫轉儲 mysqldump是乙個對資料庫轉儲的命令,其附帶了很多功能的引數,下面將列舉一些比較常用的!首先你可以通過以下命令獲得mysqldump的引數的幫助文件 用法 usage mysqldump options database tables or mysqldump o...