ORACLE Dataguard安装

 

ORACLE Dataguard安装

 

花了一周时间,终于部署和稳定都整理好了. 拷贝到blog里, 留份记录. 也算是对大家的贡献吧. 

当然这篇技术文档很大一部分归功于这位仁兄:  http://blog.csdn.net/tianlesoftware/archive/2010/04/30/5547565. 我参考该文档,对实施过程的碰到的问题做了调整,整理了一份自己的参考文档。

1      前言

1.1    Dataguard实施前准备

    Oracle安装分包括2块,安装DB 软件和升级。 如果是10g的话,可以先将DB升级到10.2.0.5。 升级的原因是为了避免某些bug。先安装软件,升级,升级完在用DBCA 创建实例。 这样比安装DB 和创建实例之后升级要简单点。
    (1)redo 文件默认是50M,改成100M
    (2)每个redo group里改成2个 redo logfile。 大小100M (只保留2组red log)
    (3)检查一下字符集:ZHS16GBK
    (4)设置SGA,PGA 大小。
       OLTP 系统一般的规则是:
              SGA=内存*80%*80%
              PGA=内存*80%*20%

注释: 本次实施中 {SID} = oratest

2      Dataguard实施步骤

2.1 Primary端设置

2.1.1        设置oracle为归档模式

查看当前归档模式情况: archive log list 
    设置本地归档目录: 修改init{SID}.ora文件
        *.log_archive_dest_1='LOCATION=/home/ora_arch'
        *.log_archive_format='%t_%s_%r.dbf'
    注意: 
    oracle startup启动数据库查询启动文件的顺序:
         1. spfile{SID}.ora文件 (为二进制文件不可以手动更改)
         2.  spfile.ora文件
         3.  init{SID}.ora文件 (可以更改)
         4.  pfile.ora文件
    设置为归档模式,命令如下:    
        SQL> archive log list; 
        SQL> shutdown immediate 
        SQL> startup mount 
        SQL> alter database archivelog; 
        SQL> archive log list; 
 

2.1.2           设置主数据库为force logging 模式

SQL> alter database force logging;

2.1.3           添加red log file

添加一个新的Standby Redologs组(注意组号不要与当前存在的Online Redologs组重复),并为该组指定一个成员
    SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 4 ('/u01/app/oracle/oradata/orcl/redo04.log') size 100M; 
    SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 5 ('/u01/app/oracle/oradata/orcl/redo05.log') size 100M; 
    SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 6 ('/u01/app/oracle/oradata/orcl/redo06.log') size 100M; 
    SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 7 ('/u01/app/oracle/oradata/orcl/redo07.log') size 100M;

2.1.4           创建备库的密码文件和控制文件

   SQL> alter database create standby controlfile as '/home/u01/control01.ctl';
        -- 说明: 判断一个数据库是Primary还是Standby,就是通过控制文件来判断的。
    拷贝/home/u01/product/10R2/db/dbs/orapw{SID} 至 /home/u01.
 

2.1.5           修改初始化参数文件

    SQL> create pfile='/home/u01/initorcl.ora' from spfile;
    在initorcl.ora 添加如下内容:
    *.DB_UNIQUE_NAME='PRIMARY'
    *.FAL_CLIENT='primary'
    *.FAL_SERVER='standby'
    *.log_archive_config='DG_CONFIG=(PRIMARY,STANDBY)'
    *.log_archive_dest_1='LOCATION=/home/ora_arch db_unique_name=PRIMARY'
    *.log_archive_dest_2='SERVICE=STANDBY DB_UNIQUE_NAME=STANDBY'
    *.log_archive_dest_state_1='ENABLE'
    *.log_archive_dest_state_2='ENABLE' 
    *.standby_archive_dest='/home/ora_arch'
    *.standby_file_management='AUTO'
     注意: 
        如果主库和备库的数据文件位置不同,还需要加如下2个参数:
        *.log_file_name_convert='/u02/oradata/orcl/','/u03/oradata/orcl/'
        *.db_file_name_convert='/u02/oradata/orcl/','/u03/oradata/orcl/'
     TNS设置:
    primary =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.21.6)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SID = oratest)
        )
      )

standby =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.21.7)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SID = oratest)
        )
      )
 
    用'/home/u01/init{SID}.ora' 这个pfile 启动数据库,并生成spfile。
    SQL> shutdown immediate
    Database closed.
    Database dismounted.
    ORACLE instance shut down.
    SQL> startup pfile='/home/u01/init{SID}.ora';
    ORACLE instance started.
    Total System Global Area 1090519040 bytes
    Fixed Size                  2020128 bytes
    Variable Size             301993184 bytes
    Database Buffers          771751936 bytes
    Redo Buffers               14753792 bytes
    SQL> create spfile from pfile='/home/u01/init{SID}.ora';
    File created.

2.1.6           修改listener.ora 和tnsnames.ora 文件

Listener.ora 文件: (本次不做修改, 启动时先从库. 关闭时先关闭主库)
    SID_LIST_LISTENER =
      (SID_LIST =
        (SID_DESC =
          (SID_NAME = PLSExtProc)
          (ORACLE_HOME = /home/u01/product/10R2/db)
          (PROGRAM = extproc)
        )
    (SID_DESC =
    (GLOBAL_DBNAME = orcl)
    (ORACLE_HOME = /home/u01/product/10R2/db)
           (SID_NAME = orctest
       )
      )
    LISTENER =
      (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
    )
  )
    注意:SID_LIST_LISTENER 配置的是静态注册,如果没有该参数,而且Data Guard 启动顺序又不正确,那么在主库可能会报 PING[ARC1]: Heartbeat failed to connect to standby 'orcl_st'. Error is 12514. 错误,导致归档无法完成。

    tnsnames.ora 文件
    primary =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.21.6)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SID = oratest)
        )
      )
    standby =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.21.7)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SID = oratest)
        )
      )

2.2 Standby 端配置

2.2.1        创建备库存放数据文件和后台跟踪目录

这个目录可以和主库相同,如果不同,就需要在主库的初始化文件中进行转换。 
   如: *.log_file_name_convert='/u02/oradata/orcl/','/u03/oradata/orcl/'
        *.db_file_name_convert='/u02/oradata/orcl/','/u03/oradata/orcl/'

2.2.2        将主库的密码文件,控制文件,数据文件,参数文件,日志文件copy到备库

说明一点,这个控制文件是我们自己创建的standby 控制文件。将copy过来的控制文件再复制三份就可以了。 
   主备的控制文件是不一样的。这里除了采用直接copy 文件之外,还可以采用Rman恢复来做。 直接copy 需要停数据库,如果采用RMAN 的话,就不需要停机了。 
     文件如下: 
      (初始安装oracle, 没有其他数据文件; 若对现网数据库做DG,需要拷贝相应的文件)
       control01.ctl  redo01.log  redo04.log  redo07.log    temp01.dbf
       control02.ctl  redo02.log  redo05.log  sysaux01.dbf  undotbs01.dbf
       control03.ctl  redo03.log  redo06.log  system01.dbf  users01.dbf

2.2.3        修改初始化参数文件

修改之后如下:
       *.log_archive_config='DG_CONFIG=(PRIMARY,STANDBY)'
       *.log_archive_dest_1='LOCATION=/home/ora_arch db_unique_name=STANDBY'
       *.log_archive_dest_2='SERVICE=PRIMARY DB_UNIQUE_NAME=PRIMARY'
       *.log_archive_dest_state_1='ENABLE'
       *.log_archive_dest_state_2='ENABLE' 
       *.fal_client='STANDBY'
       *.fal_server='PRIMARY'
       *.DB_UNIQUE_NAME='STANDBY'
       *.standby_archive_dest='/home/ora_arch'

2.2.4        配置Listener.ora和tnsnames.ora

如果不存在,就从主库上copy 过去。

2.2.5        在备库添加redo log file

       如果主库没有添加redo log file,可以先用copy 过来的初始化文件将数据库启动到mount 状态。在创建个spfile,最后添加redo log。
       SQL> startup mount pfile='/home/u01/init{SID}.ora'
       ORACLE instance started.
       SQL> create spfile from pfile='/home/u01/init{SID}.ora';
 
       添加一个新的Standby Redologs组(注意组号不要与当前存在的Online Redologs组重复),并为该组指定一个成员:
       SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 4 ('/home/u01/product/oradata/oratest/redo04.log') size 100M; 
       SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 5 ('/home/u01/product/oradata/oratest/redo05.log') size 100M; 
       SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 6 ('/home/u01/product/oradata/oratest/redo06.log') size 100M; 
       SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 7 ('/home/u01/product/oradata/oratest/redo07.log') size 100M; 
提示: 在主库上面已经添加了standby redologs 可以先用下面语句删除掉. 再重新添加
      alter database drop standby logfile group 4;
      查看配置情况: 
SELECT GROUP#,THREAD#,SEQUENCE#,ARCHIVED,STATUS FROM V$STANDBY_LOG;
        GROUP#    THREAD#  SEQUENCE# ARC STATUS
---------- ---------- ---------- --- ----------
         4          1          0 YES UNASSIGNED
         5          0          0 YES UNASSIGNED
         6          0          0 YES UNASSIGNED
         7          0          0 YES UNASSIGNED
      提示,由于从Primary数据库复制文件时并没有复制Online Redologs,因此物理Standby数据库在第一次启动REDO应用时,会在Alert文件中报Online Redo Logfile文件不存在,没有关系,物理Standby会自动重建这批文件,同时你也不用担心会丢失数据,Online Redologs中的数据会以归档文件的形式从Primary端接收。
       至此,Data Guard 的操作已经完成,下面来开始验证。

注意:  tns的primary和standby配置需要先通过测试. 保证通信无误后再启动双机服务.
        Data Guard 启动顺序:
        启动顺序:先standby ,后primary;
        关闭顺序:先primary 后standby;

2.3 验证Dataguard状态

在备库将实例启动到mount 状态:
    SQL> startup nomount;
    SQL> alter database mount standby database ; 
    SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; 
    SQL> alter database recover managed standby database disconnect from session; 
     //希望实时应用(MANAGED REAL TIME APPLY) 需要使用下面语句进行启动:
    SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE NODELAY USING CURRENT LOGFILE DISCONNECT FROM SESSION;
 
    在备库启动监听:
    $lsnrctl start
 
    在主库启动实例:
    SQL> startup;
 
    在主库启动监听:
    $lsnrctl start
 
    在主库验证归档目录是否有效:
    SQL> SELECT STATUS,DESTINATION, ERROR FROM V$ARCHIVE_DEST;
    如果有错误,要排查原因。
 
    SQL> alter system switch logfile;
    
    查看归档日志情况.
 
    SQL> archive log list; 
   
    主备查询结果一致,Data Guard 搭建结束。
 

3      主备切换

    由于目前数据库由3台服务器组成,因此做主备切换后,需要重新对GIS分析数据库做Stream同步。 下面主要介绍主从切换。
    Data  Guard主从数据库双向切换:
    A.准备工作
    (1)首先查询主库状态,确认可以做切换:
        SQL> select switchover_status from v$database;       
        SWITCHOVER_STATUS
        ------------------
        TO STANDBY
                
        SWITCHOVER_STATUS有三个状态: to standby、 sessions active、 not allowed(该状态下无法切换)
 
    (2)在从库上面确认所有的archive log 都已经apply:
        select sequence#,first_time,next_time,applied from v$archived_log;
    (3)在主库上switch  logfile:
        Alter system switch logfile;
    (4)观察从库上已经 apply所有archive log:
        select sequence#,first_time,next_time,applied from v$archived_log;

        查看是否仍然有连接
        select username,program  from v$session  where status='ACTIVE';

    B.切换:
    (1)将主库转变为可切换状态: 
        ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;
        --------此时会有日志切换,并传输到旧standby点。Standby端会自动cancel(查看alter{SId}.log日志。

    (2)standby    
        ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY; 
    (3)原primary
        SHUTDOWN IMMEDIATE;
        STARTUP NOMOUNT;
        alter database mount standby database;

(4)原primary
        alter system set log_archive_dest_state_2=defer scope=both;
    (5)原standby
        RECOVER MANAGED STANDBY DATABASE CANCEL-------系统已自动执行。(会报异常错误, 可忽略)
        shutdown immediate;
        startup
    (6)原standby( new primary)
        alter system set log_archive_dest_state_2=enable scope=both;
    (7)新的primary
        ALTER SYSTEM SWITCH LOGFILE; 
        查看archive log是否自动传输
    (8)原来的primary 新的standby
        RECOVER MANAGED STANDBY DATABASE disconnect; (清除原有日志信息)
    (9)新的primary
        ALTER SYSTEM SWITCH LOGFILE; 
    (10)新standby     
        archive log list; 查看
    经测试,系统双向切换成功,目前整套系统工作正常。

4      主库失败,启用备库(Failovers)

1. 查看是否有日志GAP,没有应用的日志: 
SQL> SELECT UNIQUE THREAD#, MAX(SEQUENCE#) OVER(PARTITION BY THREAD#) LAST FROM V$ARCHIVED_LOG; 
SQL> SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP; 
如果有,则拷贝过来并且注册 
SQL> ALTER DATABASE REGISTER PHYSICAL LOGFILE '路径'; 
重复查看直到没有应用的日志:

2. 然后停止应用归档:

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; Database altered.

3. 下面将STANDBY数据库切换为PRIMARY数据库: 
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH; 
或SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH FORCE; 
Database altered.

SQL> SELECT DATABASE_ROLE FROM V$DATABASE; 
DATABASE_ROLE 
---------------- 
PHYSICAL STANDBY

SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY; 
Database altered.

SQL> ALTER DATABASE OPEN; 或者 shutdown immediate+startup

Database altered.

检查数据库是否已经切换成功:

SQL> SELECT DATABASE_ROLE FROM V$DATABASE;

DATABASE_ROLE 
---------------- 
PRIMARY

至此,FAILOVER切换完成。这个时候应该马上对新的PRIMARY数据库进行备份。;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值