oracle備份與恢復測試(五)
####################################################
# [測試2] shutdown abort,resetlog的trace,
# 有資料檔案備份,當前線上日誌損壞,控制檔案損壞,有trace
####################################################
SQL> create table arch (status varchar(2)) tablespace users;
# [測試2] shutdown abort,resetlog的trace,
# 有資料檔案備份,當前線上日誌損壞,控制檔案損壞,有trace
####################################################
SQL> create table arch (status varchar(2)) tablespace users;
表已建立。
SQL> alter system switch logfile;
系統已更改。
SQL> insert into arch select 'ok' from dba_objects;
已建立6166行。
SQL> commit;
提交完成。
SQL> insert into arch select * from arch;
已建立6166行。
SQL> /
已建立12332行。
SQL> /
已建立24664行。
SQL> /
已建立49328行。
SQL> commit;
提交完成。
SQL> alter system switch logfile;
系統已更改。
SQL> insert into arch select 'no' from dba_objects;
已建立6166行。
SQL> commit;
提交完成。
SQL> select GROUP#,SEQUENCE#,archived, STATUS from v$log;
GROUP# SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
1 5 NO CURRENT
2 3 YES ACTIVE
3 4 NO ACTIVE
---------- ---------- --- ----------------
1 5 NO CURRENT
2 3 YES ACTIVE
3 4 NO ACTIVE
SQL> shutdown abort
ORACLE 例程已經關閉。
SQL> startup nomount
ORACLE 例程已經啟動。
ORACLE 例程已經關閉。
SQL> startup nomount
ORACLE 例程已經啟動。
Total System Global Area 101784276 bytes
Fixed Size 453332 bytes
Variable Size 75497472 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE "testdb" NORESETLOGS ARCHIVELOG
Fixed Size 453332 bytes
Variable Size 75497472 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE "testdb" NORESETLOGS ARCHIVELOG
2 -- SET STANDBY TO MAXIMIZE PERFORMANCE
3 MAXLOGFILES 5
4 MAXLOGMEMBERS 3
5 MAXDATAFILES 100
6 MAXINSTANCES 1
7 MAXLOGHISTORY 226
8 LOGFILE
9 GROUP 2 'C:\ORACLE\ORADATA\testdb\REDO02.LOG' SIZE 100M,
9 GROUP 2 'C:\ORACLE\ORADATA\testdb\REDO02.LOG' SIZE 100M,
10 GROUP 3 'C:\ORACLE\ORADATA\testdb\REDO03.LOG' SIZE 100M
11 -- STANDBY LOGFILE
12 DATAFILE
13 'C:\ORACLE\ORADATA\testdb\SYSTEM01.DBF',
14 'C:\ORACLE\ORADATA\testdb\UNDOTBS01.DBF',
15 'C:\ORACLE\ORADATA\testdb\INDX01.DBF',
16 'C:\ORACLE\ORADATA\testdb\TOOLS01.DBF',
17 'C:\ORACLE\ORADATA\testdb\USERS01.DBF'
18 CHARACTER SET ZHS16GBK
19 ;
CREATE CONTROLFILE REUSE DATABASE "testdb" NORESETLOGS ARCHIVELOG
*
ERROR 位於第 1 行:
ORA-01503: CREATE CONTROLFILE ??
ORA-01192: ??????????
CREATE CONTROLFILE REUSE DATABASE "testdb" NORESETLOGS ARCHIVELOG
*
ERROR 位於第 1 行:
ORA-01503: CREATE CONTROLFILE ??
ORA-01192: ??????????
~~~~~~~~~~~~~~~~~~~~~~
如果是NORESETLOGS,那麼他要檢查當前的線上日誌,而現在沒有了
如果是NORESETLOGS,那麼他要檢查當前的線上日誌,而現在沒有了
SQL> CREATE CONTROLFILE REUSE DATABASE "testdb" NORESETLOGS ARCHIVELOG
2 -- SET STANDBY TO MAXIMIZE PERFORMANCE
3 MAXLOGFILES 5
4 MAXLOGMEMBERS 3
5 MAXDATAFILES 100
6 MAXINSTANCES 1
7 MAXLOGHISTORY 226
8 LOGFILE
9 GROUP 1 'C:\ORACLE\ORADATA\testdb\REDO01.LOG' SIZE 100M,
10 GROUP 2 'C:\ORACLE\ORADATA\testdb\REDO02.LOG' SIZE 100M,
11 GROUP 3 'C:\ORACLE\ORADATA\testdb\REDO03.LOG' SIZE 100M
12 -- STANDBY LOGFILE
13 DATAFILE
14 'C:\ORACLE\ORADATA\testdb\SYSTEM01.DBF',
15 'C:\ORACLE\ORADATA\testdb\UNDOTBS01.DBF',
16 'C:\ORACLE\ORADATA\testdb\INDX01.DBF',
17 'C:\ORACLE\ORADATA\testdb\TOOLS01.DBF',
18 'C:\ORACLE\ORADATA\testdb\USERS01.DBF'
19 CHARACTER SET ZHS16GBK
20 ;
CREATE CONTROLFILE REUSE DATABASE "testdb" NORESETLOGS ARCHIVELOG
*
ERROR 位於第 1 行:
ORA-01503: CREATE CONTROLFILE ??
ORA-01565: ????'C:\ORACLE\ORADATA\testdb\REDO01.LOG'??? -->>這個檔案不在了
ORA-27041: ??????
OSD-04002: N^7(4r?*NDO/S-Error: (OS 2) O5M3UR2;5=V86(5DND
SQL> CREATE CONTROLFILE REUSE DATABASE "testdb" RESETLOGS ARCHIVELOG
SQL> shutdown
ORA-01507: ??????
ORACLE 例程已經關閉。
SQL> startup nomount
ORACLE 例程已經啟動。
SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR 位於第 1 行:
ORA-01152: ?? 1 ????????????
ORA-01110: ???? 1: 'C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF'
SQL> recover database using backup controlfile until cancel;
ORA-00279: ?? 69456 (? 03/02/2005 10:26:30 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_3.DBF
ORA-00280: ?? 69456 ???? 1 ???? # 3 ???
指定日誌: {=suggested | filename | AUTO | CANCEL}
指定日誌: {=suggested | filename | AUTO | CANCEL}
指定日誌: {=suggested | filename | AUTO | CANCEL}
CREATE CONTROLFILE REUSE DATABASE "testdb" NORESETLOGS ARCHIVELOG
*
ERROR 位於第 1 行:
ORA-01503: CREATE CONTROLFILE ??
ORA-01565: ????'C:\ORACLE\ORADATA\testdb\REDO01.LOG'??? -->>這個檔案不在了
ORA-27041: ??????
OSD-04002: N^7(4r?*NDO/S-Error: (OS 2) O5M3UR2;5=V86(5DND
SQL> CREATE CONTROLFILE REUSE DATABASE "testdb" RESETLOGS ARCHIVELOG
2 -- SET STANDBY TO MAXIMIZE PERFORMANCE
3 MAXLOGFILES 5
4 MAXLOGMEMBERS 3
5 MAXDATAFILES 100
6 MAXINSTANCES 1
7 MAXLOGHISTORY 226
8 LOGFILE
9 GROUP 2 'C:\ORACLE\ORADATA\testdb\REDO02.LOG' SIZE 100M,
9 GROUP 2 'C:\ORACLE\ORADATA\testdb\REDO02.LOG' SIZE 100M,
10 GROUP 3 'C:\ORACLE\ORADATA\testdb\REDO03.LOG' SIZE 100M
11 -- STANDBY LOGFILE
12 DATAFILE
13 'C:\ORACLE\ORADATA\testdb\SYSTEM01.DBF',
14 'C:\ORACLE\ORADATA\testdb\UNDOTBS01.DBF',
15 'C:\ORACLE\ORADATA\testdb\INDX01.DBF',
16 'C:\ORACLE\ORADATA\testdb\TOOLS01.DBF',
17 'C:\ORACLE\ORADATA\testdb\USERS01.DBF'
18 CHARACTER SET ZHS16GBK
19 ;
CREATE CONTROLFILE REUSE DATABASE "testdb" RESETLOGS ARCHIVELOG
*
ERROR 位於第 1 行:
ORA-01503: CREATE CONTROLFILE ??
ORA-00200: ????????
ORA-00202: ????: 'C:\oracle\oradata\testdb\control01.ctl' --這個檔案不能被覆蓋,刪除三個控制檔案
ORA-27086: skgfglk: ?????? - ?????
OSD-04002: N^7(4r?*NDO/S-Error: (OS 5) >\>x7CNJ!#
CREATE CONTROLFILE REUSE DATABASE "testdb" RESETLOGS ARCHIVELOG
*
ERROR 位於第 1 行:
ORA-01503: CREATE CONTROLFILE ??
ORA-00200: ????????
ORA-00202: ????: 'C:\oracle\oradata\testdb\control01.ctl' --這個檔案不能被覆蓋,刪除三個控制檔案
ORA-27086: skgfglk: ?????? - ?????
OSD-04002: N^7(4r?*NDO/S-Error: (OS 5) >\>x7CNJ!#
SQL> shutdown
ORA-01507: ??????
ORACLE 例程已經關閉。
SQL> startup nomount
ORACLE 例程已經啟動。
Total System Global Area 101784276 bytes
Fixed Size 453332 bytes
Variable Size 75497472 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE "testdb" RESETLOGS ARCHIVELOG
Fixed Size 453332 bytes
Variable Size 75497472 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE "testdb" RESETLOGS ARCHIVELOG
2 -- SET STANDBY TO MAXIMIZE PERFORMANCE
3 MAXLOGFILES 5
4 MAXLOGMEMBERS 3
5 MAXDATAFILES 100
6 MAXINSTANCES 1
7 MAXLOGHISTORY 226
8 LOGFILE
9 GROUP 2 'C:\ORACLE\ORADATA\testdb\REDO02.LOG' SIZE 100M,
9 GROUP 2 'C:\ORACLE\ORADATA\testdb\REDO02.LOG' SIZE 100M,
10 GROUP 3 'C:\ORACLE\ORADATA\testdb\REDO03.LOG' SIZE 100M
11 -- STANDBY LOGFILE
12 DATAFILE
13 'C:\ORACLE\ORADATA\testdb\SYSTEM01.DBF',
14 'C:\ORACLE\ORADATA\testdb\UNDOTBS01.DBF',
15 'C:\ORACLE\ORADATA\testdb\INDX01.DBF',
16 'C:\ORACLE\ORADATA\testdb\TOOLS01.DBF',
17 'C:\ORACLE\ORADATA\testdb\USERS01.DBF'
18 CHARACTER SET ZHS16GBK
19 ;
控制檔案已建立
SQL> alter database open;
alter database open
*
ERROR 位於第 1 行:
ORA-01589: ??????????? RESETLOGS ? NORESETLOGS ??
alter database open
*
ERROR 位於第 1 行:
ORA-01589: ??????????? RESETLOGS ? NORESETLOGS ??
SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR 位於第 1 行:
ORA-01152: ?? 1 ????????????
ORA-01110: ???? 1: 'C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF'
SQL> recover database using backup controlfile until cancel;
ORA-00279: ?? 69456 (? 03/02/2005 10:26:30 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_3.DBF
ORA-00280: ?? 69456 ???? 1 ???? # 3 ???
指定日誌: {
ORA-00279: ?? 69616 (? 03/02/2005 16:53:52 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_4.DBF
ORA-00280: ?? 69616 ???? 1 ???? # 4 ???
ORA-00278: ??????????? 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_3.DBF'
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_4.DBF
ORA-00280: ?? 69616 ???? 1 ???? # 4 ???
ORA-00278: ??????????? 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_3.DBF'
指定日誌: {
ORA-00279: ?? 69661 (? 03/02/2005 16:53:54 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF
ORA-00280: ?? 69661 ???? 1 ???? # 5 ???
ORA-00278: ??????????? 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_4.DBF'
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF
ORA-00280: ?? 69661 ???? 1 ???? # 5 ???
ORA-00278: ??????????? 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_4.DBF'
指定日誌: {
ORA-00308: ???????? 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF'
ORA-27041: ??????
OSD-04002: N^7(4r?*NDO/S-Error: (OS 2) O5M3UR2;5=V86(5DND
SQL> recover database using backup controlfile until cancel;
ORA-00279: ?? 69661 (? 03/02/2005 16:53:54 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF
ORA-00280: ?? 69661 ???? 1 ???? # 5 ???
指定日誌: {=suggested | filename | AUTO | CANCEL}
cancel
介質恢復已取消。
SQL> alter database open resetlogs;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
如果資料庫是abort或者老的資料檔案備份,那麼就涉及到控制檔案和資料檔案不一致,需要恢復,就涉及到當前被破壞的線上日誌,
,啟動時仍然需要用線上活動日誌進行恢復.如果是正常的shutdown,而且沒有用老的資料備份,那麼控制檔案和資料檔案是一致的,
不需要當前線上日誌.而在abort或者老的資料檔案備份在這種情況下,只能用備份的datafile和備份的controlfile來做不完
全恢復,都將造成資料丟失。因此多重controlfile 和 online redo log file 很重要。通常情況下是在正常執行資料庫時,
當前線上日誌被破壞的,此時馬上會資料庫不正常DOWN機,也就出現1.5.2的情景
我們知道如果是abort關閉的,那麼有些事務是不完整的或者有些事務沒有被寫到資料檔案,在資料檔案中有這樣的標識,這樣,用
create controlfile ... noresetlogs或者resetlogs建立時讀取資料檔案頭資訊,該檔案在控制檔案資訊,比如結束SCN設定為無窮大)
開啟時就需要當前線上日誌恢復
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
####################################################
# [測試3] shutdown abort,控制檔案損壞,備份控制檔案,
# 當前線上日誌損壞,有資料檔案備份
####################################################
SQL> recover database using backup controlfile ;
ORA-00279: ?? 69456 (? 03/02/2005 10:26:30 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_3.DBF
ORA-00280: ?? 69456 ???? 1 ???? # 3 ???
指定日誌: {=suggested | filename | AUTO | CANCEL}
指定日誌: {=suggested | filename | AUTO | CANCEL}
指定日誌: {=suggested | filename | AUTO | CANCEL}
ORA-27041: ??????
OSD-04002: N^7(4r?*NDO/S-Error: (OS 2) O5M3UR2;5=V86(5DND
SQL> recover database using backup controlfile until cancel;
ORA-00279: ?? 69661 (? 03/02/2005 16:53:54 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF
ORA-00280: ?? 69661 ???? 1 ???? # 5 ???
指定日誌: {
cancel
介質恢復已取消。
SQL> alter database open resetlogs;
資料庫已更改。
SQL> select count(*),status from arch group by status;
COUNT(*) ST
---------- --
98656 ok --還原了部分資料,但不能還原線上日誌中的資料
---------- --
98656 ok --還原了部分資料,但不能還原線上日誌中的資料
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
如果資料庫是abort或者老的資料檔案備份,那麼就涉及到控制檔案和資料檔案不一致,需要恢復,就涉及到當前被破壞的線上日誌,
,啟動時仍然需要用線上活動日誌進行恢復.如果是正常的shutdown,而且沒有用老的資料備份,那麼控制檔案和資料檔案是一致的,
不需要當前線上日誌.而在abort或者老的資料檔案備份在這種情況下,只能用備份的datafile和備份的controlfile來做不完
全恢復,都將造成資料丟失。因此多重controlfile 和 online redo log file 很重要。通常情況下是在正常執行資料庫時,
當前線上日誌被破壞的,此時馬上會資料庫不正常DOWN機,也就出現1.5.2的情景
我們知道如果是abort關閉的,那麼有些事務是不完整的或者有些事務沒有被寫到資料檔案,在資料檔案中有這樣的標識,這樣,用
create controlfile ... noresetlogs或者resetlogs建立時讀取資料檔案頭資訊,該檔案在控制檔案資訊,比如結束SCN設定為無窮大)
開啟時就需要當前線上日誌恢復
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
####################################################
# [測試3] shutdown abort,控制檔案損壞,備份控制檔案,
# 當前線上日誌損壞,有資料檔案備份
####################################################
還原原來備份的資料檔案,控制檔案
SQL> shutdown
ORA-01109: 資料庫未開啟
SQL> shutdown
ORA-01109: 資料庫未開啟
ORACLE 例程已經關閉。
SQL> startup mount
ORACLE 例程已經啟動。
SQL> startup mount
ORACLE 例程已經啟動。
Total System Global Area 101784276 bytes
Fixed Size 453332 bytes
Variable Size 75497472 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
ORA-01991: ???????'C:\oracle\ora92\DATABASE\PWDtestdb.ORA'
Fixed Size 453332 bytes
Variable Size 75497472 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
ORA-01991: ???????'C:\oracle\ora92\DATABASE\PWDtestdb.ORA'
SQL> recover database using backup controlfile ;
ORA-00279: ?? 69456 (? 03/02/2005 10:26:30 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_3.DBF
ORA-00280: ?? 69456 ???? 1 ???? # 3 ???
指定日誌: {
ORA-00279: ?? 69572 (? 03/02/2005 17:07:43 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_4.DBF
ORA-00280: ?? 69572 ???? 1 ???? # 4 ???
ORA-00278: ??????????? 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_3.DBF'
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_4.DBF
ORA-00280: ?? 69572 ???? 1 ???? # 4 ???
ORA-00278: ??????????? 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_3.DBF'
指定日誌: {
ORA-00279: ?? 69617 (? 03/02/2005 17:07:44 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF
ORA-00280: ?? 69617 ???? 1 ???? # 5 ???
ORA-00278: ??????????? 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_4.DBF'
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF
ORA-00280: ?? 69617 ???? 1 ???? # 5 ???
ORA-00278: ??????????? 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_4.DBF'
指定日誌: {
ORA-00308: ???????? 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF'
ORA-27041: ??????
OSD-04002: N^7(4r?*NDO/S-Error: (OS 2) O5M3UR2;5=V86(5DND
SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR 位於第 1 行:
ORA-01113: ?? 1 ??????
ORA-01110: ???? 1: 'C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF'
SQL> select resetlogs_change# - 1,CONTROLFILE_CHANGE# from v$database;
指定日誌: {=suggested | filename | AUTO | CANCEL}
cancel
介質恢復已取消。
SQL> select resetlogs_change# - 1,CONTROLFILE_CHANGE# from v$database;
######################################################
# [1.5.3] 控制檔案損壞,如果trace不是最新的資料庫結構,如少了個資料檔案
######################################################
資料庫已更改。
######################################################
# [1.5.4] 控制檔案損壞,如果trace不是最新的資料庫結構,如少了個只讀資料檔案
######################################################
SQL> alter tablespace tools add datafile 'C:\ORACLE\ORADATA\TESTDB\TOOLS02.dbf'
size 10m ;
SQL> alter database datafile 'C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF' offline;
SQL> alter database open ;
SQL> alter database rename file 'MISSING00006' to 'C:\ORACLE\ORADATA\TESTDB\TOO
LS02.DBF';
SQL> RECOVER TABLESPACE TOOLS;
完成介質恢復。
SQL> ALTER DATABASE OPEN;
ORA-00308: 無法開啟存檔日誌 'C:\ORACLE\ORA92\RDBMS\ARC00013.001'
ORA-27041: 無法開啟檔案
OSD-04002: 無法開啟檔案
O/S-Error: (OS 2) 系統找不到指定的檔案。
SQL> recover database using backup controlfile until cancel; -->>這個cancel是表示每次應用一個日誌時都提示一下,直到輸入cancel後結束
ORA-00279: 更改 1069386 (在 02/25/2005 15:47:59 生成) 對於執行緒 1 是必需的
ORA-00289: 建議: C:\ORACLE\ORA92\RDBMS\ARC00013.001
ORA-00280: 更改 1069386 對於執行緒 1 是按序列 # 13 進行的
指定日誌: {=suggested | filename | AUTO | CANCEL}
cancel --輸入cancel恢復成功 -->>cancel選項允許每次前滾一個日誌檔案,當需要停止恢復時,輸入cancel
,在這種方式下不會自動運用聯機日誌檔案.
介質恢復已取消。
SQL> alter database open resetlogs;
SQL> select name,status from v$datafile;
SQL> alter database datafile 'C:\ORACLE\ORADATA\TESTDB\USERS01.DBF' offline;
SQL> alter database open;
SQL> select name ,status from v$datafile;
完全恢復了
ORA-27041: ??????
OSD-04002: N^7(4r?*NDO/S-Error: (OS 2) O5M3UR2;5=V86(5DND
SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR 位於第 1 行:
ORA-01113: ?? 1 ??????
ORA-01110: ???? 1: 'C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF'
SQL> select resetlogs_change# - 1,CONTROLFILE_CHANGE# from v$database;
RESETLOGS_CHANGE#-1 CONTROLFILE_CHANGE#
------------------- -------------------
68658 69617
------------------- -------------------
68658 69617
SQL> recover database using backup controlfile until cancel;
ORA-00279: ?? 69617 (? 03/02/2005 17:07:44 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF
ORA-00280: ?? 69617 ???? 1 ???? # 5 ???
ORA-00279: ?? 69617 (? 03/02/2005 17:07:44 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF
ORA-00280: ?? 69617 ???? 1 ???? # 5 ???
指定日誌: {
cancel
介質恢復已取消。
SQL> select resetlogs_change# - 1,CONTROLFILE_CHANGE# from v$database;
RESETLOGS_CHANGE#-1 CONTROLFILE_CHANGE#
------------------- -------------------
68658 69617
------------------- -------------------
68658 69617
SQL> alter database open resetlogs;
資料庫已更改。
SQL> select count(*),status from arch group by status;
COUNT(*) ST
---------- --
98656 ok
---------- --
98656 ok
######################################################
# [1.5.3] 控制檔案損壞,如果trace不是最新的資料庫結構,如少了個資料檔案
######################################################
SQL> create table arch (status varchar(2));
表已建立。
SQL> alter system switch logfile;
系統已更改。
SQL> insert into arch select 'ok' from dba_objects;
已建立6166行。
SQL> commit;
提交完成。
SQL> insert into arch select 'ok' from dba_objects;
已建立6166行。
SQL> commit;
提交完成。
SQL> alter system switch logfile;
系統已更改。
SQL> insert into arch select 'no' from dba_objects;
已建立6166行。
SQL> commit;
提交完成。
SQL> select GROUP#,SEQUENCE#,archived, STATUS from v$log;
GROUP# SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
1 2 NO ACTIVE
2 1 YES ACTIVE
3 3 NO CURRENT
SQL> alter tablespace tools add datafile 'C:\ORACLE\ORADATA\TESTDB\TOOLS02.dbf'
size 10m;
---------- ---------- --- ----------------
1 2 NO ACTIVE
2 1 YES ACTIVE
3 3 NO CURRENT
SQL> alter tablespace tools add datafile 'C:\ORACLE\ORADATA\TESTDB\TOOLS02.dbf'
size 10m;
表空間已更改。
SQL> shutdown
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
模擬控制檔案丟失
SQL> CREATE CONTROLFILE REUSE DATABASE "testdb" NORESETLOGS ARCHIVELOG
2 -- SET STANDBY TO MAXIMIZE PERFORMANCE
3 MAXLOGFILES 5
4 MAXLOGMEMBERS 3
5 MAXDATAFILES 100
6 MAXINSTANCES 1
7 MAXLOGHISTORY 226
8 LOGFILE
9 GROUP 1 'C:\ORACLE\ORADATA\testdb\REDO01.LOG' SIZE 100M,
10 GROUP 2 'C:\ORACLE\ORADATA\testdb\REDO02.LOG' SIZE 100M,
11 GROUP 3 'C:\ORACLE\ORADATA\testdb\REDO03.LOG' SIZE 100M
12 -- STANDBY LOGFILE
13 DATAFILE
14 'C:\ORACLE\ORADATA\testdb\SYSTEM01.DBF',
15 'C:\ORACLE\ORADATA\testdb\UNDOTBS01.DBF',
16 'C:\ORACLE\ORADATA\testdb\INDX01.DBF',
17 'C:\ORACLE\ORADATA\testdb\TOOLS01.DBF',
18 'C:\ORACLE\ORADATA\testdb\USERS01.DBF'
19 CHARACTER SET ZHS16GBK
20 ;
2 -- SET STANDBY TO MAXIMIZE PERFORMANCE
3 MAXLOGFILES 5
4 MAXLOGMEMBERS 3
5 MAXDATAFILES 100
6 MAXINSTANCES 1
7 MAXLOGHISTORY 226
8 LOGFILE
9 GROUP 1 'C:\ORACLE\ORADATA\testdb\REDO01.LOG' SIZE 100M,
10 GROUP 2 'C:\ORACLE\ORADATA\testdb\REDO02.LOG' SIZE 100M,
11 GROUP 3 'C:\ORACLE\ORADATA\testdb\REDO03.LOG' SIZE 100M
12 -- STANDBY LOGFILE
13 DATAFILE
14 'C:\ORACLE\ORADATA\testdb\SYSTEM01.DBF',
15 'C:\ORACLE\ORADATA\testdb\UNDOTBS01.DBF',
16 'C:\ORACLE\ORADATA\testdb\INDX01.DBF',
17 'C:\ORACLE\ORADATA\testdb\TOOLS01.DBF',
18 'C:\ORACLE\ORADATA\testdb\USERS01.DBF'
19 CHARACTER SET ZHS16GBK
20 ;
控制檔案已建立
SQL> alter database open;
資料庫已更改。
SQL> select name,status from v$datafile;
NAME STATUS
-------------------------------------- -------
C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF SYSTEM
C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF ONLINE
C:\ORACLE\ORADATA\TESTDB\INDX01.DBF ONLINE
C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF ONLINE
C:\ORACLE\ORADATA\TESTDB\USERS01.DBF ONLINE
C:\ORACLE\ORA92\DATABASE\MISSING00006 RECOVER --這個檔案現在是recover狀態
-------------------------------------- -------
C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF SYSTEM
C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF ONLINE
C:\ORACLE\ORADATA\TESTDB\INDX01.DBF ONLINE
C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF ONLINE
C:\ORACLE\ORADATA\TESTDB\USERS01.DBF ONLINE
C:\ORACLE\ORA92\DATABASE\MISSING00006 RECOVER --這個檔案現在是recover狀態
已選擇6行。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我們發現C:\ORACLE\ORA92\DATABASE\MISSING00006並不存在,只不過是個標記而已
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我們發現C:\ORACLE\ORA92\DATABASE\MISSING00006並不存在,只不過是個標記而已
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SQL> alter database rename file 'MISSING00006' to 'C:\ORACLE\ORADATA\TESTDB\TOOLS02.dbf'; --MISSING00006不要加路徑
資料庫已更改。
SQL> recover datafile 'C:\ORACLE\ORADATA\TESTDB\TOOLS02.dbf';
完成介質恢復。
完成介質恢復。
SQL> alter database datafile 'C:\ORACLE\ORADATA\TESTDB\TOOLS02.dbf' online;
資料庫已更改。
~~~~~~~~~~~~~~~~~~~~~~~~~
如果用備份控制檔案,且備份
控制檔案少了新增加的兩個檔案
,恢復時會提示錯誤,我們可以
用rename來解決
~~~~~~~~~~~~~~~~~~~~~~~~~
使用備份控制檔案
recover AUTOMATIC database using backup controlfile until cancel
...
ORA-00283: recovery session canceled due to errors
ORA-01244: unnamed datafile(s) added to controlfile by media recovery
ORA-01110: data file 3: '/oracle/dbs/db2.f'
ORA-01110: data file 2: '/oracle/dbs/db3.f'
如果用備份控制檔案,且備份
控制檔案少了新增加的兩個檔案
,恢復時會提示錯誤,我們可以
用rename來解決
~~~~~~~~~~~~~~~~~~~~~~~~~
使用備份控制檔案
recover AUTOMATIC database using backup controlfile until cancel
...
ORA-00283: recovery session canceled due to errors
ORA-01244: unnamed datafile(s) added to controlfile by media recovery
ORA-01110: data file 3: '/oracle/dbs/db2.f'
ORA-01110: data file 2: '/oracle/dbs/db3.f'
~~~~~~~~~~~~~~~~~~~~
這是因為前滾時發現file#中
有兩個檔案,但控制檔案沒有
我們可以在v$datafile中看到
所以恢復中斷
~~~~~~~~~~~~~~~~~~~~
SELECT FILE#,NAME
FROM V$DATAFILE;
這是因為前滾時發現file#中
有兩個檔案,但控制檔案沒有
我們可以在v$datafile中看到
所以恢復中斷
~~~~~~~~~~~~~~~~~~~~
SELECT FILE#,NAME
FROM V$DATAFILE;
FILE# NAME
--------------- ----------------------
1 /oracle/dbs/db1.f
2 /oracle/dbs/UNNAMED00002
3 /oracle/dbs/UNNAMED00003
--------------- ----------------------
1 /oracle/dbs/db1.f
2 /oracle/dbs/UNNAMED00002
3 /oracle/dbs/UNNAMED00003
這時對檔案進行改名就可以了
ALTER DATABASE RENAME FILE '/db/UNNAMED00002' TO '/oracle/dbs/db3.f';
ALTER DATABASE RENAME FILE '/db/UNNAMED00003' TO '/oracle/dbs/db2.f';
ALTER DATABASE RENAME FILE '/db/UNNAMED00003' TO '/oracle/dbs/db2.f';
RECOVER AUTOMATIC DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL
######################################################
# [1.5.4] 控制檔案損壞,如果trace不是最新的資料庫結構,如少了個只讀資料檔案
######################################################
SQL> alter tablespace tools add datafile 'C:\ORACLE\ORADATA\TESTDB\TOOLS02.dbf'
size 10m ;
表空間已更改。
SQL> alter tablespace tools read only;
SQL> alter tablespace tools read only;
表空間已更改。
SQL> select name,ENABLED
2 from v$datafile;
SQL> select name,ENABLED
2 from v$datafile;
NAME ENABLED
--------------------------------------- ----------
C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF READ WRITE
C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF READ WRITE
C:\ORACLE\ORADATA\TESTDB\INDX01.DBF READ WRITE
C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF READ ONLY
C:\ORACLE\ORADATA\TESTDB\USERS01.DBF READ WRITE
C:\ORACLE\ORADATA\TESTDB\TOOLS02.DBF READ ONLY
--------------------------------------- ----------
C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF READ WRITE
C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF READ WRITE
C:\ORACLE\ORADATA\TESTDB\INDX01.DBF READ WRITE
C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF READ ONLY
C:\ORACLE\ORADATA\TESTDB\USERS01.DBF READ WRITE
C:\ORACLE\ORADATA\TESTDB\TOOLS02.DBF READ ONLY
已選擇6行。
SQL> startup nomount
ORACLE 例程已經啟動。
SQL> startup nomount
ORACLE 例程已經啟動。
Total System Global Area 101784276 bytes
Fixed Size 453332 bytes
Variable Size 75497472 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE "testdb" NORESETLOGS ARCHIVELOG
2 -- SET STANDBY TO MAXIMIZE PERFORMANCE
3 MAXLOGFILES 5
4 MAXLOGMEMBERS 3
5 MAXDATAFILES 100
6 MAXINSTANCES 1
7 MAXLOGHISTORY 226
8 LOGFILE
9 GROUP 1 'C:\ORACLE\ORADATA\testdb\REDO01.LOG' SIZE 100M,
10 GROUP 2 'C:\ORACLE\ORADATA\testdb\REDO02.LOG' SIZE 100M,
11 GROUP 3 'C:\ORACLE\ORADATA\testdb\REDO03.LOG' SIZE 100M
12 -- STANDBY LOGFILE
13 DATAFILE
14 'C:\ORACLE\ORADATA\testdb\SYSTEM01.DBF',
15 'C:\ORACLE\ORADATA\testdb\UNDOTBS01.DBF',
16 'C:\ORACLE\ORADATA\testdb\INDX01.DBF',
17 'C:\ORACLE\ORADATA\testdb\TOOLS01.DBF',
18 'C:\ORACLE\ORADATA\testdb\USERS01.DBF'
19 CHARACTER SET ZHS16GBK
20 ;
Fixed Size 453332 bytes
Variable Size 75497472 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE "testdb" NORESETLOGS ARCHIVELOG
2 -- SET STANDBY TO MAXIMIZE PERFORMANCE
3 MAXLOGFILES 5
4 MAXLOGMEMBERS 3
5 MAXDATAFILES 100
6 MAXINSTANCES 1
7 MAXLOGHISTORY 226
8 LOGFILE
9 GROUP 1 'C:\ORACLE\ORADATA\testdb\REDO01.LOG' SIZE 100M,
10 GROUP 2 'C:\ORACLE\ORADATA\testdb\REDO02.LOG' SIZE 100M,
11 GROUP 3 'C:\ORACLE\ORADATA\testdb\REDO03.LOG' SIZE 100M
12 -- STANDBY LOGFILE
13 DATAFILE
14 'C:\ORACLE\ORADATA\testdb\SYSTEM01.DBF',
15 'C:\ORACLE\ORADATA\testdb\UNDOTBS01.DBF',
16 'C:\ORACLE\ORADATA\testdb\INDX01.DBF',
17 'C:\ORACLE\ORADATA\testdb\TOOLS01.DBF',
18 'C:\ORACLE\ORADATA\testdb\USERS01.DBF'
19 CHARACTER SET ZHS16GBK
20 ;
控制檔案已建立
SQL> select name from v$datafile;
SQL> select name from v$datafile;
NAME
---------------------------------------------------------------------------
---------------------------------------------------------------------------
C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF
C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF
C:\ORACLE\ORADATA\TESTDB\INDX01.DBF
C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF
C:\ORACLE\ORADATA\TESTDB\USERS01.DBF
SQL> alter database open;
C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF
C:\ORACLE\ORADATA\TESTDB\INDX01.DBF
C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF
C:\ORACLE\ORADATA\TESTDB\USERS01.DBF
SQL> alter database open;
資料庫已更改。
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF
C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF
C:\ORACLE\ORADATA\TESTDB\INDX01.DBF
C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF
C:\ORACLE\ORADATA\TESTDB\USERS01.DBF
C:\ORACLE\ORA92\DATABASE\MISSING00006 --OPEN時增加了不認識的檔名
C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF
C:\ORACLE\ORADATA\TESTDB\INDX01.DBF
C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF
C:\ORACLE\ORADATA\TESTDB\USERS01.DBF
C:\ORACLE\ORA92\DATABASE\MISSING00006 --OPEN時增加了不認識的檔名
已選擇6行。
SQL> alter database rename file 'MISSING00006' to 'C:\ORACLE\ORA92\DATABASE\TOOL
S02.DBF';
alter database rename file 'MISSING00006' to 'C:\ORACLE\ORA92\DATABASE\TOOLS02.D
BF'
*
ERROR 位於第 1 行:
ORA-01511: 重新命名日誌/資料檔案時出錯
ORA-01141: 重新命名資料檔案 6 時出錯 - 未找到新檔案
'C:\ORACLE\ORA92\DATABASE\TOOLS02.DBF'
ORA-01111: 資料檔案 6 名稱未知 - 請重新命名以更正檔案
ORA-01110: 資料檔案 6: 'C:\ORACLE\ORA92\DATABASE\MISSING00006'
ORA-27041: 無法開啟檔案
OSD-04002: 無法開啟檔案
O/S-Error: (OS 2) 系統找不到指定的檔案。
*
ERROR 位於第 1 行:
ORA-01113: ?? 4 ??????
ORA-01110: ???? 4: 'C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF'
S02.DBF';
alter database rename file 'MISSING00006' to 'C:\ORACLE\ORA92\DATABASE\TOOLS02.D
BF'
*
ERROR 位於第 1 行:
ORA-01511: 重新命名日誌/資料檔案時出錯
ORA-01141: 重新命名資料檔案 6 時出錯 - 未找到新檔案
'C:\ORACLE\ORA92\DATABASE\TOOLS02.DBF'
ORA-01111: 資料檔案 6 名稱未知 - 請重新命名以更正檔案
ORA-01110: 資料檔案 6: 'C:\ORACLE\ORA92\DATABASE\MISSING00006'
ORA-27041: 無法開啟檔案
OSD-04002: 無法開啟檔案
O/S-Error: (OS 2) 系統找不到指定的檔案。
*
ERROR 位於第 1 行:
ORA-01113: ?? 4 ??????
ORA-01110: ???? 4: 'C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF'
SQL> alter database datafile 'C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF' offline;
資料庫已更改。
SQL> alter database datafile 'C:\ORACLE\ORADATA\TESTDB\TOOLS02.DBF' offline;
alter database datafile 'C:\ORACLE\ORADATA\TESTDB\TOOLS02.DBF' offline
*
ERROR 位於第 1 行:
ORA-01516: ????????, ????????? 'C:\ORACLE\ORADATA\TESTDB\TOOLS02.DBF'
alter database datafile 'C:\ORACLE\ORADATA\TESTDB\TOOLS02.DBF' offline
*
ERROR 位於第 1 行:
ORA-01516: ????????, ????????? 'C:\ORACLE\ORADATA\TESTDB\TOOLS02.DBF'
SQL> alter database open ;
資料庫已更改。
SQL> alter database datafile 'MISSING00006' offline; -->>注意只讀表空間必須先offline,而且注意MISSING00006不能寫全路徑
資料庫已更改。
SQL> alter database rename file 'MISSING00006' to 'C:\ORACLE\ORADATA\TESTDB\TOO
LS02.DBF';
資料庫已更改。
SQL> alter tablespace tools online;
SQL> alter tablespace tools online;
表空間已更改。
方法2
SQL> SHUTDOWN
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> STARTUP NOMOUNT
ORACLE 例程已經啟動。
SQL> SHUTDOWN
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> STARTUP NOMOUNT
ORACLE 例程已經啟動。
Total System Global Area 101784276 bytes
Fixed Size 453332 bytes
Variable Size 75497472 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE "testdb" NORESETLOGS ARCHIVELOG
Fixed Size 453332 bytes
Variable Size 75497472 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE "testdb" NORESETLOGS ARCHIVELOG
2 -- SET STANDBY TO MAXIMIZE PERFORMANCE
3 MAXLOGFILES 5
4 MAXLOGMEMBERS 3
5 MAXDATAFILES 100
6 MAXINSTANCES 1
7 MAXLOGHISTORY 226
8 LOGFILE
9 GROUP 1 'C:\ORACLE\ORADATA\testdb\REDO01.LOG' SIZE 100M,
10 GROUP 2 'C:\ORACLE\ORADATA\testdb\REDO02.LOG' SIZE 100M,
11 GROUP 3 'C:\ORACLE\ORADATA\testdb\REDO03.LOG' SIZE 100M
12 -- STANDBY LOGFILE
13 DATAFILE
14 'C:\ORACLE\ORADATA\testdb\SYSTEM01.DBF',
15 'C:\ORACLE\ORADATA\testdb\UNDOTBS01.DBF',
16 'C:\ORACLE\ORADATA\testdb\INDX01.DBF',
17 'C:\ORACLE\ORADATA\testdb\TOOLS01.DBF',
18 'C:\ORACLE\ORADATA\testdb\TOOLS02.DBF', --建立語句中加入該資料檔案
19 'C:\ORACLE\ORADATA\testdb\USERS01.DBF'
20 CHARACTER SET ZHS16GBK
21 ;
3 MAXLOGFILES 5
4 MAXLOGMEMBERS 3
5 MAXDATAFILES 100
6 MAXINSTANCES 1
7 MAXLOGHISTORY 226
8 LOGFILE
9 GROUP 1 'C:\ORACLE\ORADATA\testdb\REDO01.LOG' SIZE 100M,
10 GROUP 2 'C:\ORACLE\ORADATA\testdb\REDO02.LOG' SIZE 100M,
11 GROUP 3 'C:\ORACLE\ORADATA\testdb\REDO03.LOG' SIZE 100M
12 -- STANDBY LOGFILE
13 DATAFILE
14 'C:\ORACLE\ORADATA\testdb\SYSTEM01.DBF',
15 'C:\ORACLE\ORADATA\testdb\UNDOTBS01.DBF',
16 'C:\ORACLE\ORADATA\testdb\INDX01.DBF',
17 'C:\ORACLE\ORADATA\testdb\TOOLS01.DBF',
18 'C:\ORACLE\ORADATA\testdb\TOOLS02.DBF', --建立語句中加入該資料檔案
19 'C:\ORACLE\ORADATA\testdb\USERS01.DBF'
20 CHARACTER SET ZHS16GBK
21 ;
控制檔案已建立
SQL> SELECT NAME FROM V$DATAFILE;
NAME
---------------------------------------------------------------------------
---------------------------------------------------------------------------
C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF
C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF
C:\ORACLE\ORADATA\TESTDB\INDX01.DBF
C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF
C:\ORACLE\ORADATA\TESTDB\USERS01.DBF
C:\ORACLE\ORADATA\TESTDB\TOOLS02.DBF
C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF
C:\ORACLE\ORADATA\TESTDB\INDX01.DBF
C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF
C:\ORACLE\ORADATA\TESTDB\USERS01.DBF
C:\ORACLE\ORADATA\TESTDB\TOOLS02.DBF
已選擇6行。
SQL> ALTER DATABASE OPEN;
ALTER DATABASE OPEN
*
ERROR 位於第 1 行:
ORA-01113: ?? 4 ??????
ORA-01110: ???? 4: 'C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF'
ALTER DATABASE OPEN
*
ERROR 位於第 1 行:
ORA-01113: ?? 4 ??????
ORA-01110: ???? 4: 'C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF'
SQL> RECOVER TABLESPACE TOOLS;
完成介質恢復。
SQL> ALTER DATABASE OPEN;
資料庫已更改。
##################################
# [1.6] 使用備份的控制檔案進行恢復
#
##################################
# [1.6] 使用備份的控制檔案進行恢復
#
##################################
前面有很多例子
################################################
# [1.7] 資料檔案損壞,且沒有備份,沒有備份控制檔案,
# 且其他資料檔案備份中都是在該資料檔案建立後
# 的備份
################################################
# [1.7] 資料檔案損壞,且沒有備份,沒有備份控制檔案,
# 且其他資料檔案備份中都是在該資料檔案建立後
# 的備份
################################################
################################################
# [測試1](resetlogs前建立的資料檔案),資料檔案丟失,沒有備份,控制檔案損壞,有備份控制檔案,但備份控制檔案後於該檔案重建日期
# 使用resetlogs開啟資料庫,所以沒有資料檔案自建立以來所有的日誌,
# 因為前面的日誌被擷取了,(所以resetlog後必須要有備份,
# 除非是resetlogs後建立的資料檔案,可以透過create datafile來恢復)
# 當然如果有resetlogs後的控制檔案及相關的資料,也可以完全恢復,參見1.12
#################################################
還原原來的資料檔案和控制檔案
然後SQL> startup mount
ORACLE 例程已經啟動。
# [測試1](resetlogs前建立的資料檔案),資料檔案丟失,沒有備份,控制檔案損壞,有備份控制檔案,但備份控制檔案後於該檔案重建日期
# 使用resetlogs開啟資料庫,所以沒有資料檔案自建立以來所有的日誌,
# 因為前面的日誌被擷取了,(所以resetlog後必須要有備份,
# 除非是resetlogs後建立的資料檔案,可以透過create datafile來恢復)
# 當然如果有resetlogs後的控制檔案及相關的資料,也可以完全恢復,參見1.12
#################################################
還原原來的資料檔案和控制檔案
然後SQL> startup mount
ORACLE 例程已經啟動。
Total System Global Area 101784276 bytes
Fixed Size 453332 bytes
Variable Size 75497472 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
資料庫裝載完畢。
SQL> recover database using backup controlfile until cancel;
ORA-00279: 更改 1069386 (在 02/25/2005 15:47:59 生成) 對於執行緒 1 是必需的
ORA-00289: 建議: C:\ORACLE\ORA92\RDBMS\ARC00013.001
ORA-00280: 更改 1069386 對於執行緒 1 是按序列 # 13 進行的
指定日誌: {=suggested | filename | AUTO | CANCEL}
auto -->>使用auto恢復也是成功
ORA-00308: 無法開啟存檔日誌 'C:\ORACLE\ORA92\RDBMS\ARC00013.001'
ORA-27041: 無法開啟檔案
OSD-04002: 無法開啟檔案
O/S-Error: (OS 2) 系統找不到指定的檔案。
Fixed Size 453332 bytes
Variable Size 75497472 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
資料庫裝載完畢。
SQL> recover database using backup controlfile until cancel;
ORA-00279: 更改 1069386 (在 02/25/2005 15:47:59 生成) 對於執行緒 1 是必需的
ORA-00289: 建議: C:\ORACLE\ORA92\RDBMS\ARC00013.001
ORA-00280: 更改 1069386 對於執行緒 1 是按序列 # 13 進行的
指定日誌: {
auto -->>使用auto恢復也是成功
ORA-00308: 無法開啟存檔日誌 'C:\ORACLE\ORA92\RDBMS\ARC00013.001'
ORA-27041: 無法開啟檔案
OSD-04002: 無法開啟檔案
O/S-Error: (OS 2) 系統找不到指定的檔案。
ORA-00308: 無法開啟存檔日誌 'C:\ORACLE\ORA92\RDBMS\ARC00013.001'
ORA-27041: 無法開啟檔案
OSD-04002: 無法開啟檔案
O/S-Error: (OS 2) 系統找不到指定的檔案。
SQL> recover database using backup controlfile until cancel; -->>這個cancel是表示每次應用一個日誌時都提示一下,直到輸入cancel後結束
ORA-00279: 更改 1069386 (在 02/25/2005 15:47:59 生成) 對於執行緒 1 是必需的
ORA-00289: 建議: C:\ORACLE\ORA92\RDBMS\ARC00013.001
ORA-00280: 更改 1069386 對於執行緒 1 是按序列 # 13 進行的
指定日誌: {
cancel --輸入cancel恢復成功 -->>cancel選項允許每次前滾一個日誌檔案,當需要停止恢復時,輸入cancel
,在這種方式下不會自動運用聯機日誌檔案.
介質恢復已取消。
SQL> alter database open resetlogs;
資料庫已更改。
SQL> select name,status from v$datafile;
NAME STATUS
------------------------------------------------------------ -------
C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF SYSTEM
C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF ONLINE
C:\ORACLE\ORADATA\TESTDB\INDX01.DBF ONLINE
C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF ONLINE
C:\ORACLE\ORADATA\TESTDB\USERS01.DBF ONLINE
C:\ORACLE\ORADATA\TESTDB\TOOLS02.DBF ONLINE
------------------------------------------------------------ -------
C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF SYSTEM
C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF ONLINE
C:\ORACLE\ORADATA\TESTDB\INDX01.DBF ONLINE
C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF ONLINE
C:\ORACLE\ORADATA\TESTDB\USERS01.DBF ONLINE
C:\ORACLE\ORADATA\TESTDB\TOOLS02.DBF ONLINE
已選擇6行。
SQL> create table arch (status varchar(2)) tablespace users;
SQL> create table arch (status varchar(2)) tablespace users;
表已建立。
SQL> alter system switch logfile;
系統已更改。
SQL> insert into arch select 'ok' from dba_objects;
已建立6166行。
SQL> commit;
提交完成。
SQL> insert into arch select 'ok' from dba_objects;
已建立6166行。
SQL> commit;
提交完成。
SQL> alter system switch logfile;
系統已更改。
SQL> insert into arch select 'no' from dba_objects;
已建立6166行。
SQL> commit;
提交完成。
在資料庫開啟的狀況下用ULTRAEDIT破壞檔案USERS01.DBF
SQL> shutdown abort
ORACLE 例程已經關閉。
ORACLE 例程已經關閉。
SQL> startup mount
ORACLE 例程已經啟動。
ORACLE 例程已經啟動。
Total System Global Area 101784276 bytes
Fixed Size 453332 bytes
Variable Size 75497472 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
ORA-01991: ???????'C:\oracle\ora92\DATABASE\PWDtestdb.ORA'
Fixed Size 453332 bytes
Variable Size 75497472 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
ORA-01991: ???????'C:\oracle\ora92\DATABASE\PWDtestdb.ORA'
SQL> alter database datafile 'C:\ORACLE\ORADATA\TESTDB\USERS01.DBF' offline;
資料庫已更改。
SQL> alter database create datafile 'C:\ORACLE\ORADATA\TESTDB\USERS01.DBF' ;
alter database create datafile 'C:\ORACLE\ORADATA\TESTDB\USERS01.DBF'
*
ERROR 位於第 1 行:
ORA-01181: ??5????? RESETLOGS ???????????
ORA-01110: ???? 5: 'C:\ORACLE\ORADATA\TESTDB\USERS01.DBF'
alter database create datafile 'C:\ORACLE\ORADATA\TESTDB\USERS01.DBF'
*
ERROR 位於第 1 行:
ORA-01181: ??5????? RESETLOGS ???????????
ORA-01110: ???? 5: 'C:\ORACLE\ORADATA\TESTDB\USERS01.DBF'
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
因為使用resetlogs開啟資料庫,所以沒有資料檔案自建立以來所有的日誌,因為前面的日誌被擷取了
(所以resetlog後必須要有備份,除非是resetlogs後建立的資料檔案,可以透過create datafile來恢復)
換句話說,因為資料檔案在建立的時候的建立時間點和相關資訊儲存在控制檔案中!控制檔案丟失的話
資料檔案的建立時候的資訊丟失,則資料庫無從知道要 從建立檔案建立時候開始recover datafile
需要從哪個歸檔日誌開始。也就無法知道該資料檔案是否可以從現有歸檔日誌恢復
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
因為使用resetlogs開啟資料庫,所以沒有資料檔案自建立以來所有的日誌,因為前面的日誌被擷取了
(所以resetlog後必須要有備份,除非是resetlogs後建立的資料檔案,可以透過create datafile來恢復)
換句話說,因為資料檔案在建立的時候的建立時間點和相關資訊儲存在控制檔案中!控制檔案丟失的話
資料檔案的建立時候的資訊丟失,則資料庫無從知道要 從建立檔案建立時候開始recover datafile
需要從哪個歸檔日誌開始。也就無法知道該資料檔案是否可以從現有歸檔日誌恢復
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
################################################
# (resetlog是在資料檔案建立前或者控制檔案包含了建立該資料檔案的起始資訊)
那我們測試resetlogs後建立的資料檔案被丟失,沒有備份的恢復方法
假設前面的users01沒有破壞,資料庫被開啟
################################################
分兩種
#####################################################################################################
# [測試2] 控制檔案正常,資料檔案丟失,資料檔案丟失沒有備份,
# 也就說丟失的資料檔案建立在該控制檔案中的,該控制檔案也沒有被trace重新整理,那控制檔案就包含了該資料檔案自建立以來的所有資訊
#####################################################################################################
# (resetlog是在資料檔案建立前或者控制檔案包含了建立該資料檔案的起始資訊)
那我們測試resetlogs後建立的資料檔案被丟失,沒有備份的恢復方法
假設前面的users01沒有破壞,資料庫被開啟
################################################
分兩種
#####################################################################################################
# [測試2] 控制檔案正常,資料檔案丟失,資料檔案丟失沒有備份,
# 也就說丟失的資料檔案建立在該控制檔案中的,該控制檔案也沒有被trace重新整理,那控制檔案就包含了該資料檔案自建立以來的所有資訊
#####################################################################################################
SQL> shutdown
ORA-01109: ??????
ORA-01109: ??????
已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> startup
ORACLE 例程已經啟動。
ORACLE 例程已經關閉。
SQL> startup
ORACLE 例程已經啟動。
Total System Global Area 101784276 bytes
Fixed Size 453332 bytes
Variable Size 75497472 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
ORA-01991: ???????'C:\oracle\ora92\DATABASE\PWDtestdb.ORA'
Fixed Size 453332 bytes
Variable Size 75497472 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
ORA-01991: ???????'C:\oracle\ora92\DATABASE\PWDtestdb.ORA'
SQL> alter database open;
資料庫已更改。
SQL>
SQL>
SQL> alter tablespace users add datafile 'C:\ORACLE\ORADATA\TESTDB\USERS02.DBF'
size 25M;
SQL>
SQL> alter tablespace users add datafile 'C:\ORACLE\ORADATA\TESTDB\USERS02.DBF'
size 25M;
表空間已更改。
SQL> create table arch (status varchar(2)) tablespace users;
表已建立。
SQL> alter system switch logfile;
系統已更改。
SQL> insert into arch select 'ok' from dba_objects;
已建立6166行。
SQL> commit;
提交完成。
SQL> insert into arch select * from arch;
已建立6166行。
SQL> /
已建立12332行。
SQL> /
已建立24664行。
SQL> /
已建立49328行。
SQL> commit;
提交完成。
SQL> alter system switch logfile;
系統已更改。
SQL> insert into arch select 'no' from dba_objects;
已建立6166行。
SQL> commit;
提交完成。
SQL> select GROUP#,SEQUENCE#,archived, STATUS from v$log;
GROUP# SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
1 5 NO CURRENT
2 3 YES INACTIVE
3 4 YES ACTIVE
---------- ---------- --- ----------------
1 5 NO CURRENT
2 3 YES INACTIVE
3 4 YES ACTIVE
SQL> select file# ,name from v$datafile;
FILE# NAME
---------- ---------------------------------
1 C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF
2 C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF
3 C:\ORACLE\ORADATA\TESTDB\INDX01.DBF
4 C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF
5 C:\ORACLE\ORADATA\TESTDB\USERS01.DBF
6 C:\ORACLE\ORADATA\TESTDB\USERS02.DBF
已選擇6行。
---------- ---------------------------------
1 C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF
2 C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF
3 C:\ORACLE\ORADATA\TESTDB\INDX01.DBF
4 C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF
5 C:\ORACLE\ORADATA\TESTDB\USERS01.DBF
6 C:\ORACLE\ORADATA\TESTDB\USERS02.DBF
已選擇6行。
SQL> select segment_name from dba_extents where FILE_ID=6;
SEGMENT_NAME
--------------------------------------------------------------------------------
ARCH
--------------------------------------------------------------------------------
ARCH
SQL> shutdown abort
ORACLE 例程已經關閉。
ORACLE 例程已經關閉。
用ultraedit編輯檔案USERS02.DBF
SQL> startup mount
ORACLE 例程已經啟動。
ORACLE 例程已經啟動。
Total System Global Area 101784276 bytes
Fixed Size 453332 bytes
Variable Size 75497472 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
ORA-01991: ???????'C:\oracle\ora92\DATABASE\PWDtestdb.ORA'
Fixed Size 453332 bytes
Variable Size 75497472 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
ORA-01991: ???????'C:\oracle\ora92\DATABASE\PWDtestdb.ORA'
SQL> select name ,status from v$datafile;
NAME STATUS
--------------------------------------- -------
C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF SYSTEM
C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF ONLINE
C:\ORACLE\ORADATA\TESTDB\INDX01.DBF ONLINE
C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF ONLINE
C:\ORACLE\ORADATA\TESTDB\USERS01.DBF ONLINE
C:\ORACLE\ORADATA\TESTDB\USERS02.DBF ONLINE
已選擇6行。
--------------------------------------- -------
C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF SYSTEM
C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF ONLINE
C:\ORACLE\ORADATA\TESTDB\INDX01.DBF ONLINE
C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF ONLINE
C:\ORACLE\ORADATA\TESTDB\USERS01.DBF ONLINE
C:\ORACLE\ORADATA\TESTDB\USERS02.DBF ONLINE
已選擇6行。
SQL> alter database create datafile 'C:\ORACLE\ORADATA\TESTDB\USERS02.DBF'; --online也可以create
資料庫已更改。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
system tablespace 的第一個datafile 是不能用 alter database create datafile 命令
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
system tablespace 的第一個datafile 是不能用 alter database create datafile 命令
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SQL> recover datafile 'C:\ORACLE\ORADATA\TESTDB\USERS02.DBF';
完成介質恢復。
SQL> alter database open;
SQL> alter database open;
資料庫已更改。
SQL> select count(*) ,status from arch group by status;
COUNT(*) ST
---------- --
6166 no
98656 ok
---------- --
6166 no
98656 ok
完全恢復了
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12801008/viewspace-573241/,如需轉載,請註明出處,否則將追究法律責任。
請登入後發表評論
登入
全部評論
相關文章
- mysql備份恢復測試MySql
- Oracle DG從庫 Rman備份恢復測試Oracle
- Oracle 備份 與 恢復 概述Oracle
- Oracle RAC備份與恢復Oracle
- Oracle備份與恢復 (zt)Oracle
- Oracle備份與恢復案例Oracle
- Oracle備份與恢復(轉)Oracle
- Oracle資料庫的熱備份與完整恢復測試 (2)Oracle資料庫
- Oracle資料庫的熱備份與完整恢復測試 (1)Oracle資料庫
- Oracle備份恢復五(資料泵)Oracle
- 【備份恢復】Oracle 資料備份與恢復微實踐Oracle
- DB2備份恢復測試DB2
- 【Mysql】xtrabackup 備份和恢復測試MySql
- RMAN備份恢復測試指令碼指令碼
- 備份與恢復oracle_homeOracle
- Oracle OCR的備份與恢復Oracle
- Oracle 備份與恢復(一):概念Oracle
- oracle備份與恢復雜記Oracle
- Oracle備份與恢復入門Oracle
- Oracle備份與恢復案例 (zt)Oracle
- Oracle備份與恢復系列 五 邏輯匯入匯出Oracle
- Oracle備份恢復之熱備份恢復及異機恢復Oracle
- rman備份恢復-rman恢復資料檔案測試
- mysql備份和恢復測試(一)--xtrabackupMySql
- Oracle 12c 備份與恢復Oracle
- Oracle備份與恢復總結[轉]Oracle
- ORACLE之常用FAQ:備份與恢復Oracle
- ORACLE 備份與恢復之 思路整理Oracle
- Oracle資料庫備份與恢復之三:OS備份/使用者管理的備份與恢復Oracle資料庫
- 備份與恢復:polardb資料庫備份與恢復資料庫
- 【管理篇備份恢復】rman恢復測試(二) 控制檔案恢復(三)
- 【管理篇備份恢復】rman恢復測試(二) 控制檔案恢復(二)
- 【管理篇備份恢復】rman恢復測試(二) 控制檔案恢復(一)
- Oracle 備份恢復概念Oracle
- oracle備份恢復PPTOracle
- Oracle 備份和恢復Oracle
- ORACLE備份&恢復案例Oracle
- 【PG備份恢復】pg_dump命令測試