新聞中心
在Oracle 10g下,我們可以使用RMAN duplicate 命令創(chuàng)建一個具有不同DBID 的復(fù)制庫。 到了Oracle 11gR2, RMAN 的duplicate 有2種方法實現(xiàn):
創(chuàng)新互聯(lián)建站專注于桐城網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供桐城營銷型網(wǎng)站建設(shè),桐城網(wǎng)站制作、桐城網(wǎng)頁設(shè)計、桐城網(wǎng)站官網(wǎng)定制、成都微信小程序服務(wù),打造桐城網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供桐城網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
1. Active database duplication
2. Backup-based duplication
Active database duplication 通過網(wǎng)絡(luò),直接copy target 庫到auxiliary 庫,然后創(chuàng)建復(fù)制庫。 這種方法就不需要先用RMAN 備份數(shù)據(jù)庫,然后將備份文件發(fā)送到auxiliary端。
這個功能的作用是非常大的。 尤其是對T級別的庫。 因為對這樣的庫進行備份,然后將備份集發(fā)送到備庫,在進行duplicate 的代價是非常大的。 一備份要占用時間,二要占用備份空間,三在網(wǎng)絡(luò)傳送的時候,還需要占用帶寬和時間。所以Active database duplicate 很好的解決了以上的問題。 它對大庫的遷移非常有用。
如果是從RAC duplicate 到單實例,操作是一樣的。 如果是從單實例duplicate 到RAC。 那么先duplicate 到 單實例。 然后將單實例轉(zhuǎn)換成RAC。
Oracle 10g 下Rman duplicate 的例子參考:
RMAN 異機 復(fù)制數(shù)據(jù)庫
http://blog.csdn.net/tianlesoftware/archive/2010/07/20/5749932.aspx
下面我們看一下11gR2下,Active Database Duplicate的步驟如下:
1. 創(chuàng)建Auxiliary 庫的Initialization Parameter:
如果使用spfile,那么在pfile文件里只需要設(shè)置一個DB_NAME參數(shù),其他參數(shù)會在duplicate 命令中自己設(shè)置。
如果使用pfile,那么需要設(shè)置如下參數(shù):
DB_NAME
CONTROL_FILES
DB_BLOCK_SIZE
DB_FILE_NAME_CONVERT
LOG_FILE_NAME_CONVERT
DB_RECOVERY_FILE_DEST
2. 在Auxiliary庫創(chuàng)建Password File 文件
對于Backup-based duplication,Password File 不是必須的,但是對于Active Database Duplication,Password File是必須的。 因為Active Database Duplication 使用相同的SYSDBA 密碼直接連接到auxiliary 庫。 所以,確保target 和Auxiliary庫的SYSDBA 密碼一樣很重要。
當然,我們也可以在duplicate 命令中加上PASSWORD FILE 選項(也是默認值), 這樣RMAN 在copy 的時候也會從target 庫把密碼文件copy過來,如果auxiliary庫上已經(jīng)存在了Password file,那么該操作會重寫那個文件。
如:
RMAN> DUPLICATE TARGET DATABASE TO Dave
2> FROM ACTIVE DATABASE
3> NOFILENAMECHECK
4> PASSWORD FILE
5> SPFILE;
3. 如果是windows 平臺,還需要創(chuàng)建Database service:
% set ORACLE_SID=DAVE
% set ORACLE_HOME=E:/oracle/product/11.1.0/db_1
% oradim -NEW -SID DAVE
4. 配置oracle net,修改listener.ora和the tnsnames.ora 文件:
在Target 庫和Auxiliary 都要修改。這個也可以使用netca 和netmgr命令配置。
Listener.ora
[oracle@qs-dmm-rh2 admin]$ cat listener.ora
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost6.localdomain6)(PORT = 1521))
)
)
ADR_BASE_LISTENER = /u01/app/oracle
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
(SID_NAME = orcl)
)
)
tnsname.ora
[oracle@qs-dmm-rh2 admin]$ cat tnsnames.ora
ORCL_ST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.43)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
ORCL_PD =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.42)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
5. 用第一步創(chuàng)建的pfile文件,將Auxiliary啟動到nomout 狀態(tài)。 然后進行Active Database duplicate。
我們看一個完整的復(fù)制示例:
Target DB:
IP: 192.168.2.42
SID:orcl
Auxiliary:
IP:192.168.2.43
SID:orcl
我這里復(fù)制的目錄相同。 如果不同的話需要在pfile里面加入db_file_name_convert和log_file_name_convert.
1. 在Auxiliary 創(chuàng)建pfile 參數(shù)文件:
[oracle@qs-dmm-rh3 dbs]$ pwd
/u01/app/oracle/product/11.2.0/dbhome_1/dbs
[oracle@qs-dmm-rh3 dbs]$ cat initorcl.ora
DB_NAME=orcl
只有一個參數(shù): DB_NAME
2. 在Auxiliary庫上創(chuàng)建口令文件
[oracle@qs-dmm-rh3 admin]$ orapwd file=?/dbs/orapworcl password=oracle
3. 在Auxiliary庫創(chuàng)建相關(guān)的目錄結(jié)構(gòu):
[oracle@qs-dmm-rh3 trace]$ mkdir -p /u01/app/oracle/oradata/orcl
不然在duplicate時會報如下錯誤:
ORA-19505: failed to identify file "/u01/app/oracle/oradata/orcl/users01.dbf"
ORA-27040: file create error, unable to create file
4. 啟動Auxiliary 到nomout 狀態(tài):
[oracle@qs-dmm-rh3 admin]$ sqlplus /nolog
SQL*Plus: Release 11.2.0.1.0 Production on Tue Mar 8 00:28:48 2011
Copyright (c) 1982, 2009, Oracle. All rights reserved.
SQL> conn / as sysdba;
Connected to an idle instance.
SQL> startup nomount pfile=?/dbs/initorcl.ora
ORACLE instance started.
Total System Global Area 146472960 bytes
Fixed Size 1335080 bytes
Variable Size 92274904 bytes
Database Buffers 50331648 bytes
Redo Buffers 2531328 bytes
SQL>
5. 在Target 和Auxiliary 都配置Oracle Net(Listener.ora and tnsnames.ora):
[oracle@qs-dmm-rh2 admin]$ cat listener.ora
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost6.localdomain6)(PORT = 1521))
)
)
ADR_BASE_LISTENER = /u01/app/oracle
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
(SID_NAME = orcl)
)
)
[oracle@qs-dmm-rh2 admin]$ cat tnsnames.ora
ORCL_ST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.43)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
ORCL_PD =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.42)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
6. 開始RMAN duplicate from active database:
注意:如果target 和 Auxiliary庫的目錄結(jié)構(gòu)相同,記得加上nofilenamecheck參數(shù),不然會報如下錯誤:
RMAN-05001: auxiliary file name /u01/app/oracle/oradata/orcl/users01.dbf conflicts with a file used by the target database
如果目錄不同,在pfile里加如下2個參數(shù)進行轉(zhuǎn)換:
db_file_name_convert
log_file_name_convert.
[oracle@qs-dmm-rh3 dbs]$ rman target sys/oracle@orcl_pd auxiliary sys/oracle@orcl_st
Recovery Manager: Release 11.2.0.1.0 - Production on Tue Mar 8 01:01:42 2011
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
connected to target database: ORCL (DBID=1272955137)
connected to auxiliary database: ORCL (not mounted)
RMAN> duplicate target database to orcl from active database nofilenamecheck;
Starting Duplicate Db at 08-MAR-11
using target database control file instead of recovery catalog
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=20 device type=DISK
contents of Memory Script:
{
sql clone "create spfile from memory";
}
executing Memory Script
sql statement: create spfile from memory
contents of Memory Script:
{
shutdown clone immediate;
startup clone nomount;
}
executing Memory Script
Oracle instance shut down
connected to auxiliary database (not started)
Oracle instance started
Total System Global Area 146472960 bytes
Fixed Size 1335080 bytes
Variable Size 92274904 bytes
Database Buffers 50331648 bytes
Redo Buffers 2531328 bytes
contents of Memory Script:
{
sql clone "alter system set db_name =
''ORCL'' comment=
''Modified by RMAN duplicate'' scope=spfile";
sql clone "alter system set db_unique_name =
''ORCL'' comment=
''Modified by RMAN duplicate'' scope=spfile";
shutdown clone immediate;
startup clone force nomount
backup as copy current controlfile auxiliary format '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/cntrlorcl.dbf';
alter clone database mount;
}
executing Memory Script
sql statement: alter system set db_name = ''ORCL'' comment= ''Modified by RMAN duplicate'' scope=spfile
sql statement: alter system set db_unique_name = ''ORCL'' comment= ''Modified by RMAN duplicate'' scope=spfile
Oracle instance shut down
Oracle instance started
Total System Global Area 146472960 bytes
Fixed Size 1335080 bytes
Variable Size 92274904 bytes
Database Buffers 50331648 bytes
Redo Buffers 2531328 bytes
Starting backup at 08-MAR-11
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=43 device type=DISK
channel ORA_DISK_1: starting datafile copy
copying current control file
output file name=/u01/app/oracle/product/11.2.0/dbhome_1/dbs/snapcf_orcl.f tag=TAG20110308T010214 RECID=3 STAMP=745203735
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
Finished backup at 08-MAR-11
database mounted
contents of Memory Script:
{
set newname for datafile 1 to
"/u01/app/oracle/oradata/orcl/system01.dbf";
set newname for datafile 2 to
"/u01/app/oracle/oradata/orcl/sysaux01.dbf";
set newname for datafile 3 to
"/u01/app/oracle/oradata/orcl/undotbs01.dbf";
set newname for datafile 4 to
"/u01/app/oracle/oradata/orcl/users01.dbf";
backup as copy reuse
datafile 1 auxiliary format
"/u01/app/oracle/oradata/orcl/system01.dbf" datafile
2 auxiliary format
"/u01/app/oracle/oradata/orcl/sysaux01.dbf" datafile
3 auxiliary format
"/u01/app/oracle/oradata/orcl/undotbs01.dbf" datafile
4 auxiliary format
"/u01/app/oracle/oradata/orcl/users01.dbf" ;
sql 'alter system archive log current';
}
executing Memory Script
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
Starting backup at 08-MAR-11
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile copy
--在這里開始copy 數(shù)據(jù)文件,比較慢。
input datafile file number=00001 name=/u01/app/oracle/oradata/orcl/system01.dbf
output file name=/u01/app/oracle/oradata/orcl/system01.dbf tag=TAG20110308T010221
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:45
channel ORA_DISK_1: starting datafile copy
input datafile file number=00002 name=/u01/app/oracle/oradata/orcl/sysaux01.dbf
output file name=/u01/app/oracle/oradata/orcl/sysaux01.dbf tag=TAG20110308T010221
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:35
channel ORA_DISK_1: starting datafile copy
input datafile file number=00003 name=/u01/app/oracle/oradata/orcl/undotbs01.dbf
output file name=/u01/app/oracle/oradata/orcl/undotbs01.dbf tag=TAG20110308T010221
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:15
channel ORA_DISK_1: starting datafile copy
input datafile file number=00004 name=/u01/app/oracle/oradata/orcl/users01.dbf
output file name=/u01/app/oracle/oradata/orcl/users01.dbf tag=TAG20110308T010221
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
Finished backup at 08-MAR-11
sql statement: alter system archive log current
contents of Memory Script:
{
backup as copy reuse
archivelog like "/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2011_03_08/o1_mf_1_7_6qb3zyoo_.arc" auxiliary format
"/u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch2_7_745174404.dbf" ;
catalog clone archivelog "/u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch2_7_745174404.dbf";
switch clone datafile all;
}
executing Memory Script
Starting backup at 08-MAR-11
using channel ORA_DISK_1
channel ORA_DISK_1: starting archived log copy
input archived log thread=1 sequence=7 RECID=3 STAMP=745203841
output file name=/u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch2_7_745174404.dbf RECID=0 STAMP=0
channel ORA_DISK_1: archived log copy complete, elapsed time: 00:00:07
Finished backup at 08-MAR-11
cataloged archived log
archived log file name=/u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch2_7_745174404.dbf RECID=3 STAMP=745203848
datafile 1 switched to datafile copy
input datafile copy RECID=3 STAMP=745203849 file name=/u01/app/oracle/oradata/orcl/system01.dbf
datafile 2 switched to datafile copy
input datafile copy RECID=4 STAMP=745203849 file name=/u01/app/oracle/oradata/orcl/sysaux01.dbf
datafile 3 switched to datafile copy
input datafile copy RECID=5 STAMP=745203849 file name=/u01/app/oracle/oradata/orcl/undotbs01.dbf
datafile 4 switched to datafile copy
input datafile copy RECID=6 STAMP=745203849 file name=/u01/app/oracle/oradata/orcl/users01.dbf
contents of Memory Script:
{
set until scn 844147;
recover
clone database
delete archivelog
;
}
executing Memory Script
executing command: SET until clause
Starting recover at 08-MAR-11
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=18 device type=DISK
starting media recovery
archived log for thread 1 with sequence 7 is already on disk as file /u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch2_7_745174404.dbf
archived log file name=/u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch2_7_745174404.dbf thread=1 sequence=7
media recovery complete, elapsed time: 00:00:01
Finished recover at 08-MAR-11
contents of Memory Script:
{
shutdown clone immediate;
startup clone nomount;
sql clone "alter system set db_name =
''ORCL'' comment=
''Reset to original value by RMAN'' scope=spfile";
sql clone "alter system reset db_unique_name scope=spfile";
shutdown clone immediate;
startup clone nomount;
}
executing Memory Script
database dismounted
Oracle instance shut down
connected to auxiliary database (not started)
Oracle instance started
Total System Global Area 146472960 bytes
Fixed Size 1335080 bytes
Variable Size 92274904 bytes
Database Buffers 50331648 bytes
Redo Buffers 2531328 bytes
sql statement: alter system set db_name = ''ORCL'' comment= ''Reset to original value by RMAN'' scope=spfile
sql statement: alter system reset db_unique_name scope=spfile
Oracle instance shut down
connected to auxiliary database (not started)
Oracle instance started
Total System Global Area 146472960 bytes
Fixed Size 1335080 bytes
Variable Size 92274904 bytes
Database Buffers 50331648 bytes
Redo Buffers 2531328 bytes
sql statement: CREATE CONTROLFILE REUSE SET DATABASE "ORCL" RESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 ( '/u01/app/oracle/oradata/orcl/redo01.log' ) SIZE 50 M REUSE,
GROUP 2 ( '/u01/app/oracle/oradata/orcl/redo02.log' ) SIZE 50 M REUSE,
GROUP 3 ( '/u01/app/oracle/oradata/orcl/redo03.log' ) SIZE 50 M REUSE
DATAFILE
'/u01/app/oracle/oradata/orcl/system01.dbf'
CHARACTER SET ZHS16GBK
contents of Memory Script:
{
set newname for tempfile 1 to
"/u01/app/oracle/oradata/orcl/temp01.dbf";
switch clone tempfile all;
catalog clone datafilecopy "/u01/app/oracle/oradata/orcl/sysaux01.dbf",
"/u01/app/oracle/oradata/orcl/undotbs01.dbf",
"/u01/app/oracle/oradata/orcl/users01.dbf";
switch clone datafile all;
}
executing Memory Script
executing command: SET NEWNAME
renamed tempfile 1 to /u01/app/oracle/oradata/orcl/temp01.dbf in control file
cataloged datafile copy
datafile copy file name=/u01/app/oracle/oradata/orcl/sysaux01.dbf RECID=1 STAMP=745203867
cataloged datafile copy
datafile copy file name=/u01/app/oracle/oradata/orcl/undotbs01.dbf RECID=2 STAMP=745203867
cataloged datafile copy
datafile copy file name=/u01/app/oracle/oradata/orcl/users01.dbf RECID=3 STAMP=745203867
datafile 2 switched to datafile copy
input datafile copy RECID=1 STAMP=745203867 file name=/u01/app/oracle/oradata/orcl/sysaux01.dbf
datafile 3 switched to datafile copy
input datafile copy RECID=2 STAMP=745203867 file name=/u01/app/oracle/oradata/orcl/undotbs01.dbf
datafile 4 switched to datafile copy
input datafile copy RECID=3 STAMP=745203867 file name=/u01/app/oracle/oradata/orcl/users01.dbf
contents of Memory Script:
{
Alter clone database open resetlogs;
}
executing Memory Script
database opened
Finished Duplicate Db at 08-MAR-11
RMAN>
復(fù)制結(jié)束。 查詢:
Target 庫:
SQL> select name,dbid from v$database;
NAME DBID
--------- ----------
ORCL 1272955137
Auxiliary庫:
SQL> select name,dbid from v$database;
NAME DBID
--------- ----------
ORCL 1272984602
分享名稱:Oracle11gR2使用RMANduplicatefromactivedatabase復(fù)制數(shù)據(jù)庫
網(wǎng)頁地址:http://fisionsoft.com.cn/article/godcsd.html