zoukankan      html  css  js  c++  java
  • DG搭建与配置

    一、准备环境
    1、两台服务器、一台正常运行oracle数据库的,一台装了软件没有启动数据库的(没有进行dbca)
    2、主库备库 修改环境变量,修改主机名,将主库备库的主机名都写入hosts文件
    二、开始搭建
    1.查看主库是否开启归档模式,查看是否开启强制日志(若没开启则开启)
    SYS@WWDB1> select log_mode,force_logging from v$database;
    SYS@WWDB1> alter database force logging;
    SYS@WWDB1> archive log list;
    SYS@WWDB1> show parameter db_recovery
    SYS@WWDB11> alter system switch logfile;
    2.创建STANDBY LOGFILE
    SYS@WWDB1>define editor=vim
    SYS@WWDB1>ed1
    alter database add standby logfile group 4 ('/u01/app/oracle/oradata/WWDB1/stlog01.log') size 100m;
    alter database add standby logfile group 5 ('/u01/app/oracle/oradata/WWDB1/stlog02.log') size 100m;
    alter database add standby logfile group 6 ('/u01/app/oracle/oradata/WWDB1/stlog03.log') size 100m;
    alter database add standby logfile group 7 ('/u01/app/oracle/oradata/WWDB1/stlog04.log') size 100m;
    SYS@WWDB1>@1
    3.创建参数文件
    SYS@WWDB1>create pfile from spfile;
    4.修改参数文件
    [oracle@oracle01 ~]$ cd /u01/app/oracle/product/11.2.4/dbhome_1/dbs/
    [oracle@oracle01 dbs]$ vi initWWDB1.ora
    在原有参数文件上添加 下列参数来自于官方文档
    DB_UNIQUE_NAME=WWDB1
    LOG_ARCHIVE_CONFIG='DG_CONFIG=(WWDB1,SBDB1)'
    LOG_ARCHIVE_DEST_1=
    'LOCATION=use_db_recovery_file_dest
    VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
    DB_UNIQUE_NAME=WWDB1'
    LOG_ARCHIVE_DEST_2=
    'SERVICE=SBDB1 lgwr ASYNC
    VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
    DB_UNIQUE_NAME=SBDB1'
    LOG_ARCHIVE_DEST_STATE_1=ENABLE
    LOG_ARCHIVE_DEST_STATE_2=ENABLE
    REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
    LOG_ARCHIVE_FORMAT=%t
    %s_%r.arc

    下边的在备库上才有用,在主库中先添加上scp到备库

    FAL_SERVER=SBDB1
    DB_FILE_NAME_CONVERT='SBDB1','WWDB1'
    LOG_FILE_NAME_CONVERT='SBDB1','WWDB1'
    STANDBY_FILE_MANAGEMENT=AUTO

    dg_broker_start=true
    5.修改监听文件
    [oracle@oracle01 admin]$ vi listener.ora
    添加静态监听
    SID_LIST_LISTENER=
    (SID_LIST=
    (SID_DESC=
    (GLOBAL_DBNAME=WWDB1)
    (ORACLE_HOME=/u01/app/oracle/product/11.2.4/dbhome_1)
    (SID_NAME=WWDB1))
    (SID_DESC=
    (GLOBAL_DBNAME=WWDB1_DGMGRL)
    (ORACLE_HOME=/u01/app/oracle/product/11.2.4/dbhome_1)
    (SID_NAME=WWDB1))
    (SID_DESC=
    (SID_NAME=plsextproc)
    (ORACLE_HOME=/u01/app/oracle/product/11.2.4/dbhome_1)
    (PROGRAM=extproc)))

    [oracle@oracle01 admin]$ vi tnsnames.ora

    添加如下内容

    SBDB1 =
    (DESCRIPTION =
    (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = oracle02)(PORT = 1521))
    )
    (CONNECT_DATA =
    (SERVICE_NAME = SBDB1)
    )
    )
    6.将监听文件、TNS文件、口令文件、参数文件

    重要的是口令文件跟参数文件文件名要改成备库的名称

    scp initWWDB1.ora oracle02:/u01/app/oracle/product/11.2.4/dbhome_1/dbs/initSBDB1.ora
    scp orapwWWDB1 oracle02:/u01/app/oracle/product/11.2.4/dbhome_1/dbs/orapwSBDB1
    scp ../network/admin/listener.ora ../network/admin/tnsnames.ora oracle02:/u01/app/oracle/product/11.2.4/dbhome_1/network/admin

    7.重启主库使配置生效
    注:重启库之前先重启监听
    三、到备库中
    1.创建对应路径
    [oracle@oracle01~]$ cd /u01/app/oracle/
    [oracle@oracle01 oracle]$ mkdir -p admin/SBDB1/adump
    [oracle@oracle01 oracle]$ mkdir -p oradata/SBDB1
    [oracle@oracle01 dbs]$ mkdir -p /home/oracle/flash
    2.修改参数文件
    [oracle@oracle01 oracle]$ cd $ORACLE_HOME/dbs
    [oracle@oracle01 oracle]$ vi initSBDB1.ora(从主库中scp过来的)
    注:用替换SBDB1全部替换成WWDB1然后需要注意的是db_name=主库sid
    3.修改网络配置文件(配置监听文件)
    LISTENER =
    (DESCRIPTION_LIST =
    (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = oracle02)(PORT = 1521))
    (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
    )

    ADR_BASE_LISTENER = /u01/app/oracle

    SID_LIST_LISTENER=
    (SID_LIST=
    (SID_DESC=
    (GLOBAL_DBNAME=SBDB1)
    (ORACLE_HOME=/u01/app/oracle/product/11.2.4/dbhome_1)
    (SID_NAME=SBDB1))
    (SID_DESC=
    (GLOBAL_DBNAME=SBDB1_DGMGRL)
    (ORACLE_HOME=/u01/app/oracle/product/11.2.4/dbhome_1)
    (SID_NAME=SBDB1))
    (SID_DESC=
    (SID_NAME=plsextproc)
    (ORACLE_HOME=/u01/app/oracle/product/11.2.4/dbhome_1)
    (PROGRAM=extproc)))
    4.重启网络设置

    重启监听

    [oracle@oracle01 oracle]$ lsnrctl reload
    注:启动完看一下有一个动态监听一个静态监听
    5.启动备库实例
    SQL> create spfile from pfile;
    备库启动到nomount状态
    SQL> startup nomount
    创建快速闪回区的目录
    mkdir -p /u01/app/oracle/fast_recovery_area/SBDB1

    6.搭建备库:
    使用复制数据库技术搭建备库
    [oracle@oracle01 oracle]$ rman target sys/oracle@WWDB1 auxiliary sys/oracle@sbdb1
    RMAN> DUPLICATE TARGET DATABASE
    FOR STANDBY
    FROM ACTIVE DATABASE
    DORECOVER
    NOFILENAMECHECK;
    运行成功,即备库搭建成功!
    四、配置dg服务
    主库:
    开启日志传输服务
    alter system set log_archive_dest_state_2='enable' scope=both sid='';
    备库:
    SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
    ---(启动实时应用日志服务)。
    -------------------------------------------------------搭建完成---------------------------------------------------
    搭建中遇到的报错
    报错1:
    SQL> create spfile from pfile;
    create spfile from pfile
    *
    ERROR at line 1:
    ORA-01078: failure in processing system parameters
    LRM-00123: invalid character 154 found in the input file
    解决方法:
    在参数文件中有中文删掉即可,即使是注释中的也不行
    报错2:
    使用rman备份恢复备库的时候,报错缺失‘DBMS’触发器可能是因为无catalog日志
    需要加上nocatalog参数。
    即:
    rman target sys/oracle@WWDB1 auxiliary sys/oracle@sbdb1 nocatalog
    报错3:
    若无快速恢复区,
    'LOCATION=use_db_recovery_file_dest
    此处,LOCATION=(归档日志归档的本地路径)。
    报错四:
    无法创建
    ***.cronctl.dbf
    可能没有该路径,或者oracle没有创建文件的权限

    ----------------------------------------------------------DG的管理与应用--------------------------------------------------
    A、开启实时日志应用
    alter database recover managed standby database using current logfile disconnect;

    1 开启应用日志 alter database recover managed standby database disconnect;

    2 检查进程是否开启 select client_process,process,thread#,sequence#,status from v$managed_standby;

    3 取消应用日志 alter database recover managed standby database cancel;

    4 开启实时日志应用 alter database recover managed standby database using current logfile disconnect;
    B、DATAGUARD验证
    1主库切换日志
    备库接受
    更改时间显示
    alter session set nls_date_format='DD-MON-YYYY HH24:MI:SS';
    在线日志归档
    alter system archive log current;
    查看主库/备库归档是否同步
    select sequence#,first_time,next_time,archived,applied from v$archived_log order by sequence#;
    C、主库备库切换
    1 查看主库/备库处于的模式
    select name,database_role,open_mode,switchover_status from v$database;
    2 主库切成备库
    alter database commit to switchover to physical standby with session shutdown;
    shutdown immediate
    startup mount;
    3 备库切换主库
    alter database commit to switchover to primary;
    shutdown immediate;
    startup ;
    D、修改数据保护模式步骤

    1)关闭数据库,重启到Mount 状态,如果是RAC,需要关闭所有实例,然后只启动一个实例到mount状态。

    2)修改模式:

    语法:ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE {PROTECTION | AVAILABILITY | PERFORMANCE};

    如:SQL>ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PROTECTION;

    1. 打开数据库: alter database open;

    2. 确认修改数据保护模式:

    SQL>select protection_mode,protection_level from v$database;
    E、检查是否有丢失日志
    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; 
    

    2) 如果有,则拷贝过来

    3) 手工的注册这些日志:

    SQL> ALTER DATABASE REGISTER LOGFILE '路径';

    F、DG服务的启停
    (1)启动SQL应用。逻辑Standby数据库启动SQL应用没有前、后台运行之说,语句执行完之后,控制权就会自动返回当前命令行窗口。

    要启动SQL应用,直接执行下列语句即可:

    SQL> ALTER DATABASE START LOGICAL STANDBY APPLY;

    如果要启动实时应用,附加IMMEDIATE子句即可,例如:

    SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;

    (2)停止SQL应用,如:

    SQL> ALTER DATABASE STOP LOGICAL STANDBY APPLY;

    由于是执行SQL语句的方式应用REDO数据,因此上述语句的执行需要等待当前执行的SQL触发的事务结束,才能真正停止REDO应用的状态。

    如果不考虑事务执行情况,马上停止REDO应用,可以通过下列的语句来完成:

    SQL> ALTER DATABASE ABORT LOGICAL STANDBY APPLY;

    (3)dg日志传输服务
    主库:

    停用dg(日志传输服务)

    alter system set log_archive_dest_state_2='defer' scope=both sid='*';

    启用dg(日志传输服务)
    alter system set log_archive_dest_state_2='enable' scope=both sid='*';

    G、DG架构的启用与停止(***)

    启动
    顺序:
    先启从库再起主库
    (1)查看监听
    查看监听状态

    lsnrctl status

    若无监听,手动启动监听

    lsnrctl start

    (2)启动数据库
    顺序:
    启动从库-----从库上启动实时应用日志服务-----启动主库----主库上启动日志传输服务
    sql>startup;
    备库
    sql>alter database recover managed standby database using current logfile disconnect from session;(开启实时日志应用服务)
    启动主库
    由于主库设置着开机自启,使用将服务器打开就行了。
    开启dg服务
    主库:
    alter system set log_archive_dest_state_2='enable' scope=both sid='*';开启日志传输服务

    关闭:(和开启正好相反)
    先关主库数据库:
    停用dg服务
    主库
    alter system set log_archive_dest_state_2='defer' scope=both sid='*';(关闭日志传输服务)
    注:若备库未停止实时应用日志服务就算关闭日志传输服务,备库也会跟主库同步。
    sql>shutdown immediate;
    再关从库:
    停止实时应用日志服务
    sql>alter database recover managed standby database cancel;
    关闭数据库:
    sql>shutdown immediate;

    关闭服务器

  • 相关阅读:
    [转][ASP.NET MVC]如何定制Numeric属性/字段验证消息
    [转]how can I change default errormessage for invalid price
    [转]超详细图解:自己架设NuGet服务器
    [转]C#委托Action、Action<T>、Func<T>、Predicate<T>
    自定义Image HtmlHelper
    OAuth 开放授权 Open Authorization
    [转]巧克英语
    Radis
    MongoDB
    [转]asp.net 跨域单点登录
  • 原文地址:https://www.cnblogs.com/Wardenking/p/10027834.html
Copyright © 2011-2022 走看看