RMAN全自動TSPITR

byfree發表於2009-04-27

環境:

Windows xp

Oracle 10.2.0.1

 

準備工作:

1建立auxiliary instance的口令檔案

先建立aux例項:

C:\>oradim -NEW -SID aux

例項已建立。

 

建立口令檔案:

C:\>orapwd file=D:\oracle\product\10.2.0\db_1\database\PWDaux.ora password=sys

2.  配置auxiliary instance的監聽和tnsnames.ora

listener.ora中增加:

    (SID_DESC =

      (GLOBAL_DBNAME = orcl)

      (ORACLE_HOME = D:\oracle\product\10.2.0\db_1)

      (SID_NAME = aux)

)

tnsnames.ora中增加:

aux =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SID = aux)

    )

  )

使用tnsping驗證:

C:\>tnsping aux

TNS Ping Utility for 32-bit Windows: Version 10.2.0.1.0 - Production on 22-4 -2009 09:47:35

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

已使用的引數檔案:

D:\oracle\product\10.2.0\db_1\network\admin\sqlnet.ora

已使用 TNSNAMES 介面卡來解析別名

Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SID = aux))) OK (10 毫秒)

 

3.  建立auxiliary instance的引數檔案

建立引數檔案d:\initaux.ora,內容如下:

compatible='10.2.0.1.0'

db_name='orcl'

db_unique_name='aux'

db_block_size=8192

SHARED_POOL_SIZE=50M

CONTROL_FILES='D:\oracle\product\10.2.0\oradata\auxi\control01.ctl'

DB_FILE_NAME_CONVERT='D:\oracle\product\10.2.0\oradata\orcl','D:\oracle\product\10.2.0\oradata\auxi'

LOG_FILE_NAME_CONVERT='D:\oracle\product\10.2.0\oradata\orcl','D:\oracle\product\10.2.0\oradata\auxi'還必須建立D:\oracle\product\10.2.0\oradata\auxi目錄

特別注意db_namedb_unique_name引數,設定不當可能會遇到ORA-01102ORA-01103報錯。

 

4. 啟動auxiliary instancenomount狀態

C:\>set oracle_sid=aux

C:\>sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on 星期三 4 22 09:35:00 2009

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

 

已連線到空閒例程。

 

SQL> startup nomount pfile=d:\initaux.ora

ORACLE 例程已經啟動。

 

5. target database open or mount

確認target database狀態為open mount

 

6. 保證備份檔案和歸檔檔案可用

備份target database

C:\>rman target /

RMAN> backup as compressed backupset database current controlfile plus archivelog;

RMAN> exit

 

備份完成後,模擬失誤操作:(確定恢復時間)

14:47:15 SQL> conn test/test

已連線。

14:47:19 SQL> drop table t1;

表已刪除。

已用時間:  00: 00: 00.28

14:47:34 SQL> truncate table t2;

表被截斷。

 

執行全自動TSPITR

首先確定物件被刪除之前的準確時間

C:\>rman target / auxiliary sys/sys@aux

 

恢復管理器: Release 10.2.0.1.0 - Production on 星期一 4 27 14:51:13 2009

 

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

 

連線到目標資料庫: ORCL (DBID=1211958316)

已連線到輔助資料庫: ORCL (未裝載)

 

RMAN> run{

2> allocate auxiliary channel c1 type disk;

3> recover tablespace 'TEST' until time "to_date('2009-04-27:14:46:00','yyyy-mm-

dd:hh24:mi:ss')" auxiliary destination 'D:\oracle\product\10.2.0\oradata\auxi';

4> }

 

使用目標資料庫控制檔案替代恢復目錄

分配的通道: c1

通道 c1: sid=36 devtype=DISK

 

啟動 recover 27-4 -09

RMAN-05026: 警告: 假定以下表空間集適用於指定的時間點

 

表空間列表要求具有 UNDO

表空間 SYSTEM

表空間 UNDOTBS1

 

記憶體指令碼的內容:

{

# set the until clause

set until  time "to_date('2009-04-27:14:46:00','yyyy-mm-dd:hh24:mi:ss')";

# 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 27-4 -09

 

通道 c1: 正在開始恢復資料檔案備份集

通道 c1: 正在復原控制檔案

通道 c1: 正在讀取備份段 D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUP

SET\2009_04_27\O1_MF_NCNNF_TAG20090427T144344_4ZBO2WMK_.BKP

通道 c1: 已恢復備份段 1

段控制程式碼 = D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2009_04_27\

O1_MF_NCNNF_TAG20090427T144344_4ZBO2WMK_.BKP 標記 = TAG20090427T144344

通道 c1: 恢復完成, 用時: 00:00:01

輸出檔名=D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\CONTROL01.CTL

完成 restore 27-4 -09

 

sql 語句: alter database mount clone database

 

sql 語句: alter system archive log current

 

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

 

記憶體指令碼的內容:

{

# generated tablespace point-in-time recovery script

# set the until clause

set until  time "to_date('2009-04-27:14:46:00','yyyy-mm-dd:hh24:mi:ss')";

plsql <<

declare

  sqlstatement       varchar2(512);

  offline_not_needed exception;

  pragma exception_init(offline_not_needed, -01539);

begin

  sqlstatement := 'alter tablespace '||  'TEST' ||' offline for recover';

  krmicd.writeMsg(6162, sqlstatement);

  krmicd.execSql(sqlstatement);

exception

  when offline_not_needed then

    null;

end; >>>;

# set a destination filename for restore

set newname for datafile  1 to

 "D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\SYSTEM01.DBF";

# set a destination filename for restore

set newname for datafile  2 to

 "D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\UNDOTBS01.DBF";

# set a destination tempfile

set newname for tempfile  1 to

 "D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\TEMP01.DBF";

# set a destination filename for restore

set newname for datafile  6 to

 "D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEST.DBF";

# rename all tempfiles

switch clone tempfile all;

# restore the tablespaces in the recovery set plus the auxilliary tablespaces

restore clone datafile  1, 2, 6;

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  6 online";

# make the controlfile point at the restored datafiles, then recover them

recover clone database tablespace  "TEST", "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 TEST offline for recover

 

正在執行命令: SET NEWNAME

 

正在執行命令: SET NEWNAME

 

正在執行命令: SET NEWNAME

 

正在執行命令: SET NEWNAME

 

 

啟動 restore 27-4 -09

 

通道 c1: 正在開始恢復資料檔案備份集

通道 c1: 正在指定從備份集恢復的資料檔案

正將資料檔案00001恢復到D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\SYSTEM01.DBF

正將資料檔案00002恢復到D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\UNDOTBS01.DBF

正將資料檔案00006恢復到D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEST.DBF

通道 c1: 正在讀取備份段 D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUP

SET\2009_04_27\O1_MF_NNNDF_TAG20090427T144344_4ZBO117B_.BKP

通道 c1: 已恢復備份段 1

段控制程式碼 = D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2009_04_27\

O1_MF_NNNDF_TAG20090427T144344_4ZBO117B_.BKP 標記 = TAG20090427T144344

通道 c1: 恢復完成, 用時: 00:00:46

完成 restore 27-4 -09

 

資料檔案 6 已轉換成資料檔案副本

輸入資料檔案副本 recid=7 stamp=685291943 檔名=D:\ORACLE\PRODUCT\10.2.0\ORADATA

\ORCL\TEST.DBF

 

sql 語句: alter database datafile  1 online

 

sql 語句: alter database datafile  2 online

 

sql 語句: alter database datafile  6 online

 

啟動 recover 27-4 -09

 

正在開始介質的恢復

 

存檔日誌執行緒 1 序列 38 已作為檔案 D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\O

RCL\ARCHIVELOG\2009_04_27\O1_MF_1_38_4ZBO2Y3X_.ARC 存在於磁碟上

存檔日誌執行緒 1 序列 39 已作為檔案 D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\O

RCL\ARCHIVELOG\2009_04_27\O1_MF_1_39_4ZBO90X9_.ARC 存在於磁碟上

存檔日誌檔名 =D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\200

9_04_27\O1_MF_1_38_4ZBO2Y3X_.ARC 執行緒 =1 序列 =38

存檔日誌檔名 =D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\200

9_04_27\O1_MF_1_39_4ZBO90X9_.ARC 執行緒 =1 序列 =39

介質恢復完成, 用時: 00:00:02

完成 recover 27-4 -09

 

資料庫已開啟

 

記憶體指令碼的內容:

{

# export the tablespaces in the recovery set

host 'exp userid =\"sys/sys@aux as sysdba\" point_in_time_recover=y tablespaces=

 

 TEST 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  TEST online";

sql "alter tablespace  TEST offline";

# enable autobackups in case user does open resetlogs from RMAN after TSPITR

sql 'begin dbms_backup_restore.AutoBackupFlag(TRUE); end;';

}

正在執行記憶體指令碼

 

 

Export: Release 10.2.0.1.0 - Production on 星期一 4 27 14:52:50 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 字符集

: 將不匯出表資料 ()

 

即將匯出表空間時間點恢復物件...

對於表空間 TEST...

. 正在匯出簇定義

. 正在匯出表定義

. . 正在匯出表                              T1

. . 正在匯出表                              T2

. 正在匯出引用完整性約束條件

. 正在匯出觸發器

. 終止時間點恢復

成功終止匯出, 沒有出現警告。

主機命令完成

 

資料庫已關閉

資料庫已解除安裝

Oracle 例項已關閉

 

 

Import: Release 10.2.0.1.0 - Production on 星期一 4 27 14:53:18 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 字符集中的匯入

. 正在將 SYS 的物件匯入到 SYS

. 正在將 TEST 的物件匯入到 TEST

. . 正在匯入表                            "T1"

. . 正在匯入表                            "T2"

. 正在將 SYS 的物件匯入到 SYS

成功終止匯入, 沒有出現警告。

主機命令完成

 

sql 語句: alter tablespace  TEST online

 

sql 語句: alter tablespace  TEST offline

 

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

已刪除輔助例項檔案 D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\CONTROL01.CTL

已刪除輔助例項檔案 D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\SYSTEM01.DBF

已刪除輔助例項檔案 D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\UNDOTBS01.DBF

已刪除輔助例項檔案 D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\TEMP01.DBF

完成 recover 27-4 -09

 

至此全自動TSPITR完成,驗證恢復結果:

14:50:54 SQL> select tablespace_name,status from dba_tablespaces;

 

TABLESPACE_NAME                STATUS

------------------------------ ---------

SYSTEM                         ONLINE

UNDOTBS1                       ONLINE

SYSAUX                         ONLINE

TEMP                           ONLINE

USERS                          ONLINE

EXAMPLE                        ONLINE

TEST                           OFFLINE

 

已選擇7行。

 

已用時間:  00: 00: 00.03

14:53:37 SQL> alter tablespace test online;

 

分別select兩個表,觀察恢復結果!

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

相關文章