恢復壞塊幾種方式及其rman 備份與壞塊
SQL> select * from v$version;
BANNER
-------------------------------------------------- --------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production
SQL> create tablespace ss datafile 'e:/datafile/ss.dbf' size 1m;
表空間已創建。
SQL> conn xh/a831115
已連接。
SQL> show user
USER 爲 "XH"
SQL> create table ss (a char(2000), b char(2000), c char(2000) ) tablespace ss;
表已創建。
SQL> declare
2 begin
3 for i in 1..1000 loop
4 insert into ss values('a','b','c');
5 commit;
6 end loop;
7 end;
8 /
declare
*
第 1 行出現錯誤:
ORA-01653: 表 XH.SS 無法通過 8 (在表空間 SS 中) 擴展
ORA-06512: 在 line 4
SQL> select count(*) from ss;
COUNT(*)
----------
110
RMAN> list backup of database;
RMAN> backup database;
啓動 backup 於 27-10月-09
使用通道 ORA_DISK_1
完成 Control File and SPFILE Autobackup 於 27-10月-09
shutdown immediate
SQL> conn xh/a831115
已連接。
~~~~~~UltraEdit~~破壞
SQL> select count(*) from ss;
select count(*) from ss
*
第 1 行出現錯誤:
ORA-01578: ORACLE 數據塊損壞 (文件號 7, 塊號 82)
ORA-01110: 數據文件 7: 'E:/DATAFILE/SS.DBF'
看見 出現 壞塊了
順便使用下
dbverify工具 檢查數據文件
C:/>dbv
DBVERIFY: Release 10.2.0.1.0 - Production on 星期二 10月 27 20:47:36 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
關鍵字 說明 (默認值)
-------------------------------------------------- --
FILE 要驗證的文件 (無)
START 起始塊 (文件的第一個塊)
END 結束塊 (文件的最後一個塊)
BLOCKSIZE 邏輯塊大小 (8192)
LOGFILE 輸出日誌 (無)
FEEDBACK 顯示進度 (0)
PARFILE 參數文件 (無)
USERID 用戶名/口令 (無)
SEGMENT_ID 段 ID (tsn.relfile.block) (無)
HIGH_SCN 要驗證的最高塊 SCN (無)
(scn_wrap.scn_base 或 scn)
工具可使用的參數
C:/>dbv file=e:/datafile/ss.dbf feedback=100
DBVERIFY: Release 10.2.0.1.0 - Production on 星期二 10月 27 20:49:28 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
DBVERIFY - 開始驗證: FILE = e:/datafile/ss.dbf
頁 82 標記爲損壞
Corrupt block relative dba: 0x01c00052 (file 7, block 82)
Bad check value found during dbv:
Data in bad block:
type: 6 format: 2 rdba: 0x01c00052
last change scn: 0x0000.0050f79a seq: 0x2 flg: 0x04
spare1: 0x0 spare2: 0x0 spare3: 0x0
consistency value in tail: 0xf79a0602
check value in block header: 0xdd15
computed block checksum: 0x207c
..(每驗證100個塊出現一個.)
DBVERIFY - 驗證完成
檢查的頁總數: 128
處理的頁總數 (數據): 109
失敗的頁總數 (數據): 0
處理的頁總數 (索引): 0
失敗的頁總數 (索引): 0
處理的頁總數 (其它): 18
處理的總頁數 (段) : 0
失敗的總頁數 (段) : 0
空的頁總數: 0
標記爲損壞的總頁數: 1
流入的頁總數: 0
最高塊 SCN : 5306362 (0.5306362)
出現一個壞塊 82
rman與壞塊
SQL> col name format a30
SQL> select name,file# from v$datafile;
NAME FILE#
------------------------------ ----------
F:/ORACLE/PRODUCT/10.2.0/ORADA 1
TA/XHTEST/SYSTEM01.DBF
F:/ORACLE/PRODUCT/10.2.0/ORADA 2
TA/XHTEST/UNDOTBS01.DBF
F:/ORACLE/PRODUCT/10.2.0/ORADA 3
TA/XHTEST/SYSAUX01.DBF
F:/ORACLE/PRODUCT/10.2.0/ORADA 4
TA/XHTEST/USERS01.DBF
NAME FILE#
------------------------------ ----------
F:/ORACLE/PRODUCT/10.2.0/ORADA 5
TA/XHTEST/EXAMPLE01.DBF
E:/DATAFILE/TEST.DBF 6
E:/DATAFILE/SS.DBF 7
已選擇7行。
C:/>rman target /
恢復管理器: Release 10.2.0.1.0 - Production on 星期二 10月 27 20:54:22 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
連接到目標數據庫: XHTEST (DBID=1778946334)
RMAN> backup datafile 7
2> ;
啓動 backup 於 27-10月-09
使用目標數據庫控制文件替代恢復目錄
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=140 devtype=DISK
通道 ORA_DISK_1: 啓動全部數據文件備份集
通道 ORA_DISK_1: 正在指定備份集中的數據文件
輸入數據文件 fno=00007 name=E:/DATAFILE/SS.DBF
通道 ORA_DISK_1: 正在啓動段 1 於 27-10月-09
備份不成功
SQL> desc v$database_block_corruption;
名稱 是否爲空? 類型
----------------------------------------- -------- ------------------------
FILE# NUMBER
BLOCK# NUMBER
BLOCKS NUMBER
CORRUPTION_CHANGE# NUMBER
CORRUPTION_TYPE VARCHAR2(9)
SQL> select count(*) from v$database_block_corruption where file#=7;
COUNT(*)
----------
0
RMAN> run{set maxcorrupt for datafile 7 to 2;
2> backup datafile 7;}
正在執行命令: SET MAX CORRUPT
啓動 backup 於 27-10月-09
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 啓動全部數據文件備份集
通道 ORA_DISK_1: 正在指定備份集中的數據文件
輸入數據文件 fno=00007 name=E:/DATAFILE/SS.DBF
通道 ORA_DISK_1: 正在啓動段 1 於 27-10月-09
通道 ORA_DISK_1: 已完成段 1 於 27-10月-09
段句柄=F:/ORACLE/PRODUCT/10.2.0/FLASH_RECOVERY_AREA/XHTE ST/BACKUPSET/2009_10_27/
O1_MF_NNNDF_TAG20091027T220531_5GFZKFVC_.BKP 標記=TAG20091027T220531 註釋=NONE
通道 ORA_DISK_1: 備份集已完成, 經過時間:00:00:01
完成 backup 於 27-10月-09
啓動 Control File and SPFILE Autobackup 於 27-10月-09
段 handle=F:/ORACLE/PRODUCT/10.2.0/FLASH_RECOVERY_ARE A/XHTEST/AUTOBACKUP/2009_10
_27/O1_MF_S_701388335_5GFZKJ0H_.BKP comment=NONE
完成 Control File and SPFILE Autobackup 於 27-10月-09
SQL> select * from v$database_block_corruption where file#=7;
FILE# BLOCK# BLOCKS CORRUPTION_CHANGE# CORRUPTIO
---------- ---------- ---------- ------------------ ---------
7 82 1 0 CHECKSUM
用copy命令:
RMAN> run{set maxcorrupt for datafile 7 to 2;
2> copy datafile 7 to 'd:/tt.dbf';}
正在執行命令: SET MAX CORRUPT
啓動 backup 於 27-10月-09
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 啓動數據文件副本
輸入數據文件 fno=00007 name=E:/DATAFILE/SS.DBF
輸出文件名 = D:/TT.DBF 標記 = TAG20091027T221051 recid = 75 時間戳 = 701388651
通道 ORA_DISK_1: 數據文件複製完畢, 經過時間: 00:00:01
完成 backup 於 27-10月-09 啓動 Control File and SPFILE Autobackup 於 27-10月-09
段 handle=F:/ORACLE/PRODUCT/10.2.0/FLASH_RECOVERY_ARE A/XHTEST/AUTOBACKUP/2009_10
_27/O1_MF_S_701388652_5GFZVFPY_.BKP comment=NONE
完成 Control File and SPFILE Autobackup 於 27-10月-09
SQL> select file#,blocks from v$copy_corruption where file#=7;
FILE# BLOCKS
---------- ----------
7 1
關於解決壞塊
rman解決
RMAN> blockrecover device type disk datafile 5 block 82;
啓動 blockrecover 於 27-10月-09
釋放的通道: ORA_DISK_1
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=140 devtype=DISK
正在開始介質的恢復
介質恢復完成, 用時: 00:00:01
完成 blockrecover 於 27-10月-09
RMAN> blockrecover device type disk datafile 7 block 82;
啓動 blockrecover 於 27-10月-09
釋放的通道: ORA_DISK_1
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=140 devtype=DISK
通道 ORA_DISK_1: 正在從數據文件副本 D:/TT.DBF 復原塊
故障轉移到上一個備份
通道 ORA_DISK_1: 正在恢復塊
通道 ORA_DISK_1: 正在指定要從備份集恢復的塊
正在恢復數據文件 00007 的塊
通道 ORA_DISK_1: 正在讀取備份段 F:/ORACLE/PRODUCT/10.2.0/FLASH_RECOVERY_AREA/XHT
EST/BACKUPSET/2009_10_27/O1_MF_NNNDF_TAG20091027T2 20531_5GFZKFVC_.BKP
通道 ORA_DISK_1: 已從備份段 1 恢復塊
段句柄 = F:/ORACLE/PRODUCT/10.2.0/FLASH_RECOVERY_AREA/XHTES T/BACKUPSET/2009_10_2
7/O1_MF_NNNDF_TAG20091027T220531_5GFZKFVC_.BKP 標記 = TAG20091027T220531
通道 ORA_DISK_1: 塊恢復完成, 用時: 00:00:02
故障轉移到上一個備份
通道 ORA_DISK_1: 正在恢復塊
通道 ORA_DISK_1: 正在指定要從備份集恢復的塊
正在恢復數據文件 00007 的塊
通道 ORA_DISK_1: 正在讀取備份段 F:/ORACLE/PRODUCT/10.2.0/FLASH_RECOVERY_AREA/XHT
EST/BACKUPSET/2009_10_27/O1_MF_NNNDF_TAG20091027T1 72314_5GFH04WS_.BKP
通道 ORA_DISK_1: 已從備份段 1 恢復塊
段句柄 = F:/ORACLE/PRODUCT/10.2.0/FLASH_RECOVERY_AREA/XHTES T/BACKUPSET/2009_10_2
7/O1_MF_NNNDF_TAG20091027T172314_5GFH04WS_.BKP 標記 = TAG20091027T172314
通道 ORA_DISK_1: 塊恢復完成, 用時: 00:00:01
正在開始介質的恢復
介質恢復完成, 用時: 00:00:07
完成 blockrecover 於 27-10月-09
RMAN>
SQL> conn xh/a831115
已連接。
SQL> select count(*) from ss;
COUNT(*)
---------- 恢復完成後可以查詢
110
dbms_repair 解決:可以檢測壞塊 ,修復壞塊(跳過壞塊,丟數據)
再次製造壞塊
SQL> conn xh/a831115
已連接。
SQL> select count(*) from ss;
select count(*) from ss
*
第 1 行出現錯誤:
ORA-01578: ORACLE 數據塊損壞 (文件號 7, 塊號 84)
ORA-01110: 數據文件 7: 'E:/DATAFILE/SS.DBF'
SQL> conn / as sysdba
已連接。
SQL> desc sys.dbms_repair
PROCEDURE ADMIN_TABLES
參數名稱 類型 輸入/輸出默認值?
------------------------------ ----------------------- ------ --------
TABLE_NAME VARCHAR2 IN DEFAULT
TABLE_TYPE BINARY_INTEGER IN
ACTION BINARY_INTEGER IN
TABLESPACE VARCHAR2 IN DEFAULT
PROCEDURE CHECK_OBJECT
參數名稱 類型 輸入/輸出默認值?
------------------------------ ----------------------- ------ --------
SCHEMA_NAME VARCHAR2 IN
OBJECT_NAME VARCHAR2 IN
PARTITION_NAME VARCHAR2 IN DEFAULT
OBJECT_TYPE BINARY_INTEGER IN DEFAULT
REPAIR_TABLE_NAME VARCHAR2 IN DEFAULT
FLAGS BINARY_INTEGER IN DEFAULT
RELATIVE_FNO BINARY_INTEGER IN DEFAULT
BLOCK_START BINARY_INTEGER IN DEFAULT
BLOCK_END BINARY_INTEGER IN DEFAULT
CORRUPT_COUNT BINARY_INTEGER OUT
PROCEDURE DUMP_ORPHAN_KEYS
參數名稱 類型 輸入/輸出默認值?
------------------------------ ----------------------- ------ --------
SCHEMA_NAME VARCHAR2 IN
OBJECT_NAME VARCHAR2 IN
PARTITION_NAME VARCHAR2 IN DEFAULT
OBJECT_TYPE BINARY_INTEGER IN DEFAULT
REPAIR_TABLE_NAME VARCHAR2 IN DEFAULT
ORPHAN_TABLE_NAME VARCHAR2 IN DEFAULT
FLAGS BINARY_INTEGER IN DEFAULT
KEY_COUNT BINARY_INTEGER OUT
PROCEDURE FIX_CORRUPT_BLOCKS
參數名稱 類型 輸入/輸出默認值?
------------------------------ ----------------------- ------ --------
SCHEMA_NAME VARCHAR2 IN
OBJECT_NAME VARCHAR2 IN
PARTITION_NAME VARCHAR2 IN DEFAULT
OBJECT_TYPE BINARY_INTEGER IN DEFAULT
REPAIR_TABLE_NAME VARCHAR2 IN DEFAULT
FLAGS BINARY_INTEGER IN DEFAULT
FIX_COUNT BINARY_INTEGER OUT
FUNCTION ONLINE_INDEX_CLEAN RETURNS BOOLEAN
參數名稱 類型 輸入/輸出默認值?
------------------------------ ----------------------- ------ --------
OBJECT_ID BINARY_INTEGER IN DEFAULT
WAIT_FOR_LOCK BINARY_INTEGER IN DEFAULT
PROCEDURE REBUILD_FREELISTS
參數名稱 類型 輸入/輸出默認值?
------------------------------ ----------------------- ------ --------
SCHEMA_NAME VARCHAR2 IN
OBJECT_NAME VARCHAR2 IN
PARTITION_NAME VARCHAR2 IN DEFAULT
OBJECT_TYPE BINARY_INTEGER IN DEFAULT
PROCEDURE REBUILD_SHC_INDEX
參數名稱 類型 輸入/輸出默認值?
------------------------------ ----------------------- ------ --------
SEGMENT_OWNER VARCHAR2 IN
CLUSTER_NAME VARCHAR2 IN
PROCEDURE SEGMENT_FIX_STATUS
參數名稱 類型 輸入/輸出默認值?
------------------------------ ----------------------- ------ --------
SEGMENT_OWNER VARCHAR2 IN
SEGMENT_NAME VARCHAR2 IN
SEGMENT_TYPE BINARY_INTEGER IN DEFAULT
FILE_NUMBER BINARY_INTEGER IN DEFAULT
BLOCK_NUMBER BINARY_INTEGER IN DEFAULT
STATUS_VALUE BINARY_INTEGER IN DEFAULT
PARTITION_NAME VARCHAR2 IN DEFAULT
PROCEDURE SKIP_CORRUPT_BLOCKS
參數名稱 類型 輸入/輸出默認值?
------------------------------ ----------------------- ------ --------
SCHEMA_NAME VARCHAR2 IN
OBJECT_NAME VARCHAR2 IN
OBJECT_TYPE BINARY_INTEGER IN DEFAULT
FLAGS BINARY_INTEGER IN DEFAULT
SQL>
先用dbms_repair.admin建立 孤表和修復表
ADMIN_TABLES :Provides administrative functions (create, drop, purge) for repair or orphan key tables.
Note: These tables are always created in the SYS schema.
CHECK_OBJECT :Detects and reports corruptions in a table or index
DUMP_ORPHAN_KEYS :Reports on index entries that point to rows in corrupt data blocks
FIX_CORRUPT_BLOCKS :Marks blocks as software corrupt that have been previously identified as corrupt by the CHECK_OBJECT procedure
REBUILD_FREELISTS :Rebuilds the free lists of the object
SEGMENT_FIX_STATUS :Provides the capability to fix the corrupted state of a bitmap entry when segment space management is AUTO
SKIP_CORRUPT_BLOCKS: When used, ignores blocks marked corrupt during table and index scans. If not used, you get error ORA-1578 when encountering blocks
marked corrupt.
s.
1 begin
2 dbms_repair.admin_tables(table_name=>'REPAIR_tb',ta ble_type=>dbms_repair.re
pair_table,action=>dbms_repair.create_action,tables pace=>'USERS');
3* end;
SQL> /
PL/SQL 過程已成功完成。
repair table必須要有REPAIR_前綴(否則報錯ORA-24129: 表名 repair_tb 沒有以前綴 REPAIR_ 開始)
table_type=>dbms_repair.orphan_table:記錄壞塊檢查結果
table_type=>dbms_repair.repair_table:與index有關係,記錄壞塊在index中的KEY VALUE
SQL> desc REPAIR_tb
名稱 是否爲空? 類型
----------------------------------------- -------- ----------------------------
OBJECT_ID NOT NULL NUMBER
TABLESPACE_ID NOT NULL NUMBER
RELATIVE_FILE_ID NOT NULL NUMBER
BLOCK_ID NOT NULL NUMBER
CORRUPT_TYPE NOT NULL NUMBER
SCHEMA_NAME NOT NULL VARCHAR2(30)
OBJECT_NAME NOT NULL VARCHAR2(30)
BASEOBJECT_NAME VARCHAR2(30)
PARTITION_NAME VARCHAR2(30)
CORRUPT_DESCRIPTION VARCHAR2(2000)
REPAIR_DESCRIPTION VARCHAR2(200)
MARKED_CORRUPT NOT NULL VARCHAR2(10)
CHECK_TIMESTAMP NOT NULL DATE
FIX_TIMESTAMP DATE
REFORMAT_TIMESTAMP DATE
建立好的結構
檢查壞塊
SQL> SET SERVEROUTPUT ON
1 DECLARE num_corrupt INT;
2 BEGIN
3 num_corrupt := 0;
4 DBMS_REPAIR.CHECK_OBJECT (
5 SCHEMA_NAME => 'XH',
6 OBJECT_NAME => 'SS',
7 REPAIR_TABLE_NAME => 'REPAIR_TB',
8 CORRUPT_COUNT => num_corrupt);
9 DBMS_OUTPUT.PUT_LINE('number corrupt: ' || TO_CHAR (num_corrupt));
10* END;
SQL> /
number corrupt: 2
有2個壞塊
SQL> select object_name,block_id,MARKED_CORRUPT from repair_tb;
OBJECT_NAME BLOCK_ID MARKED_COR
------------------------------ ---------- ----------
SS 84 TRUE
SS 85 TRUE
84,85爲壞塊
1 DECLARE num_fix INT;
2 BEGIN
3 num_fix := 0;
4 DBMS_REPAIR.FIX_CORRUPT_BLOCKS (
5 SCHEMA_NAME => 'XH',
6 OBJECT_NAME=> 'SS',
7 OBJECT_TYPE => dbms_repair.table_object,
8 REPAIR_TABLE_NAME => 'REPAIR_TB',
9 FIX_COUNT=> num_fix);
10 DBMS_OUTPUT.PUT_LINE('num fix: ' || TO_CHAR(num_fix));
11* END;
SQL> /
num fix: 0
PL/SQL 過程已成功完成。
在check階段已經標記爲損壞,所以修正階段 返回爲0
跳過壞塊
1 BEGIN
2 DBMS_REPAIR.SKIP_CORRUPT_BLOCKS (
3 SCHEMA_NAME => 'XH',
4 OBJECT_NAME => 'SS',
5 OBJECT_TYPE => dbms_repair.table_object,
6 FLAGS => dbms_repair.skip_flag);
7* END;
SQL> /
PL/SQL 過程已成功完成。
SQL> conn xh/a831115
已連接。
SQL> select count(*) from ss;
COUNT(*)
----------
108
可以看到正好丟了 2行的數據(建立表時每行對應一個塊)
另外如果有INDEX的話要執行
用來保存壞塊對應index的 key value(否則不一直FTS 報錯,INDEX SCAN 不報錯)
SET SERVEROUTPUT ON
DECLARE num_orphans INT;
BEGIN
num_orphans := 0;
DBMS_REPAIR.DUMP_ORPHAN_KEYS (
SCHEMA_NAME => 'XH',
OBJECT_NAME => 'IND_SS',
OBJECT_TYPE => dbms_repair.index_object,
REPAIR_TABLE_NAME => 'REPAIR_TB',
ORPHAN_TABLE_NAME=> 'ORPHAN_KEY_TABLE',
KEY_COUNT => num_orphans);
DBMS_OUTPUT.PUT_LINE('orphan key count: ' || TO_CHAR(num_orphans));
END;
/
建立玩上面的表 執行後
SQL> shutdown immediate;
數據庫已經關閉。
已經卸載數據庫。
ORACLE 例程已經關閉。
~~~~~~~~~~~~~~~在製造壞塊
SQL> startup
ORA-32004: obsolete and/or deprecated parameter(s) specified
ORACLE 例程已經啓動。
Total System Global Area 289406976 bytes
Fixed Size 1248576 bytes
Variable Size 104858304 bytes
Database Buffers 176160768 bytes
Redo Buffers 7139328 bytes
數據庫裝載完畢。
數據庫已經打開。
SQL> conn xh/a831115
已連接。
SQL> select count(*) from ss;
COUNT(*)
----------
106~~~~~~~~~~~~~~~~~~~~~將自己跳過壞塊(奇怪)
SQL> select object_name,block_id from repair_tb;
OBJECT_NAME BLOCK_ID
------------------------------ ----------
SS 84
SS 85
中還是記錄2個壞塊
SQL> host dbv file=e:/datafile/ss.dbf feedback=100
DBVERIFY: Release 10.2.0.1.0 - Production on 星期二 10月 27 23:19:31 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved. DBVERIFY - 開始驗證: FILE = e:/datafile/ss.dbf
頁 46 標記爲損壞
Corrupt block relative dba: 0x01c0002e (file 7, block 46)
Bad check value found during dbv:
Data in bad block:
type: 6 format: 2 rdba: 0x01c0002e
last change scn: 0x0000.0050f73b seq: 0x2 flg: 0x04
spare1: 0x0 spare2: 0x0 spare3: 0x0
consistency value in tail: 0xf73b0602
check value in block header: 0x970d
computed block checksum: 0xc6af
頁 49 標記爲損壞
Corrupt block relative dba: 0x01c00031 (file 7, block 49)
Bad check value found during dbv:
Data in bad block:
type: 6 format: 2 rdba: 0x01c00031
last change scn: 0x0000.0050f749 seq: 0x2 flg: 0x04
spare1: 0x0 spare2: 0x0 spare3: 0x0
consistency value in tail: 0xf7490602
check value in block header: 0xdb0c
computed block checksum: 0xe2ff
頁 84 標記爲損壞
Corrupt block relative dba: 0x01c00054 (file 7, block 84)
Bad check value found during dbv:
Data in bad block:
type: 6 format: 2 rdba: 0x01c00054
last change scn: 0x0000.0050f794 seq: 0x2 flg: 0x04
spare1: 0x0 spare2: 0x0 spare3: 0x0
consistency value in tail: 0xf7940602
check value in block header: 0xdd2c
computed block checksum: 0x777d
頁 85 流入 - 很可能是介質損壞
Corrupt block relative dba: 0x01c00055 (file 7, block 85)
Fractured block found during dbv:
Data in bad block:
type: 6 format: 2 rdba: 0x01c00055
last change scn: 0xad00.0050f796 seq: 0xad flg: 0xa4
spare1: 0x0 spare2: 0x0 spare3: 0x0
consistency value in tail: 0xf7960602
check value in block header: 0xdb18
computed block checksum: 0xb2f4
..
DBVERIFY - 驗證完成
檢查的頁總數: 128
處理的頁總數 (數據): 106
失敗的頁總數 (數據): 0
處理的頁總數 (索引): 0
失敗的頁總數 (索引): 0
處理的頁總數 (其它): 18
處理的總頁數 (段) : 0
失敗的總頁數 (段) : 0
空的頁總數: 0
標記爲損壞的總頁數: 4
流入的頁總數: 1
最高塊 SCN : 5306362 (0.5306362)
檢查出4個,oracle自動執行掉過壞塊操作了??
1 BEGIN
2 DBMS_REPAIR.ADMIN_TABLES (
3 TABLE_NAME => 'REPAIR_TB',
4 TABLE_TYPE => dbms_repair.repair_table,
5 ACTION => dbms_repair.purge_action
6 );
7* END;
SQL> /
PL/SQL 過程已成功完成。
SQL> select object_name,block_id from repair_tb;
OBJECT_NAME BLOCK_ID
------------------------------ ----------
SS 84
SS 85
1 BEGIN
2 DBMS_REPAIR.ADMIN_TABLES (
3 TABLE_NAME => 'REPAIR_TB',
4 TABLE_TYPE => dbms_repair.repair_table,
5 ACTION => dbms_repair.drop_action);
6* END;
7 /
PL/SQL 過程已成功完成。
SQL> select object_name,block_id from repair_tb;
select object_name,block_id from repair_tb
*
第 1 行出現錯誤:
ORA-00942: 表或視圖不存在
SQL> shutdown immediate;
數據庫已經關閉。
已經卸載數據庫。
ORACLE 例程已經關閉。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~破壞
SQL> startup
ORA-32004: obsolete and/or deprecated parameter(s) specified
ORACLE 例程已經啓動。
Total System Global Area 289406976 bytes
Fixed Size 1248576 bytes
Variable Size 104858304 bytes
Database Buffers 176160768 bytes
Redo Buffers 7139328 bytes
SQL> conn xh/a831115
已連接。
SQL> select count(*) from ss;
COUNT(*)
----------
105
暈了 oracle還是自己解決了
原因:
SQL> select skip_corrupt from all_tables where table_name='SS';
SKIP_COR
--------
ENABLED
SKIP_CORRUPT VARCHAR2(8) Whether the Oracle Database ignores blocks marked corrupt during table and index scans (ENABLED) or raises an error (DISABLED). To
enable this feature, run the DBMS_REPAIR.SKIP_CORRUPT_BLOCKS procedure
用event解決:
SQL> create tablespace sss datafile 'e:/datafile/sss.dbf' size 1m;
表空間已創建。
SQL> create table sss (a char(2000), b char(2000), c char(2000) ) tablespace sss
;
表已創建。
SQL> ed
已寫入 file afiedt.buf
1 declare
2 begin
3 for i in 1..1000 loop
4 insert into sss values('a','b','c');
5 commit;
6 end loop;
7* end;
SQL> /
declare
*
第 1 行出現錯誤:
ORA-01653: 表 XH.SSS 無法通過 8 (在表空間 SSS 中) 擴展
ORA-06512: 在 line 4
SQL> select count(*) from sss;
COUNT(*)
----------
110
SQL> select skip_corrupt from all_tables where table_name='SSS';
SKIP_COR
--------
DISABLED
SQL> conn xh/a831115
已連接。
SQL> select count(*) from sss;
select count(*) from sss
*
第 1 行出現錯誤:
ORA-01578: ORACLE 數據塊損壞 (文件號 8, 塊號 43)
ORA-01110: 數據文件 8: 'E:/DATAFILE/SSS.DBF'
SQL> host exp xh/a831115 file=e:/sss.dmp tables=SSS
Export: Release 10.2.0.1.0 - Production on 星期二 10月 27 23:39:46 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
連接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
已導出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集
即將導出指定的表通過常規路徑...
. . 正在導出表 SSS
EXP-00056: 遇到 ORACLE 錯誤 1578
ORA-01578: ORACLE 數據塊損壞 (文件號 8, 塊號 43)
ORA-01110: 數據文件 8: 'E:/DATAFILE/SSS.DBF'
導出成功終止, 但出現警告。
SQL> ALTER SYSTEM SET EVENTS '10231 trace name context forever,level 10';
系統已更改。
SQL> host exp xh/a831115 file=e:/sss.dmp tables=SSS
Export: Release 10.2.0.1.0 - Production on 星期二 10月 27 23:40:44 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
連接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
已導出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集
即將導出指定的表通過常規路徑...
. . 正在導出表 SSS導出了 109 行
成功終止導出, 沒有出現警告。
可以看到 導出時有1row是 丟失的
SQL> host imp xh/a831115 file=e:/sss.dmp tables=SSS
Import: Release 10.2.0.1.0 - Production on 星期二 10月 27 23:41:20 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
連接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
經由常規路徑由 EXPORT:V10.02.01 創建的導出文件
已經完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的導入
. 正在將 XH 的對象導入到 XH
. 正在將 XH 的對象導入到 XH
. . 正在導入表 "SSS"導入了 109 行
成功終止導入, 沒有出現警告。
SQL> select count(*) from sss;
COUNT(*)
----------
109
丟失1 rows
SQL> conn / as sysdba
已連接。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~塊損壞
SQL> shutdown immediate;
數據庫已經關閉。
已經卸載數據庫。
ORACLE 例程已經關閉。
SQL> startup
ORA-32004: obsolete and/or deprecated parameter(s) specified
ORACLE 例程已經啓動。
Total System Global Area 289406976 bytes
Fixed Size 1248576 bytes
Variable Size 117441216 bytes
Database Buffers 163577856 bytes
Redo Buffers 7139328 bytes
數據庫裝載完畢。
數據庫已經打開。
SQL> conn xh/a831115
已連接。
SQL> select count(*) from sss;
select count(*) from sss
*
第 1 行出現錯誤:
ORA-01578: ORACLE 數據塊損壞 (文件號 8, 塊號 34)
ORA-01110: 數據文件 8: 'E:/DATAFILE/SSS.DBF'
SQL> alter session set events '10231 trace name context forever, level 10';~~~~~直接使用事件
會話已更改。
SQL> select count(*) from sss;
COUNT(*)
----------
108