Oracle 11g的RMAN duplicate 可以通过Active database duplicate和Backup-based duplicate两种方法实现。本案例使用的是Active database duplicate,对于Active database duplicate来说,在克隆数据库时不用对Source备份,这对于大数据特别是T级别的数据库来说优点非常明显,复制前不需要进行备份,减少了备份和传送备份的时间,同时节省备份空间。
复制的数据库有很多用途,其中大部分涉及测试。可以在一个复制的数据库执行以下任务:
◇ 测试备份和恢复过程
◇ 测试升级到一个新的Oracle数据库版本
◇ 测试数据库性能的应用效果
◇ 创建备用数据库
◇ 生成报告
做测试库
因为测试,使用同机环境:
orcl 数据库 --> 复制到 orclb 数据库
源库:orcl ASM存储
目标库:orclb 文件系统
SQL> select status from v$instance;
STATUS
------------
OPEN
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
+DATA/orcl/datafile/system.256.853076377
+DATA/orcl/datafile/sysaux.257.853076377
+DATA/orcl/datafile/undotbs1.258.853076379
+DATA/orcl/datafile/users.259.853076379
+DATA/orcl/datafile/ogg_tbs.266.853085725
+DATA/orcl/datafile/django.268.853115789
+DATA/orcl/datafile/undo01.281.951036261
+DATA/orcl/datafile/sts.282.951044749
8 rows selected.
SQL> select member from v$logfile;
MEMBER
--------------------------------------------------------------------------------
+DATA/orcl/onlinelog/group_3.263.853076511
+FRA/orcl/onlinelog/group_3.259.853076513
+DATA/orcl/onlinelog/group_2.262.853076503
+FRA/orcl/onlinelog/group_2.258.853076509
+DATA/orcl/onlinelog/group_1.261.853076497
+FRA/orcl/onlinelog/group_1.257.853076499
6 rows selected.
SQL> show parameter name;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_file_name_convert string
db_name string orcl
db_unique_name string orcl
global_names boolean FALSE
instance_name string orcl
lock_name_space string
log_file_name_convert string
service_names string orcl.example.com
SQL> archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 23
Next log sequence to archive 25
Current log sequence 25
cd $ORACLE_HOME/dbs
orapwd file=$ORACLE_HOME/dbs/orapworclb password=oracle
给orclb实例建立监听 (静态注册),监听注册服务名ORCLB
su - grid
netmgr #(最好用图形做,减少出错几率)
目标数据库做静态注册
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orclb)
(ORACLE_HOME = u01/app/oracle/product/11.2.0/dbhome_1)
(SID_NAME = orclb)
)
)
lsnrctl reload
lsnrctl status
Service "orclb" has 1 instance(s).
Instance "orclb", status UNKNOWN, has 1 handler(s) for this service...
配置tnsnames.ora
su - oracle
ORCLB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.3.108)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orclb)
)
)
ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = yutianedu)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl.example.com)
)
测试:
tnsping orclb
确保参数文件中的目录一定先存在的
规划是:把所有的数据文件日志文件控制文件全部保存到/u01/app/oracle/orclb
mkdir u01/app/oracle/orclb (把所有的数据多存储在文件系统上)
mkdir -p u01/app/oracle/admin/orclb/adump
mkdir -p u01/app/oracle/admin/orclb/flash_recovery_area
保证参数文件中出现的目录一定是存在的。
借助orcl实例的spfile --> 生成orclb的pfile:
export ORACLE_SID=orcl
sqlplus / as sysdba
create pfile='/u01/app/oracle/initorclb.ora' from spfile ;
编辑pfile文件:
vi u01/app/oracle/initorclb.ora
*.audit_file_dest='/u01/app/oracle/admin/orcl/adump'
*.audit_sys_operations=TRUE
*.audit_trail='DB_EXTENDED'
*.compatible='11.2.0.0.0'
*.control_files='+DATA/orcl/controlfile/current.260.853076495','+FRA/orcl/controlfile/current.256.853076495'
*.db_block_size=8192
*.db_create_file_dest='+DATA'
*.db_domain='example.com'
*.db_name='orclb'
*.db_recovery_file_dest='+FRA'
*.db_recovery_file_dest_size=21411921920
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers=''
*.local_listener=''
*.max_dispatchers=0
*.max_shared_servers=0
*.memory_target=536870912
*.open_cursors=300
*.parallel_force_local=TRUE
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.resource_limit=TRUE
*.resource_manager_plan='DEVELOPERS'
*.shared_server_sessions=140
*.shared_servers=0
*.undo_tablespace='UNDO01'
源数据库文件:
+DATA/orcl/datafile --> /u01/app/oracle/orclb
源数据库日志文件:
+DATA/orcl/onlinelog --> /u01/app/oracle/orclb
+FRA/orcl/onlinelog --> /u01/app/oracle/orclb
修改参数文件,增加如下两条:
DB_FILE_NAME_CONVERT='+DATA/orcl/datafile','/u01/app/oracle/orclb'
LOG_FILE_NAME_CONVERT='+DATA/orcl/onlinelog','/u01/app/oracle/orclb','+FRA/orcl/onlinelog','/u01/app/oracle/orclb'
export ORACLE_SID=orclb
sqlplus as sysdba
startup nomount pfile='/u01/app/oracle/initorclb.ora'
断开会话 不能有连接(复制的时候是不允许任何会话连接复制数据库,否则就失败)
exit
源数据库处于mount或者open状态。
建议alter system switch logfile ;
确保没有任何会话连接orclb
$ rman target sys/oracle@orcl auxiliary sys/oracle@orclb
Recovery Manager: Release 11.2.0.1.0 - Production on Fri Aug 4 10:49:00 2017
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
connected to target database: ORCL (DBID=1380857230)
connected to auxiliary database: ORCL (not mounted)
输入命令:
RMAN> DUPLICATE TARGET DATABASE to orclb;
或者
RMAN> duplicate database to orclb from active database nofilenamecheck;
删除参数:DB_FILE_NAME_CONVERT LOG_FILE_NAME_CONVERT
shutdown immediate;
vi initorclb.ora
删除参数:DB_FILE_NAME_CONVERT LOG_FILE_NAME_CONVERT)
create spfile from pfile='/u01/app/oracle/initorclb.ora';
启动:
startup
SQL> select status from v$instance;
STATUS
------------
OPEN
$ export ORACLE_SID=orclb
$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on Sun Apr 21 11:31:09 2013
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> select count(*) from scott.emp;
COUNT(*)
----------
14