oracle的自动化程度越来越高,在oracle 11g中,可以直接在网络上复制一个数据库而不必备份和提供源数据库文件到目的库.
在测试中发现和以往的duplicate在细节上有此不同,容易出一些小错误,下面测试并对错误说明.
os:centos 6.6
oracle:11.2.0.4
host:ct6605(192.108.56.121) ct6604(192.108.56.120)
这里要把ct6605上的ct6605数据库复制到ct6604上,并且数据库名更改为ct66
1.在ct6604上建相应目录
[oracle@ct6604 db_1]$ mkdir -p /u01/app/oracle/admin/ct66/adump
[oracle@ct6604 db_1]$ mkdir -p /u01/app/oracle/fast_recovery_area/ct66
[oracle@ct6604 db_1]$ mkdir -p /u02/oradata/ct66
[oracle@ct6604 db_1]$ mkdir -p /u03/archivelog/ct66
2.在ct6604上建立和ct6605相同密码的密码文件,当然也可以直接从ct6605上scp过来
[oracle@ct6604 dbs]$ cd /u01/app/oracle/product/11.2.0/db_1/dbs
[oracle@ct6604 dbs]$ orapwd file=orapwct66 password=system entries=20 ignorecase=n
3.在ct6604上启动ct66实例.
此处其实是可以不用pfile启动的,指定ORACLE_SID,用nopfile启动,这样最简单.
如果$ORACLE_HOME/dbs下存在initct66.ora或spfilect66.ora,删除.
[oracle@ct6604 dbs]$ ORACLE_SID=ct66
[oracle@ct6604 dbs]$ rman target /
RMAN> startup nomount;
RMAN> exit
使用spfile启动来复制,会报
RMAN-05537: DUPLICATE without TARGET connection when auxiliary instance is started with spfile cannot use SPFILE clause
也许你没有建spfile,但这可能是你上次复制报错的步骤中产生的.
4.在ct6605 tnsnames.ora上添加到ct66连接的tnsname
t_ct66 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.108.56.120)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ct66)
)
)
这里如果没有添加或者和第5步中的tnsname名字不同,在复制时就会报
ORA-17627: ORA-12154: TNS:could not resolve the connect identifier specified
ORA-17629: Cannot connect to the remote database server
5.在ct605 tnsnames.ora上添加到ct6605和自身ct66的连接
s_ct6605 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.108.56.121)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ct6605)
)
)
t_ct66 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.108.56.120)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ct66)
)
)
这里ct66自身也是要添加tnsname的,不添加自身的tnsname,通过 rman auxiliary / 连接,在复制时会报
RMAN-06217: not connected to auxiliary database with a net service name
6.在ct6604 listener.ora文件中添加ct66的静态注册
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = ct66)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
(SID_NAME = ct66)
)
)
这里是为了让ct66 nomount时,对应的监听处于unknown状态,否则复制时会报
RMAN-04006: error from auxiliary database: ORA-12528: TNS:listener: all appropriate instances are blocking new connections
7.开始复制数据库
[oracle@ct6604 dbs]$ rman target sys/system@s_ct6605 auxiliary sys/system@t_ct66
RMAN> duplicate target database
to ct66
from active database
spfile
parameter_value_convert 'ct6605','ct66'
set log_file_name_convert 'ct6605','ct66'
db_file_name_convert 'ct6605','ct66';
到此,ct66数据库就建立完成并为开启状态.
这里还可以通过set sga_max_size,set sga_target等来设定ct66的参数.
上面在复制过程中更改了数据库名,如果不准备更改,可能就不需要parameter_value_convert/log_file_name_convert/db_file_name_convert,
但在测试中发现如果ct6605的spfile中本身存在db/log_file_convert这些参数,复制到ct6604上后,这些参数会因为生效而可能导致错误,
此时可以在duplicate时还是设这些参数来屏蔽.
duplicate target database
to ct6605
from active database
spfile
parameter_value_convert 'xxxx','xxxx'
set log_file_name_convert 'xxxx','xxxx'
db_file_name_convert 'xxxx','xxxx'
nofilenamecheck;
备注:
此功能同样支持加入for standby子句来建standby.
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28539951/viewspace-1818296/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/28539951/viewspace-1818296/