ITPub博客

首页 > 数据库 > Oracle > Oracle11g Data Guard配置手册

Oracle11g Data Guard配置手册

原创 Oracle 作者:315959312 时间:2014-03-26 16:09:28 0 删除 编辑
主库:192.168.20.28    paidb
备库:192.168.20.27    paidb
操作系统:linux
oracle版本:11.2.0.4

Oracle11g Data Guard配置手册

概述

Oracle Data Guard 是针对企业数据库的最有效和最全面的数据可用性、数据保护和灾难恢复解决方案。它提供管理、监视和自动化软件基础架构来创建和维护一个或多个同步备用数据库,从而保护数据不受故障、灾难、错误和损坏的影响。一台主数据库最多可以配备9个备数据库。


原理



             





环境要求

1) 主数据库服务器和备数据库服务器的操作系统版本必须一致。

2) 主数据库服务器和备数据库服务器的数据库版本必须一致。

3) 主数据库服务器和备数据库服务器的安装目录必须一致。

配置步骤

数据库安装完后,主库和备库都配置为MTS方式,创建PI用户前进行配置。配置完成后在主库创建PI用户,备库会自动创建PI用户。

以下步骤主库和备库的操作完全相同:

将数据库配置为归档模式。

sqlplus / as sysdba

shutdown immediate;

startup mount;

alter database archivelog;

alter system set control_file_record_keep_time=30 scope=both;

alter system set log_archive_dest_1='location=/home/oracle/archivelog' scope=both;

:/home/oracle/archivelog为归档重做日志存放目录

alter database open;

alter system archive log start;

exit;

启用数据库闪回功能

查看闪回目录

show parameter db_recovery_file_dest

查看闪回目录可用大小

show parameter db_recovery_file_dest_size

修改闪回目录位置:

alter system set db_recovery_file_dest='newpath';

修改闪回目录大小

alter system set db_recovery_file_dest_size=400G;

查看闪回功能是否启用,默认不启用

select flashback_on from v$database;

启用闪回功能:

alter database flashback on;

 

判断Data Guard是否安装

select * from v$option where parameter = 'Oracle Data Guard';

如果是true表示已经安装可以配置,否则需要安装相应组件

设置数据库为强制记录日志

alter database force logging;

检查状态:select name,force_logging from v$database;

设置自动管理备库文件

alter system set standy_file_management='AUTO';

 

添加日志文件组

建立standby如要注意以下几点:
   <1>standby log files的大小和redo log files一样。

      查询redo log files文件大小(默认50M,3个):select group#,bytes/1024/1024 as M from v$log
   <2>一般而言, standbyredo 日志文件组数要比 primary 数据库的 online redo 日志文件组数至少多一个。

      有一个推荐的公式可以做参考:(每线程的日志组数+1)*最大线程数
      假设现在节点是1个,则=(3+1)*1=4
      如果是双节点       =(3+1)*2=8
      这里我们创建4standby logfile:
      另:不建议组号group#紧挨着redo,因为后续redo有可能调整,这里我们从建立从1114standby logfile

alter database add standby logfile group  11 '/opt/oracle/oradata/orcl/dg/standby11.log' size 50M;

alter database add standby logfile group  12 '/opt/oracle/oradata/orcl/dg/standby12.log' size 50M;

alter database add standby logfile group  13 '/opt/oracle/oradata/orcl/dg/standby13.log' size 50M;

alter database add standby logfile group  14 '/opt/oracle/oradata/orcl/dg/standby14.log' size 50M;

注:/opt/oracle/oradata/orcl/dg/standby14.log 可以自定义文件名,但是目录必须存在,文件名必须不存在

 

=========================

以上配置主库备库一致

配置db_unique_name

查看db_unique_name

show parameter db_unique_name

主库:alter system set db_unique_name=paidb scope=spfile;

备库:alter system set db_unique_name=paidb27 scope=spfile;

配置主库的fal_server

alter system set FAL_SERVER='paidb27';

alter system set log_archive_config = 'dg_config=(paidb,paidb27)';

配置备库的fal_server

alter system set FAL_SERVER='paidb';

alter system set log_archive_config = 'dg_config=(paidb,paidb27)';

配置主库,把重做日志写到备库

alter system set log_archive_dest_2='service=paidb27 lgwr sync affirm  valid_for=(online_logfile,primary_role) db_unique_name=paidb27’;

注:paidb27为备库的db_unique_name

配置备库,当备库转换为主库的时候把重做日志写到新备库

alter system set log_archive_dest_2='service=paidb lgwr sync affirm  valid_for=(online_logfile,primary_role) db_unique_name=paidb’;

注:paidb为备库的db_unique_name

 

复制密码文件

将主库的密码文件复制到备库

关闭主库和备库:shutdown immediate

scp $OARCLE_HOME/dbs/orapwpaidb   备库:$ORACLE_HOME/dbs/

在主库上创建standby控制文件

关闭主库和备库shutdown immediate;

主库执行:

startup mount;

alter database create standby controlfile as ‘/home/oracle/standby_control01.ctl’;

shutdown immediate;

standby控制文件复制到备库

关闭备库shutdown immediate;

scp /home/oracle/standby_control01.ctl  备库:$ORACLE_HOME/../../../oradata/paidb/

scp /home/oracle/standby_control01.ctl  备库:$ORACLE_HOME/../../../fast_recovery_area/paidb/

配置主库的listener.ora

vi $ORACLE_HOME/network/admin/listener.ora

 

SID_LIST_LISTENER=

        (SID_LIST =

        (SID_DESC =

                (GLOBAL_DBNAME = paidb)

                (ORACLE_HOME = /data1/oracle/app/oracle/product/11.2.0/dbhome_1)

                (SID_NAME = paidb)

        )

        )

 

LISTENER =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.20.28)(PORT = 1521))

    )

  )

 

SUBSCRIBE_FOR_NODE_DOWN_EVENT_LISTENER=OFF

配置主库的tnsnames.ora

PAIDB =

  (DESCRIPTION =

    (ADDRESS_LIST =

    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.20.28)(PORT = 1521))

    )

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = paidb)

      (SID = paidb)

    )

  )

 

PAIDB27 =

  (DESCRIPTION =

    (ADDRESS_LIST =

    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.20.27)(PORT = 1521))

    )

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = paidb27)

      (SID = paidb)

    )

  )

配置备库的listener.ora

SID_LIST_LISTENER=

        (SID_LIST =

        (SID_DESC =

                (GLOBAL_DBNAME = paidb27)

                (ORACLE_HOME = /data1/oracle/app/oracle/product/11.2.0.4/dbhome_1)

                (SID_NAME = paidb)

        )

        )

 

LISTENER =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.20.27)(PORT = 1521))

    )

  )

配置备库的tnsnames.ora

PAIDB27 =

  (DESCRIPTION =

    (ADDRESS_LIST =

    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.20.27)(PORT = 1521))

    )

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = paidb27)

      (SID = paidb)

    )

  )

 

PAIDB =

  (DESCRIPTION =

    (ADDRESS_LIST =

    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.20.28)(PORT = 1521))

    )

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = paidb)

      (SID = paidb)

    )

  )

重启监听

先重启备库:

lsnrctl stop

lsnrctl start

后重启主库:

lsnrctl stop

lsnrctl start

拷贝主库的文件到备库

主库和备库都关闭:

shutdown immediate;

scp $ORACLE_HOME/../../../oradata/paidb/* 备库:$ORACLE_HOME/../../../oradata/paidb/

 



启动备库:

startup nomount;

alter database mount standby database;

启动实时应用:

 ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;

//暂停redo应用:

//ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

启动主库:

startup

备用服务器的管理模式与只读模式

启动到管理模式

shutdown immediate;

startup nomount;

alter database mount standby database;

alter database recover managed standby database disconnect from session;

启动到只读方式 

SQL>shutdown immediate;

 SQL>startup nomount;

 SQL>alter database mount standby database;

 SQL>alter database open read only;

在管理恢复模式下到只读模式

SQL> recover managed standby database cancel;

         SQL> alter database open read only;

从只读方式到管理恢复方式

SQL> recover managed standby database disconnect from session;

监控standby配置是否成功

确认主备库里的归档目的地配置都是有效的
        select DEST_ID, STATUS, DESTINATION, ERROR from V$ARCHIVE_DEST where DEST_ID<=2;
        目的地状态status应该显示为 VALID,注意如果上面没有执行redo应用会有一条error信息 确认重做日志是否真的被应用了,在主库执行

select SEQUENCE#, FIRST_TIME, NEXT_TIME, APPLIED, ARCHIVED from V$ARCHIVED_LOG where name = 'JED2' order by FIRST_TIME;
        如果归档和日志应用均正常,APPLIED 和 ARCHIVED 列都应该是 YES。(如果没有应用redo,applied应该是NO)

主库上检查是否有重做日志缺口
        如果你发现日志没有被应用,那可能是重做日志有了缺口,这种情况下备库无法进行日志应用。但如果你的 FAL_SERVER 参数设置正确,这应该不会有问题
        select STATUS, GAP_STATUS from V$ARCHIVE_DEST_STATUS where DEST_ID = 2;
        如果一切正常,应该返回 VALID 和 NO GAP .切记启用redo应用才能显示No GAP 在主备库上执行以下查询查看数据库状态
         select * from V$DATAGUARD_STATUS order by TIMESTAMP; 检查是否成功:

        主库上查看日志传送情况:
        sql>select dest_name,status,error from v$archive_dest;
        应该log_archive_dest_1和2状态应该是valid
        切换几次日志:
        sql>alter system switch logfile;
         查看日志序号:
        sql>select sequence# from v$archived_log;
         备库验证:
        sql>select sequence#,applied from v$archived_log;

DataGuard启动关闭顺序

监听

  先启备库再起主库

   #lsnrctl start

启动

     先启备库:

   sql>startup nomount
   sql>alter database mount standby database;
   sql>alter database recover managed standby database using current logfile disconnect from session;
   在启主库
   sql>startup

关闭

     先关主库:
    sql>shutdown immediate
    再关从库:

    sql>alter database recover managed standby database cancel;

    sql>shutdown immediate;

保护模式和身份

最大保护:这种模式能够确保绝无数据丢失。要实现这一步当然是有代价的,它要求所有的

                     事务在提交前其 redo 不仅被写入到本地的 online redo log,还要同时提交到

 standby 数据库的 standbyredo log,并确认 redo 数据至少在一个 standby 数据

库可用(如果有多个的话),然后才会在 primary 数据库上提交。如果出现了什么

故障导致 standby 数据库不可用的话,primary 数据库会被 shutdown
最高性能:这种模式提供在不影响 primary 数据库性能前提下最高级别的数据保护策略。

事务可以随时提交,当前 primary 数据库的 redo 数据也需要至少写入一个

standby 数据库,不过这种写入可以是不同步的。如果网络条件理想的话, 这

种模式能够提供类似最高可用性的数据保护而仅对 primary 数据库有轻微的性

能影响。  

最高可用性:这种模式提供在不影响 primary 数据库可用前提下最高级别的数据保护策略。

其实现方式与最大保护模式类似,也是要求所有事务在提交前必须保障 redo

数据至少在一个 standby 数据库可用,不过与之不同的是,如果出现故障导

入无法同时写入 standby 数据库 redo logprimary 数据库并不会 shutdown

而是自动转为最高性能 模式,等 standby 数据库恢复正常之后,它又会再自

动转换成最高可用性模式。

查看保护模式:

select protection_mode,protection_level from v$database; 

--默认是最大性能模式(maximum performance)

查看身份:

                            select database_role from v$database; --主库是primary备库是physical standby

切换保护模式:

                            alter database set standby database to maximize protection;    --最大保护
                            alter database set standby database to maximize availability;  --最高可用性

                            alter database set standby database to maximize performance;   --最高性能

期间碰到一个问题,好几天才解决,分享一下
主备库都可以在最高性能下运行,一旦升级到最高可用模式,
主库log_archive_dest_2的status就变为error,错误信息:ORA-16086: Redo data cannot be written to the standby redo log
解决办法:
删除主库和备库的 standby logfile group
然后到操作系统下rm standby的物理文件,
然后重新添加 standby logfile group
问题解决

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12478376/viewspace-1130026/,如需转载,请注明出处,否则将追究法律责任。

下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2014-02-20

  • 博文量
    10
  • 访问量
    104288