SQL> select name from v$datafile;
NAME
-------------------------------------------------------------------------------
G:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\SYSTEM01.DBF
G:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\UNDOTBS01.DBF
G:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\SYSAUX01.DBF
G:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\USERS01.DBF
G:\ORACLE\ORADATA\ORA10G\DATAFILE\O1_MF_OMF_TEST_326SNC34_.DBF
+DG1/ora10g/datafiles/asmtbs01.dbf
G:\ORACLE\ORADATA\ORA10G\DATAFILE\O1_MF_BLOCK_RE_32MMQWTH_.DBF
已選擇7行。
SQL> select file#,name from v$datafile;
FILE#
-------------------------------------------------------------------------------
1
2
3
4
5
6
7
已選擇7行。
SQL> alter database datafile 7 resize 1m;
數(shù)據(jù)庫已更改。
SQL> create user block_rec identified by "block_rec"
用戶已創(chuàng)建。
SQL> grant resource,connect to block_rec;
授權(quán)成功。
SQL> conn block_rec/block_rec@ora10g;
已連接。
SQL> create table t(a number);
表已創(chuàng)建。
SQL> begin
PL/SQL 過程已成功完成。
SQL> select count(*) from t;
----------
備份當(dāng)前數(shù)據(jù)庫:
C:\Documents and Settings\linyuefeng>rman target / nocatalog
恢復(fù)管理器: Release 10.2.0.1.0 - Production on 星期六 4月 21 16:54:29 2007
Copyright (c) 1982, 2005, Oracle.
連接到目標(biāo)數(shù)據(jù)庫: ORA10G (DBID=3937140947)
使用目標(biāo)數(shù)據(jù)庫控制文件替代恢復(fù)目錄
RMAN> backup as backupset database plus archivelog tag='fulldatabase';
啟動(dòng) backup 于 21-4月 -07
當(dāng)前日志已存檔
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=85 devtype=DISK
通道 ORA_DISK_1: 正在啟動(dòng)存檔日志備份集
通道 ORA_DISK_1: 正在指定備份集中的存檔日志
輸入存檔日志線程 =1 序列 =1 記錄 ID=6 時(shí)間戳=620258970
輸入存檔日志線程 =1 序列 =2 記錄 ID=7 時(shí)間戳=620424206
輸入存檔日志線程 =1 序列 =3 記錄 ID=8 時(shí)間戳=620486944
輸入存檔日志線程 =1 序列 =4 記錄 ID=9 時(shí)間戳=620497466
輸入存檔日志線程 =1 序列 =5 記錄 ID=10 時(shí)間戳=620497621
輸入存檔日志線程 =1 序列 =6 記錄 ID=11 時(shí)間戳=620497719
輸入存檔日志線程 =1 序列 =7 記錄 ID=12 時(shí)間戳=620499360
通道 ORA_DISK_1: 正在啟動(dòng)段 1 于 21-4月 -07
通道 ORA_DISK_1: 已完成段 1 于 21-4月 -07
段句柄=G:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\07IFO4D2_1_1 標(biāo)記=FULLDATABASE 注
釋=NONE
通道 ORA_DISK_1: 備份集已完成, 經(jīng)過時(shí)間:00:00:09
通道 ORA_DISK_1: 正在啟動(dòng)存檔日志備份集
通道 ORA_DISK_1: 正在指定備份集中的存檔日志
輸入存檔日志線程 =1 序列 =10 記錄 ID=1 時(shí)間戳=620168764
輸入存檔日志線程 =1 序列 =11 記錄 ID=2 時(shí)間戳=620170149
輸入存檔日志線程 =1 序列 =12 記錄 ID=3 時(shí)間戳=620172357
輸入存檔日志線程 =1 序列 =13 記錄 ID=4 時(shí)間戳=620174799
輸入存檔日志線程 =1 序列 =14 記錄 ID=5 時(shí)間戳=620175861
通道 ORA_DISK_1: 正在啟動(dòng)段 1 于 21-4月 -07
通道 ORA_DISK_1: 已完成段 1 于 21-4月 -07
段句柄=G:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\08IFO4DB_1_1 標(biāo)記=FULLDATABASE 注
釋=NONE
通道 ORA_DISK_1: 備份集已完成, 經(jīng)過時(shí)間:00:00:08
完成 backup 于 21-4月 -07
啟動(dòng) backup 于 21-4月 -07
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 啟動(dòng)全部數(shù)據(jù)文件備份集
通道 ORA_DISK_1: 正在指定備份集中的數(shù)據(jù)文件
輸入數(shù)據(jù)文件 fno=00001 name=G:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\SYSTEM01.DBF
輸入數(shù)據(jù)文件 fno=00003 name=G:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\SYSAUX01.DBF
輸入數(shù)據(jù)文件 fno=00005 name=G:\ORACLE\ORADATA\ORA10G\DATAFILE\O1_MF_OMF_TEST_326
SNC34_.DBF
輸入數(shù)據(jù)文件 fno=00006 name=+DG1/ora10g/datafiles/asmtbs01.dbf
輸入數(shù)據(jù)文件 fno=00002 name=G:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\UNDOTBS01.DB
F
輸入數(shù)據(jù)文件 fno=00004 name=G:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\USERS01.DBF
輸入數(shù)據(jù)文件 fno=00007 name=G:\ORACLE\ORADATA\ORA10G\DATAFILE\O1_MF_BLOCK_RE_32M
MQWTH_.DBF
通道 ORA_DISK_1: 正在啟動(dòng)段 1 于 21-4月 -07
通道 ORA_DISK_1: 已完成段 1 于 21-4月 -07
段句柄=G:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\09IFO4DL_1_1 標(biāo)記=TAG20070421T1656
20 注釋=NONE
通道 ORA_DISK_1: 備份集已完成, 經(jīng)過時(shí)間:00:01:16
完成 backup 于 21-4月 -07
啟動(dòng) backup 于 21-4月 -07
當(dāng)前日志已存檔
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 正在啟動(dòng)存檔日志備份集
通道 ORA_DISK_1: 正在指定備份集中的存檔日志
輸入存檔日志線程 =1 序列 =8 記錄 ID=13 時(shí)間戳=620499458
通道 ORA_DISK_1: 正在啟動(dòng)段 1 于 21-4月 -07
通道 ORA_DISK_1: 已完成段 1 于 21-4月 -07
段句柄=G:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\0AIFO4G2_1_1 標(biāo)記=FULLDATABASE 注
釋=NONE
通道 ORA_DISK_1: 備份集已完成, 經(jīng)過時(shí)間:00:00:03
完成 backup 于 21-4月 -07
啟動(dòng) Control File and SPFILE Autobackup 于 21-4月 -07
段 handle=G:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\C-3937140947-20070421-02 commen
t=NONE
完成 Control File and SPFILE Autobackup 于 21-4月 -07
SQL> insert into t select * from t;
已創(chuàng)建1000行。
SQL> insert into t select * from t;
已創(chuàng)建2000行。
SQL> insert into t select * from t;
已創(chuàng)建4000行。
SQL> commit;
提交完成。
使用EDIT編輯數(shù)據(jù)文件
G:\ORACLE\ORADATA\ORA10G\DATAFILE\O1_MF_BLOCK_RE_32MMQWTH_.DBF,然后保存。
SQL> alter system flush buffer_cache;
SQL> conn block_rec/block_rec@ora10g;
已連接。
SQL> select count(*) from t;
select count(*) from t
*
第 1 行出現(xiàn)錯(cuò)誤:
ORA-01578: ORACLE 數(shù)據(jù)塊損壞 (文件號 7, 塊號 15)
ORA-01110: 數(shù)據(jù)文件 7:
'G:\ORACLE\ORADATA\ORA10G\DATAFILE\O1_MF_BLOCK_RE_32MMQWTH_.DBF'
在ALERT.LOG文件中也會(huì)記載:
Corrupt block relative dba: 0x01c0000f (file 7, block 15)
Bad check value found during buffer read
Data in bad block:
Reread of rdba: 0x01c0000f (file 7, block 15) found same corrupted data
Sat Apr 21 17:16:32 2007
Corrupt Block Found
可以用DBV進(jìn)行檢查:
C:\Documents and Settings\linyuefeng>dbv file=G:\oracle\oradata\ORA10G\DATAFILE\
O1_MF_BLOCK_RE_32MMQWTH_.DBF blocksize=8192
DBVERIFY: Release 10.2.0.1.0 - Production on 星期六 4月 21 17:23:44 2007
Copyright (c) 1982, 2005, Oracle.
DBVERIFY - 開始驗(yàn)證: FILE = G:\oracle\oradata\ORA10G\DATAFILE\O1_MF_BLOCK_RE_32M
MQWTH_.DBF
頁 12 標(biāo)記為損壞
Corrupt block relative dba: 0x01c0000c (file 7, block 12)
Bad check value found during dbv:
Data in bad block:
頁 15 標(biāo)記為損壞
Corrupt block relative dba: 0x01c0000f (file 7, block 15)
Bad check value found during dbv:
Data in bad block:
DBVERIFY - 驗(yàn)證完成
檢查的頁總數(shù): 128
處理的頁總數(shù) (數(shù)據(jù)): 11
失敗的頁總數(shù) (數(shù)據(jù)): 0
處理的頁總數(shù) (索引): 0
失敗的頁總數(shù) (索引): 0
處理的頁總數(shù) (其它): 11
處理的總頁數(shù) (段)
失敗的總頁數(shù) (段)
空的頁總數(shù): 104
標(biāo)記為損壞的總頁數(shù): 2
流入的頁總數(shù): 0
最高塊 SCN
也可以使用RMAN進(jìn)行檢查,然后相關(guān)的壞塊記錄會(huì)記錄到v$database_block_corruption中:
SQL> select * from v$database_block_corruption where file#=7;
未選定
RMAN> backup validate datafile 7;
啟動(dòng) backup 于 21-4月 -07
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 啟動(dòng)全部數(shù)據(jù)文件備份集
通道 ORA_DISK_1: 正在指定備份集中的數(shù)據(jù)文件
輸入數(shù)據(jù)文件 fno=00007 name=G:\ORACLE\ORADATA\ORA10G\DATAFILE\O1_MF_BLOCK_RE_32M
MQWTH_.DBF
通道 ORA_DISK_1: 備份集已完成, 經(jīng)過時(shí)間:00:00:03
完成 backup 于 21-4月 -07
SQL> select * from v$database_block_corruption where file#=7;
FILE#
----- ---------- ---------- ------------------ ---------
進(jìn)行恢復(fù):
RMAN> blockrecover datafile 7 block 12,15;
啟動(dòng) blockrecover 于 21-4月 -07
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 正在恢復(fù)塊
通道 ORA_DISK_1: 正在指定要從備份集恢復(fù)的塊
正在恢復(fù)數(shù)據(jù)文件 00007 的塊
通道 ORA_DISK_1: 正在讀取備份段 G:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\09IFO4DL_
1_1
通道 ORA_DISK_1: 已從備份段 1 恢復(fù)塊
段句柄 = G:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\09IFO4DL_1_1 標(biāo)記 = TAG20070421T
165620
通道 ORA_DISK_1: 塊恢復(fù)完成, 用時(shí): 00:00:02
正在開始介質(zhì)的恢復(fù)
介質(zhì)恢復(fù)完成, 用時(shí): 00:00:03
完成 blockrecover 于 21-4月 -07
查看數(shù)據(jù):
SQL> select count(*) from t;
----------
SQL> select * from v$database_block_corruption where file#=7;
FILE#
----- ---------- ---------- ------------------ ---------
7
RMAN> backup validate datafile 7;
啟動(dòng) backup 于 21-4月 -07
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 啟動(dòng)全部數(shù)據(jù)文件備份集
通道 ORA_DISK_1: 正在指定備份集中的數(shù)據(jù)文件
輸入數(shù)據(jù)文件 fno=00007 name=G:\ORACLE\ORADATA\ORA10G\DATAFILE\O1_MF_BLOCK_RE_32M
MQWTH_.DBF
通道 ORA_DISK_1: 備份集已完成, 經(jīng)過時(shí)間:00:00:01
完成 backup 于 21-4月 -07
SQL> select * from v$database_block_corruption where file#=7;
未選定行
SQL> drop user block_rec cascade;
用戶已刪除。
SQL> drop tablespace block_rec including contents and datafiles;
表空間已刪除。
最好再進(jìn)行一次全備份。