我是靠谱客的博主 昏睡奇异果,最近开发中收集的这篇文章主要介绍11g rman新特性 duplicate target database for standby from active database,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

11g rman新特性 duplicate target database for standby from active database

11g之前,对于大数据库dataguard创建,最烦的就是搞备份,因为rman无法远程备份阿,因此要么必须在本地搞个NAS存备份,要么用远程NFS,有时候明明standby端和主库的网络很好但还是要浪费这传输备份的时间,11g开发出了duplicate target database for standby from active database 这个新功能,使得dataguard创建时,如同创建stream时可以利用impdp/expdp的network_link功能一样,不需要创建备份而直接生成dataguard环境。下面就是单机上创建dataguard并且开启11g dataguard另外一大特性:Real-time query的大概流程。Real-time query支持dataguard在open read only的情况下apply主库的log。并且可以做到一致读,达成了物理standby的稳定+逻辑standby的报表查询,实在是非常强大。。。。。ITPUB个人空间/xu!}KD+z!]m

Oracle版本:11.1.0.6 for Linux x86_64

首先dcba创建了2个库,一个prdb,一个pstdb,这样省去创建standby数据库文件夹和密码文件的步骤。这当中还碰到个小问题,创建完数据库迟迟看不到监听注册2个实例。于是一看listener.log,只发现了一些Subscription for node down event still pending信息,这个是老毛病了,在listener.ora里加上SUBSCRIBE_FOR_NODE_DOWN_EVENT_<listener_name>=OFF就ok了,继续看,发现了- -hosts文件里的主机名和现在的hostname不匹配,好像IDC刚集体改过hostname。修正问题,监听注册上了,配了下tnsnames,让2个实例可以用sys互相连接。
6re{6s?6amr0接下来开始修改主库归档模式和一些参数,发现了11g中STANDBY_ARCHIVE_DEST参数已经被废弃。其实10g的时候随着unique_db_name和log_config等参数加入就觉得这个参数估计活不长了- -果然现在被拿掉了。
0?(j*d2_&f:hvZ1g0alter system set log_archive_dest_1='location=/u02/arch/prdb valid_for=(all_logfiles,all_roles) db_unique_name=prdb' scope=both;ITPUB个人空间R@e Vj
alter system set fal_client='prdb' scope=both;ITPUB个人空间(T;G6p$^#Zm| Z m9p
alter system set fal_server='pstdb' scope=both;
7xztpl+|0alter system set db_file_name_convert='pstdb','prdb' scope=spfile;
0jZ^,| l0alter system set log_file_name_convert='pstdb','prdb' scope=spfile;ITPUB个人空间gT_'ei5Y7^
alter system set standby_file_management=auto scope=both;ITPUB个人空间0UV^q4k
alter system set db_unique_name='prdb' scope=spfile;
a^'N!c fb0alter system set log_archive_dest_2='service=pstdb reopen=120 lgwr async valid_for=(online_logfiles,primary_role) db_unique_name=prdb' scope=both;

修改完重启主库

备库么直接startup nomount就可以了ITPUB个人空间u3t2vt5c
这里有一个问题:duplicate target database for standby from active database是需要使用net service name连接的,如果使用SID连接会报下面的错误:
es a k7o,JmkcD0ORACLE_SID=pstdbITPUB个人空间T p,c'M9PQ;]
rman targetsys/xxx@prdbauxiliary /
Ov t M'LL3a1Ow0RMAN-06217: not connected to auxiliary database with a net service name
"hl)R6_W1QK0但问题是,instance在mount/nomount阶段,net service name是blocked的,直接使用net service name连接又会发生别的错误:
R-xwi!Q.Q m0rman targetsys/xxx@prdbauxiliarysys/xxx@pstdbITPUB个人空间g [L mFE:y
RMAN-04006: error from auxiliary database
o(b$q/K0v Cs3_ {0ORA-12528: TNS:listener: all appropriate instances are blocking new connections
[eLR l-l4V'n0那么如何解决呢,其实只要修改监听的配置文件listener.ora,加一个静态注册就可以了:ITPUB个人空间:]+V){Y'z5Z
SID_LIST_LISTENER =
oU P@)k'v0(SID_LIST =ITPUB个人空间.R#K ? l+dti
(SID_DESC =
S'_Ch&g:kf0(GLOBAL_DBNAME = pstdb)ITPUB个人空间#@c&V5Ea CU
(ORACLE_HOME = /u01/app/product/11g/db_1)
3M2ZU6w ]0(SID_NAME = pstdb)
0s3C'R&ZT*qpTV0)
,T fqfHn0)ITPUB个人空间i_ T#itCE'4KQ
另外tnsname.ora里修改成:ITPUB个人空间.kYF lwl2P}
pstdb =
Z#R-m)HlhD&|0(DESCRIPTION =ITPUB个人空间/af6t/s ^0~N!WP*Z)Q
(ADDRESS_LIST =ITPUB个人空间k$z Q4VpyY0[
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))ITPUB个人空间hu v6QSkuY
)ITPUB个人空间 u CQ`Zv
(CONNECT_DATA =
8O5{(F8m]1T0(SERVICE_NAME = pstdb)(UR=A)ITPUB个人空间[JA+V uge
)
l:h&Q8f6MS!{0)
0oZ:M$@? H8n0也可以连接mount状态的instance,包括ASM的实例哦

做好这些工作以后,接下来的工作很方便了ITPUB个人空间2dOUF'~
在standby端:ITPUB个人空间Ep FR2txS
rman targetsys/nyqs8ap@prdbauxiliarysys/nyqs8ap@pstdbITPUB个人空间1{f;g xKJ
连接后运行下面的脚本,RMAN会自动完成建立控制文件,参数文件,拷贝数据文件的工作。ITPUB个人空间Bw8rf)f
run {
N,ao]%M} K0allocate channel prmy1 type disk;
|`e m;l([A3[0allocate auxiliary channel stby type disk;
%{7pH!}9f P#s0duplicate target database for standby from active database
0^$A Ol*|%d;n0spfileITPUB个人空间+RG(t~nU
parameter_value_convert 'prdb','pstdb'ITPUB个人空间$l*{~wZl e
set db_unique_name='pstdb'ITPUB个人空间%{2X T0N;DcySygb
set db_file_name_convert='/prdb/','/pstdb/'
3]Q%q"@"w)}0set log_file_name_convert='/prdb/','/pstdb/'ITPUB个人空间/_x ce r[
set control_files='/u02/oradata/pstdb/control01.ctl'
b8LnG*?;R5acU0set fal_client='pstdb'
0OJs8MC C BQI0set fal_server='prdb'
-c&l5Y|*vF4u9Q0set standby_file_management='AUTO'
q[7s?F0set log_archive_dest_1='location=/u02/arch/pstdb valid_for=(all_logfiles,all_roles) db_unique_name=prdb'ITPUB个人空间]W!cL!de
set log_archive_dest_2='service=prdb ASYNC valid_for=(ONLINE_LOGFILE,PRIMARY_ROLE) db_unique_name=prdb'
.h9~;m/eY{0;
7m^8JIq-k)d%Y0}

执行完毕后,添加Real-time query需要的standby redo log:

alter database add standby logfile '/u02/oradata/pstdb/stdbyredo01.log' size 50m;
[Y'k!Rrz LEz n0alter database add standby logfile '/u02/oradata/pstdb/stdbyredo02.log' size 50m;
aC~#e8`Xa'o({0alter database add standby logfile '/u02/oradata/pstdb/stdbyredo03.log' size 50m;

alter database recover managed standby database disconnect from session;
!a'm5w*u0WO$H0alter database recover managed standby database cancel;
5Acc+h#y0ALTER DATABASE OPEN;
A1f&mI&WYbs0ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;

dataguard就开始Real-time Apply了,验证数据就自己来吧

http://space.itpub.net/35489/viewspace-672521

最后

以上就是昏睡奇异果为你收集整理的11g rman新特性 duplicate target database for standby from active database的全部内容,希望文章能够帮你解决11g rman新特性 duplicate target database for standby from active database所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(32)

评论列表共有 0 条评论

立即
投稿
返回
顶部