CentOS6.2 +Oracle 11gR2配置DataGuard物理Standby全过程

一、环境

    主库:

    OS:CentOS6.2 X86_64
    Database:Oracle 11gR2
    Hostname:sms01.domain.com
    IP:192.168.10.48
    DGIP:10.0.0.101
    ORACLE_SID=SMS
    ORACLE_BASE=/data/oracle/DB
    ORACLE_HOME=/data/oracle/DB/oracle

    备库:

    OS:CentOS6.2 X86_64
    Database:Oracle 11gR2
    Hostname:sms02.domain.com
    IP:192.168.10.50
    DGIP:10.0.0.102
    ORACLE_SID=SMS
    ORACLE_BASE=/data/oracle/DB
    ORACLE_HOME=/data/oracle/DB/oracle

二、安装Oracle软体

    只装数据库软件,不建库,具体安装过程,请参考:

    http://cncto.blog.51cto.com/235831/887977

    在主机和备机上的/etc/hosts中加入以下内容:

  
  
  
  
  1. 192.168.10.48   sms01.  domain.com   sms01 
  2. 192.168.10.50   sms02.domain.com sms02 
  3. 10.0.0.101  smsdg01.domain.com   smsdg01 
  4. 10.0.0.102  smsdg02.domain.com   smsdg02 

三、配置主库SMS01

    1、主库运行dbca创建数据库(安装过程中需要注意:先关掉flash recovery,启用archive,配置日志归档路径/data/SMS/archive_log/),数据库SID:SMS(如果主库已经安装就无需此步)

    2、用sqlplus登录数据库:

  
  
  
  
  1. [oracle@sms01 ~]$ sqlplus /nolog  
  2.  
  3. SQL*Plus: Release 11.2.0.1.0 Production on Sun Mar 18 18:01:11 2012  
  4.  
  5. Copyright (c) 1982, 2009, Oracle.  All rights reserved.  
  6.  
  7. SQL> conn / as sysdba  
  8. Connected.  
  9. SQL> 

     3、将主库设置为force logging模式

  
  
  
  
  1. SQL> ALTER DATABASE FORCE LOGGING; 
  2. database altered.

     4、创建一个密码文件,如果数据库是用dbca创建的则会在$ORACLE_HOME/dbs/下自动创建一个叫orapwSID的一个密码文件。否则可以用orapwd命令创建一个。

     5、配置Standby Redo Log。创建组数至少要比主库的online redo log组数多一个。

  
  
  
  
  1. SQL> select group#,bytes from v$log; 
  2.  
  3.     GROUP#  BYTES 
  4. ---------- ---------- 
  5.      1   52428800 
  6.      2   52428800 
  7.      3   52428800 

        至少再创建4组Standby Redo Log:

  
  
  
  
  1. SQL>ALTER DATABASE ADD STANDBY LOGFILE GROUP 4 ('/data/SMS/DB/SMS/stdbyredo01.log'SIZE 52428800; 
  2. Database altered. 
  3. SQL>ALTER DATABASE ADD STANDBY LOGFILE GROUP 5 ('/data/SMS/DB/SMS/stdbyredo02.log'SIZE 52428800; 
  4. Database altered. 
  5. SQL>ALTER DATABASE ADD STANDBY LOGFILE GROUP 6 ('/data/SMS/DB/SMS/stdbyredo03.log'SIZE 52428800; 
  6. Database altered. 
  7. SQL>ALTER DATABASE ADD STANDBY LOGFILE GROUP 7 ('/data/SMS/DB/SMS/stdbyredo04.log'SIZE 52428800; 
  8. Database altered. 

        验证创建结果:

  
  
  
  
  1. SQL> select group#,thread#,sequence#,archived,status from V$standby_log; 
  2.  
  3.     GROUP#    THREAD#  SEQUENCE# ARC STATUS 
  4. ---------- ---------- ---------- --- ---------- 
  5.      4      0          0 YES UNASSIGNED 
  6.      5      0          0 YES UNASSIGNED 
  7.      6      0          0 YES UNASSIGNED 
  8.      7      0          0 YES UNASSIGNED 

       $$删除日志组命令:

  
  
  
  
  1. SQL> alter database drop standby logfile group 4; 

       $$给指定组添加成员命令:

  
  
  
  
  1. SQL> ALTER DATABASE ADD STANDBY LOGFILE MEMBER '/data/SMS/DB/SMS/stdbyredo04_1.log' TO GROUP 7; 

       $$删除组中成员命令:

  
  
  
  
  1. SQL> ALTER DATABASE DROP STANDBY LOGFILE MEMBER '/data/SMS/DB/SMS/stdbyredo04_1.log'
  2. Database altered. 
  3. SQL> host rm -f /data/SMS/DB/SMS/stdbyredo04_1.log 

     6、检查数据库归档状态

  
  
  
  
  1. SQL> archive log list; 
  2. Database log mode          Archive Mode 
  3. Automatic archival         Enabled 
  4. Archive destination        /data/SMS/archive_log/ 
  5. Oldest online log sequence     5 
  6. Next log sequence to archive   7 
  7. Current log sequence           7 

        如果不处于归档状态则执行:

  
  
  
  
  1. SQL> SHUTDOWN IMMEDIATE; 
  2. SQL> STARTUP MOUNT; 
  3. SQL> ALTER DATABASE ARCHIVELOG; 
  4. SQL> ALTER DATABASE OPEN

      7、创建备库的控制文件(创建后数据库不能做结构性的改动)

  
  
  
  
  1. SQL> alter database create standby controlfile as '/data/SMS/DB/SMS/stdby.ctl'

      8、创建pfile以便修改配置参数

  
  
  
  
  1. SQL> create pfile='/data/SMS/DB/SMS/pfile' from spfile; 
  2. File created. 

      9、关掉数据库编辑pfile

  
  
  
  
  1. SQL>shutdown immediate; 

      10、$vim /data/SMS/DB/SMS/pfile

  
  
  
  
  1. ##添加以下内容
  2. DB_UNIQUE_NAME=sms01 
  3. LOG_ARCHIVE_CONFIG='DG_CONFIG=(sms01,sms02)' 
  4. LOG_ARCHIVE_DEST_2
  5. 'SERVICE=sms02 LGWR ASYNC 
  6.  VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) 
  7.  DB_UNIQUE_NAME=sms02
  8. LOG_ARCHIVE_DEST_STATE_1=ENABLE 
  9. LOG_ARCHIVE_DEST_STATE_2=ENABLE 
  10. LOG_ARCHIVE_MAX_PROCESSES=30 
  11. FAL_SERVER=sms02 
  12. FAL_CLIENT=sms01 
  13. DB_FILE_NAME_CONVERT='sms01','sms02' 
  14. STANDBY_FILE_MANAGEMENT=AUTO 

      11、进入sqlplus创建pfile(NOMOUNT状态)

  
  
  
  
  1. SQL> create spfile from pfile='/data/SMS/DB/SMS/pfile'
  2. File created. 

      12、利用netca工具创建tnsnames.ora和listener.ora,也可手动创建,内容如下:

          $cat /data/oracle/DB/oracle/network/admin/listener.ora

  
  
  
  
  1. LISTENER = 
  2.   (DESCRIPTION_LIST = 
  3.     (DESCRIPTION = 
  4.       (ADDRESS = (PROTOCOL = TCP)(HOST = sms01.domain.com)(PORT = 1521)) 
  5.     ) 
  6.   ) 
  7.  
  8. ADR_BASE_LISTENER = /data/oracle/DB 
  9.  
  10. SID_LIST_LISTENER =
  11. (SID_LIST =
  12. (SID_DESC =
  13. (SID_NAME = SMS)
  14. (ORACLE_HOME = /data/oracle/DB/oracle)
  15. (PROGRAM = extproc)
  16. )
  17. (SID_DESC =
  18. (GLOBAL_DBNAME = SMS.DH)
  19. (SID_NAME = SMS)
  20. (ORACLE_HOME = /data/oracle/DB/oracle)
  21. )
  22. )

          $cat /data/oracle/DB/oracle/network/admin/tnsnames.ora

 

  
  
  
  
  1. SMS = 
  2.   (DESCRIPTION = 
  3.     (ADDRESS = (PROTOCOL = TCP)(HOST = sms01.domain.com)(PORT = 1521)) 
  4.     (CONNECT_DATA = 
  5.       (SERVER = DEDICATED
  6.       (SERVICE_NAME = SMS.DH) 
  7.     ) 
  8.   ) 
  9. sms01 = 
  10.   (DESCRIPTION = 
  11.     (ADDRESS = (PROTOCOL = TCP)(HOST = smsdg01.domain.com)(PORT = 1521)) 
  12.     (CONNECT_DATA = 
  13.       (SERVER = DEDICATED
  14.       (SERVICE_NAME = SMS.DH) 
  15.     ) 
  16.   ) 
  17. sms02 = 
  18.   (DESCRIPTION = 
  19.     (ADDRESS = (PROTOCOL = TCP)(HOST = smsdg02.domain.com)(PORT = 1521)) 
  20.     (CONNECT_DATA = 
  21.       (SERVER = DEDICATED
  22.       (SERVICE_NAME = SMS.DH) 
  23.     ) 
  24.   ) 

      13、复制备份文件到备库(注意检查复制过去的文件的属主及群组)

          要复制的清单:

          归档日志目录/admin目录/数据库存储目录(包括数据文件,控制文件,redo日志,standby redo日志等)/监听文件/orapwSID密码文件,详细如下:

          $scp /data/SMS [email protected]:/data/     #本案例中archive_log/数据库存储目录,都在此处。
          $scp -r /data/oracle/DB/admin [email protected]:/data/oracle/DB/               #admin目录
          $cd /data/oracle/DB/oracle/network/admin/
          $scp listener.ora tnsnames.ora [email protected]:/data/oracle/DB/oracle/network/admin/ 
          $scp /data/oracle/DB/oracle/dbs/orapwSMS [email protected]:/data/oracle/DB/oracle/dbs/

四、配置备库SMS02

 

       1、修改相关参数
          $cd /data/SMS/DB/SMS
          $rm -rf control0*
          $cp stdby.ctl control01.ctl
          $cp stdby.ctl control02.ctl
          $cp stdby.ctl control03.ctl
       
       2、修改pfile,添加以下内容(注意划线处与主库的不同):
  
  
  
  
  1. DB_UNIQUE_NAME=sms02 
  2. LOG_ARCHIVE_CONFIG='DG_CONFIG=(sms01,sms02)' 
  3. LOG_ARCHIVE_DEST_2= 
  4. 'SERVICE=sms01 LGWR ASYNC 
  5.  VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) 
  6.  DB_UNIQUE_NAME=sms01
  7. LOG_ARCHIVE_DEST_STATE_1=ENABLE 
  8. LOG_ARCHIVE_DEST_STATE_2=ENABLE 
  9. LOG_ARCHIVE_MAX_PROCESSES=30 
  10. FAL_SERVER=sms01 
  11. FAL_CLIENT=sms02 
  12. DB_FILE_NAME_CONVERT='sms01','sms02' 
  13. STANDBY_FILE_MANAGEMENT=AUTO 
       3、修改listener.ora和tnsnames.ora
          $cd /data/oracle/DB/oracle/network/admin/
          $vim listener.ora
          将sms01改为sms02保存退出
           $cd /data/oracle/DB/oracle/network/admin/
          $vim tnsnames.ora
          将SMS模块中的sms01改为sms02保存退出
 
       4、进入sqlplus(NOMOUNT)
  
  
  
  
  1. [oracle@sms02 ~]$ sqlplus /nolog 
  2.  
  3. SQL*Plus: Release 11.2.0.1.0 Production on Wed Jun 6 11:17:31 2012 
  4.  
  5. Copyright (c) 1982, 2009, Oracle.  All rights reserved. 
  6.  
  7. SQL> conn / as sysdba; 
  8. Connected to an idle instance. 
  9. SQL> create spfile from pfile='/data/SMS/DB/SMS/pfile'
  10.  
  11. File created. 
       5、测试oracle tnsping是否畅通
首先启动监听服务(分别在主机和备机上进行)
$ lsnrctl stop
$ lsnrctl start

分别在主机和备机上运行下面命令来测试
$ tnsping sms01
$ tnsping sms02

五、DG测试

       1、正常启动主库
  
  
  
  
  1. $sqlplus / as sysdba; 
  2. SQL>startup 
       2、启动备库 
  
  
  
  
  1. $ sqlplus /nolog 
  2. SQL> conn / as sysdba; 
  3. SQL> startup mount 
  4. SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION; 

          备注:以上是挂载数据库,并启用redo应用,此为物理standbyredo应用模式 

  
  
  
  
  1. SQL> startup mount 
  2. SQL> alter database open read only 
  3. SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION; 
           备注:以上为oracle 11g的新特性,在物理standbyread-only模式下启用redo应用,"USING CURRENT LOGFILE"代表实时redo应用,表明在最大保护及最大高可用模式下主库提交事务(commit)后,实时写入主库及备库, finish字句:DISCONNECT FROM SESSION不加此项,命令将一直停留到手动取消为止。

       3、 在主库上做一次日志切换

  
  
  
  
  1. SQL>ALTER SYSTEM SWITCH LOGFILE; 

           分别在主库和备库上做切换前后的下列查询,检查归档日志从主库传送到备库的情况: 

  
  
  
  
  1. SQL> SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG  ORDER BY SEQUENCE#; 
  2. 备注:这个可以结合以下的日志动态显示对比查看:
  3. $tail -f /data/oracle/DB/diag/rdbms/sms01/SMS/trace/alert_SMS.log

       4、在主库上建表插入数据并在备库查询:

  
  
  
  
  1. SQL>create table smstest(id integer,name char(10)); 
  2. SQL>insert into smstest values(1,'sms01'); 
  3. SQL>commit
  4. ##如果standby模式为read-only模式下的实时redo应用模式,在主库commit后,在备库直接查询即可:
  5. SQL>select * from smstest; 

          如果Standby模式为redo应用模式,需做如下操作后才可查询:

  
  
  
  
  1. ##测试时,需要在主库上做一次日志归档,将日志传送给standby库:
  2. SQL>ALTER SYSTEM ARCHIVE LOG CURRENT
  3. ##在备库上取消掉redo应用,因为在redo应用模式下不能打开数据库:
  4. SQL>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; 
  5. SQL>ALTER DATABASE OPEN
  6. SQL>SELECT * FROM smstest; 

          测试成功!

  
  
  
  
  1. ##再次切换为备库的redo apply状态(只限redo应用模式)
  2. SQL>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION; 

六、主备库互相切换

七、维护

     1、开机顺序,先备库的listener再启动备库。再启动主库的listener,再启动主库。
     2、关机顺序,先关闭主库,再关闭备库

     3、实时同步日志查看:
        $tail -f /data/oracle/DB/diag/rdbms/sms01/SMS/trace/alert_SMS.log
     4、standby上检查应用率和活动率(Ps)
  
  
  
  
  1. SQL>select to_char(start_time,'dd-mon-rr hh24:mi:ss') start_time,item,sofar from V$recovery_progress where item in ('Active Apply Rate''Average Apply Rate','Redo Applied'); 
        以上结果: Redo Applied 值以MB衡量,而Active Apply RateAverage Apply RateKB/s计算。
参考:三思笔记及一位不知名大侠文档!        

 

本文出自 “鼠标爱上键盘” 博客,转载请与作者联系!

你可能感兴趣的:(centos,centos6,dataguard,DG配置)