利用RMAN做TSPITR

趙宇發表於2009-07-22

C:\Documents and Settings\zhao>set NLS_DATE_FORMAT=YYYY-MM-DD HH24:MI:SS
C:\Documents and Settings\zhao>rman target / nocatalog

恢復管理器: Release 10.2.0.1.0 - Production on 星期三 7月 22 16:55:25 2009

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

連線到目標資料庫: AUXDB (DBID=551299096)
使用目標資料庫控制檔案替代恢復目錄

RMAN> recover tablespace users
2> until time '2009-07-22 16:30:00'
3> auxiliary destination 'D:\oracle\product\10.2.0\flash_recovery_area\AUXDB';

啟動 recover 於 2009-07-22 16:55:31
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=154 devtype=DISK
RMAN-05026: 警告: 假定以下表空間集適用於指定的時間點

表空間列表要求具有 UNDO 段
表空間 SYSTEM
表空間 UNDOTBS1

使用 SID='kBvC' 建立自動例項

供自動例項使用的初始化引數:
db_name=AUXDB
compatible=10.2.0.1.0
db_block_size=8192
db_files=200
db_unique_name=tspitr_AUXDB_kBvC
large_pool_size=1M
shared_pool_size=110M
#No auxiliary parameter file used
db_create_file_dest=D:\oracle\product\10.2.0\flash_recovery_area\AUXDB
control_files=D:\oracle\product\10.2.0\flash_recovery_area\AUXDB/cntrl_tspitr_AUXDB_kBvC.f


啟動自動例項 AUXDB

Oracle 例項已啟動

系統全域性區域總計     205520896 位元組

Fixed Size                     1248092 位元組
Variable Size                146801828 位元組
Database Buffers              50331648 位元組
Redo Buffers                   7139328 位元組
自動例項已建立

記憶體指令碼的內容:
{
# set the until clause
set until  time "2009-07-22 16:30:00";
# restore the controlfile
restore clone controlfile;
# mount the controlfile
sql clone 'alter database mount clone database';
# archive current online log for tspitr to a resent until time
sql 'alter system archive log current';
# avoid unnecessary autobackups for structural changes during TSPITR
sql 'begin dbms_backup_restore.AutoBackupFlag(FALSE); end;';
}
正在執行記憶體指令碼

正在執行命令: SET until clause

啟動 restore 於 2009-07-22 16:56:03
分配的通道: ORA_AUX_DISK_1
通道 ORA_AUX_DISK_1: sid=37 devtype=DISK


刪除自動例項
關閉自動例項
Oracle 例項已關閉
自動例項已刪除

RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: recover 命令 (在 07/22/2009 16:56:04 上) 失敗
RMAN-03015: 在儲存的指令碼Memory Script中出現錯誤
RMAN-06026: 有些目標沒有找到 - 終止恢復
RMAN-06024: 沒有找到控制檔案的備份或副本來複原

 

 


RMAN> list backup of controlfile;


備份集列表
===================

BS 關鍵字  型別 LV 大小       裝置型別 經過時間 完成時間
------- ---- -- ---------- ----------- ------------ -------------------
2       Full    7.08M      DISK        00:00:02     2009-07-22 16:39:43
        BP 關鍵字: 2   狀態: AVAILABLE  已壓縮: NO  標記: TAG20090722T163941
段名:D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\AUXDB\BACKUPSET\2009_07_22\O1_MF_NCNNF_TAG20090722T163941_56FN2G8S_.B
KP
  包括的控制檔案: Ckp SCN: 848190       Ckp 時間: 2009-07-22 16:39:41

RMAN> recover tablespace users
2> until time '2009-07-22 16:39:50'
3> auxiliary destination 'D:\oracle\product\10.2.0\flash_recovery_area\AUXDB';

啟動 recover 於 2009-07-22 16:58:10
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=146 devtype=DISK
RMAN-05026: 警告: 假定以下表空間集適用於指定的時間點

表空間列表要求具有 UNDO 段
表空間 SYSTEM
表空間 UNDOTBS1

使用 SID='ityk' 建立自動例項

供自動例項使用的初始化引數:
db_name=AUXDB
compatible=10.2.0.1.0
db_block_size=8192
db_files=200
db_unique_name=tspitr_AUXDB_ityk
large_pool_size=1M
shared_pool_size=110M
#No auxiliary parameter file used
db_create_file_dest=D:\oracle\product\10.2.0\flash_recovery_area\AUXDB
control_files=D:\oracle\product\10.2.0\flash_recovery_area\AUXDB/cntrl_tspitr_AUXDB_ityk.f


啟動自動例項 AUXDB

Oracle 例項已啟動

系統全域性區域總計     205520896 位元組

Fixed Size                     1248092 位元組
Variable Size                146801828 位元組
Database Buffers              50331648 位元組
Redo Buffers                   7139328 位元組
自動例項已建立

記憶體指令碼的內容:
{
# set the until clause
set until  time "2009-07-22 16:39:50";
# restore the controlfile
restore clone controlfile;
# mount the controlfile
sql clone 'alter database mount clone database';
# archive current online log for tspitr to a resent until time
sql 'alter system archive log current';
# avoid unnecessary autobackups for structural changes during TSPITR
sql 'begin dbms_backup_restore.AutoBackupFlag(FALSE); end;';
}
正在執行記憶體指令碼

正在執行命令: SET until clause

啟動 restore 於 2009-07-22 16:58:42
分配的通道: ORA_AUX_DISK_1
通道 ORA_AUX_DISK_1: sid=37 devtype=DISK

通道 ORA_AUX_DISK_1: 正在開始恢復資料檔案備份集
通道 ORA_AUX_DISK_1: 正在復原控制檔案
通道 ORA_AUX_DISK_1: 正在讀取備份段 D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\AUXDB\BACKUPSET\2009_07_22\O1_MF_NCNNF
_TAG20090722T163941_56FN2G8S_.BKP
通道 ORA_AUX_DISK_1: 已恢復備份段 1
段控制程式碼 = D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\AUXDB\BACKUPSET\2009_07_22\O1_MF_NCNNF_TAG20090722T163941_56FN2G8
S_.BKP 標記 = TAG20090722T163941
通道 ORA_AUX_DISK_1: 恢復完成, 用時: 00:00:05
輸出檔名=D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\AUXDB\CNTRL_TSPITR_AUXDB_ITYK.F
完成 restore 於 2009-07-22 16:58:49

sql 語句: alter database mount clone database

sql 語句: alter system archive log current

sql 語句: begin dbms_backup_restore.AutoBackupFlag(FALSE); end;
釋放的通道: ORA_DISK_1
釋放的通道: ORA_AUX_DISK_1

記憶體指令碼的內容:
{
# generated tablespace point-in-time recovery script
# set the until clause
set until  time "2009-07-22 16:39:50";
plsql <<declare
  sqlstatement       varchar2(512);
  offline_not_needed exception;
  pragma exception_init(offline_not_needed, -01539);
begin
  sqlstatement := 'alter tablespace '||  'USERS' ||' offline for recover';
  krmicd.writeMsg(6162, sqlstatement);
  krmicd.execSql(sqlstatement);
exception
  when offline_not_needed then
    null;
end; >>>;
# set an omf destination filename for restore
set newname for clone datafile  1 to new;
# set an omf destination filename for restore
set newname for clone datafile  2 to new;
# set an omf destination tempfile
set newname for clone tempfile  1 to new;
# set a destination filename for restore
set newname for datafile  4 to
 "D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\USERS.258.692722797";
# rename all tempfiles
switch clone tempfile all;
# restore the tablespaces in the recovery set plus the auxilliary tablespaces
restore clone datafile  1, 2, 4;
switch clone datafile all;
#online the datafiles restored or flipped
sql clone "alter database datafile  1 online";
#online the datafiles restored or flipped
sql clone "alter database datafile  2 online";
#online the datafiles restored or flipped
sql clone "alter database datafile  4 online";
# make the controlfile point at the restored datafiles, then recover them
recover clone database tablespace  "USERS", "SYSTEM", "UNDOTBS1" delete archivelog;
alter clone database open resetlogs;
# PLUG HERE the creation of a temporary tablespace if export fails due to lack
# of temporary space.
# For example in Unix these two lines would do that:
#sql clone "create tablespace aux_tspitr_tmp
#           datafile ''/tmp/aux_tspitr_tmp.dbf'' size 500K";
}
正在執行記憶體指令碼

正在執行命令: SET until clause

sql 語句: alter tablespace USERS offline for recover

正在執行命令: SET NEWNAME

正在執行命令: SET NEWNAME

正在執行命令: SET NEWNAME

正在執行命令: SET NEWNAME

臨時檔案 1 在控制檔案中已重新命名為 D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\AUXDB\TSPITR_A\DATAFILE\O1_MF_TEMP_%U_.T
MP

啟動 restore 於 2009-07-22 16:58:59
分配的通道: ORA_AUX_DISK_1
通道 ORA_AUX_DISK_1: sid=39 devtype=DISK


刪除自動例項
關閉自動例項
Oracle 例項已關閉
自動例項已刪除

RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: recover 命令 (在 07/22/2009 16:59:01 上) 失敗
RMAN-03015: 在儲存的指令碼Memory Script中出現錯誤
RMAN-06026: 有些目標沒有找到 - 終止恢復
RMAN-06023: 沒有找到資料檔案2的副本來恢復
RMAN-06023: 沒有找到資料檔案1的副本來恢復

 


TSPITR:
C:\Documents and Settings\zhao>rman target / nocatalog

恢復管理器: Release 10.2.0.1.0 - Production on 星期三 7月 22 17:10:42 2009

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

連線到目標資料庫: AUXDB (DBID=551299096)
使用目標資料庫控制檔案替代恢復目錄

RMAN> recover tablespace users
2> until time '2009-07-22 17:11:00'
3> auxiliary destination 'D:\oracle\product\10.2.0\flash_recovery_area\AUXDB';

啟動 recover 於 2009-07-22 17:20:07
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=146 devtype=DISK
RMAN-05026: 警告: 假定以下表空間集適用於指定的時間點

表空間列表要求具有 UNDO 段
表空間 SYSTEM
表空間 UNDOTBS1

使用 SID='phqE' 建立自動例項

供自動例項使用的初始化引數:
db_name=AUXDB
compatible=10.2.0.1.0
db_block_size=8192
db_files=200
db_unique_name=tspitr_AUXDB_phqE
large_pool_size=1M
shared_pool_size=110M
#No auxiliary parameter file used
db_create_file_dest=D:\oracle\product\10.2.0\flash_recovery_area\AUXDB
control_files=D:\oracle\product\10.2.0\flash_recovery_area\AUXDB/cntrl_tspitr_AUXDB_phqE.f


啟動自動例項 AUXDB

Oracle 例項已啟動

系統全域性區域總計     205520896 位元組

Fixed Size                     1248092 位元組
Variable Size                146801828 位元組
Database Buffers              50331648 位元組
Redo Buffers                   7139328 位元組
自動例項已建立

記憶體指令碼的內容:
{
# set the until clause
set until  time "2009-07-22 17:11:00";
# restore the controlfile
restore clone controlfile;
# mount the controlfile
sql clone 'alter database mount clone database';
# archive current online log for tspitr to a resent until time
sql 'alter system archive log current';
# avoid unnecessary autobackups for structural changes during TSPITR
sql 'begin dbms_backup_restore.AutoBackupFlag(FALSE); end;';
}
正在執行記憶體指令碼

正在執行命令: SET until clause

啟動 restore 於 2009-07-22 17:20:40
分配的通道: ORA_AUX_DISK_1
通道 ORA_AUX_DISK_1: sid=37 devtype=DISK

通道 ORA_AUX_DISK_1: 正在開始恢復資料檔案備份集
通道 ORA_AUX_DISK_1: 正在復原控制檔案
通道 ORA_AUX_DISK_1: 正在讀取備份段 D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\AUXDB\BACKUPSET\2009_07_22\O1_MF_NCNNF
_TAG20090722T170645_56FOPQ5V_.BKP
通道 ORA_AUX_DISK_1: 已恢復備份段 1
段控制程式碼 = D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\AUXDB\BACKUPSET\2009_07_22\O1_MF_NCNNF_TAG20090722T170645_56FOPQ5
V_.BKP 標記 = TAG20090722T170645
通道 ORA_AUX_DISK_1: 恢復完成, 用時: 00:00:01
輸出檔名=D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\AUXDB\CNTRL_TSPITR_AUXDB_PHQE.F
完成 restore 於 2009-07-22 17:20:43

sql 語句: alter database mount clone database

sql 語句: alter system archive log current

sql 語句: begin dbms_backup_restore.AutoBackupFlag(FALSE); end;
釋放的通道: ORA_DISK_1
釋放的通道: ORA_AUX_DISK_1

記憶體指令碼的內容:
{
# generated tablespace point-in-time recovery script
# set the until clause
set until  time "2009-07-22 17:11:00";
# set an omf destination filename for restore
set newname for clone datafile  1 to new;
# set an omf destination filename for restore
set newname for clone datafile  2 to new;
# set an omf destination tempfile
set newname for clone tempfile  1 to new;
# set a destination filename for restore
set newname for datafile  4 to
 "D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\USERS.258.692722797";
# rename all tempfiles
switch clone tempfile all;
# restore the tablespaces in the recovery set plus the auxilliary tablespaces
restore clone datafile  1, 2, 4;
switch clone datafile all;
#online the datafiles restored or flipped
sql clone "alter database datafile  1 online";
#online the datafiles restored or flipped
sql clone "alter database datafile  2 online";
#online the datafiles restored or flipped
sql clone "alter database datafile  4 online";
# make the controlfile point at the restored datafiles, then recover them
recover clone database tablespace  "USERS", "SYSTEM", "UNDOTBS1" delete archivelog;
alter clone database open resetlogs;
# PLUG HERE the creation of a temporary tablespace if export fails due to lack
# of temporary space.
# For example in Unix these two lines would do that:
#sql clone "create tablespace aux_tspitr_tmp
#           datafile ''/tmp/aux_tspitr_tmp.dbf'' size 500K";
}
正在執行記憶體指令碼

正在執行命令: SET until clause

正在執行命令: SET NEWNAME

正在執行命令: SET NEWNAME

正在執行命令: SET NEWNAME

正在執行命令: SET NEWNAME

臨時檔案 1 在控制檔案中已重新命名為 D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\AUXDB\TSPITR_A\DATAFILE\O1_MF_TEMP_%U_.T
MP

啟動 restore 於 2009-07-22 17:20:53
分配的通道: ORA_AUX_DISK_1
通道 ORA_AUX_DISK_1: sid=39 devtype=DISK

通道 ORA_AUX_DISK_1: 正在開始恢復資料檔案備份集
通道 ORA_AUX_DISK_1: 正在指定從備份集恢復的資料檔案
正將資料檔案00001恢復到D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\AUXDB\TSPITR_A\DATAFILE\O1_MF_SYSTEM_%U_.DBF
正將資料檔案00002恢復到D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\AUXDB\TSPITR_A\DATAFILE\O1_MF_UNDOTBS1_%U_.DBF
通道 ORA_AUX_DISK_1: 正在讀取備份段 D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\AUXDB\BACKUPSET\2009_07_22\O1_MF_NNNDF
_TAG20090722T170645_56FOO5H4_.BKP
通道 ORA_AUX_DISK_1: 已恢復備份段 1
段控制程式碼 = D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\AUXDB\BACKUPSET\2009_07_22\O1_MF_NNNDF_TAG20090722T170645_56FOO5H
4_.BKP 標記 = TAG20090722T170645
通道 ORA_AUX_DISK_1: 恢復完成, 用時: 00:00:46
通道 ORA_AUX_DISK_1: 正在開始恢復資料檔案備份集
通道 ORA_AUX_DISK_1: 正在指定從備份集恢復的資料檔案
正將資料檔案00004恢復到D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\USERS.258.692722797
通道 ORA_AUX_DISK_1: 正在讀取備份段 D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\AUXDB\BACKUPSET\2009_07_22\O1_MF_NNNDF
_TAG20090722T170941_56FOTP2X_.BKP
通道 ORA_AUX_DISK_1: 已恢復備份段 1
段控制程式碼 = D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\AUXDB\BACKUPSET\2009_07_22\O1_MF_NNNDF_TAG20090722T170941_56FOTP2
X_.BKP 標記 = TAG20090722T170941
通道 ORA_AUX_DISK_1: 恢復完成, 用時: 00:00:02
完成 restore 於 2009-07-22 17:21:44

資料檔案 1 已轉換成資料檔案副本
輸入資料檔案副本 recid=7 stamp=692904104 檔名=D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\AUXDB\TSPITR_A\DATAFILE\O1
_MF_SYSTEM_56FPHS7B_.DBF
資料檔案 2 已轉換成資料檔案副本
輸入資料檔案副本 recid=8 stamp=692904105 檔名=D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\AUXDB\TSPITR_A\DATAFILE\O1
_MF_UNDOTBS1_56FPHSBQ_.DBF

sql 語句: alter database datafile  1 online

sql 語句: alter database datafile  2 online

sql 語句: alter database datafile  4 online

啟動 recover 於 2009-07-22 17:21:46
使用通道 ORA_AUX_DISK_1

正在開始介質的恢復

存檔日誌執行緒 1 序列 3 已作為檔案 D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\ARCH1\ARC00003_0692832926.001 存在於磁碟上
存檔日誌執行緒 1 序列 4 已作為檔案 D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\ARCH1\ARC00004_0692832926.001 存在於磁碟上
存檔日誌檔名 =D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\ARCH1\ARC00003_0692832926.001 執行緒 =1 序列 =3
存檔日誌檔名 =D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\ARCH1\ARC00004_0692832926.001 執行緒 =1 序列 =4
介質恢復完成, 用時: 00:00:04
完成 recover 於 2009-07-22 17:21:55

資料庫已開啟

記憶體指令碼的內容:
{
#online the tablespace will be exported
sql clone "alter tablespace  USERS online";
# export the tablespaces in the recovery set
host 'exp userid =\"/@(DESCRIPTION=(ADDRESS=(PROTOCOL=beq)(PROGRAM=oracle)(ARGV0=oraclephqE)(ARGS=^'(DESCRIPTION=(LOCAL
=YES)(ADDRESS=(PROTOCOL=beq)))^')(ENVS=^'ORACLE_SID=phqE^'))(CONNECT_DATA=(SID=phqE))) as sysdba\" point_in_time_recove
r=y tablespaces=
 USERS file=
tspitr_a.dmp';
# shutdown clone before import
shutdown clone immediate
# import the tablespaces in the recovery set
host 'imp userid =\"/@ as sysdba\" point_in_time_recover=y file=
tspitr_a.dmp';
# online/offline the tablespace imported
sql "alter tablespace  USERS online";
sql "alter tablespace  USERS offline";
# enable autobackups in case user does open resetlogs from RMAN after TSPITR
sql 'begin dbms_backup_restore.AutoBackupFlag(TRUE); end;';
}
正在執行記憶體指令碼

sql 語句: alter tablespace  USERS online


Export: Release 10.2.0.1.0 - Production on 星期三 7月 22 17:22:17 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 字符集
注: 將不匯出表資料 (行)

即將匯出表空間時間點恢復物件...
對於表空間 USERS...
. 正在匯出簇定義
. 正在匯出表定義
. 正在匯出引用完整性約束條件
. 正在匯出觸發器
. 終止時間點恢復
成功終止匯出, 沒有出現警告。
主機命令完成
sql 語句: alter tablespace  USERS online

sql 語句: alter tablespace  USERS offline

sql 語句: begin dbms_backup_restore.AutoBackupFlag(TRUE); end;

刪除自動例項
自動例項已刪除
已刪除輔助例項檔案 D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\AUXDB\CNTRL_TSPITR_AUXDB_PHQE.F
已刪除輔助例項檔案 D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\AUXDB\TSPITR_A\DATAFILE\O1_MF_SYSTEM_56FPHS7B_.DBF
已刪除輔助例項檔案 D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\AUXDB\TSPITR_A\DATAFILE\O1_MF_UNDOTBS1_56FPHSBQ_.DBF
已刪除輔助例項檔案 D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\AUXDB\TSPITR_A\DATAFILE\O1_MF_TEMP_56FPKXLK_.TMP
已刪除輔助例項檔案 D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\AUXDB\TSPITR_A\ONLINELOG\O1_MF_1_56FPKMNZ_.LOG
已刪除輔助例項檔案 D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\AUXDB\TSPITR_A\ONLINELOG\O1_MF_2_56FPKOQG_.LOG
已刪除輔助例項檔案 D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\AUXDB\TSPITR_A\ONLINELOG\O1_MF_3_56FPKQM1_.LOG
完成 recover 於 2009-07-22 17:22:51

 

總結,開始TSPITR失敗的原因在於,恢復的時間早於備份控制檔案的時間。而第2詞失敗原因在沒有恢復表空間相關的資料檔案的備份。

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

相關文章