很多時候我們在進行進一步研究時需要轉儲(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...