Oracle physical Data Guard的笔记

来源:互联网 发布:淘宝app 编辑:程序博客网 时间:2024/06/06 07:11

这是一篇关于Oracle physical Data Guard的笔记。

在介绍安装data guard之前,我还是象以前一样,先介绍相关的理论知识,讨论有关需要注意的问题,然后再进行实际的安装。

运行Data Guard的条件
1、 在主库和从库的所有机器上必须安装同一个版本的Oracle企业版。
2、 主库必须运行在归档模式下。
3、 主库和从库的操作系统必须一样(允许版本不同),从库可以使用与主库不同的目录结构。
4、 主从库硬件系统的体系结构必须相同。比如:主库运行在64位的Sun Sparc系统上,如果从库是32位的Linux Intel系统就不允许。主从库硬件的配置可以不同,比如:CPU数量、内存大小、存储配置等。
5、 主从库可以是单实例的数据库,也可以是多实例的RAC数据库。
6、 每个主从库必须有它自己的控制文件。
7、 如果把主从库放在了一个系统里,则必须调整初始化参数。
8、 只要使用Data Guard就要保持主库是FORCE LOGGING模式,如果在主库上使用了no logging操作不生成日志,因此数据也不会传递到从库。

9、 管理主从库的用户必须具有SYSDBA权限。
一. data guard 原理
所谓的data guard其实就是通过 redo log同步来达到数据一致。 主库在每次归档后会把这个日志传给备机(注意:不是每执行一条事务就同步,而是必须等到archived),那么传到备机哪里呢? 其实这个传过去的日志就是放在备机的归档位置log_archive_dest_1,然后备机知道有新日志来了,最后执行。
由于是使用完整的redo log来同步,所以大家应该知道,备机的物理特征将会和主库一模一样。 在同步过程会有几个进程来维护同步的正常,下面一一来介绍:
LGWR 或 arch   使日志归档  (主库上)
FAL            当备库和主库之间出现同步问题,诸如:网络断了, 那么FAL进程的作用是等待网络正常后把未同步的日志再次传递给备库
RFS            RFS(remote file server) 远程文件服务进程作用是:接受主库发送过来的redo log
MRP            MRP (manager recover process 管理恢复进程)进程当发现有新的redo log传到本地后,将把redo log应用到备库。
oracle net     data guard通过什么来发送日志?  当然是oracle net,所以这个一定要配置好。 
整个流程应该是: lgwr使日志归档---->ORACLE net传输此archivelog---->备库的RFS接受此日志,并把此日志放到归档位置---->MRP发现新日志,然后应用到备库
看到这里大家应该觉得 data guard其实是非常简单的吧!至少我这么认为。   

二.下面来具体实现 physical data guard
1.安装2台 oracle (只安装软件,不要去建库,文件的位置最好能一模一样,这样更加方便管理)
2.利用dbca建立一台主库.
3.配置主库的pfile,以便加如standby database的参数设置,具体参数如下:

首先alter database force logging (主库一定要在强制记录日志模式),create pfile from spfile  然后增加有关 data guard的参数:
/************************************************************************************
DB_UNIQUE_NAME=dg01
LOG_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=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
FAL_SERVER=standby
FAL_CLIENT=primary
STANDBY_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,不要去用默认的spfile
4.在主库上为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 disconnect
2.
备切换成主
alter database commit to switchover to primary
就是这几条命令.
四.data guard的备库从mount状态到open
1.
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE cancel;
alter database open 即可。
变回mount状态.
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

原创粉丝点击