您的位置:首页 > 数据库 > Oracle

Oracle10g物理DG详细配置方法及步骤

2014-04-16 12:07 288 查看
--测试环境:

    OS:Redhat linux(64)

    Primary:

    IP:192.168.94.198

    SID:dgdb1

    Hostname:dg1

    DB_UNIQUE_NAME:dgdb1

    Database:10.2.0.1(64)

 

    Standby:

    IP:192.168.94.199

    SID:dgdb1

    Hostname:dg2

    DB_UNIQUE_NAME:dgdb1_s

    Database:10.2.0.1(64)

--实施DG前的准备工作

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

       --开启数据库logging

          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;

   --创建相应目录(根据具体情况,primary和standby端要一致)

       --Standby:

          mkdir –p /export/home/oracle/product/10.2.0/oradata/dgdb1

          mkdir –p /export/home/oracle/product/10.2.0/admin/dgdb1/adump

          mkdir –p /export/home/oracle/product/10.2.0/admin/dgdb1/bdump

          mkdir –p /export/home/oracle/product/10.2.0/admin/dgdb1/cdump

          mkdir –p /export/home/oracle/product/10.2.0/admin/dgdb1/udump

          mkdir –p /export/home/oracle/product/10.2.0/admin/dgdb1/dpdump

          mkdir –p /export/home/oracle/product/10.2.0/admin/dgdb1/pfile 

          mkdir –p /export/home/oracle/archive

          mkdir -p /export/home/oracle/bak

       --primary:

          mkdir –p /export/home/oracle/archive

          mkdir -p /export/home/oracle/bak

--修改或新增listener.ora 和tnsnames.ora(或者用GUI工具配置)

    --注意:listener.ora 中新增的部分在括号内而非括号外

    --primary端:

--listener.ora:

SID_LIST_LISTENER =

  (SID_LIST =

    (SID_DESC =

      (SID_NAME = PLSExtProc)

      (ORACLE_HOME = /export/home/oracle/product/10.2.0)

      (PROGRAM = extproc)

    )

    (SID_DESC =

      (GLOBAL_DBNAME = dgdb1)

      (ORACLE_HOME = /export/home/oracle/product/10.2.0)

      (SID_NAME = dgdb1)  

    )

  )

LISTENER =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

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

      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))

    )

  )

--tnsnames.ora

dgdb1 =

  (DESCRIPTION =

    (ADDRESS_LIST =

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

    )

    (CONNECT_DATA =

(SERVER = DEDICATED) 

        (SERVICE_NAME = dgdb1)

    )

  )

  

dgdb1_s =

  (DESCRIPTION =

    (ADDRESS_LIST =

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

    )

    (CONNECT_DATA =

          (SERVER = DEDICATED) 

        (SERVICE_NAME = dgdb1)

    )

  )

   --standby端:

      --listener.ora:

    SID_LIST_LISTENER =

      (SID_LIST =

       (SID_DESC =

        (SID_NAME = PLSExtProc)

        (ORACLE_HOME = /export/home/oracle/product/10.2.0)

        (PROGRAM = extproc)

        )

        (SID_DESC =

        (GLOBAL_DBNAME = dgdb1)

        (ORACLE_HOME = /export/home/oracle/product/10.2.0)

        (SID_NAME = dgdb1)  

        )

       )

     LISTENER =

      (DESCRIPTION_LIST =

      (DESCRIPTION =

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

        (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))

      )

      )

    --tnsnames.ora

   dgdb1 =

   (DESCRIPTION =

    (ADDRESS_LIST =

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

     )

     (CONNECT_DATA =

       (SERVER = DEDICATED) 

       (SERVICE_NAME = dgdb1)

      )

     )

  dgdb1_s =

   (DESCRIPTION =

    (ADDRESS_LIST =

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

    )

    (CONNECT_DATA =

        (SERVER = DEDICATED) 

        (SERVICE_NAME = dgdb1)

     )

   )

--具体实施DG的步骤:

   --在primary上生成pfile,并修改添加相应参数,生成standby需要的pfile

       --primary端:

         oracle$>sqlplus / as sysdba

         SQL> CREATE PFILE='/export/home/oracle/standby.ora' FROM SPFILE;

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

         *.db_unique_name='dgdb_s'

         *.fal_server='dgdb1'     

         *.fal_client='dgdb_s'

         *.LOG_ARCHIVE_CONFIG='DG_CONFIG=(dgdb1,dgdb_s)'

         *.log_archive_dest_1='LOCATION=/export/home/oracle/archive VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=dgdb_s'

         *.LOG_ARCHIVE_DEST_2='SERVICE=dgdb1 LGWR ASYNC=40960 VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=dgdb1'

         *.LOG_ARCHIVE_DEST_STATE_1='ENABLE' 

         *.LOG_ARCHIVE_DEST_STATE_2='ENABLE'

         *.standby_archive_dest='/export/home/oracle/archive'

         *.standby_file_management='AUTO'

    --修改完后拷贝到standby端

      Oracle$Scp /export/home/oracle/standby.ora  oracle@192.168.94.199:/export/home/oracle/

    --在standby端使用pfile启动实例

--在primary端用命令创建数据库密码文件,并接拷贝至standby端相同路径下(如已存在,可直接拷贝)

  --primary端手工创建数据库密码文件

 Oracle$orapwd file=... password=...

  --primary端拷贝数据库密码文件至standby端

 Oracle$Scp /export/home/oracle/product/10.2.0/database/PWDdgdb1.ora oracle@192.168.94.199:/export/home/oracle/product/10.2.0/database

--standby端:

Oracle$set oracle_sid=dgdb1

Oracle$sqlplus / as sysdba

SQL> startup nomount pfile=’/export/home/oracle/standby.ora’

SQL> CREATE SPFILE FROM PFILE='/export/home/oracle/standby.ora';

    --在primary端修改相应参数

      --primary端:

        Oracle$sqlplus / as sysdba

        SQL> ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT = AUTO scope=both;

        SQL> ALTER SYSTEM SET fal_server='dgdb1_s' scope=both;

        SQL> ALTER SYSTEM SET fal_client='dgdb1' scope=both;

        SQL> ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(dgdb1_s,dgdb1)' scope=both;

        SQL> ALTER SYSTEM SET log_archive_dest_1='LOCATION=/export/home/oracle/archive VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=dgdb1' scope=both;

        SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=dgdb1_s LGWR ASYNC=40960 VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=dgdb1_s' scope=both;

        SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_1='ENABLE' scope=both;

        SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2='ENABLE' scope=both;

        SQL> ALTER SYSTEM SET standby_archive_dest='/export/home/oracle/archive' scope=both;

--在primary端开始使用rman备份数据库

  --primary端:

    Oracle$rman target /

    RMAN>backup full format='/u01/app/oracle/bak/ora10g_%d_%T_%s' database include current controlfile for standby plus archivelog format='/u01/app/oracle/bak/arch_%d_%T_%s';

  --备份完毕后,把相应备份文件拷贝到丛库的相应目录(目录必须一致)

    Oracle$Scp /export/home/oracle/bak/* oracle@192.168.94.199:/export/home/oracle/bak/

--使用duplicate 还原standby数据库

  --primary端:

    Oracle$rman target / auxiliary sys/system@dgdb1_s

    RMAN> duplicate target database for standby nofilenamecheck dorecover;

--收尾工作及开启dg

  --standby端建立standby log(至少比redo多一组):

    Oracle$sqlplus / as sysdba

    SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 4 ('/export/home/oracle/product/10.2.0/oradata/dgdb1/redo04.log') size 50M;

    SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 5 ('/export/home/oracle/product/10.2.0/oradata/dgdb1/redo05.log') size 50M;

    SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 6 ('/export/home/oracle/product/10.2.0/oradata/dgdb1/redo06.log') size 50M;

    SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 7 ('/export/home/oracle/product/10.2.0/oradata/dgdb1/redo07.log') size 50M;

  --开启服务(standby端):

    SQL> alter database recover managed standby database disconnect from session;

--测试服务是否正常 

  --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#;

--实现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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐