微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Oracle之DataGurd(DG)环境搭建

DataGurd(DG)这个是什么就无需在这里费周张了,自行百度。公司会经常用的哦。

文章参考:http://www.linuxidc.com/Linux/2015-03/115166.htm这哥们的写的不错,放头头。

配置最大性能模式DG:
最大性能模式:
1、认模式,提供主库的最高可用性能
2、保证主库在运行之中不会受到从库的干扰
优点:避免从库对主库的影响
缺点:不能保证数据不丢失(通过归档的方式,一直查一个arch,如果主库彻底没了,那么redo中的数据会丢失),最低的情况,丢失一个redo组

步骤如下

1.前期规划
2.配置网络监听
3.修改参数文件
4.rman duplicate 复制数据库
5.启动调试数据库
6.测试


1.规划

主库(1.1.1.11):
db_name orcl
db_unique_name orcl_pd
service_name orcl
instance_name orcl
本地归档路径 /home/Oracle/orcl_arclog
tnsnames to_sd --配置去备库的tns


备库(1.1.1.10):
db_name orcl 数据库名要一样
db_unique_name orcl_sd 在一个dg环境里面,每一个成员的名字。
servicer_name vicdb
instance_name vicdb 实例名可以不一样
本地归档路径 /home/oracle/vicdb_arclog
tnsnames to_pd --配置去主库的tns

2.配置网络监听

基础配置,配置两边的oracle net,保证两边能互通(需要使用静态注册),这步不过下面的基本没戏。
位置:/oracle/app/db/network/admin。

主库上的listener配置

[html] view plain copy
  1. catlistener.ora
  2. SID_LIST_LISTENER=
  3. (SID_LIST=
  4. (SID_DESC=
  5. (GLOBAL_dbnAME=orcl)
  6. (ORACLE_HOME=/oracle/app/db)
  7. (SID_NAME=orcl)
  8. )
  9. )
  10. LISTENER=
  11. (DESCRIPTION=
  12. (ADDRESS=(PROTOCOL=TCP)(HOST=1.1.1.11)(PORT=1521))
  13. ADR_BASE_LISTENER=/oracle/app

从库上的listener配置
copy
    (GLOBAL_dbnAME=vicdb)
  1. (SID_NAME=vicdb)
  2. (ADDRESS=(PROTOCOL=TCP)(HOST=1.1.1.10)(PORT=1521))
  3. ADR_BASE_LISTENER=/oracle/app

两边使用相同的tnsnames.ora
copy
    cattnsnames.ora
  1. to_sd=
  2. (DESCRIPTION=
  3. (ADDRESS_LIST=
  4. (CONNECT_DATA=
  5. (SERVICE_NAME=vicdb)
  6. to_pd=
  7. (ADDRESS=(PROTOCOL=TCP)(HOST=1.1.1.11)(PORT=1521))
  8. (SERVER=DEDICATED)
  9. (SERVICE_NAME=orcl)
  10. )


3.修改参数文件

在主库上的配置(必须在归档模式)

创建目录

copy
    mkdir/home/oracle/orcl_arclog

配置force logging
copy
    alterdatabaseforcelogging;
  1. sql>selectFORCE_LOGGINGfromv$database;
  2. FORCE_
  3. ------
  4. YES

添加参数
样板需要替换

copy
    db_unique_name='主库唯一名'
  1. log_archive_config='dg_config=(主库唯一名,从库唯一名)'
  2. log_archive_dest_1='location=本地归档路径VALID_FOR=(ONLINE_LOGFILES,ALL_ROLES)DB_UNIQUE_NAME=主库唯一名'--就是说不管你是主库还是备库,都把你的online放到“本地归档路径”里面去
  3. log_archive_dest_2='service=去从库的TNSvalid_for=(online_logfiles,primary_role)db_unique_name=从库唯一名'--当角色是主库的时候,使用"去从库的tns“发送online_redolog
  4. log_archive_dest_state_1=enable
  5. log_archive_dest_state_2=enable
  6. standby_file_management='auto'

copy
    sql>createpfilefromspfile;
  1. viinitorcl.ora
  2. *.audit_file_dest='/oracle/app/admin/vicdb/adump'
  3. *.audit_trail='db'
  4. *.compatible='11.2.0.0.0'
  5. *.control_files='/oracle/app/oradata/vicdb/control01.ctl','/oracle/app/flash_recovery_area/vicdb/control02.ctl'
  6. *.db_block_size=8192
  7. *.db_domain=''
  8. *.db_name='orcl'
  9. *.db_recovery_file_dest='/oracle/app/flash_recovery_area'
  10. *.db_recovery_file_dest_size=4039114752
  11. *.diagnostic_dest='/oracle/app'
  12. *.memory_target=0
  13. *.open_cursors=300
  14. *.pga_aggregate_target=10485760
  15. *.processes=150
  16. *.remote_login_passwordfile='EXCLUSIVE'
  17. *.sga_target=532676608
  18. *.undo_tablespace='UNDOTBS1'
  19. db_unique_name='orcl_pd'
  20. log_archive_config='dg_config=(orcl_pd,orcl_sd)'
  21. log_archive_dest_1='location=/home/oracle/orcl_arclogVALID_FOR=(ONLINE_LOGFILES,ALL_ROLES)DB_UNIQUE_NAME=orcl_pd'
  22. log_archive_dest_2='service=to_sdvalid_for=(online_logfiles,primary_role)db_unique_name=orcl_sd'
  23. standby_file_management='auto'
  24. 重启据库然后使用pfile启动;
  25. 也可以如下
  26. sql>CREATESPFILEFROMPFILE;
  27. >STARTUPOPEN;

从库上的配置如下:

copy
    添加如下参数,需要替换
  1. db_name='需要同主库一样'
  2. db_unique_name='从库唯一名'
  3. log_archive_dest_1='location=本地归档路径valid_for=(all_logfiles,all_roles)db_unique_name=从库唯一名'##这里的这个all_logfiles主要是为后面最大可用模式做准备
  4. log_archive_dest_state_1=enable
  5. log_file_name_convert='主库中日志文件的路径','从库上日志文件的路径(自己定义)'##这个是用在rman复制时需要的,设置了这个就不需要做setnew..
  6. db_file_name_convert='主库中数据文件的路径','从库上数据文件的路径(自己定义)'

启动到nomount状态

copy
    viinitvicdb.ora
  1. db_name='orcl'
  2. db_unique_name='orcl_sd'
  3. log_archive_config='dg_config=(orcl_pd,orcl_sd)'
  4. log_archive_dest_1='location=/home/oracle/vicdb_arclogvalid_for=(all_logfiles,all_roles)db_unique_name=orcl_sd'
  5. standby_file_management='auto'
  6. log_file_name_convert='/oracle/app/oradata/vicdb','/oradata/vicdb'
  7. db_file_name_convert='/oracle/app/oradata/vicdb','/oradata/vicdb'
  8. >STARTUPnomountpfile='initvicdb.ora';
注意:由于主库原来的名字是vicdb,修改名字之后未有修改数据文件位置,故还是/oracle/app/oradata/vicdb

copy
    创建目录
  1. mkdir/home/oracle/vicdb_arclog
  2. mkdir/oradata/vicdb
  3. 创建从库密码文件
  4. cd$ORACLE_HOME/dbs
  5. orapwdfile=orapwvicdbpassword=oracleforce=y

4.rman duplicate 复制数据库

使用新创建的参数文件启动主库到open状态,启动从库到nomount状态(注意spfile的影响,可以mv掉对应的spfile)。

copy
    rmantargetsys/oracle@to_pdauxiliarysys/oracle@to_sdnocatalog
  1. RMAN>duplicatetargetdatabaseforstandbyfromactivedatabase;一般认参数
  2. RMAN>duplicatetargetdatabaseforstandbyfromactivedatabasenofilenamecheck;如果从库的数据库的位置和主库的位置一样的话就要添加
  3. nofilenamecheck文件名不检查

看到这里然后卡在这里就可以在从机那里看传输过来的文件 记得开双通道,多channel。

copy
    Startingbackupat30-JUL-15
  1. usingchannelORA_disK_1
  2. usingchannelORA_disK_2
  3. channelORA_disK_1:startingdatafilecopy
  4. inputdatafilefilenumber=00001name=/oradata/vicl/system01.dbf
  5. channelORA_disK_2:startingdatafilecopy
  6. inputdatafilefilenumber=00002name=/oradata/vicl/sysaux01.dbf
  7. .
  8. .
  9. datafile1switchedtodatafilecopy
  10. inputdatafilecopyRECID=3STAMP=886440698filename=/oradata/vicl/system01.dbf
  11. datafile2switchedtodatafilecopy
  12. inputdatafilecopyRECID=4STAMP=886440698filename=/oradata/vicl/sysaux01.dbf
  13. datafile3switchedtodatafilecopy
  14. inputdatafilecopyRECID=5STAMP=886440698filename=/oradata/vicl/undotbs01.dbf
  15. datafile4switchedtodatafilecopy
  16. inputdatafilecopyRECID=6STAMP=886440698filename=/oradata/vicl/users01.dbf
  17. datafile5switchedtodatafilecopy
  18. inputdatafilecopyRECID=7STAMP=886440698filename=/oradata/vicl/test_tspitr01.dbf
  19. datafile6switchedtodatafilecopy
  20. inputdatafilecopyRECID=8STAMP=886440698filename=/oradata/vicl/vic01
  21. datafile7switchedtodatafilecopy
  22. inputdatafilecopyRECID=9STAMP=886440698filename=/oradata/vicl/vic02
  23. datafile8switchedtodatafilecopy
  24. inputdatafilecopyRECID=10STAMP=886440698filename=/oradata/vicl/test01.dbf
  25. FinishedDuplicateDbat30-JUL-15
  26. 完成

问题
copy
    常见问题:
  1. (1)如果使用的是非catalog,在rman连接时,加上nocatalog关键字,否则可能会报TARGET>begin:fhdbi:=dbms_rcvcat.getDbid;end;的错误
  2. (2)在执行duplicate的时候,如果源库和目标库目录相同,那么在duplicate时,需要加上nofilenamecheck
  3. 否则报错
  4. auxiliaryfilename/u01/app/oracle/oradata/dg/sysaux01.dbfconflictswithafileusedby
  5. thetargetdatabase
  6. (3)如果从库的参数文件是从主库cp的,特别要注意controlfiles这个参数指定的路径是否正确
  7. (4)主库要在归档模式,否则报错ORA-19602:cannotbackuporcopyactivefileinNOARCHIVELOGmode
  8. (5)如果报如下错误,注意log_file_name_convert,及db_file_name_convert参数是否正确
  9. RMAN-03002:failureofDuplicateDbcommandat07/03/201421:21:23
  10. RMAN-03015:erroroccurredinstoredscriptMemoryScript
  11. RMAN-03009:failureofbackupcommandonorA_disK_1channelat07/03/201421:21:23
  12. ORA-17628:Oracleerror19505returnedbyremoteOracleserver
  13. alterdatabaSEOpenreadonly;
  14. 6.如果报错
  15. RMAN-03002:failureofDuplicateDbcommandat08/13/201417:20:29
  16. RMAN-03015:erroroccurredinstoredscriptMemoryScript
  17. RMAN-03009:failureofsqlcommandonclone_defaultchannelat08/13/201417:20:29
  18. RMAN-11003:failureduringparse/executionofsqlstatement:alterdatabasemountstandbydatabase
  19. ORA-01103:databasename'PROD'incontrolfileisnot'PROD_PD'
  20. 检查备库中的db_name是否和主库一致
  21. 7、如果有多个目录需要做映射可以使用
  22. db_file_name_convert='/oracle/app/oradata/vicdb','/oradata/vicdb','/oradata/xxx',255); list-style-type:decimal-leading-zero; margin:0px; padding-left:10px!important; padding-right:3px!important; border-top-style:none; color:; border-right-style:none; padding-top:0px!important"> 8.如报用户秘密错误,检查两个数据库的sys密码是否一样

5.启动调试数据库

从库现在已经是mount的状态

sql> alter database open;

查看后台进程

copy
    >selectprocess,client_process,sequence#,statusfromv$managed_standby;
  1. PROCESSCLIENT_PROCESSSEQUENCE#STATUS
  2. --------------------------------------------------------------------
  3. ARCHARCH0CONNECTED
  4. ARCHARCH0CONNECTED
  5. ARCHARCH0CONNECTED


启动用于同步的进程mrp

copy
    --启动mrp服务
  1. >alterdatabaserecovermanagedstandbydatabasedisconnectfromsession;
  2. --如果想停止mrp服务使用
  3. >alterdatabaserecovermanagedstandbydatabasecancel;

再次检查后台服务

copy
    PROCESSCLIENT_PSEQUENCE#STATUS
  1. ---------------------------------------
  2. RFSLGWR27IDLE
  3. RFSUNKNowN0IDLE
  4. RFSN/A0IDLE
  5. MRP0N/A27WAIT_FOR_LOG

6.测试

copy
    主库上
  1. >createtabledg_testasselect*fromscott.emp;
  2. Tablecreated.
  3. >insertintodg_testselect*fromdg_test;
  4. 14rowscreated.
  5. >commit;
  6. Commitcomplete.
  7. >altersystemswitchlogfile;主库写盘才会触发MRP进程
  8. Systemaltered.
  9. >
  10. 从库上
  11. >selectsequence#,appliedfromv$archived_log;
  12. SEQUENCE#APPLIED
  13. ----------------------------
  14. 5YES
  15. 4YES
  16. 6YES
  17. >select*fromdg_test;数据同步过来了

原文地址:https://www.jb51.cc/oracle/209267.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐