Oracle之DataGurd(DG)环境搭建

来源:互联网 发布:美国人一生 知乎 编辑:程序博客网 时间:2024/06/07 02:25

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. cat listener.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.   
  11. LISTENER =  
  12.   (DESCRIPTION =  
  13.     (ADDRESS = (PROTOCOL = TCP)(HOST = 1.1.1.11)(PORT = 1521))  
  14.   )  
  15.   
  16. ADR_BASE_LISTENER = /oracle/app  

从库上的listener配置
[html] view plain copy
  1. cat listener.ora  
  2. SID_LIST_LISTENER =  
  3.   (SID_LIST =  
  4.     (SID_DESC =  
  5.       (GLOBAL_DBNAME = vicdb)  
  6.       (ORACLE_HOME = /oracle/app/db)  
  7.       (SID_NAME = vicdb)  
  8.     )  
  9.   )  
  10.   
  11. LISTENER =  
  12.   (DESCRIPTION =  
  13.     (ADDRESS = (PROTOCOL = TCP)(HOST = 1.1.1.10)(PORT = 1521))  
  14.   )  
  15.   
  16. ADR_BASE_LISTENER = /oracle/app  

两边使用相同的tnsnames.ora
[html] view plain copy
  1. cat tnsnames.ora  
  2. to_sd =  
  3.   (DESCRIPTION =  
  4.     (ADDRESS_LIST =  
  5.       (ADDRESS = (PROTOCOL = TCP)(HOST = 1.1.1.10)(PORT = 1521))  
  6.     )  
  7.     (CONNECT_DATA =  
  8.       (SERVICE_NAME = vicdb)  
  9.     )  
  10.   )  
  11.   
  12. to_pd =  
  13.   (DESCRIPTION =  
  14.     (ADDRESS = (PROTOCOL = TCP)(HOST = 1.1.1.11)(PORT = 1521))  
  15.     (CONNECT_DATA =  
  16.       (SERVER = DEDICATED)  
  17.       (SERVICE_NAME = orcl)  
  18.     )  
  19.   )  


3.修改参数文件

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

创建目录

[html] view plain copy
  1. mkdir /home/oracle/orcl_arclog  

配置force logging
[html] view plain copy
  1. alter database force logging;  
  2.   
  3. SQL> select FORCE_LOGGING from v$database;  
  4.   
  5. FORCE_  
  6. ------  
  7. YES  

添加参数
样板需要替换

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

[html] view plain copy
  1. SQL> create pfile from spfile;  
  2.   
  3. vi initorcl.ora  
  4. *.audit_file_dest='/oracle/app/admin/vicdb/adump'  
  5. *.audit_trail='db'  
  6. *.compatible='11.2.0.0.0'  
  7. *.control_files='/oracle/app/oradata/vicdb/control01.ctl','/oracle/app/flash_recovery_area/vicdb/control02.ctl'  
  8. *.db_block_size=8192  
  9. *.db_domain=''  
  10. *.db_name='orcl'  
  11. *.db_recovery_file_dest='/oracle/app/flash_recovery_area'  
  12. *.db_recovery_file_dest_size=4039114752  
  13. *.diagnostic_dest='/oracle/app'  
  14. *.memory_target=0  
  15. *.open_cursors=300  
  16. *.pga_aggregate_target=10485760  
  17. *.processes=150  
  18. *.remote_login_passwordfile='EXCLUSIVE'  
  19. *.sga_target=532676608  
  20. *.undo_tablespace='UNDOTBS1'  
  21. db_unique_name='orcl_pd'    
  22. log_archive_config='dg_config=(orcl_pd,orcl_sd)'  
  23. log_archive_dest_1='location=/home/oracle/orcl_arclog VALID_FOR=(ONLINE_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcl_pd'    
  24. log_archive_dest_2='service=to_sd valid_for=(online_logfiles,primary_role) db_unique_name=orcl_sd'  
  25. log_archive_dest_state_1=enable  
  26. log_archive_dest_state_2=enable  
  27. standby_file_management='auto'  
  28. 重启据库然后使用pfile启动;  
  29. 也可以如下  
  30. SQL> CREATE SPFILE FROM PFILE;  
  31. SQL> STARTUP OPEN;  

从库上的配置如下:

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

启动到nomount状态

[html] view plain copy
  1. vi initvicdb.ora  
  2.   
  3. db_name='orcl'  
  4. db_unique_name='orcl_sd'  
  5. log_archive_config='dg_config=(orcl_pd,orcl_sd)'  
  6. log_archive_dest_1='location=/home/oracle/vicdb_arclog valid_for=(all_logfiles,all_roles) db_unique_name=orcl_sd'   
  7. log_archive_dest_state_1=enable  
  8. standby_file_management='auto'  
  9. log_file_name_convert='/oracle/app/oradata/vicdb','/oradata/vicdb'  
  10. db_file_name_convert='/oracle/app/oradata/vicdb','/oradata/vicdb'  
  11.   
  12. SQL> CREATE SPFILE FROM PFILE;  
  13. SQL> STARTUP nomount pfile='initvicdb.ora';  
注意:由于主库原来的名字是vicdb,修改名字之后未有修改数据文件位置,故还是/oracle/app/oradata/vicdb

[html] view plain copy
  1. 创建目录  
  2. mkdir /home/oracle/vicdb_arclog  
  3. mkdir /oradata/vicdb  
  4.   
  5. 创建从库密码文件  
  6. cd $ORACLE_HOME/dbs  
  7. orapwd file=orapwvicdb password=oracle force=y  

4.rman duplicate 复制数据库

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

[html] view plain copy
  1. rman target sys/oracle@to_pd auxiliary sys/oracle@to_sd nocatalog  
  2. RMAN> duplicate target database for standby from active database; 一般默认参数  
  3. RMAN> duplicate target database for standby from active database nofilenamecheck; 如果从库的数据库的位置和主库的位置一样的话就要添加  
  4.                                                                                    nofilenamecheck文件名不检查  

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

[html] view plain copy
  1. Starting backup at 30-JUL-15  
  2. using channel ORA_DISK_1  
  3. using channel ORA_DISK_2  
  4. channel ORA_DISK_1: starting datafile copy  
  5. input datafile file number=00001 name=/oradata/vicl/system01.dbf  
  6. channel ORA_DISK_2: starting datafile copy  
  7. input datafile file number=00002 name=/oradata/vicl/sysaux01.dbf  
  8. .  
  9. .  
  10. .  
  11. .  
  12. datafile 1 switched to datafile copy  
  13. input datafile copy RECID=3 STAMP=886440698 file name=/oradata/vicl/system01.dbf  
  14. datafile 2 switched to datafile copy  
  15. input datafile copy RECID=4 STAMP=886440698 file name=/oradata/vicl/sysaux01.dbf  
  16. datafile 3 switched to datafile copy  
  17. input datafile copy RECID=5 STAMP=886440698 file name=/oradata/vicl/undotbs01.dbf  
  18. datafile 4 switched to datafile copy  
  19. input datafile copy RECID=6 STAMP=886440698 file name=/oradata/vicl/users01.dbf  
  20. datafile 5 switched to datafile copy  
  21. input datafile copy RECID=7 STAMP=886440698 file name=/oradata/vicl/test_tspitr01.dbf  
  22. datafile 6 switched to datafile copy  
  23. input datafile copy RECID=8 STAMP=886440698 file name=/oradata/vicl/vic01  
  24. datafile 7 switched to datafile copy  
  25. input datafile copy RECID=9 STAMP=886440698 file name=/oradata/vicl/vic02  
  26. datafile 8 switched to datafile copy  
  27. input datafile copy RECID=10 STAMP=886440698 file name=/oradata/vicl/test01.dbf  
  28. Finished Duplicate Db at 30-JUL-15  
  29. 完成  

问题
[html] view plain copy
  1. 常见问题:  
  2. (1)如果使用的是非catalog,在rman 连接时,加上nocatalog关键字,否则可能会报TARGET> begin :fhdbi :dbms_rcvcat.getDbid; end;的错误  
  3. (2) 在执行duplicate的时候,如果源库和目标库目录相同,那么在duplicate 时,需要加上nofilenamecheck  
  4. 否则报错  
  5. auxiliary file name/u01/app/oracle/oradata/dg/sysaux01.dbf conflicts with a file used by  
  6. thetarget database  
  7. (3)如果从库的参数文件是从主库cp的,特别要注意controlfiles这个参数指定的路径是否正确  
  8.   (4) 主库要在归档模式,否则报错ORA-19602: cannot backup or copy active file in NOARCHIVELOG mode  
  9. (5) 如果报如下错误,注意log_file_name_convert,及db_file_name_convert参数是否正确  
  10.   
  11. RMAN-03002: failure of Duplicate Db command at 07/03/2014 21:21:23  
  12. RMAN-03015: error occurred in stored script Memory Script  
  13. RMAN-03009: failure of backup command on ORA_DISK_1 channel at 07/03/2014 21:21:23  
  14. ORA-17628: Oracle error 19505 returned by remote Oracle server  
  15. alter database open read only;  
  16.   
  17. 6.如果报错  
  18. RMAN-03002: failure of Duplicate Db command at 08/13/2014 17:20:29  
  19. RMAN-03015: error occurred in stored script Memory Script  
  20. RMAN-03009: failure of sql command on clone_default channel at 08/13/2014 17:20:29  
  21. RMAN-11003: failure during parse/execution of SQL statement: alter database mount standby database  
  22. ORA-01103: database name 'PROD' in control file is not 'PROD_PD'  
  23.   
  24. 检查备库中的db_name是否和主库一致  
  25.   
  26. 7、如果有多个目录需要做映射可以使用  
  27. db_file_name_convert='/oracle/app/oradata/vicdb','/oradata/vicdb','/oradata/xxx','/oradata/vicdb'  
  28.   
  29. 8. 如报用户秘密错误,检查两个数据库的sys密码是否一样  

5.启动调试数据库

从库现在已经是mount的状态

SQL> alter database open;

查看后台进程

[html] view plain copy
  1. SQL> select process,client_process,sequence#,status from v$managed_standby ;  
  2.   
  3. PROCESS            CLIENT_PROCESS    SEQUENCE# STATUS  
  4. ------------------ ---------------- ---------- ------------------------  
  5. ARCH               ARCH                      0 CONNECTED  
  6. ARCH               ARCH                      0 CONNECTED  
  7. ARCH               ARCH                      0 CONNECTED  
  8. ARCH               ARCH                      0 CONNECTED  


启动用于同步的进程mrp

[html] view plain copy
  1. --启动mrp服务  
  2. SQL> alter database recover managed standby database disconnect from session;  
  3.   
  4. --如果想停止mrp服务使用  
  5. SQL> alter database recover managed standby database cancel;  

再次检查后台服务

[html] view plain copy
  1. SQL> select process,client_process,sequence#,status from v$managed_standby;  
  2.   
  3. PROCESS   CLIENT_P  SEQUENCE# STATUS  
  4. --------- -------- ---------- ------------  
  5. ARCH      ARCH          0 CONNECTED  
  6. ARCH      ARCH          0 CONNECTED  
  7. ARCH      ARCH          0 CONNECTED  
  8. ARCH      ARCH          0 CONNECTED  
  9. RFS   LGWR         27 IDLE  
  10. RFS   UNKNOWN       0 IDLE  
  11. RFS   N/A           0 IDLE  
  12. MRP0      N/A          27 WAIT_FOR_LOG  

6.测试

[html] view plain copy
  1. 主库上  
  2.   
  3. SQL> create table dg_test as select * from scott.emp;  
  4.   
  5. Table created.  
  6.   
  7. SQL> insert into dg_test select * from dg_test;  
  8.   
  9. 14 rows created.  
  10.   
  11. SQL> commit;  
  12.   
  13. Commit complete.  
  14.   
  15. SQL> alter system switch logfile; 主库写盘才会触发MRP进程  
  16.   
  17. System altered.  
  18.   
  19. SQL>   
  20.   
  21.   
  22.   
  23. 从库上  
  24. SQL>   select sequence#,applied from v$archived_log;  
  25.   
  26.  SEQUENCE# APPLIED  
  27. ---------- ------------------  
  28.          5 YES  
  29.          4 YES  
  30.          6 YES  
  31.   
  32. SQL> select * from dg_test; 数据同步过来了  

0 0