SQL> create tablespace block_rec;
表空間已創(chuàng)建。
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# NAME
-------------------------------------------------------------------------------
1 G:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\SYSTEM01.DBF
2 G:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\UNDOTBS01.DBF
3 G:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\SYSAUX01.DBF
4 G:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\USERS01.DBF
5 G:\ORACLE\ORADATA\ORA10G\DATAFILE\O1_MF_OMF_TEST_326SNC34_.DBF
6 +DG1/ora10g/datafiles/asmtbs01.dbf
7 G:\ORACLE\ORADATA\ORA10G\DATAFILE\O1_MF_BLOCK_RE_32MMQWTH_.DBF
已選擇7行。
SQL> alter database datafile 7 resize 1m;
數(shù)據(jù)庫已更改。
SQL> create user block_rec identified by "block_rec"
2 temporary tablespace temp
3 default tablespace block_rec
4 quota unlimited on 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
2 for x in 1..1000 loop
3 insert into t values(x);
4 commit;
5 end loop;
6 end;
7 /
PL/SQL 過程已成功完成。
SQL> select count(*) from t;
COUNT(*)
----------
1000
備份當前數(shù)據(jù)庫:
C:\Documents and Settings\linyuefeng>rman target / nocatalog
恢復管理器: Release 10.2.0.1.0 - Production on 星期六 4月 21 16:54:29 2007
Copyright (c) 1982, 2005, Oracle. All rights reserved.
連接到目標數(shù)據(jù)庫: ORA10G (DBID=3937140947)
使用目標數(shù)據(jù)庫控制文件替代恢復目錄
RMAN> backup as backupset database plus archivelog tag='fulldatabase';
啟動 backup 于 21-4月 -07
當前日志已存檔
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=85 devtype=DISK
通道 ORA_DISK_1: 正在啟動存檔日志備份集
通道 ORA_DISK_1: 正在指定備份集中的存檔日志
輸入存檔日志線程 =1 序列 =1 記錄 ID=6 時間戳=620258970
輸入存檔日志線程 =1 序列 =2 記錄 ID=7 時間戳=620424206
輸入存檔日志線程 =1 序列 =3 記錄 ID=8 時間戳=620486944
輸入存檔日志線程 =1 序列 =4 記錄 ID=9 時間戳=620497466
輸入存檔日志線程 =1 序列 =5 記錄 ID=10 時間戳=620497621
輸入存檔日志線程 =1 序列 =6 記錄 ID=11 時間戳=620497719
輸入存檔日志線程 =1 序列 =7 記錄 ID=12 時間戳=620499360
通道 ORA_DISK_1: 正在啟動段 1 于 21-4月 -07
通道 ORA_DISK_1: 已完成段 1 于 21-4月 -07
段句柄=G:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\07IFO4D2_1_1 標記=FULLDATABASE 注
釋=NONE
通道 ORA_DISK_1: 備份集已完成, 經(jīng)過時間:00:00:09
通道 ORA_DISK_1: 正在啟動存檔日志備份集
通道 ORA_DISK_1: 正在指定備份集中的存檔日志
輸入存檔日志線程 =1 序列 =10 記錄 ID=1 時間戳=620168764
輸入存檔日志線程 =1 序列 =11 記錄 ID=2 時間戳=620170149
輸入存檔日志線程 =1 序列 =12 記錄 ID=3 時間戳=620172357
輸入存檔日志線程 =1 序列 =13 記錄 ID=4 時間戳=620174799
輸入存檔日志線程 =1 序列 =14 記錄 ID=5 時間戳=620175861
通道 ORA_DISK_1: 正在啟動段 1 于 21-4月 -07
通道 ORA_DISK_1: 已完成段 1 于 21-4月 -07
段句柄=G:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\08IFO4DB_1_1 標記=FULLDATABASE 注
釋=NONE
通道 ORA_DISK_1: 備份集已完成, 經(jīng)過時間:00:00:08
完成 backup 于 21-4月 -07
啟動 backup 于 21-4月 -07
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 啟動全部數(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: 正在啟動段 1 于 21-4月 -07
通道 ORA_DISK_1: 已完成段 1 于 21-4月 -07
段句柄=G:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\09IFO4DL_1_1 標記=TAG20070421T1656
20 注釋=NONE
通道 ORA_DISK_1: 備份集已完成, 經(jīng)過時間:00:01:16
完成 backup 于 21-4月 -07
啟動 backup 于 21-4月 -07
當前日志已存檔
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 正在啟動存檔日志備份集
通道 ORA_DISK_1: 正在指定備份集中的存檔日志
輸入存檔日志線程 =1 序列 =8 記錄 ID=13 時間戳=620499458
通道 ORA_DISK_1: 正在啟動段 1 于 21-4月 -07
通道 ORA_DISK_1: 已完成段 1 于 21-4月 -07
段句柄=G:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\0AIFO4G2_1_1 標記=FULLDATABASE 注
釋=NONE
通道 ORA_DISK_1: 備份集已完成, 經(jīng)過時間:00:00:03
完成 backup 于 21-4月 -07
啟動 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)錯誤:
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文件中也會記載:
Corrupt block relative dba: 0x01c0000f (file 7, block 15)
Bad check value found during buffer read
Data in bad block:
type: 6 format: 2 rdba: 0x01c0000f
last change scn: 0x0000.000e92e9 seq: 0x3 flg: 0x04
spare1: 0x0 spare2: 0x0 spare3: 0x0
consistency value in tail: 0x92e90603
check value in block header: 0xcf7e
computed block checksum: 0x74c8
Reread of rdba: 0x01c0000f (file 7, block 15) found same corrupted data
Sat Apr 21 17:16:32 2007
Corrupt Block Found
TSN = 9, TSNAME = BLOCK_REC
RFN = 7, BLK = 15, RDBA = 29360143
OBJN = 51507, OBJD = 51507, OBJECT = T, SUBOBJECT =
SEGMENT OWNER = BLOCK_REC, SEGMENT TYPE = Table Segment
可以用DBV進行檢查:
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. All rights reserved.
DBVERIFY - 開始驗證: FILE = G:\oracle\oradata\ORA10G\DATAFILE\O1_MF_BLOCK_RE_32M
MQWTH_.DBF
頁 12 標記為損壞
Corrupt block relative dba: 0x01c0000c (file 7, block 12)
Bad check value found during dbv:
Data in bad block:
type: 6 format: 2 rdba: 0x01c0000c
last change scn: 0x0000.000e9956 seq: 0x1 flg: 0x06
spare1: 0x0 spare2: 0x0 spare3: 0x0
consistency value in tail: 0x99560601
check value in block header: 0x90b7
computed block checksum: 0x56ad
頁 15 標記為損壞
Corrupt block relative dba: 0x01c0000f (file 7, block 15)
Bad check value found during dbv:
Data in bad block:
type: 6 format: 2 rdba: 0x01c0000f
last change scn: 0x0000.000e92e9 seq: 0x3 flg: 0x04
spare1: 0x0 spare2: 0x0 spare3: 0x0
consistency value in tail: 0x92e90603
check value in block header: 0xcf7e
computed block checksum: 0xaeec
DBVERIFY - 驗證完成
檢查的頁總數(shù): 128
處理的頁總數(shù) (數(shù)據(jù)): 11
失敗的頁總數(shù) (數(shù)據(jù)): 0
處理的頁總數(shù) (索引): 0
失敗的頁總數(shù) (索引): 0
處理的頁總數(shù) (其它): 11
處理的總頁數(shù) (段) : 0
失敗的總頁數(shù) (段) : 0
空的頁總數(shù): 104
標記為損壞的總頁數(shù): 2
流入的頁總數(shù): 0
最高塊 SCN : 956758 (0.956758)
也可以使用RMAN進行檢查,然后相關的壞塊記錄會記錄到v$database_block_corruption中:
SQL> select * from v$database_block_corruption where file#=7;
未選定
RMAN> backup validate datafile 7;
啟動 backup 于 21-4月 -07
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 啟動全部數(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)過時間:00:00:03
完成 backup 于 21-4月 -07
SQL> select * from v$database_block_corruption where file#=7;
FILE# BLOCK# BLOCKS CORRUPTION_CHANGE# CORRUPTIO
----- ---------- ---------- ------------------ ---------
7 12 1 0 CHECKSUM
7 15 1 0 CHECKSUM
進行恢復:
RMAN> blockrecover datafile 7 block 12,15;
啟動 blockrecover 于 21-4月 -07
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 正在恢復塊
通道 ORA_DISK_1: 正在指定要從備份集恢復的塊
正在恢復數(shù)據(jù)文件 00007 的塊
通道 ORA_DISK_1: 正在讀取備份段 G:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\09IFO4DL_
1_1
通道 ORA_DISK_1: 已從備份段 1 恢復塊
段句柄 = G:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\09IFO4DL_1_1 標記 = TAG20070421T
165620
通道 ORA_DISK_1: 塊恢復完成, 用時: 00:00:02
正在開始介質(zhì)的恢復
介質(zhì)恢復完成, 用時: 00:00:03
完成 blockrecover 于 21-4月 -07
查看數(shù)據(jù):
SQL> select count(*) from t;
COUNT(*)
----------
8000
SQL> select * from v$database_block_corruption where file#=7;
FILE# BLOCK# BLOCKS CORRUPTION_CHANGE# CORRUPTIO
----- ---------- ---------- ------------------ ---------
7 12 1 0 CHECKSUM
7 15 1 0 CHECKSUM
RMAN> backup validate datafile 7;
啟動 backup 于 21-4月 -07
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 啟動全部數(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)過時間: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;
表空間已刪除。
最好再進行一次全備份。