[20130530]OS block header破壞以及恢復.txt
[20130530]OS block header破壞以及恢復.txt
oracle檔案的第一個塊(block 0)是OS block header,在資料庫中查詢不到資訊,記錄的是OS資訊,以及檔案大小的等資訊:
如果損壞,應該對資料檔案影響大嗎? 自己做一個測試看看.
1.介紹OS block header:
@ver
SQL> @ver
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
CREATE TABLESPACE AAA DATAFILE
'/u01/app/oracle11g/oradata/test/aaa01.dbf' SIZE 64M AUTOEXTEND ON NEXT 16M MAXSIZE UNLIMITED
LOGGING
ONLINE
PERMANENT
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
BLOCKSIZE 8K
SEGMENT SPACE MANAGEMENT AUTO
FLASHBACK ON;
$ ls -l /u01/app/oracle11g/oradata/test/aaa01.dbf
-rw-r----- 1 oracle11g oinstall 67117056 2013-05-30 08:27:44 /u01/app/oracle11g/oradata/test/aaa01.dbf
-- 64M=67108864,67117056-67108864=8192,可以發現從檔案系統的OS上的大小比資料庫裡的大小多了一個BLOCK。
--可以發現資訊在前面48個位元組.我的機器是intel的,這樣顯示才和bvi的顯示一致.
--如果使用-tx 以及tx2都不一致.切記!
2.關閉資料庫,做一個冷備份.
$ cp /u01/app/oracle11g/oradata/test/aaa01.dbf /data/testtest/
--注意不能這樣使用dd命令,這樣檔案大小8192,不知道這種情況如何使用dd,難道只能拼接在一起嗎?切記小心.我開始就是這樣做的,檔案破壞!!
$ dd if=/dev/zero f=/u01/app/oracle11g/oradata/test/aaa01.dbf bs=8192 count=1
1+0 records in
1+0 records out
---切記小心!!!!!!!
$ bvi -s 64 aaa01.dbf
--使用R命令,具體細節忽略.
--資料庫僅僅到mounted模式.
3.使用bvi編輯回來後:
SQL> alter database open;
Database altered.
4.如何填寫這些資訊,最簡單的方法建立一個大小一樣的檔案(這樣消耗空間),取出相應的內容填寫回去就OK了.
當然如果有備份也許使用rman也不錯.
--可以發現test01.dbf與aaa01.dbf的os block header 是一樣的.
我的感覺也許能猜出一些,比如7d 7c 7b 7a每個檔案都有.找到一個連結,大家自己看吧:
不完全詳解os block header.html
5.改變資料大小看看:
--(64*1024*1024-8192)/1024= 65528.減少1個塊.65528/8=8191(0x1fff)
alter database datafile '/u01/app/oracle11g/oradata/test/aaa01.dbf' resize 65528k;
--交換位元組看看:
$ od -tx2 -N 8192 aaa01.dbf
0000000 a200 0000 0000 ffc0 0000 0000 0000 0000
0000020 e599 0000 2000 0000 1fff 0000 7c7d 7a7b
0000040 81a0 0000 0000 0000 0000 0000 0000 0000
0000060 0000 0000 0000 0000 0000 0000 0000 0000
*
0020000
--024-025(八進位制) 2000=應該表示塊大小,8K=0x2000.
--028-031 1fff=表示佔用資料庫的數量.(64*1024*1024-8192)/1024= 65528.減少1個塊.65528/8=8191(0x1fff)
--020-021 表示什麼?
--其他地方的沒變,不知道表示什麼?
6.補充:
實際上這個測試來源前幾天別人給我講的情況,他們的OS block header損壞,是物理損壞.按照我的理解一旦出現物理無法讀出,
硬碟快over了.當然使用rman很快恢復.
select * from x$bh where file#=11;並不能查詢dbablk=0 的記錄.
或者
select * from v$bh where block#=0;
--這個塊應該是快取的,但是如果出現連結的情況:
http://space.itpub.net/267265/viewspace-758059
定義資料檔案沒有指定next大小,而僅僅開啟AUTOEXTEND ON,這樣檔案擴充套件每次僅僅8k,這樣就會出現對這個塊的大量讀寫(我自己的理解,不知道
是否正確),極可能導致損壞,特別在機器記憶體不足的情況下.
oracle檔案的第一個塊(block 0)是OS block header,在資料庫中查詢不到資訊,記錄的是OS資訊,以及檔案大小的等資訊:
如果損壞,應該對資料檔案影響大嗎? 自己做一個測試看看.
1.介紹OS block header:
@ver
SQL> @ver
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
CREATE TABLESPACE AAA DATAFILE
'/u01/app/oracle11g/oradata/test/aaa01.dbf' SIZE 64M AUTOEXTEND ON NEXT 16M MAXSIZE UNLIMITED
LOGGING
ONLINE
PERMANENT
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
BLOCKSIZE 8K
SEGMENT SPACE MANAGEMENT AUTO
FLASHBACK ON;
$ ls -l /u01/app/oracle11g/oradata/test/aaa01.dbf
-rw-r----- 1 oracle11g oinstall 67117056 2013-05-30 08:27:44 /u01/app/oracle11g/oradata/test/aaa01.dbf
SQL> select file_id,file_name,bytes from dba_data_files where file_id=11 ;
FILE_ID FILE_NAME BYTES
---------- -------------------------------------------------- ----------
11 /u01/app/oracle11g/oradata/test/aaa01.dbf 67108864
-- 64M=67108864,67117056-67108864=8192,可以發現從檔案系統的OS上的大小比資料庫裡的大小多了一個BLOCK。
$ od -tx1 -N 8192 aaa01.dbf
0000000 00 a2 00 00 00 00 c0 ff 00 00 00 00 00 00 00 00
0000020 66 da 00 00 00 20 00 00 00 20 00 00 7d 7c 7b 7a
0000040 a0 81 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0000060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
*
0020000
--可以發現資訊在前面48個位元組.我的機器是intel的,這樣顯示才和bvi的顯示一致.
--如果使用-tx 以及tx2都不一致.切記!
$ od -tx -N 8192 aaa01.dbf
0000000 0000a200 ffc00000 00000000 00000000
0000020 0000da66 00002000 00002000 7a7b7c7d
0000040 000081a0 00000000 00000000 00000000
0000060 00000000 00000000 00000000 00000000
*
0020000
$ od -tx2 -N 8192 aaa01.dbf
0000000 a200 0000 0000 ffc0 0000 0000 0000 0000
0000020 da66 0000 2000 0000 2000 0000 7c7d 7a7b
0000040 81a0 0000 0000 0000 0000 0000 0000 0000
0000060 0000 0000 0000 0000 0000 0000 0000 0000
*
0020000
2.關閉資料庫,做一個冷備份.
$ cp /u01/app/oracle11g/oradata/test/aaa01.dbf /data/testtest/
--注意不能這樣使用dd命令,這樣檔案大小8192,不知道這種情況如何使用dd,難道只能拼接在一起嗎?切記小心.我開始就是這樣做的,檔案破壞!!
$ dd if=/dev/zero f=/u01/app/oracle11g/oradata/test/aaa01.dbf bs=8192 count=1
1+0 records in
1+0 records out
---切記小心!!!!!!!
$ bvi -s 64 aaa01.dbf
--使用R命令,具體細節忽略.
$ od -tx1 -N 8192 /u01/app/oracle11g/oradata/test/aaa01.dbf
0000000 00000000 00000000 00000000 00000000
*
0020000
SQL> startup
ORACLE instance started.
Total System Global Area 1603411968 bytes
Fixed Size 2228784 bytes
Variable Size 1006636496 bytes
Database Buffers 587202560 bytes
Redo Buffers 7344128 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 11 - see DBWR trace file
ORA-01110: data file 11: '/u01/app/oracle11g/oradata/test/aaa01.dbf'
SQL> select open_mode from v$database ;
OPEN_MODE
--------------------
MOUNTED
--資料庫僅僅到mounted模式.
3.使用bvi編輯回來後:
SQL> alter database open;
Database altered.
4.如何填寫這些資訊,最簡單的方法建立一個大小一樣的檔案(這樣消耗空間),取出相應的內容填寫回去就OK了.
當然如果有備份也許使用rman也不錯.
$ ls -l aaa01.dbf test01.dbf
-rw-r----- 1 oracle11g oinstall 67117056 2013-05-30 10:30:10 aaa01.dbf
-rw-r----- 1 oracle11g oinstall 67117056 2013-05-30 10:30:10 test01.dbf
$ od -tx1 -N 8192 aaa01.dbf
0000000 00 a2 00 00 00 00 c0 ff 00 00 00 00 00 00 00 00
0000020 66 da 00 00 00 20 00 00 00 20 00 00 7d 7c 7b 7a
0000040 a0 81 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0000060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
*
0020000
$ od -tx1 -N 8192 test01.dbf
0000000 00 a2 00 00 00 00 c0 ff 00 00 00 00 00 00 00 00
0000020 66 da 00 00 00 20 00 00 00 20 00 00 7d 7c 7b 7a
0000040 a0 81 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0000060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
*
0020000
--可以發現test01.dbf與aaa01.dbf的os block header 是一樣的.
我的感覺也許能猜出一些,比如7d 7c 7b 7a每個檔案都有.找到一個連結,大家自己看吧:
不完全詳解os block header.html
5.改變資料大小看看:
--(64*1024*1024-8192)/1024= 65528.減少1個塊.65528/8=8191(0x1fff)
alter database datafile '/u01/app/oracle11g/oradata/test/aaa01.dbf' resize 65528k;
--交換位元組看看:
$ od -tx2 -N 8192 aaa01.dbf
0000000 a200 0000 0000 ffc0 0000 0000 0000 0000
0000020 e599 0000 2000 0000 1fff 0000 7c7d 7a7b
0000040 81a0 0000 0000 0000 0000 0000 0000 0000
0000060 0000 0000 0000 0000 0000 0000 0000 0000
*
0020000
--024-025(八進位制) 2000=應該表示塊大小,8K=0x2000.
--028-031 1fff=表示佔用資料庫的數量.(64*1024*1024-8192)/1024= 65528.減少1個塊.65528/8=8191(0x1fff)
--020-021 表示什麼?
--其他地方的沒變,不知道表示什麼?
6.補充:
實際上這個測試來源前幾天別人給我講的情況,他們的OS block header損壞,是物理損壞.按照我的理解一旦出現物理無法讀出,
硬碟快over了.當然使用rman很快恢復.
select * from x$bh where file#=11;並不能查詢dbablk=0 的記錄.
或者
select * from v$bh where block#=0;
--這個塊應該是快取的,但是如果出現連結的情況:
http://space.itpub.net/267265/viewspace-758059
定義資料檔案沒有指定next大小,而僅僅開啟AUTOEXTEND ON,這樣檔案擴充套件每次僅僅8k,這樣就會出現對這個塊的大量讀寫(我自己的理解,不知道
是否正確),極可能導致損壞,特別在機器記憶體不足的情況下.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-762523/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 1128PAGETABLE SEGMENT HEADER損壞恢復Header
- [20121016]壞塊處理以及資料恢復.txt資料恢復
- zt_不完全詳解os block headerBloCHeader
- zt_Archivelog 模式下,datafile header損壞,如何恢復?Hive模式Header
- 恢復被破壞的 Windows XP 系統檔案Windows
- 控制檔案被破壞的資料庫恢復方法資料庫
- 20161125PAGETABLE SEGMENT HEADER損壞恢復Header
- 控制檔案備份增加、破壞恢復系列實驗(上)
- 控制檔案備份增加、破壞恢復系列實驗(下)
- index損壞恢復Index
- 【伺服器資料恢復】AIX系統環境下LV被破壞如何恢復資料?伺服器資料恢復AI
- 非歸檔模式下線上日誌檔案破壞後例項恢復案例模式
- 【伺服器資料恢復】伺服器RAID0的RAID資訊被破壞的資料恢復案例伺服器資料恢復AI
- 損壞聯機日誌 恢復
- [20150513]人為破壞資料塊.txt
- [20201221]KTFB Bitmapped File Space Header的恢復.txtAPPHeader
- 【北亞資料恢復】硬碟壞道故障如何恢復資料?資料恢復硬碟
- oracle壞塊Block CorruptionsOracleBloC
- Oracle asm磁碟損壞異常恢復OracleASM
- 損壞控制檔案的恢復方法
- SQL Server ldf 檔案損壞恢復SQLServer
- 資料底層損壞的恢復方法—拼碎片恢復資料
- u盤檔案損壞怎麼恢復資料 u盤恢復損壞資料的有效方法
- Tripwire:僅38%的安全專家有信心在受勒索軟體破壞後恢復核心資料
- 是用bbed工具模擬對塊的破壞,並使用rman bock recover進行塊恢復
- System File1 File Header(資料庫System檔案1檔案頭)損壞情況的恢復Header資料庫
- [20150408]只讀表空間以及資料庫恢復.txt資料庫
- 1104File Space Bitmap Block損壞能修復嗎BloC
- RAC 11G ASM磁碟損壞恢復ASM
- 聯機日誌損壞恢復實驗
- Oracle塊損壞恢復(有rman備份)Oracle
- 恢復之單個控制檔案損壞
- 損壞聯機日誌的恢復方法
- 單個控制檔案損壞的恢復
- 當前日誌組全部損壞的恢復
- 線上日誌檔案損壞恢復方法
- 修復檔案終結者病毒破壞的檔案
- 【北亞資料恢復】伺服器由於重灌系統導致邏輯卷改變,檔案系統破壞的資料恢復資料恢復伺服器