首页 / 数据库 / MySQL / RedHat搭建物理Data Guard
我的搭建环境:两台机器均为:Red Hat Enterprise Linux Server release 5.4数据库版本为:Oracle10g10.2.0primary机上装oracle软件并创建数据库orclstandby机上只装oralce软件,无需装数据库基本配置:源数据库:IP:10.37.1.1数据库SID:orcl_pdb_unique_name:orcl1standby数据库:IP:10.37.1.2数据库SID:orcl_sdb_unique_name:orcl2配置步骤:1、配置primary数据库归档,并设置本地归档路径SQL> shutdown immediate;Database closed.Database dismounted.ORACLE instance shut down.SQL> startup mountORACLE instance started.Total System Global Area 167772160 bytesFixed Size 1218316 bytesVariable Size 83888372 bytesDatabase Buffers 79691776 bytesRedo Buffers 2973696 bytesDatabase mounted.SQL> alter database archivelog;Database altered.SQL> alter database open;Database altered.SQL> alter system set log_archive_dest_1="location=/u01/arch";System altered.SQL> archive log listDatabase log mode Archive ModeAutomatic archival EnabledArchive destination /u01/archOldest online log sequence 2Next log sequence to archive 4Current log sequence 42、将primary数据库置于force logging模式SQL> select force_logging from v$database;FOR---NOSQL> alter database force logging;Database altered.SQL> select force_logging from v$database;FOR---YES3、创建并修改primary数据库的初始化参数文件SQL> create pfile="/u01/p_pfile.ora" from spfile;File created.[oracle@localhost ~]$ vi /u01/p_pfile.ora修改如下内容:*.db_unique_name=orcl1*.log_archive_config="dg_config=(orcl1,orcl2)"*.log_archive_dest_2="service=orcl_s.2_tns arch valid_for=(online_logfiles,primary_role)db_unique_name=orcl2"*.log_archive_dest_state_2=defer*.fal_server=orcl_s.2_tns*.fal_client=orcl_p.1_tns*.db_file_name_convert="/u01/app/oracle/oradata/orcl", "/u01/app/oracle/oradata/orcl_s"*.log_file_name_convert="/u01/app/oracle/oradata/orcl", "/u01/app/oracle/oradata/orcl_s"*.standby_file_management=auto关闭数据库利用修改后的pfile创建spfileSQL> shutdown immediateDatabase closed.Database dismounted.ORACLE instance shut down.SQL> !export ORACLE_SID=orcl_pSQL> create spfile from pfile="/u01/p_pfile.ora";File created.SQL> startupORACLE instance started.Total System Global Area 167772160 bytesFixed Size 1218316 bytesVariable Size 62916852 bytesDatabase Buffers 100663296 bytesRedo Buffers 2973696 bytesDatabase mounted.Database opened.4、创建备份:创建standby的控制文件:SQL> alter database create standby controlfile as "/u01/orcl2control01.ctl";Database altered.创建所有的数据文件备份(此处仅以users表空间下的数据文件为例,其他数据文件均要备份)SQL> alter tablespace users begin backup;Tablespace altered.SQL> !cp /u01/app/oracle/oradata/orcl/users01.dbf /u01SQL> alter tablespace users end backup;Tablespace altered.5、配置primary监听和tns服务[oracle@localhost ~]$ cd $ORACLE_HOME/network/admin[oracle@localhost admin]$ vi listener.ora配置内容如下:SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = orcl_p) (ORACLE_HOME = /u01/app/oracle/10.2.0/db_1) (GLOBAL_DBNAME = orcl_p) ) )LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.37.1.1)(PORT = 1521)) ) )配置tns[oracle@localhost admin]$ vi tnsnames.ora配置内容如下:orcl_p.1_tns = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.37.1.1)(PORT = 1521)) ) (CONNECT_DATA = (SID = orcl_p) (SERVER = DEDICATED) ) )orcl_s.2_tns = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.37.1.2)(PORT = 1521)) ) (CONNECT_DATA = (SID = orcl_s) (SERVER = DEDICATED) ) )此时重启监听后,测试源数据库tns配置[oracle@localhost admin]$ lsnrctl stopLSNRCTL for Linux: Version 10.2.0.1.0 - Production on 26-FEB-2014 19:11:44Copyright (c) 1991, 2005, Oracle. All rights reserved.Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.37.1.1)(PORT=1521)))The command completed successfully[oracle@localhost admin]$ lsnrctl startLSNRCTL for Linux: Version 10.2.0.1.0 - Production on 26-FEB-2014 19:11:53Copyright (c) 1991, 2005, Oracle. All rights reserved.Starting /u01/app/oracle/10.2.0/db_1/bin/tnslsnr: please wait...TNSLSNR for Linux: Version 10.2.0.1.0 - ProductionSystem parameter file is /u01/app/oracle/10.2.0/db_1/network/admin/listener.oraLog messages written to /u01/app/oracle/10.2.0/db_1/network/log/listener.logListening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.37.1.1)(PORT=1521)))Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.37.1.1)(PORT=1521)))STATUS of the LISTENER------------------------Alias LISTENERVersion TNSLSNR for Linux: Version 10.2.0.1.0 - ProductionStart Date 26-FEB-2014 19:11:53Uptime 0 days 0 hr. 0 min. 0 secTrace Level offSecurity ON: Local OS AuthenticationSNMP OFFListener Parameter File /u01/app/oracle/10.2.0/db_1/network/admin/listener.oraListener Log File /u01/app/oracle/10.2.0/db_1/network/log/listener.logListening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.37.1.1)(PORT=1521)))Services Summary...Service "orcl_p" has 1 instance(s). Instance "orcl_P", status UNKNOWN, has 1 handler(s) for this service...The command completed successfully[oracle@localhost admin]$ tnsping orcl_p.1_tnsTNS Ping Utility for Linux: Version 10.2.0.1.0 - Production on 26-FEB-2014 19:12:38Copyright (c) 1997, 2005, Oracle. All rights reserved.Used parameter files:/u01/app/oracle/10.2.0/db_1/network/admin/sqlnet.oraUsed TNSNAMES adapter to resolve the aliasAttempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.37.1.1)(PORT = 1521))) (CONNECT_DATA = (SID = orcl_p) (SERVER = DEDICATED)))OK (0 msec)6、standby数据库创建目录结构,并将源数据库的参数文件、备份的控制文件、创建的口令文件copy到相应的位置7、[oracle@localhost ~]$ mkdir -p /u01/arch2[oracle@localhost u01]$ mkdir -p /u01/app/oracle/flash_recovery_area[oracle@localhost ~]$ mkdir -p /u01/app/oracle/oradata/orcl_s[oracle@localhost ~]$ mkdir -p /u01/app/oracle/admin/orcl_s/{a,b,c,u}dump[oracle@localhost ~]$ scp 10.37.1.1:/u01/*.dbf /u01/app/oracle/oradata/orcl_s/oracle@10.37.1.1"s password: example01.dbf 100% 100MB 20.0MB/s 00:05 sysaux01.dbf 100% 240MB 16.0MB/s 00:15 system01.dbf 100% 480MB 14.6MB/s 00:33 undotbs01.dbf 100% 30MB 15.0MB/s 00:02 users01.dbf 100% 5128KB 5.0MB/s 00:01 [oracle@localhost ~]$ scp 10.37.1.1:/u01/*.ctl /u01/app/oracle/oradata/orcl_s/oracle@10.37.1.1"s password: orcl2control01.ctl 100% 6896KB 6.7MB/s 00:00 [oracle@localhost ~]$ scp 10.37.1.1:/u01/p_pfile.ora /u01s_pfile.oraoracle@10.37.1.1"s password: p_pfile.ora 100% 1508 1.5KB/s 00:00 [oracle@localhost ~]$ scp 10.37.1.1:/u01/app/oracle/10.2.0/db_1/dbs/orapworcl_p /u01/app/oracle/10.2.0/db_1/dbs/orapworcl_soracle@10.37.1.1"s password: orapworcl_p 100% 5120 5.0KB/s 00:007、??改standby数据库的sid为orcl_s并配置copy来的参数文件[root@localhost ~]# vi /u01/s_pfile.ora需要修改的内容如下:(没必要照搬,可根据自己的实际情况自行修改,注意红色部分是重点修改的地方)*.audit_file_dest="/u01/app/oracle/admin/orcl_s/adump"*.background_dump_dest="/u01/app/oracle/admin/orcl_s/bdump"*.control_files="/u01/app/oracle/oradata/orcl_s/orcl2control01.ctl","/u01/app/oracle/oradata/orcl_s/orcl2control02.ctl","/u01/app/oracle/oradata/orcl_s/orcl2control03.ctl"*.core_dump_dest="/u01/app/oracle/admin/orcl_s/cdump"*.user_dump_dest="/u01/app/oracle/admin/orcl_s/udump"*.db_unique_name=orcl2*.log_archive_dest_1="location=/u01/arch2"*.log_archive_dest_2="service=orcl_p.1_tns arch valid_for=(online_logfiles, primary_role) db_unique_name=orcl1"*.log_archive_dest_state_2=enable*.fal_server=orcl_p.1_tns*.fal_client=orcl_s.2_tns8、配置standby数据库的监听和服务名[oracle@localhost admin]$ cd $ORACLE_HOME/network/admin[oracle@localhost admin]$ vi listener.ora # listener.ora Network Configuration File: /u01/app/oracle/10.2.0/db_1/network/admin/listener.ora# Generated by Oracle configuration tools.SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = orcl_s) (ORACLE_HOME = /u01/app/oracle/10.2.0/db_1) (GLOBAL_DBNAME = orcl_s) ) )LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.37.1.2)(PORT = 1521)) ) )[oracle@localhost admin]$ vi tnsnames.ora # tnsnames.ora Network Configuration File: /u01/app/oracle/10.2.0/db_1/network/admin/tnsnames.ora# Generated by Oracle configuration tools.orcl_s.2_tns = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.37.1.2)(PORT = 1521)) ) (CONNECT_DATA = (SID = orcl_s) (SERVER = DEDICATED) ) )orcl_p.1_tns = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.37.1.1)(PORT = 1521)) ) (CONNECT_DATA = (SID = orcl_p) (SERVER = DEDICATED)"tnsnames.ora" 36L, 764C 配置完成后重启监听服务[oracle@localhost admin]$ lsnrctl stop[oracle@localhost admin]$ lsnrctl start至此监听和服务配置完成,在primary和standby端用tnsping命令应该能ping都通两个服务,能远程登入两数据库视为配置成功SQL> conn sys/oracle@orcl_p.1_tns as sysdbaConnected.SQL> conn sys/oracle@orcl_s.2_tns as sysdbaConnected to an idle instance.9、配置stanby数据库并启动到mount状态,并接受归档文件任意终端连接到standby数据库[oracle@localhost ~]$ sqlplus sys/oracle@orcl_s.2_tns as sysdba利用s_pfile.ora常见standby的spfileSQL> create spfile from pfile="/u01/s_pfile.ora";File created.SQL> startup mountORACLE instance started.Total System Global Area 167772160 bytesFixed Size 1218316 bytesVariable Size 62916852 bytesDatabase Buffers 100663296 bytesRedo Buffers 2973696 bytesDatabase mounted.连接到primary数据库并设置远程归档路径开启SQL> conn sys/oracle@orcl_p.1_tns as sysdbaConnected.SQL> alter system set log_archive_dest_state_2=enable;System altered.查看归档接受情况SQL> select max(sequence#) from v$archived_log;MAX(SEQUENCE#)-------------- 4SQL> conn sys/oracle@orcl_s.2_tns as sysdbaConnected.SQL> select max(sequence#) from v$archived_log;MAX(SEQUENCE#)-------------- 4查看standby的归档路径下是否有源数据库传来的归档日志SQL> !ls /u01/arch21_4_840520047.dbf10、primary数据插入,测试standby数据库能否正常接受primary端创建表并插入数据SQL> conn scott/tigerConnected.SQL> create table DG_TEST(ID VARCHAR2(10));Table created.SQL> insert into DG_TEST 2 values ("DG_TEST") 3 /1 row created.SQL> /1 row created.SQL> /1 row created.SQL> /1 row created.SQL> select * from DG_TEST;ID----------DG_TESTDG_TESTDG_TESTDG_TESTSQL> commit;Commit complete.切换归档日志,使当前日志归档SQL> conn / as sysdbaConnected.SQL> alter system switch logfile;System altered.standby启动redo应用(这也正是物理standby的工作方法,等于是从获取的归档中执行恢复操作,来保持与源数据库一致)SQL> alter database recover managed standby database disconnect from session;Database altered.打开数据库前必须停止redo应用SQL> alter database recover managed standby database cancel;Database altered.打开standby数据,查看是否有源数据库新插入的数据SQL> select * from scott.DG_TEST;ID----------DG_TESTDG_TESTDG_TESTDG_TEST数据成功传入standby数据库,物理的DG搭建成功!--------------------------------------分割线 --------------------------------------Oracle Data Guard 重要配置参数 http://www.linuxidc.com/Linux/2013-08/88784.htm基于同一主机配置 Oracle 11g Data Guard http://www.linuxidc.com/Linux/2013-08/88848.htm探索Oracle之11g DataGuard http://www.linuxidc.com/Linux/2013-08/88692.htmOracle Data Guard (RAC+DG) 归档删除策略及脚本 http://www.linuxidc.com/Linux/2013-07/87782.htmOracle Data Guard 的角色转换 http://www.linuxidc.com/Linux/2013-06/86190.htmOracle Data Guard的日志FAL gap问题 http://www.linuxidc.com/Linux/2013-04/82561.htmOracle 11g Data Guard Error 16143 Heartbeat failed to connect to standby 处理方法 http://www.linuxidc.com/Linux/2013-03/82009.htm--------------------------------------分割线 --------------------------------------更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12本文永久更新链接地址