我们把要复制的数据库称为源数据库(SOURCE DB=orcl),复制后的数据库成为目标数据库(TARGET
DB=bdup),不容易搞混。
一、基于备份的测试
测试环境:同一台主机,OS=RHEL 6.4; DB=oracle11gR2
1.在目标数据库上创建密码文件
[oracle@myrac1 ~]$ cd
/s01/app/oracle/product/11.2.0/dbhome_1/dbs/
[oracle@myrac1 dbs]$ pwd
/s01/app/oracle/product/11.2.0/dbhome_1/dbs
[oracle@myrac1 dbs]$ orapwd
file='/s01/app/oracle/product/11.2.0/dbhome_1/dbs/orapwhjjdb'
password=oracle entries=10
2.在目标端创建相应的目录
[oracle@myrac1 admin]$ pwd
/s01/app/oracle/admin
[oracle@myrac1 admin]$ mkdir hjjdb
[oracle@myrac1 admin]$ cd hjjdb/
[oracle@myrac1 hjjdb]$ mkdir adump dpdump pfile scripts
3.在目标端创建初始化参数文件
[oracle@myrac1 dbs]$ vi inithjjdb.ora
hjjdb.__db_cache_size=146800640
hjjdb.__java_pool_size=4194304
hjjdb.__large_pool_size=4194304
hjjdb.__oracle_base='/s01/app/oracle'#ORACLE_BASE
set from environment
hjjdb.__pga_aggregate_target=104857600
hjjdb.__sga_target=314572800
hjjdb.__shared_io_pool_size=0
hjjdb.__shared_pool_size=150994944
hjjdb.__streams_pool_size=0
*._in_memory_undo=FALSE
*.audit_file_dest='/s01/app/oracle/admin/hjjdb/adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='+DATA_DG/hjjdb/control01.ctl','+DG_FRA/hjjdb/control02.ctl'
*.db_block_size=8192
*.db_create_file_dest='+DATA_DG'
*.db_domain=''
*.db_name='hjjdb'
*.db_recovery_file_dest='+DG_FRA'
*.db_recovery_file_dest_size=2147483648
*.diagnostic_dest='/s01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=hjjdbXDB)'
*.open_cursors=300
*.pga_aggregate_target=104857600
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=314572800
*.undo_tablespace='UNDOTBS1'
*.db_file_name_convert=('+DATA_DG/hjj/datafile','+DATA_DG/hjjdb/datafile')
*.log_file_name_convert=('+DG_FRA/hjj/onlinelog','+DG_FRA/hjjdb/onlinelog')
4.启动目标数据库到NOMOUNT状态
[oracle@myrac1 dbs]$ export ORACLE_SID=hjjdb
[oracle@myrac1 dbs]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on Wed Mar 5 00:13:04 2014
Copyright (c) 1982, 2009, Oracle.
Connected to an idle instance.
SQL> startup
pfile='/s01/app/oracle/product/11.2.0/dbhome_1/dbs/inithjjdb.ora'
nomount
ORACLE instance started.
Total System Global Area
Fixed
Size
Variable
Size
Database
Buffers
Redo
Buffers
5.在目标端配置listener.ora和tnsnames.ora
[grid@myrac1 admin]$ cat listener.ora
# listener.ora Network Configuration File:
/g01/app/grid/product/11.2.0/grid/network/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER =
ADR_BASE_LISTENER = /g01/app/grid
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER=ON
这部分需要自己添加,listener.ora文件中没有的。
SID_LIST_LISTENER=
# tnsnames.ora Network Configuration File:
/s01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
HJJ =
HJJDB =
6.重启目标端监听
[grid@myrac1 admin]$ lsnrctl stop
LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 05-MAR-2014 00:25:16
Copyright (c) 1991, 2009, Oracle.
Connecting to
(DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
The command completed successfully
[grid@myrac1 admin]$ lsnrctl start
LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 05-MAR-2014 00:25:21
Copyright (c) 1991, 2009, Oracle.
Starting /g01/app/grid/product/11.2.0/grid/bin/tnslsnr: please wait...
TNSLSNR for Linux: Version 11.2.0.1.0 - Production
System parameter file is
/g01/app/grid/product/11.2.0/grid/network/admin/listener.ora
Log messages written to
/g01/app/grid/diag/tnslsnr/myrac1/listener/alert/log.xml
Listening on:
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Listening on:
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=myrac1)(PORT=1521)))
Connecting to
(DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
STATUS of the LISTENER
------------------------
Alias
Version
Start
Date
Uptime
Trace
Level
Security
SNMP
Listener Parameter File
Listener Log
File
Listening Endpoints Summary...
Services Summary...
Service "myrac1.oracle.com" has 1 instance(s).
The command completed successfully
7.在源数据库备份DB
[oracle@myrac1 admin]$ export
ORACLE_SID=orcl
[oracle@myrac1 admin]$ rman target
/
Recovery Manager: Release 11.2.0.1.0 - Production on Wed Mar 5 00:28:44 2014
Copyright (c) 1982, 2009, Oracle and/or its
affiliates.
connected to target database: HJJ (DBID=2845675742)
RMAN>backup database format='/tmp/full_%s_%T_%p.bak' plus
archivelog delete input;
--验证数源据库是否存在有效备份
RMAN> list backup of database;
using target database control file instead of recovery catalog
List of Backup Sets
===================
BS Key
------- ---- -- ---------- ----------- ------------
---------------
3
8.RMAN连接源数据库和目标数据库进行复制
[oracle@myrac1 admin]$ rman target
sys/oracle@hjj auxiliary sys/oracle@hjjdb
Recovery Manager: Release 11.2.0.1.0 - Production on Wed Mar 5 00:32:14 2014
Copyright (c) 1982, 2009, Oracle and/or its
affiliates.
connected to target database: HJJ
(DBID=2845675742)
connected to auxiliary database: HJJDB
(not mounted)
RMAN> duplicate target database to hjjdb nofilenamecheck;
Starting Duplicate Db at 05-MAR-14
using target database control file instead of recovery
catalog
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=135 device type=DISK
contents of Memory Script:
{
}
executing Memory Script
sql statement: create spfile from memory
contents of Memory Script:
{
}
executing Memory Script
Oracle instance shut down
connected to auxiliary database (not started)
Oracle instance started
Total System Global
Area
Fixed
Size
Variable
Size
Database
Buffers
Redo
Buffers
contents of Memory Script:
{
}
executing Memory Script
sql statement: alter system set
sql statement: alter system set
Oracle instance shut down
Oracle instance started
Total System Global
Area
Fixed
Size
Variable
Size
Database
Buffers
Redo
Buffers
Starting restore at 05-MAR-14
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=12 device type=DISK
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: restoring control file
channel ORA_AUX_DISK_1: reading from backup piece
+DG_FRA/hjj/autobackup/2014_03_05/s_841366547.267.841366555
channel ORA_AUX_DISK_1: piece
handle=+DG_FRA/hjj/autobackup/2014_03_05/s_841366547.267.841366555
tag=TAG20140305T005547
channel ORA_AUX_DISK_1: restored backup piece 1
channel ORA_AUX_DISK_1: restore complete, elapsed time:
00:00:05
output file name=+DATA_DG/hjjdb/control01.ctl
output file name=+DG_FRA/hjjdb/control02.ctl
Finished restore at 05-MAR-14
database mounted
RMAN-05529: WARNING: DB_FILE_NAME_CONVERT resulted in invalid ASM
names; names changed to disk group only.
contents of Memory Script:
{
}
executing Memory Script
executing command: SET until clause
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
Starting restore at 05-MAR-14
using channel ORA_AUX_DISK_1
。。。。。。。。。。。。。。。省略了很多行。。。。。。。。。。。。。。。。
至此,基于备份的RMAN DUPLICATE测试完成。
9.遇到的问题以及解决
RMAN-05529: WARNING: DB_FILE_NAME_CONVERT resulted in invalid ASM
names; names changed to disk group only.
RMAN-00571:
===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS
===============
RMAN-00571:
===========================================================
RMAN-03002: failure of Duplicate Db command
at 03/05/2014 00:51:41
RMAN-05501: aborting duplication of target database
RMAN-05001: auxiliary file name +DATA_DG/hjj/onlinelog/group_1.258
conflicts with a file used by the
target database
如果在RMAN恢复时不指定 nofilenamecheck 参数,则在数据文件相同文件名恢复时会出现RMAN-05501错误,当源数据库和目标数据库的数据库文件目录是一样的时候,必须使用 nofilenamecheck参数告诉rman源数据库和目标数据库拥有一样的文件目录和文件名。
二、基于活动数据库的复制
测试环境:同一台主机,OS=WIN7 64BIT; DB=oracle11gR2
1.在目标数据库端创建密码文件
C:>orapwd
file='C:appAdministratorproduct11.2.0dbhome_1databasePWDbdup.ora'
password=oracle entries=10
2.在目标数据库端创建相应的目录
C:>mkdir -p
D:oradatadup
C:>mkdir -p C:appAdministratoradmindupadump
3.在目标数据库端创建参数文件
可以在源数据库端创建目标端的参数文件,例如
SQL>create
pfile='C:appAdministratorproduct11.2.0dbhome_1databaseinitbdup.ora'
from spfile;
编辑initbdup.ora文件,内容如下:
bdup.__db_cache_size=285212672
bdup.__java_pool_size=16777216
bdup.__large_pool_size=16777216
bdup.__oracle_base='C:appAdministrator'#ORACLE_BASE
set from environment
bdup.__pga_aggregate_target=419430400
bdup.__sga_target=822083584
bdup.__shared_io_pool_size=0
bdup.__shared_pool_size=469762048
bdup.__streams_pool_size=16777216
*.audit_file_dest='C:appAdministratoradmindupadump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_file_record_keep_time=7
*.control_files='D:oradatadupcontrol01.ctl','D:oradatadupcontrol02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='bdup'
*.db_recovery_file_dest='C:appAdministratorflash_recovery_area'
*.db_recovery_file_dest_size=4102029312
*.diagnostic_dest='C:appAdministrator'
*.dispatchers='(PROTOCOL=TCP)
(SERVICE=bdupXDB)'
*.fast_start_mttr_target=90
*.job_queue_processes=1000
*.memory_target=1232076800
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=587202560
*.undo_tablespace='UNDOTBS1'
*.db_file_name_convert=('C:appAdministratororadataorcl','D:oradatadup')
*.log_file_name_convert=('C:appAdministratororadataorcl','D:oradatadup')
4.启动目标数据库到NOMONNT
C:>set ORACLE_SID=bdup
SQL> startup
pfile='C:appAdministratorproduct11.2.0dbhome_1databaseinitbdup.ora'
nomount
ORACLE instance started.
Total System Global Area 1235959808 bytes
Fixed
Size
Variable
Size
Database
Buffers
Redo
Buffers
5.配置目标端监听和服务
listener.ora文件内容如下:
SID_LIST_LISTENER =
tnsnames.ora文件添加如下内容:
# tnsnames.ora Network Configuration File:
C:appAdministratorproduct11.2.0dbhome_1NETWORKADMIN nsnames.ora
# Generated by Oracle configuration tools.
BDUP =
C:>lsnrctl reload
C:>lsnrctl status
7.RMAN连接源数据库和目标数据库进行复制
C:>rman target sys/oracle@orcl auxiliary sys/oracle@bdup
RMAN>duplicate database to BDUP FROM ACTIVE DATABASE
NOFILENAMECHECK;
8.测试目标数据库
C:>set ORACLE_SID=bdup
C:>sqlplus / as sysdba
SQL> set linesize 1000
SQL> select instance_name,status from v$instance;
INSTANCE_NAME
-------------------------------- -----------------------
bdup
SQL> select * from v$dbfile;
---------- ---------------------------------
8 rows selected.
9.遇到的错误及解决
RMAN>duplicate database to BDUP FROM
ACTIVE DATABASE SPFILE NOFILENAMECHECK;
RMAN-03002: failure of Duplicate Db
command
RMAN-05501: aborting duplication of target database
RMAN-03015: error occurred in stored script Memory Script
RMAN-03009: failure of backup command on d1 channel
ORA-17628: Oracle error 19505 returned by remote Oracle
server
需要设置DB_FILE_NAME_CONVERT参数,这个参数我在参数文件中已经指定了,所以不需要加SPFILE选项;如果要在RMAN中指定,命令如下
RMAN>run {
duplicate database to BDUP FROM ACTIVE DATABASE SPFILE
NOFILENAMECHECK;
spfile
}
至此,RMAN两种类型的复制数据库方式测试完毕,也可以利用RMAN复制创建standby数据库。
总结:
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/21784772/viewspace-1114446/ ,如需转载,请注明出处,否则将追究法律责任。