oracle10g DG 的搭建

此次搭建过程主要参考:http://www.oracle-base.com/articles/11g/data-guard-setup-11gr2.php

                                            http://www.5ienet.com/note/html/dg/index.shtml

前提:

  • 两台已经装有oracle的linux机器。本次使用的是centos3_x86
  • 主库上装有oracle服务及添加了一个名ora10g的实例
  • 从库仅安装了oracle服务
  • 为了方便,主从库oracle的安装路径完全一致。主库上的ORACLE_HOME=/u01/app/oracle
详细步骤:

主库服务设置

  1. 归档日志
    ****检查主库的实例是否为归档状态
           SQL>SELECT log_mode FROM v$database;
           LOG_MODE         
           ------------------------
           NOARCHIVELOG
           SQL>

    ****如果是非归档状态,将其更换为归档状态
           SQL>SHUTDOWN IMMEDIATE;
           SQL>STARTUP MOUNT;
           SQL>ALTER DATABASE ARCHIVELOG;
           SQL>ALTER DATABASE OPEN;

    ****启动数据库的force logging
           SQL>ALTER DATABSE FORCE LOGGING;
  2. 初始化参数
    ****检查db_name和db_unique_name这两个参数,这次将这两个参数都设置为ora10g
           SQL>show parameter db_name;
           NAME                  TYPE                 VALUE
           ----------------        ---------------       ----------------
           db_name            string                  ora10g
           SQL>show parameter db_unique_name;
           NAME                                TYPE                 VALUE
           ----------------                      ---------------       ----------------
           db_unique_name            string                  ora10g

    ****主从库的db_name一致,可是db_unique_name不能相同,因为主从库的db-unique_name会在dg_config当作log_archive_config参数。这个例子里,将从库的db_unique_name设置为“ora10g_stby”。
           SQL>ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(ORA10G,ORA10G_STBY)';
    ****设置合适的远程归档日志路径。这个例子里,把flash_recover_area当作本地路径,或者你自己也可以指定一个特定的路径。指定SERVICE和DB_UNIQUE_NAME为了给从库路径做参考
           SQL>ALTER SYSTEM SET LOG_ARCHIVE_DEST_2=‘SERVICE=ora10g_stby NOAFFIRM ASYNC VALID=(ONLINE_LOGFILES,PRIMARY_ROLE)           DB_UNIQUE_NAME=ORA10G_STBY';
    SQL>ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE;

    ****LOG_ARCHIVE_FORMAT和LOG_ARCHIVE_MAX_PROCESSES参数要合理设置,REMOTE_LOGIN_PASSWORDFILE 要设置为EXCLUSIVE。
           SQL>ALTER SYSTEM SET LOG_ARCHIVE_FORMAT=‘%t_%s_%r.arc' SCOPE=SPFILE;
           SQL>ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=30;
           SQL>ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE SCOPE=SPFILE;

    ****除了之前的设置,还要确保主库和备库能互换角色。为了使互换角色能正常使用,需要设置如下参数。调整*_CONVERT参数用于解释主备库文件名和路径不同的地方。****
           SQL>ALTER SYSTEM SET FAL_SERVER=ORA10G_STBY;
           SQL>ALTER SYSTEM SET DB_FILE_NAME_CONVERT='ORA10G_STBY','ORA10G' SCOPE=SPFILE;
           SQL>ALTER SYSTEM SET LOG_FILE_NAME_CONVERT='ORA10G_STBY','ORA10G' SCOPE=SPFILE;
           SQL>ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO;

    ****记住,一些参数是不会立即生效的,所以需要重启数据库以确保他们能起作用。
  3. 服务设置
    ****主备库都需要“$ORACLE_HOME/network/admin/tnsnames.ora”文件。你可以用Network Configuration Utility(netca)或者手动创建。
    ****主库的tnsnames.ora
           # tnsnames.ora Network Configuration File: /u01/app/oracle//network/admin/tnsnames.ora
           # Generated by Oracle configuration tools.
           ORA10G_STBY =
             (DESCRIPTION =
               (ADDRESS_LIST =
                 (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.88.238)(PORT = 1521))
               )
                 (CONNECT_DATA =
                 (SERVICE_NAME = ora10g)
               )
             )
           ORA10G =
             (DESCRIPTION =
               (ADDRESS_LIST =
                 (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.88.185)(PORT = 1521))
               )
               (CONNECT_DATA =
                 (SERVICE_NAME = ORA10G)
               )
           )

    ****备库的tnsname.ora****
           # tnsnames.ora Network Configuration File: /u01/app/oracle//network/admin/tnsnames.ora
           # Generated by Oracle configuration tools.
           ORA10G =
             (DESCRIPTION =
               (ADDRESS_LIST =
                 (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.88.185)(PORT = 1521))
               )
               (CONNECT_DATA =
                 (SERVICE_NAME = ORA10G)
               )
             )
           ORA10G_STBY =
             (DESCRIPTION =
               (ADDRESS_LIST =
                 (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.88.238)(PORT = 1521))
               )
               (CONNECT_DATA =
                 (SERVICE_NAME = ora10g)
               )
             )

  4. 备份主库
    ****如果你使用duplicate模式去创建从库,则这一步是不必要的。基于备份的duplicate,或者手动恢复,都要备份主库。
           $ rman target = /
           RMAN> BACKUP DATABASE PLUS ARCHIVELOG;
  5. 生成从库的控制文件和pfile文件
    ****在主库同步如下命令生成备库的控制文件
           SQL>ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/tmp/ora10g_stby.ctl';
    ****由spfile文件生成备库的参数文件。
    SQL>CREATE PFILE='/tmp/iniora10g_stby.ora' FROM SPFILE;
    ****修改与备库有关的参数,因为备库是复制过来的,所以只需修改如下参数:
           *.db_unique_name='ORA10G_STBY'
           *.fal_server='ORA10G'
           *.log_archive_dest_2='SERVICE=ora10g ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ORA10G'

    (以上是原文翻译,不过在我实践的过程中,我的备库是值安装了oracle服务,并没有oracle实例。所以$ORACLE_HOME/admin下的某些路径会不存在,那么则需看清楚生成的iniora10g_stby.ora中存在哪些路径。如果文件中有,而备库机器实际上没有该路径的话,则需手动添加。如有不符合的路径,也许手动更改该路径或修改ora文件)
从库服务设置
  1. 拷贝文件
    ****在从库添加必要的路径
           $ mkdir -p /u01/app/oracle/oradata/ORA10G
           $ mkdir -p /u01/app/oracle/flash_recovery_area/ORA10G
           $ mkdir -p /u01/app/oracle/admin/ORA10G/adump

    ****将文件从主库拷贝到从库
           $ # Standby controlfile to all locations.
           $ scp oracle@192.168.88.185:/tmp/ora10g_stby.ctl /u01/app/oracle/oradata/ORA10G/control01.ctl
           $ cp /u01/app/oracle/oradata/ORA10G/control01.ctl /u01/app/oracle/flash_recovery_area/ORA10G/control02.ctl

           $ # Archivelogs and backups
           $ scp -r oracle@192.168.88.185:/u01/app/oracle/flash_recovery_area/ORA10G/archivelog /u01/app/oracle/flash_recovery_area/ORA10G
           $ scp -r oracle@192.168.88.185:/u01/app/oracle/flash_recovery_area/ORA10G/backupset /u01/app/oracle/flash_recovery_area/ORA10G

           $ # Parameter file.
           $ scp oracle@192.168.88.185:/tmp/initORA10G_stby.ora /tmp/initORA10G_stby.ora

           $ # Remote login password file.
           $ scp oracle@192.168.88.185:$ORACLE_HOME/dbs/orapwORA10G $ORACLE_HOME/dbs

  2. 启动listener(监听程序)
    ****主备库的listener如下:
    ****主库:
           # listener.ora Network Configuration File: /u01/app/oracle//network/admin/listener.ora
           # Generated by Oracle configuration tools.
           SID_LIST_LISTENER =
             (SID_LIST =
               (SID_DESC =
                (SID_NAME = PLSExtProc)
                 (ORACLE_HOME = /u01/app/oracle/)
                 (PROGRAM = extproc)
               )
               (SID_DESC =
                 (SID_NAME = ora10g)
                 (ORACLE_HOME = /u01/app/oracle/)
                 (PROGRAM = extproc)
               )
             )
           LISTENER =
             (DESCRIPTION_LIST =
               (DESCRIPTION =
                 (ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521))
                 (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
               )
             )

    ****备库:
           # listener.ora Network Configuration File: /u01/app/oracle//network/admin/listener.ora
           # Generated by Or
           SID_LIST_LISTENER =
             (SID_LIST =
               (SID_DESC =
                 (SID_NAME = PLSExtProc)
                 (ORACLE_HOME = /u01/app/oracle)
                 (PROGRAM = extproc)
               )
               (SID_DESC =
                 #(GLOBAL_DBNAME = ORA10G_STBY)
                 (ORACLE_HOME = /u01/app/oracle)
                 (SID_NAME = ora10g)
               )
             )
           LISTENER =
             (DESCRIPTION_LIST =
               (DESCRIPTION =
                 (ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521))
               )
               (DESCRIPTION =
                 (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
               )
             )
           ADR_BASE_LISTENER = /u01/app/oracle
           ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER = ON

    启动监听
           $lsnrctl start
  3. 恢复从库
    ****在备库通过修改了的pfile文件生成spfile
           $export ORACLE_SID=ora10g
           $sqlplus / as sysdba
           SQL>CREATE SPFILE FROM PFILE='/tmp/initora10g_stby.ora';

    ****恢复备份的文件
           $ export ORACLE_SID=ora10g
           $ rman target=/
           RMAN>STARTUP MOUNT;
           RMAN>RESTORE DATABASE;
  4. 添加redo日志
    ****添加备库的online redo logs。
           SQL>ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=MANUAL;
           ALTER DATABASE ADD LOGFILE ('/u01/app/oracle/oradata/ora10g/online_redo01.log') SIZE 50M;
           ALTER DATABASE ADD LOGFILE ('/u01/app/oracle/oradata/ora10g/online_redo02.log') SIZE 50M;
           ALTER DATABASE ADD LOGFILE ('/u01/app/oracle/oradata/ora10g/online_redo03.log') SIZE 50M;
           ALTER DATABASE ADD LOGFILE ('/u01/app/oracle/oradata/ora10g/online_redo04.log') SIZE 50M;

    ****除了online redo logs之外,你还要生成在主备库两边都生成standby redo logs为了使它们能够进行角色转换。备库的redo logs至少和online redo log一样大
           ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/oradata/ora10g/standby_redo01.log') SIZE 50M;
           ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/oradata/ora10g/standby_redo02.log') SIZE 50M;
           ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/oradata/ora10g/standby_redo03.log') SIZE 50M;
           ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/oradata/ora10g/standby_redo04.log') SIZE 50M;

设置DG的同步
  1. 在备库启动同步设置
           SQL>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
  2. 如果你需要取消同步,用如下命令
           SQL>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
  3. 如果你希望的话,可以自己设置同步时间。
           SQL>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCLE;
           SQL>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DELAY 30 DISCONNECT FROM SESSION;

           SQL>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCLE;
           SQL>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE NODELAY DISCONNECT FROM SESSION;
测试日志的传输
  1. 在主库,检查最后的归档日志(archived redo log)和强制切换日志
           SQL>ALTER SESSION SET nls_date_format='DD-MON-YYYY HH24:MI:SS';
           SQL>SELECT sequence#,applied,deleted,name from v$archived_log;
           SQL>ALTER SYSTEM SWITCH LOGFILE;
  2. 在备库检查归档日志是否已经改变
           SQL>SELECT sequence#,applied,deleted,name from v$archived_log;
。。。。。。。DG搭建已告一段落,可以进行正常的同步了。后面的还未实践过,暂且编写这么多

主备库的启动关闭顺序
启动顺序:先standby,后primary
关闭顺序:先primary,后standby
启动实例:
SQL>startup nomount;
SQL>alter database mount stadby database;
SQL>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
SQL>alter database recover managed standby database disconnect from session
在备库启动监听 
$lsnrctl start
在主库启动实例
SQL>startup
在主库启动监听
$lsnrctl start

保护模式

主库从角色装换


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值