ITPub博客

首页 > 数据库 > Oracle > oracle DG案例测试

oracle DG案例测试

原创 Oracle 作者:xiaowuhexiaoli 时间:2021-12-27 10:41:23 0 删除 编辑

测试环境:
    OS:HPUNIX 11.11
    Primary:
    IP:10.134.196.123
    SID:orapri
    Hostname:MPEDB
    DB_UNIQUE_NAME:orapri
    DBNAME=oradata
    Database:10.2.0.5(64)
 
    OS:HPUNIX 11.11
    Primary:
    IP:10.134.196.124
    SID:orapri
    Hostname:MSEDB
    DB_UNIQUE_NAME:orastd
    DBNAME=oradata
    Database:10.2.0.5(64)
 

实施DG前的准备工作
装好备库数据库
建实例:(windows)
oradim -new -sid 实例名
linux 直接export=实例名就OK

开启数据库logging及数据库archivelog
开启数据库logging

select FORCE_LOGGING from v$database;

SQL> alter database force logging;

检查数据库是否开启archivelog

SQL> archive log list;
如果数据库未开启archivelog,则要开启archivelog

SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database archivelog;

检查数据库是否开启archivelog

SQL> archive log list;

 
standby端:

 export ORACLE_SID=orapri

修改或新增listener.ora 和tnsnames.ora(或者用GUI工具配置)
注意:listener.ora 中新增的部分在括号内而非括号外
primary端:
listener.ora:

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = /u01/oracle/production/10.2)
      (PROGRAM = extproc)
      )
         (SID_DESC =
               (SID_NAME = orapri)
                     (ORACLE_HOME = /u01/oracle/production/10.2)
         )
   )

LISTENER =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.134.196.123)(PORT = 1521))
    )


tnsnames.ora

orapri =
  (DESCRIPTION =
   (ADDRESS_LIST =
   (ADDRESS = (PROTOCOL = TCP)(HOST = 10.134.196.123)(PORT = 1521))
  )
 (CONNECT_DATA =
 (SERVER = DEDICATED)
 (SERVICE_NAME = orapri)
  )
 )

orastd =
   (DESCRIPTION =
  (ADDRESS_LIST =
  (ADDRESS = (PROTOCOL = TCP)(HOST = 10.134.196.124)(PORT = 1521))
 )
 (CONNECT_DATA =
  (SERVER = DEDICATED)
   (SERVICE_NAME = orastd)
 )
 )

standby端:
listener.ora:
  SID_LIST_LISTENER =
      (SID_LIST =
          (SID_DESC =
              (SID_NAME = PLSExtProc)
              (ORACLE_HOME = /u01/oracle/production/10.2)
              (PROGRAM = extproc)
          )
         (SID_DESC =
             (GLOBAL_DBNAME = orapri)
             (ORACLE_HOME = /u01/oracle/production/10.2)
             (SID_NAME = orapri)
         )
     )

LISTENER =
  (DESCRIPTION_LIST =
          (DESCRIPTION =
               (ADDRESS = (PROTOCOL = TCP)(HOST = MSEDB)(PORT = 1521))
               (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
            )
 )

tnsnames.ora
  orapri =
  (DESCRIPTION =
   (ADDRESS_LIST =
   (ADDRESS = (PROTOCOL = TCP)(HOST = 10.134.196.123)(PORT = 1521))
  )
 (CONNECT_DATA =
 (SERVER = DEDICATED)
 (SERVICE_NAME = orapri)
  )
 )

orastd =
   (DESCRIPTION =
  (ADDRESS_LIST =
  (ADDRESS = (PROTOCOL = TCP)(HOST = 10.134.196.124)(PORT = 1521))
 )
 (CONNECT_DATA =
  (SERVER = DEDICATED)
   (SERVICE_NAME = orapri)
 )
 )


具体实施DG的步骤:
在primary端修改相应参数
primary端:
    
Oracle$sqlplus / as sysdba

 ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT='AUTO' scope=both;
 ALTER SYSTEM SET fal_server='orastd(網絡服務名)' scope=both;
 ALTER SYSTEM SET fal_client='orapri(網絡服務名)' scope=both;
 ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(orapri,orastd(是指數據庫的DB_UNIQUE_NAME))' scope=both;
 ALTER SYSTEM SET log_archive_dest_1='LOCATION=/data1/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orapri' scope=both;
 ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=orastd(網絡服務名) LGWR ASYNC=40960  VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orastd' scope=both;
 ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_1='ENABLE' scope=both;
 ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2='ENABLE' scope=both;
 #ALTER SYSTEM SET standby_archive_dest='/data1/stdlog' scope=both;(11g不需要)

    在primary上生成pfile,并修改添加相应参数,生成standby需要的pfile
        primary端:
          oracle$>sqlplus / as sysdba
          SQL> CREATE PFILE='/export/home/oracle/standby.ora' FROM SPFILE;

    將生成的pfile拷贝到standby端

scp /u01/oracle/production/10.2/dbs/file.ora  oracle@10.134.196.124:/u01/oracle/production/10.2/dbs/file.ora  

    對照编辑生成的pfile文件('/export/home/oracle/standby.ora'),更改添加如下参数:

*.db_unique_name='orastd'
*.fal_server='orapri'    
*.fal_client='orastd'
*.log_archive_config='DG_CONFIG=(orapri,orastd)'
*.log_archive_dest_1='LOCATION=/data1/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orastd'
*.log_archive_dest_2='SERVICE=orapri LGWR ASYNC=40960 VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orapri'
*.LOG_ARCHIVE_DEST_STATE_1='ENABLE'
*.LOG_ARCHIVE_DEST_STATE_2='ENABLE'
*.standby_archive_dest='/data1/archstd' (備幾端路徑)
*.standby_file_management='AUTO'  
 

创建pfile中相应目录(根据具体情况,primary和standby端要一致)
創建數據文件需要的相應目錄(在主機數據庫中查看dba_data_files)


主機備份控制文件成standby類型,備份完copy到備機器
alter database create standby controlfile as '/data1/rmanbk/control01.ctl' reuse;



在primary端用命令创建数据库密码文件,并接拷贝至standby端相同路径下(如已存在,可直接拷贝)
primary端手工创建数据库密码文件
orapwd file='$ORACLE_HOME/dbs/orapw$ORACLE_SID' password=system entries=10 force=y
primary端拷贝数据库密码文件至standby端
scp $ORACLE_HOME/dbs/orapw$ORACLE_SID oracle@10.134.196.124:$ORACLE_HOME/dbs



在standby端使用pfile启动实例
 oradim -new -sid orapri----windows上執行
 export ORACLE_SID=orapri--linux執行
 sqlplus / as sysdba或sqlplus sys/Foxconn99 as sysdba
 sqlplus / as sysdba
 startup nomount pfile='$ORACLE_HOME/dbs/file.ora';
 CREATE SPFILE FROM PFILE='$ORACLE_HOME/dbs/file.ora';




在primary端开始使用rman备份数据库
  primary端:
    rman target /
    backup full format='/data1/rmanbk/ora10g_%d_%T_%s' database include current controlfile for standby plus archivelog format='/data1/rmanbk/arch_%d_%T_%s';
 

备份完毕后,把相应备份文件拷贝到丛库的相应目录(目录必须一致)
scp /data1/rmanbk/* oracle@10.134.196.124:/data1/rmanbk/
 

 还原standby数据库
primary端:
rman target / auxiliary sys/system@orastd
duplicate target database for standby nofilenamecheck dorecover;(此法一般不用)
catalog start with '備份文件':   #註冊備份(一般用這個)
restore database;
 

(這一步一般不做)
//**********
收尾工作及开启dg
standby端建立standby log(至少比redo多一组):
sqlplus / as sysdba

ALTER DATABASE ADD STANDBY LOGFILE GROUP 4 ('/data1/stdlog/stdredo01.log') size 50M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 5 ('/data1/stdlog/stdredo02.log') size 50M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 6 ('/data1/stdlog/stdredo03.log') size 50M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 7 ('/data1/stdlog/stdredo04.log') size 50M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 8 ('/data1/stdlog/stdredo05.log') size 50M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 9 ('/data1/stdlog/stdredo06.log') size 50M;
***************//

(備庫應處於mount狀態)

开启服务(standby端):
 SQL> alter database recover managed standby database disconnect from session;
關閉服务(standby端):
SQL> alter database recover managed standby database cancel;


测试服务是否正常

  standby端(看归档日志号):

    SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;

  primary端(强制一个日志切换):

    SQL> alter system switch logfile;

  standby端(看归档日志号):

    SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;

  standby端(看应用归档日志的号):

    SQL> SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;

查看數據庫角色:
select database_role from v$database;


查錯:select  status,target,archiver,error,process from v$archive_dest;
 

实现primary、standby的切换:

  primary端:
    SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;

  primary端(上一步的结果必须是”TO STANDBY”才可以)
    SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY;
    
OR(上一步结果为”SESSIONS ACTIVE”,且解决不掉)
    SQL>ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL  STANDBY  WITH  SESSION  SHUTDOWN;

  Primary端:

    SQL> SHUTDOWN IMMEDIATE;
    SQL> STARTUP MOUNT;

  standby端:

    SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;

  standby端(上一步的结果必须是”TO STANDBY”才可以):
    SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
 
  OR(上一步结果为”SESSIONS ACTIVE”,且解决不掉)
    SQL>ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;
  打开新的primary:

    SQL>ALTER DATABASE OPEN;

    OR(最后一次启动后以read only模式打开过)

    SQL> SHUTDOWN IMMEDIATE;
    SQL> STARTUP;
 

在新standby上重新启动log apply services(如果必要):

  SQL>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE;
  OR(后台模式)

  SQL>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;
  OR(实时应用redo)

  SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE;

  新primary端(开始发送redo 数据到新standby端):
    SQL> ALTER SYSTEM SWITCH LOGFILE;


DG不能正常传archivelog 可能的原因及解决办法:
1,服务没开,重启服务;
2,主库密码变更,重新将主库密码文件copy到备库,重启备库;
3,监听问题


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

下一篇: oracle 9i 搭建DG
请登录后发表评论 登录
全部评论

注册时间:2020-07-06

  • 博文量
    14
  • 访问量
    14544