使用RMAN建立Duplicate資料庫

byfree發表於2009-04-22

主要操作步驟:

1.       建立auxiliary instance的口令檔案

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

3.       建立auxiliary instance的引數檔案

4.       啟動auxiliary instancenomount狀態

5.       target database open or mount

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

7.       RMAN中執行DUPLICATE命令

 

環境:

Windows xp

Oracle 10.2.0.1

同一臺機器做duplicate

 

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='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目錄

 

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 例程已經啟動。

 

Total System Global Area  117440512 bytes

Fixed Size                  1247588 bytes

Variable Size              58721948 bytes

Database Buffers           50331648 bytes

Redo Buffers                7139328 bytes

SQL> create spfile from pfile='d:\initaux.ora';

 

檔案已建立。

 

再用spfile重啟auxiliary instance,並exit

SQL> shutdown immediate

ORA-01507: ??????

 

 

ORACLE 例程已經關閉。

SQL> startup nomount

ORACLE 例程已經啟動。

 

Total System Global Area  138412032 bytes

Fixed Size                  1247708 bytes

Variable Size              79693348 bytes

Database Buffers           50331648 bytes

Redo Buffers                7139328 bytes

SQL> exit

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options 斷開

 

5. target database open or mount

確認target database狀態為open mount

 

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

備份target database

C:\>rman target /

RMAN> backup as compressed backupset database format='d:\full_%U.ora' plus archivelog;

RMAN> exit

由於是在同一臺機器做duplicate,備份檔案和歸檔日誌不用複製。

 

7. RMAN中執行DUPLICATE命令

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

 

恢復管理器: Release 10.2.0.1.0 - Production on 星期三 4 22 11:40:03 2009

 

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

 

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

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

 

RMAN> duplicate target database to aux;

 

啟動 Duplicate Db 22-4 -09

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

分配的通道: ORA_AUX_DISK_1

通道 ORA_AUX_DISK_1: sid=36 devtype=DISK

 

記憶體指令碼的內容:

{

   set until scn  771578;

   set newname for datafile  1 to

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

   set newname for datafile  2 to

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

   set newname for datafile  3 to

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

   set newname for datafile  4 to

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

   set newname for datafile  5 to

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

   restore

   check readonly

   clone database

   ;

}

正在執行記憶體指令碼

 

正在執行命令: SET until clause

 

正在執行命令: SET NEWNAME

 

正在執行命令: SET NEWNAME

 

正在執行命令: SET NEWNAME

 

正在執行命令: SET NEWNAME

 

正在執行命令: SET NEWNAME

 

啟動 restore 22-4 -09

使用通道 ORA_AUX_DISK_1

 

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

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

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

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

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

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

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

通道 ORA_AUX_DISK_1: 正在讀取備份段 D:\FULL_0EKD3RRO_1_1.ORA

通道 ORA_AUX_DISK_1: 已恢復備份段 1

段控制程式碼 = D:\FULL_0EKD3RRO_1_1.ORA 標記 = TAG20090422T111608

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

完成 restore 22-4 -09

sql 語句: CREATE CONTROLFILE REUSE SET DATABASE "AUX" RESETLOGS ARCHIVELOG

  MAXLOGFILES     16

  MAXLOGMEMBERS      3

  MAXDATAFILES      100

  MAXINSTANCES     8

  MAXLOGHISTORY      292

 LOGFILE

  GROUP  1 ( 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\REDO01.LOG' ) SIZE 50 M  REUSE,

  GROUP  2 ( 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\REDO02.LOG' ) SIZE 50 M  REUSE,

  GROUP  3 ( 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\REDO03.LOG' ) SIZE 50 M  REUSE

 DATAFILE

  'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\SYSTEM01.DBF'

 CHARACTER SET ZHS16GBK

 

 

記憶體指令碼的內容:

{

   switch clone datafile all;

}

正在執行記憶體指令碼

 

釋放的通道: ORA_AUX_DISK_1

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

輸入資料檔案副本 recid=1 stamp=684848459 檔名=D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\UNDOTBS01.DBF

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

輸入資料檔案副本 recid=2 stamp=684848459 檔名=D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\SYSAUX01.DBF

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

輸入資料檔案副本 recid=3 stamp=684848459 檔名=D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\USERS01.DBF

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

輸入資料檔案副本 recid=4 stamp=684848459 檔名=D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\EXAMPLE01.DBF

 

記憶體指令碼的內容:

{

   set until scn  771578;

   recover

   clone database

    delete archivelog

   ;

}

正在執行記憶體指令碼

 

正在執行命令: SET until clause

 

啟動 recover 22-4 -09

分配的通道: ORA_AUX_DISK_1

通道 ORA_AUX_DISK_1: sid=36 devtype=DISK

 

正在開始介質的恢復

 

存檔日誌執行緒 1 序列 16 已作為檔案 D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_04_22\O1_MF_1_16_4YX3191Y_.ARC 存在於磁碟上

存檔日誌執行緒 1 序列 17 已作為檔案 D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_04_22\O1_MF_1_17_4YX34WH4_.ARC 存在於磁碟上

存檔日誌檔名 =D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_04_22\O1_MF_1_16_4YX3191Y_.ARC 執行緒 =1 序列 =16

存檔日誌檔名 =D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2009_04_22\O1_MF_1_17_4YX34WH4_.ARC 執行緒 =1 序列 =17

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

完成 recover 22-4 -09

 

記憶體指令碼的內容:

{

   shutdown clone;

   startup clone nomount ;

}

正在執行記憶體指令碼

 

資料庫已解除安裝

Oracle 例項已關閉

 

已連線到輔助資料庫 (未啟動)

Oracle 例項已啟動

 

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

 

Fixed Size                     1247708 位元組

Variable Size                 79693348 位元組

Database Buffers              50331648 位元組

Redo Buffers                   7139328 位元組

sql 語句: CREATE CONTROLFILE REUSE SET DATABASE "AUX" RESETLOGS ARCHIVELOG

  MAXLOGFILES     16

  MAXLOGMEMBERS      3

  MAXDATAFILES      100

  MAXINSTANCES     8

  MAXLOGHISTORY      292

 LOGFILE

  GROUP  1 ( 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\REDO01.LOG' ) SIZE 50 M  REUSE,

  GROUP  2 ( 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\REDO02.LOG' ) SIZE 50 M  REUSE,

  GROUP  3 ( 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\REDO03.LOG' ) SIZE 50 M  REUSE

 DATAFILE

  'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\SYSTEM01.DBF'

 CHARACTER SET ZHS16GBK

 

 

記憶體指令碼的內容:

{

   set newname for tempfile  1 to

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

   switch clone tempfile all;

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

   catalog clone datafilecopy  "D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\SYSAUX01.DBF";

   catalog clone datafilecopy  "D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\USERS01.DBF";

   catalog clone datafilecopy  "D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\EXAMPLE01.DBF";

   switch clone datafile all;

}

正在執行記憶體指令碼

 

正在執行命令: SET NEWNAME

 

臨時檔案 1 在控制檔案中已重新命名為 D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\TEMP01.DBF

 

已將資料檔案副本列入目錄

資料檔案副本 filename=D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\UNDOTBS01.DBF recid=1 stamp=684848472

 

已將資料檔案副本列入目錄

資料檔案副本 filename=D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\SYSAUX01.DBF recid=2 stamp=684848473

 

已將資料檔案副本列入目錄

資料檔案副本 filename=D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\USERS01.DBF recid=3 stamp=684848473

 

已將資料檔案副本列入目錄

資料檔案副本 filename=D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\EXAMPLE01.DBF recid=4 stamp=684848473

 

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

輸入資料檔案副本 recid=1 stamp=684848472 檔名=D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\UNDOTBS01.DBF

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

輸入資料檔案副本 recid=2 stamp=684848473 檔名=D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\SYSAUX01.DBF

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

輸入資料檔案副本 recid=3 stamp=684848473 檔名=D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\USERS01.DBF

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

輸入資料檔案副本 recid=4 stamp=684848473 檔名=D:\ORACLE\PRODUCT\10.2.0\ORADATA\AUXI\EXAMPLE01.DBF

 

記憶體指令碼的內容:

{

   Alter clone database open resetlogs;

}

正在執行記憶體指令碼

 

資料庫已開啟

完成 Duplicate Db 22-4 -09

 

這個過程中可能會出現如下報錯:

RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============

RMAN-00571: ===========================================================

RMAN-03002: Duplicate Db 命令 ( 04/22/2009 10:41:16 ) 失敗

RMAN-03015: 在儲存的指令碼Memory Script中出現錯誤

RMAN-06026: 有些目標沒有找到 - 終止恢復

RMAN-06023: 沒有找到資料檔案5的副本來恢復

RMAN-06023: 沒有找到資料檔案4的副本來恢復

RMAN-06023: 沒有找到資料檔案3的副本來恢復

RMAN-06023: 沒有找到資料檔案2的副本來恢復

RMAN-06023: 沒有找到資料檔案1的副本來恢復

 

錯誤指出的是無法找到相關備份檔案,可通過

RMAN> restore validate database;

檢查備份的有效性,如不是備份問題,則說明需要通過切換一個歸檔解決

RMAN> sql 'alter system switch logfile';

 

此錯誤在metalink中的描述如下:

Doc ID:  Note:108883.1

Subject:  RMAN-06023 when Duplicating a Database

Solution Description

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

You must issue a log switch and backup the archivelogs as well. This error is indicating that all pieces required to perform. the duplication are not present.When you issue a backup script. which backs up all of the archivelogs (after a log switch), the duplicate database script. completes successfully.

 

Explanation

-----------

You must also back up the archivelogs in order to perform. a duplicate from a hot backup.

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

相關文章