oracle實驗記錄 (恢復,備份-含壞塊資料檔案)
恢復壞塊幾種方式及其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\XHTEST\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_AREA\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_AREA\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_TAG20091027T220531_5GFZKFVC_.BKP
通道 ORA_DISK_1: 已從備份段 1 恢復塊
段控制程式碼 = F:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\XHTEST\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_TAG20091027T172314_5GFH04WS_.BKP
通道 ORA_DISK_1: 已從備份段 1 恢復塊
段控制程式碼 = F:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\XHTEST\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',table_type=>dbms_repair.re
pair_table,action=>dbms_repair.create_action,tablespace=>'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
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12020513/viewspace-617560/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle實驗記錄 (恢復-恢復未備份的資料檔案)Oracle
- oracle實驗記錄(恢復-丟失未備份資料檔案)Oracle
- oracle實驗記錄 (恢復-rman增量備份)Oracle
- oracle實驗記錄 (恢復-關於熱備份)Oracle
- 控制檔案備份增加、破壞恢復系列實驗(上)
- 控制檔案備份增加、破壞恢復系列實驗(下)
- 備份與恢復--重建控制檔案後資料檔案損壞的恢復
- Oracle塊損壞恢復(有rman備份)Oracle
- oracle實驗記錄 (恢復-使用resetlogs open前備份恢復)Oracle
- oracle實驗記錄 (恢復-rman操作(設定&備份))Oracle
- 磁碟損壞造成RMAN備份檔案有壞塊的恢復案例
- RMAN備份恢復典型案例——資料檔案存在壞快
- 非系統資料檔案損壞,rman備份恢復
- 備份與恢復--資料檔案損壞或丟失
- Oracle備份與恢復【丟失資料檔案的恢復】Oracle
- 【備份恢復】Oracle 資料備份與恢復微實踐Oracle
- ORACLE 只讀資料檔案備份與恢復Oracle
- oracle實驗記錄 (恢復-rman基於控制檔案的恢復)Oracle
- 【備份恢復】無備份線上恢復非關鍵資料檔案
- oracle實驗記錄 (恢復-關於控制檔案(1))Oracle
- oracle實驗記錄 (恢復-關於控制檔案(2))Oracle
- oracle實驗記錄 (恢復-關於控制檔案(3))Oracle
- oracle實驗記錄 (恢復-關於控制檔案(4))Oracle
- Oracle備份恢復實驗(原廠培訓資料)Oracle
- 資料檔案壞塊的製造和恢復
- oracle實驗記錄 (恢復-完全恢復)Oracle
- oracle實驗記錄 (恢復-rman恢復)Oracle
- 【資料庫資料恢復】Oracle資料庫檔案出現壞塊報錯的資料恢復案例資料庫資料恢復Oracle
- 【實驗】從RMAN備份中恢復spfile檔案
- MongoDB資料檔案備份與恢復詳解及實驗說明MongoDB
- rman備份恢復-rman恢復資料檔案測試
- 【備份恢復】利用 備份控制檔案到指定目錄下的控制檔案 恢復控制檔案
- 備份&恢復之十三:損壞全部控制檔案
- [記錄]oracle RMAN 備份恢復總結Oracle
- Oracle 之利用BBED修改資料塊SCN----沒有備份資料檔案的資料恢復Oracle資料恢復
- 備份恢復之資料檔案丟失
- oracle實驗記錄 (恢復-redo)Oracle
- 備份恢復實驗(1)丟失部分控制檔案