这是一篇关于Oracle physical Data Guard的笔记。在介绍安装data guard之前,我还是象以前一样,先介绍相关的理论知识,讨论有关需要注意的问题,然后再进行实际的安装。一. data guard 原理所谓的data guard其实就是通过 redo log同步来达到数据一致。 主库在每次归档后会把这个日志传给备机(注意:不是每执行一条事务就同步,而是必须等到archived),那么传到备机哪里呢? 其实这个传过去的日志就是放在备机的归档位置log_archive_dest_1,然后备机知道有新日志来了,最后执行。由于是使用完整的redo log来同步,所以大家应该知道,备机的物理特征将会和主库一模一样。 在同步过程会有几个进程来维护同步的正常,下面一一来介绍:LGWR 或 arch 使日志归档 (主库上)FAL 当备库和主库之间出现同步问题,诸如:网络断了, 那么FAL进程的作用是等待网络正常后把未同步的日志再次传递给备库RFS RFS(remote file server) 远程文件服务进程作用是:接受主库发送过来的redo logMRP MRP (manager recover process 管理恢复进程)进程当发现有新的redo log传到本地后,将把redo log应用到备库。oracle net data guard通过什么来发送日志? 当然是oracle net,所以这个一定要配置好。 整个流程应该是: lgwr使日志归档---->ORACLE net传输此archivelog---->备库的RFS接受此日志,并把此日志放到归档位置---->MRP发现新日志,然后应用到备库看到这里大家应该觉得 data guard其实是非常简单的吧!至少我这么认为。 二.下面来具体实现 physical data guard1.安装2台 oracle (只安装软件,不要去建库,文件的位置最好能一模一样,这样更加方便管理)2.利用dbca建立一台主库.3.配置主库的pfile,以便加如standby database的参数设置,具体参数如下:首先alter database force logging (主库一定要在强制记录日志模式),create pfile from spfile 然后增加有关 data guard的参数:/************************************************************************************DB_UNIQUE_NAME=dg01LOG_ARCHIVE_CONFIG='DG_CONFIG=(dg01,dg02)'LOG_ARCHIVE_DEST_2='SERVICE=standby LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=dg02'LOG_ARCHIVE_DEST_STATE_1=ENABLELOG_ARCHIVE_DEST_STATE_2=ENABLEFAL_SERVER=standbyFAL_CLIENT=primarySTANDBY_FILE_MANAGEMENT=AUTO/************************************************************************************一般来说你安装完oracle会有一个默认的spfile,但是此时data guard的参数还没加进来,上面那些参数就是关于data guard的参数,现在来解释一下:db_unique_name=dg01 (由于dataguard的两台机器的oracle_sid,instance_name,service_name全部是一模一样的,否者怎么可能同步呢?那么这2台怎么来标识呢?那就是通过db_unique_name,这个名字可以随便给)log_archive_config='dg_config=(dg01,dg02)' (LOG_ARCHIVE_CONFIG 是说指定需要接受和发送redo log的2台机器,dg_config中必须指定 db_unique_name)log_archive_dest_2 (表示发一份 archive log给server 指定的机器 server=standby(这个standby为oracle net name,而不是db_unique_name)FAL_SERVER,FAL_client (表示指定需要发送和接受redo log 的2台机器, 数值必须为 oracle net name. fal_server为接受redo log的备库,fal_client为发送redo log的主库)到这里参数就完成了,应该很简单。不过一定要记住等下启动主库的时候用这个修改好的pfile,不要去用默认的spfile4.在主库上为standby 建立控制文件 ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/tmp/standby.ctl';5.把数据文件,arch ,控制文件,密码文件,和pfile全部传给备库(记得放置的路径一定要和主库一样,其实可以不一样,但是我们这里要求一样,因为我们配置参数的时候没有配置参数位置转换)6.在备库上把standby.ctl替换传过去的.ctl,修改备库的 pfile.7.启动备库startup mount;然后使用命令接受archivelog,ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;( 备库要求在mount下才可以接受archivelog,如果要open的话,日志暂时不会同步,直到再次到mount状态下)8.测试备库是否同步SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;或者SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;三。角色转换1.主切换成备alter database commit to switchover to physical standby with session shutdown;shutdown immediate, startup nomount,alter database mount standby database;recover managed standby database disconnect2.备切换成主alter database commit to switchover to primary就是这几条命令.四.data guard的备库从mount状态到open1.ALTER DATABASE RECOVER MANAGED STANDBY DATABASE cancel;alter database open 即可。变回mount状态.ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;