對read only表空間進行熱備份和使用備份的controlfile進行恢復時的一點總結!
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 中
指定日誌: {
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'
指定日誌: {
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'
指定日誌: {
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'
指定日誌: {
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'
指定日誌: {
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'
指定日誌: {
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'
指定日誌: {
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'
指定日誌: {
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 中
指定日誌: {
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 中
指定日誌: {
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'
指定日誌: {
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'
指定日誌: {
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'
指定日誌: {
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'
指定日誌: {
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'
指定日誌: {
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 中
指定日誌: {
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 中
指定日誌: {
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL Server中使用臨時表進行資料備份與恢復SQLServer
- 【Mongo】Mongodump 與 mongorestore對mongo進行備份恢復GoREST
- SYSTEM 表空間管理及備份恢復
- mongodb使用備份後的oplog做時間點恢復MongoDB
- 【PG備份恢復】pg_basebackup 多表空間備份恢復測試
- mongdb遭遇勒索,用備份進行資料恢復資料恢復
- 如何在HarmonyOS對資料庫進行備份,恢復與加密資料庫加密
- DM7聯機執行SQL語句進行表空間備份SQL
- Jtti:CentOS系統中如何進行系統備份和恢復?JttiCentOS
- innobackupex 部分表備份和恢復
- 備份和恢復
- SqlServer 備份和恢復(一)SQLServer
- Elasticsearch 使用 NFS 進行資料備份ElasticsearchNFS
- MySQL備份和恢復方法彙總MySql
- KunlunDB備份和恢復
- redis 備份和恢復Redis
- RAC備份恢復之Voting備份與恢復
- Mysqldump 在備庫進行備份時會阻塞備庫的sql_threadMySqlthread
- 使用MySQL Workbench進行資料庫備份MySql資料庫
- GitLab的自動備份、清理備份與恢復Gitlab
- 使用Xtrabackup完整備份中恢復單表
- DM7使用DMRAMN執行備份集恢復
- gitlab的資料備份和恢復Gitlab
- SqlServer備份和恢復(二)SQLServer
- 【MySQL】MySQL備份和恢復MySql
- 備份與恢復:polardb資料庫備份與恢復資料庫
- MySQL備份與恢復——基於Xtrabackup物理備份恢復MySql
- 備份與恢復:Polardb資料庫資料基於時間點恢復資料庫
- Mysql備份與恢復(1)---物理備份MySql
- DB的備份與恢復
- GitLab的備份與恢復Gitlab
- mydumper備份恢復
- Mysql備份恢復MySql
- 使用Handy Backup 6.2進行資料備份方法
- 12 使用RMAN備份和恢復檔案
- DBV:冷備份的校驗和恢復
- 2.6.1 CDB中備份和恢復的概述
- Jira/Confluence的備份、恢復和遷移
- PostgreSql資料庫的備份和恢復SQL資料庫