Oracl e DataGuard数据同步技术及配置详解一、DataGuard数据同步技术DataGuard是Oracle数据库自带的数据同步功能,基本原理是将日志文件从原数据库传输到目标数据库,然后在目标数据库上应用(Apply)这些日志文件,从而使目标数据库与源数据库保持同步。
DataGuard提供了三种日志传输(Redo Transport)方式,分别是ARCH传输、LGWR同步传输和LGWR异步传输。
在上述三种日志传输方式的基础上,提供了三种数据保护模式,即最大性能(Maximum Performance Mode)、最大保护(Maximum Protection Mode)和最大可用(Maximum Availability Mode),其中最大保护模式和最大可用模式要求日志传输必须用LGWR同步传输方式,最大性能模式下可用任何一种日志传输方式。
最大性能模式:这种模式是默认的数据保护模式,在不影响源数据库性能的条件下提供尽可能高的数据保护等级。
在该种模式下,一旦日志数据写到源数据库的联机日志文件,事务即可提交,不必等待日志写到目标数据库,如果网络带宽充足,该种模式可提供类似于最大可用模式的数据保护等级。
最大保护模式:在这种模式下,日志数据必须同时写到源数据库的联机日志文件和至少一个目标库的备用日志文件(standby redo log),事务才能提交。
这种模式可确保数据零丢失,但代价是源数据库的可用性,一旦日志数据不能写到至少一个目标库的备用日志文件(standby redo log),源数据库将会被关闭。
这也是目前市场上唯一的一种可确保数据零丢失的数据同步解决方案。
最大可用模式:这种模式在不牺牲源数据库可用性的条件下提供了尽可能高的数据保护等级。
与最大保护模式一样,日志数据需同时写到源数据库的联机日志文件和至少一个目标库的备用日志文件(standby redo log),事务才能提交,与最大保护模式不同的是,如果日志数据不能写到至少一个目标库的备用日志文件(standby redo log),源数据库不会被关闭,而是运行在最大性能模式下,待故障解决并将延迟的日志成功应用在目标库上以后,源数据库将会自动回到最大可用模式下。
根据在目标库上日志应用(Log Apply)方式的不同,DataGuard可分为Physical Standby(Redo Apply)和Logical Standby(SQL Apply)两种。
Physical Standby数据库,在这种方式下,目标库通过介质恢复的方式保持与源数据库同步,这种方式支持任何类型的数据对象和数据类型,一些对数据库物理结构的操作如数据文件的添加,删除等也可支持。
如果需要,Physical Standby 数据库可以只读方式打开,用于报表查询、数据校验等操作,待这些操作完成后再将数据库置于日志应用模式下。
Logical Standby数据库,在这种方式下,目标库处于打开状态,通过LogMiner 挖掘从源数据库传输过来的日志,构造成SQL语句,然后在目标库上执行这些SQL,使之与源数据库保持同步。
由于数据库处于打开状态,因此可以在SQL Apply更新数据库的同时将原来在源数据库上执行的一些查询、报表等操作放到目标库上来执行,以减轻源数据库的压力,提高其性能。
DataGuard数据同步技术有以下优势:1)Oracle数据库自身内置的功能,与每个Oracle新版本的新特性(如ASM)都完全兼容,且不需要另外付费;2)配置管理较简单,不需要熟悉其他第三方的软件产品;3)Physical Standby数据库支持任何类型的数据对象和数据类型;4)Logical Standby数据库处于打开状态,可以在保持数据同步的同时执行查询等操作;5)在最大保护模式下,可确保数据的零丢失;DataGuard数据同步技术的劣势体现在以下几个方面:1)由于传输整个日志文件,因此需要较高的网络传输带宽;2)Physical Standby数据库虽然可以只读方式打开,然后做些查询、报表等操作,但需要停止应用日志,这将使目标库与源数据不能保持同步,如果在此期间源数据库发生故障,将延长切换的时间;3)Logical Standby数据库不能支持某些特定的数据对象和数据类型;4)不支持一对多复制,不支持双向复制,因此无法应用于信息集成的场合;5)只能复制整个数据库,不能选择某个schema或表空间进行单独复制;6)不支持异构的系统环境,需要相同的操作系统版本和数据库版本;DataGuard技术是Oracle推荐的用于高可用灾难恢复环境的数据同步技术。
二、ORACLE Dataguard配置步骤说明:主服务器dbsrv1(10.55.88.1),standby服务器dbsrv2(10.55.88.2),两台机器都安装相同版本的数据库,安装在相同位置,安装时都不创建数据库,本例中数据库都安装在d:\oracle下,数据库版本oracle 9.2.0.11. 在dbsrv1用dbca(数据库创建助手)创建一个归档数据库2. 设置主节点为force Logging模式(为了双向切换,建议备用节点也设置为force logging模式)具体做法:sqlplus /nologconnect / as sysdba;ALTER DATABASE FORCE LOGGING;3. 生成备用数据库控制文件和主库pfile文件具体做法:alter database create standby controlfile as 'd:\oracle\standby.ctl';create pfile='d:\oracle\init.ora' from spfile;关闭主数据库:shutdown immediate;备份控制文件,数据文件以及参数文件:控制文件和数据库文件一般在oradata下的WDS文件夹下(备份整个WDS文件夹),参数文件在oraclehome的ora92下的database子目录下名称为spfileWDS.ora.4. 登陆备份节点,进行数据库恢复,拷贝备用数据库控制文件和主库pfile文件具体做法:(在备机的ORACLE目录下先建好ADMIN和ORADATA两个目录)copy控制文件,数据文件以及参数文件到dbsrv2上,拷贝后要清除ARCHIVE目录下的文件。
将新生成的standby.ctl和init.ora也拷贝到dbsrv2将,standby.ctl放置在d:\oracle\oradata\WDS\下,init.ora文件放在d:\ORACLE目录下。
(注意一定要在主和备数据库关闭状态下做这些文件的拷贝,否则拷贝出来的文件将是无效的)copy d:\oracle\admin\wds\*.* 目录拷贝到备机的相应目录下,并删除子目录里面的文件。
5. 编辑copy到dbsrv2的init.ora文件,增加*.standby_archive_dest='d:\oracle\oradata\wds\archive'*.fal_server='wds'*.fal_client='wds_standby'*.standby_file_management=auto*.remote_archive_enable=TRUE同时修改*.control_files='d:\oracle\oradata\WDS\standby.ctl'6. 配置主节点上的Listener.ora及tnsnames.ora文件Listener.ora(在D:\oracle\ora92\network\admin下)# LISTENER.ORA Network Configuration File: d:\oracle\ora92\network\admin\listener.ora# Generated by Oracle configuration tools.LISTENER =(DESCRIPTION_LIST =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = dbsrv1)(PORT = 1521)))))SID_LIST_LISTENER =(SID_LIST =(SID_DESC =(SID_NAME = PLSExtProc)(ORACLE_HOME = d:\oracle\ora92)(PROGRAM = extproc))(SID_DESC =(GLOBAL_DBNAME = WDS)(ORACLE_HOME = d:\oracle\ora92)(SID_NAME = WDS)))Tnsname.ora(在D:\oracle\ora92\network\admin下)# TNSNAMES.ORA Network Configuration File: d:\oracle\ora92\network\admin\tnsnames.ora # Generated by Oracle configuration tools.WDS =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = dbsrv1)(PORT = 1521)))(CONNECT_DA TA =(SERVER = DEDICATED)(SERVICE_NAME = WDS)))WDS_STANDBY =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = dbsrv2)(PORT = 1521)))(CONNECT_DA TA =(SERVICE_NAME = WDS)))(注意删除结尾处的空格)改好以后将这两个文件拷贝到备机的相应文件夹下。
7. 配置备机上的standby点监听器及tnsnames.ora文件# LISTENER.ORA Network Configuration File: d:\oracle\ora92\network\admin\listener.ora # Generated by Oracle configuration tools.LISTENER =(DESCRIPTION_LIST =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = dbsrv2)(PORT = 1521)))))SID_LIST_LISTENER =(SID_LIST =(SID_DESC =(SID_NAME = PLSExtProc)(ORACLE_HOME = d:\oracle\ora92)(PROGRAM = extproc))(SID_DESC =(GLOBAL_DBNAME = WDS)(ORACLE_HOME = d:\oracle\ora92)(SID_NAME = WDS)))Tnsnames.ora和主节点一样8.重建密码文件到命令行:orapwd file=d:\oracle\ora92\\database\pwdwds.ora password=narisq entries=5在dbsrv2上用oradim重建wds服务Oradim –new –sid WDS –usrpwd narisq在命令行输入LSNRCTL命令,用START启动监听器sqlplus /nologSQL>conn sys/narisq@wds_standby as sysdbaSQL>create spfile from pfile='d:\oracle\init.ora';注意:将控制文件放到init.ora中指定的目录SQL> startup nomount;SQL> alter database mount standby database;SQL> shutdown immediate;SQL> startup nomount;SQL> alter database mount standby database;SQL> alter database recover managed standby database disconnect from session;数据库处于管理恢复模式下9. 在dbsrv1上设置归档路径SQL> startup;SQL> alter system set log_archive_dest_2='service=wds_standby LGWR reopen=60' scope=both; (修改内存和spfile文件中该参数的值)SQL> alter system switch logfile;SQL> /在备用节点观察日志,看是否主节点的归档日志同时归档到备节点上。