對read only表空間進行熱備份和使用備份的controlfile進行恢復時的一點總結!

warehouse發表於2008-06-24

1. 對read only tbs進行熱備份時不需要執行begin backup;

2.從9i開始透過備份的controlfile對只讀表空間進行恢復時不再需要把read only tbs對應的資料檔案設定為offline

[@more@]

也可以參考這個,寫的更周全詳細一些!

1.
SQL> alter tablespace users read only;

表空間已更改。

SQL> alter tablespace users begin backup;
alter tablespace users begin backup
*
第 1 行出現錯誤:
ORA-01642: 只讀表空間 'USERS' 無需開始備份


SQL> alter database backup controlfile to trace;

資料庫已更改。
-- 在控制檔案的建立script中沒有包含tablespace user所對應的datafile
CREATE CONTROLFILE REUSE DATABASE "TEST" RESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 (
'E:ORACLEPRODUCT10.2.0ORADATATESTREDO01.LOG',
'E:ORACLEPRODUCT10.2.0ORADATATESTLOGREDO01.LOG'
) SIZE 10M,
GROUP 2 (
'E:ORACLEPRODUCT10.2.0ORADATATESTLOGREDO02.LOG',
'E:ORACLEPRODUCT10.2.0ORADATATESTREDO02.LOG'
) SIZE 10M,
GROUP 3 (
'E:ORACLEPRODUCT10.2.0ORADATATESTREDO03.LOG',
'E:ORACLEPRODUCT10.2.0ORADATATESTLOGREDO03.LOG'
) SIZE 10M
-- STANDBY LOGFILE
DATAFILE
'E:ORACLEPRODUCT10.2.0ORADATATESTSYSTEM01.DBF',
'E:ORACLEPRODUCT10.2.0ORADATATESTUNDOTBS01.DBF',
'E:ORACLEPRODUCT10.2.0ORADATATESTSYSAUX01.DBF'
CHARACTER SET ZHS16GBK
;
SQL> connect / as sysdba
已連線。
SQL> shutdown immediate
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> --backup database;
SQL> startup
ORACLE 例程已經啟動。

Total System Global Area 167772160 bytes
Fixed Size 1247900 bytes
Variable Size 71304548 bytes
Database Buffers 92274688 bytes
Redo Buffers 2945024 bytes
資料庫裝載完畢。
資料庫已經開啟。
SQL> select file# , status , enabled,checkpoint_change# from v$datafile;

FILE# STATUS ENABLED CHECKPOINT_CHANGE#
---------- ------- ---------- ------------------
1 SYSTEM READ WRITE 836487
2 ONLINE READ WRITE 836487
3 ONLINE READ WRITE 836487
4 ONLINE READ ONLY 836098

SQL> archive log list;
資料庫日誌模式 存檔模式
自動存檔 啟用
存檔終點 USE_DB_RECOVERY_FILE_DEST
最早的聯機日誌序列 5
下一個存檔日誌序列 7
當前日誌序列 7
SQL> select group# ,member from v$logfile order by group#;

GROUP# MEMBER
---------- ------------------------------------------------------------
1 E:ORACLEPRODUCT10.2.0ORADATATESTREDO01.LOG
1 E:ORACLEPRODUCT10.2.0ORADATATESTLOGREDO01.LOG
2 E:ORACLEPRODUCT10.2.0ORADATATESTREDO02.LOG
2 E:ORACLEPRODUCT10.2.0ORADATATESTLOGREDO02.LOG
3 E:ORACLEPRODUCT10.2.0ORADATATESTLOGREDO03.LOG
3 E:ORACLEPRODUCT10.2.0ORADATATESTREDO03.LOG

已選擇6行。

SQL> select group#,sequence#,status from v$log;

GROUP# SEQUENCE# STATUS
---------- ---------- ----------------
1 7 CURRENT
2 5 INACTIVE
3 6 INACTIVE

SQL> alter system switch logfile;

系統已更改。

SQL> alter system switch logfile;

系統已更改。

SQL> alter system switch logfile;

系統已更改。

SQL> create table t(id int);

表已建立。

SQL> insert into t values(1);

已建立 1 行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系統已更改。

SQL> alter system switch logfile;

系統已更改。

SQL> alter system switch logfile;

系統已更改。

SQL> alter system switch logfile;

系統已更改。

SQL> shutdown immediate
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> --resotore datafile and controlfile from backup;
SQL> startup mount
ORACLE 例程已經啟動。

Total System Global Area 167772160 bytes
Fixed Size 1247900 bytes
Variable Size 71304548 bytes
Database Buffers 92274688 bytes
Redo Buffers 2945024 bytes
資料庫裝載完畢。
SQL> alter database open;
alter database open
*
第 1 行出現錯誤:
ORA-00314: 日誌 1 (用於執行緒 1) 要求的序號 與 不匹配
ORA-00312: 聯機日誌 1 執行緒 1:
'E:ORACLEPRODUCT10.2.0ORADATATESTREDO01.LOG'
ORA-00312: 聯機日誌 1 執行緒 1:
'E:ORACLEPRODUCT10.2.0ORADATATESTLOGREDO01.LOG'


SQL> recover database using backup controlfile;
ORA-00279: 更改 836486 (在 06/24/2008 09:15:54 生成) 對於執行緒 1 是必需的
ORA-00289: 建議:
E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1_

7_%U_.ARC
ORA-00280: 更改 836486 (用於執行緒 1) 在序列 #7 中


指定日誌: {=suggested | filename | AUTO | CANCEL}

ORA-00279: 更改 836791 (在 06/24/2008 10:47:59 生成) 對於執行緒 1 是必需的
ORA-00289: 建議:
E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1_

8_%U_.ARC
ORA-00280: 更改 836791 (用於執行緒 1) 在序列 #8 中
ORA-00278: 此恢復不再需要日誌檔案
'E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1

_7_460R3098_.ARC'


指定日誌: {=suggested | filename | AUTO | CANCEL}

ORA-00279: 更改 836793 (在 06/24/2008 10:48:00 生成) 對於執行緒 1 是必需的
ORA-00289: 建議:
E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1_

9_%U_.ARC
ORA-00280: 更改 836793 (用於執行緒 1) 在序列 #9 中
ORA-00278: 此恢復不再需要日誌檔案
'E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1

_8_460R31WB_.ARC'


指定日誌: {=suggested | filename | AUTO | CANCEL}

ORA-00279: 更改 836796 (在 06/24/2008 10:48:05 生成) 對於執行緒 1 是必需的
ORA-00289: 建議:
E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1_

10_%U_.ARC
ORA-00280: 更改 836796 (用於執行緒 1) 在序列 #10 中
ORA-00278: 此恢復不再需要日誌檔案
'E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1

_9_460R35QX_.ARC'


指定日誌: {=suggested | filename | AUTO | CANCEL}

ORA-00279: 更改 836819 (在 06/24/2008 10:48:32 生成) 對於執行緒 1 是必需的
ORA-00289: 建議:
E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1_

11_%U_.ARC
ORA-00280: 更改 836819 (用於執行緒 1) 在序列 #11 中
ORA-00278: 此恢復不再需要日誌檔案
'E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1

_10_460R412X_.ARC'


指定日誌: {=suggested | filename | AUTO | CANCEL}

ORA-00279: 更改 836822 (在 06/24/2008 10:48:40 生成) 對於執行緒 1 是必需的
ORA-00289: 建議:
E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1_

12_%U_.ARC
ORA-00280: 更改 836822 (用於執行緒 1) 在序列 #12 中
ORA-00278: 此恢復不再需要日誌檔案
'E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1

_11_460R4900_.ARC'


指定日誌: {=suggested | filename | AUTO | CANCEL}

ORA-00279: 更改 836825 (在 06/24/2008 10:48:44 生成) 對於執行緒 1 是必需的
ORA-00289: 建議:
E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1_

13_%U_.ARC
ORA-00280: 更改 836825 (用於執行緒 1) 在序列 #13 中
ORA-00278: 此恢復不再需要日誌檔案
'E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1

_12_460R4F0H_.ARC'


指定日誌: {=suggested | filename | AUTO | CANCEL}

ORA-00279: 更改 836827 (在 06/24/2008 10:48:45 生成) 對於執行緒 1 是必需的
ORA-00289: 建議:
E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1_

14_%U_.ARC
ORA-00280: 更改 836827 (用於執行緒 1) 在序列 #14 中
ORA-00278: 此恢復不再需要日誌檔案
'E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1

_13_460R4FYR_.ARC'


指定日誌: {=suggested | filename | AUTO | CANCEL}

ORA-00308: 無法開啟歸檔日誌
'E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1

_14_%U_.ARC'
ORA-27041: 無法開啟檔案
OSD-04002: 無法開啟檔案
O/S-Error: (OS 2) 系統找不到指定的檔案。


SQL> select group#,sequence#,status from v$log;

GROUP# SEQUENCE# STATUS
---------- ---------- ----------------
1 7 CURRENT
3 6 INACTIVE
2 5 INACTIVE

SQL> recover database using backup controlfile;
ORA-00279: 更改 836827 (在 06/24/2008 10:48:45 生成) 對於執行緒 1 是必需的
ORA-00289: 建議:
E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1_

14_%U_.ARC
ORA-00280: 更改 836827 (用於執行緒 1) 在序列 #14 中


指定日誌: {=suggested | filename | AUTO | CANCEL}
E:ORACLEPRODUCT10.2.0ORADATATESTREDO02.LOG
已應用的日誌。
完成介質恢復。
SQL> select group#,sequence#,status from v$log;

GROUP# SEQUENCE# STATUS
---------- ---------- ----------------
1 7 CURRENT
3 6 INACTIVE
2 5 INACTIVE

SQL> select file# , status , enabled,checkpoint_change# from v$datafile;

FILE# STATUS ENABLED CHECKPOINT_CHANGE#
---------- ------- ---------- ------------------
1 SYSTEM READ WRITE 836996
2 ONLINE READ WRITE 836996
3 ONLINE READ WRITE 836996
4 ONLINE READ ONLY 836098

SQL> alter database open resetlogs;

資料庫已更改。

SQL>
SQL> select file# , status , enabled,checkpoint_change# from v$datafile;

FILE# STATUS ENABLED CHECKPOINT_CHANGE#
---------- ------- ---------- ------------------
1 SYSTEM READ WRITE 836999
2 ONLINE READ WRITE 836999
3 ONLINE READ WRITE 836999
4 ONLINE READ ONLY 836098

SQL> select * from t;

ID
----------
1

SQL>
--================================================
以上試驗過程出現了失誤,因為在備份之前users tbs就是read only的,所以在恢復的時候其實對users
tbs對應的datafile沒有任何影響,恢復和直接複製備份沒有任何區別。
2.
SQL> alter tablespace users read write;

表空間已更改。

SQL> alter system checkpoint;

系統已更改。

SQL> select file# , status , enabled,checkpoint_change# from v$datafile;

FILE# STATUS ENABLED CHECKPOINT_CHANGE#
---------- ------- ---------- ------------------
1 SYSTEM READ WRITE 840362
2 ONLINE READ WRITE 840362
3 ONLINE READ WRITE 840362
4 ONLINE READ WRITE 840362

SQL> shutdown immediate
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> desc tt
ERROR:
ORA-01034: ORACLE not available


SQL> startup
ORACLE 例程已經啟動。

Total System Global Area 167772160 bytes
Fixed Size 1247900 bytes
Variable Size 71304548 bytes
Database Buffers 92274688 bytes
Redo Buffers 2945024 bytes
資料庫裝載完畢。
資料庫已經開啟。
SQL> create table tt(id int) tablespace users;

表已建立。

SQL> insert into tt values(1);

已建立 1 行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系統已更改。

SQL> alter system switch logfile;

系統已更改。

SQL> alter system switch logfile;

系統已更改。

SQL> alter tablespace users read only;

表空間已更改。

SQL> select * from t;

ID
----------
1

SQL> insert into t values(2);

已建立 1 行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系統已更改。

SQL> insert into t values(3);

已建立 1 行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系統已更改。

SQL> insert into t values(4);

已建立 1 行。

SQL> commit;

提交完成。

SQL> select file# , status , enabled,checkpoint_change# from v$datafile;

FILE# STATUS ENABLED CHECKPOINT_CHANGE#
---------- ------- ---------- ------------------
1 SYSTEM READ WRITE 840527
2 ONLINE READ WRITE 840527
3 ONLINE READ WRITE 840527
4 ONLINE READ ONLY 840530

SQL> shutdown immediate
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL>
SQL> -- copy datafile and controlfile from backup
SQL> startup
ORACLE 例程已經啟動。

Total System Global Area 167772160 bytes
Fixed Size 1247900 bytes
Variable Size 71304548 bytes
Database Buffers 92274688 bytes
Redo Buffers 2945024 bytes
資料庫裝載完畢。
ORA-00314: 日誌 1 (用於執行緒 1) 要求的序號 與 不匹配
ORA-00312: 聯機日誌 1 執行緒 1:
'E:ORACLEPRODUCT10.2.0ORADATATESTREDO01.LOG'
ORA-00312: 聯機日誌 1 執行緒 1:
'E:ORACLEPRODUCT10.2.0ORADATATESTLOGREDO01.LOG'


SQL> recover database using backup controlfile;
ORA-00279: 更改 840401 (在 06/24/2008 12:58:55 生成) 對於執行緒 1 是必需的
ORA-00289: 建議:
E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1_

2_%U_.ARC
ORA-00280: 更改 840401 (用於執行緒 1) 在序列 #2 中


指定日誌: {=suggested | filename | AUTO | CANCEL}

ORA-00279: 更改 840522 (在 06/24/2008 13:03:59 生成) 對於執行緒 1 是必需的
ORA-00289: 建議:
E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1_

3_%U_.ARC
ORA-00280: 更改 840522 (用於執行緒 1) 在序列 #3 中
ORA-00278: 此恢復不再需要日誌檔案
'E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1

_2_46101ZKL_.ARC'


指定日誌: {=suggested | filename | AUTO | CANCEL}

ORA-00279: 更改 840524 (在 06/24/2008 13:03:59 生成) 對於執行緒 1 是必需的
ORA-00289: 建議:
E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1_

4_%U_.ARC
ORA-00280: 更改 840524 (用於執行緒 1) 在序列 #4 中
ORA-00278: 此恢復不再需要日誌檔案
'E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1

_3_461020Y8_.ARC'


指定日誌: {=suggested | filename | AUTO | CANCEL}

ORA-00279: 更改 840527 (在 06/24/2008 13:04:04 生成) 對於執行緒 1 是必需的
ORA-00289: 建議:
E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1_

5_%U_.ARC
ORA-00280: 更改 840527 (用於執行緒 1) 在序列 #5 中
ORA-00278: 此恢復不再需要日誌檔案
'E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1

_4_4610253X_.ARC'


指定日誌: {=suggested | filename | AUTO | CANCEL}

ORA-00279: 更改 840551 (在 06/24/2008 13:04:42 生成) 對於執行緒 1 是必需的
ORA-00289: 建議:
E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1_

6_%U_.ARC
ORA-00280: 更改 840551 (用於執行緒 1) 在序列 #6 中
ORA-00278: 此恢復不再需要日誌檔案
'E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1

_5_46103CCQ_.ARC'


指定日誌: {=suggested | filename | AUTO | CANCEL}

ORA-00279: 更改 840556 (在 06/24/2008 13:04:51 生成) 對於執行緒 1 是必需的
ORA-00289: 建議:
E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1_

7_%U_.ARC
ORA-00280: 更改 840556 (用於執行緒 1) 在序列 #7 中
ORA-00278: 此恢復不再需要日誌檔案
'E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1

_6_46103NPY_.ARC'


指定日誌: {=suggested | filename | AUTO | CANCEL}

ORA-00308: 無法開啟歸檔日誌
'E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1

_7_%U_.ARC'
ORA-27041: 無法開啟檔案
OSD-04002: 無法開啟檔案
O/S-Error: (OS 2) 系統找不到指定的檔案。


SQL> select member from v$logfile;

MEMBER
------------------------------------------------------------
E:ORACLEPRODUCT10.2.0ORADATATESTREDO01.LOG
E:ORACLEPRODUCT10.2.0ORADATATESTLOGREDO02.LOG
E:ORACLEPRODUCT10.2.0ORADATATESTLOGREDO01.LOG
E:ORACLEPRODUCT10.2.0ORADATATESTREDO02.LOG
E:ORACLEPRODUCT10.2.0ORADATATESTREDO03.LOG
E:ORACLEPRODUCT10.2.0ORADATATESTLOGREDO03.LOG

已選擇6行。

SQL> recover database using backup controlfile;
ORA-00279: 更改 840556 (在 06/24/2008 13:04:51 生成) 對於執行緒 1 是必需的
ORA-00289: 建議:
E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1_

7_%U_.ARC
ORA-00280: 更改 840556 (用於執行緒 1) 在序列 #7 中


指定日誌: {=suggested | filename | AUTO | CANCEL}
E:ORACLEPRODUCT10.2.0ORADATATESTREDO01.LOG
ORA-00310: 歸檔日誌包含序列 5; 要求序列 7
ORA-00334: 歸檔日誌: 'E:ORACLEPRODUCT10.2.0ORADATATESTREDO01.LOG'


SQL> recover database using backup controlfile;
ORA-00279: 更改 840556 (在 06/24/2008 13:04:51 生成) 對於執行緒 1 是必需的
ORA-00289: 建議:
E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1_

7_%U_.ARC
ORA-00280: 更改 840556 (用於執行緒 1) 在序列 #7 中


指定日誌: {=suggested | filename | AUTO | CANCEL}
E:ORACLEPRODUCT10.2.0ORADATATESTREDO02.LOG
已應用的日誌。
完成介質恢復。
SQL> alter database open resetlogs;

資料庫已更改。

SQL> select file# , status , enabled,checkpoint_change# from v$datafile;

FILE# STATUS ENABLED CHECKPOINT_CHANGE#
---------- ------- ---------- ------------------
1 SYSTEM READ WRITE 840703
2 ONLINE READ WRITE 840703
3 ONLINE READ WRITE 840703
4 ONLINE READ ONLY 840530

SQL> select * from t;

ID
----------
1
2
3
4

SQL> select * from tt;

ID
----------
1

SQL>

發現users tbs對應的datafile只恢復到了read only時的checkpoint change840530,當然想一想也很容易理解

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/19602/viewspace-1006065/,如需轉載,請註明出處,否則將追究法律責任。

相關文章