zoukankan      html  css  js  c++  java
  • oracle 10g dataguard 搭建

    1、主库归档模式:

    SQL> select log_mode from v$database;
    
    LOG_MODE
    ------------
    ARCHIVELOG

    如果非归档,修改为归档模式

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

    2、允许强制日志

    SQL> alter database force logging;

    3、修改主库参数

    SQL> show parameter db_unique_name
    
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    db_unique_name                       string      test
    SQL> alter system set log_archive_config='dg_config=(test,std)';
    SQL> show parameter log_archive_dest_1
    SQL> alter system set log_archive_dest_1='location=/usr/oracle/oradata/test/archive/ valid_for=(all_logfiles,all_roles) db_unique_name=test';
    SQL> show parameter log_archive_dest_1
    SQL> alter system set log_archive_dest_2='service=std lgwr async valid_for=(online_logfiles,primary_role) db_unique_name=std';
    SQL> show parameter log_archive_dest_state_1
    SQL> show parameter log_archive_dest_state_2  --enable
    SQL> alter system set fal_server=std;
    SQL> alter system set fal_client=test; 

    SQL> alter system set DB_FILE_NAME_CONVERT='/usr/oracle/oradata/test/','/usr/oracle/oradata/std/' scope=spfile;
    SQL> alter system set LOG_FILE_NAME_CONVERT='/usr/oracle/oradata/test/','/usr/oracle/oradata/std/' scope=spfile;

      --两个库路径不同,需要这样定义来转换

    备库需要修改initstd.ora文件
    DB_FILE_NAME_CONVERT='/usr/oracle/oradata/test/','/usr/oracle/oradata/std/'
    LOG_FILE_NAME_CONVERT='/usr/oracle/oradata/test/','/usr/oracle/oradata/std/'



     4、创建pfile拷贝到备库使用

    create pfile from spfile;

    5、主库备份

    mkdir /usr/oracle/oracle_bak
    RMAN> backup format '/usr/oracle/oracle_bak/full_%U' database plus archivelog;
    --全备   
    RMAN> backup format '/usr/oracle/oracle_bak/con_%U' current controlfile for standby;
    --注意控制文件要加一个for standby,因为主库两边是不同的

     将备份文件拷贝到备库

    复制密码文件:
    scp oracle@192.168.137.81:/usr/oracle/product/10.2.0/dbs/orapwtest /usr/oracle/product/10.2.0/dbs/orapwstd

    复制参数文件:
    scp oracle
    @192.168.137.81:/usr/oracle/product/10.2.0/dbs/inittest.ora /usr/oracle/product/10.2.0/dbs/initstd.ora

    复制备份文件:
    scp oracle@192.168.137.81:/usr/oracle/oracle_bak/* /usr/oracle/oracle_bak/

    6、备库目录创建:

    mkdir -p /usr/oracle/oradata/std/archive
    mkdir -p /usr/oracle/admin/std/{a,b,u,dp,c}dump

     8、监听、tns

    netca

    tnsping 192.168.137.81:3173

    tnsping 192.168.137.86:3173

    相互能够ping通

    创建tns(主库备库都增加)

    test =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.137.81)(PORT = 3173))
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = test)
        )
      )
    std =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.137.86)(PORT = 3173))
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = std)
        )
      )

    测试备库通过tns能链接到主库

    sqlplus sys/sys@test as sysdba

    如果修改端口,需要修改静态监听(主库、备库都需要修改):

    alter system set local_listener='(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.137.86)(PORT = 3173))';

    9、修改备库参数文件:

    std和test互换,

    注意:

    db_name不要改,和主库一样

    增加:db_unique_name='std' 

    创建spfile

    sqlplus / as sysdba
    
    SQL*Plus: Release 10.2.0.4.0 - Production on 星期二 3月 22 06:45:03 2016
    
    Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.
    
    Connected to an idle instance.
    
    SQL> create spfile from pfile;
    
    File created.
    
    SQL> startup nomount
    启动时,有几个参数报错,先从参数文件中将这几个参数去掉

    10、连接到主库进行恢复

    rman连接备库

    [oracle@uoraclestd ~]$ rman target sys/sys@test auxiliary /
    
    Recovery Manager: Release 10.2.0.4.0 - Production on 星期二 3月 22 06:58:18 2016
    
    Copyright (c) 1982, 2007, Oracle.  All rights reserved.
    
    connected to target database: TEST (DBID=2204597168)
    connected to auxiliary database: STD (not mounted)

    开始恢复(由于修改了路径,需要建立对应关系)

    run {
    set newname for datafile 1 to '/usr/oracle/oradata/std/system01.dbf';
    set newname for datafile 2 to '/usr/oracle/oradata/std/undotbs01.dbf';
    set newname for datafile 3 to '/usr/oracle/oradata/std/sysaux01.dbf';
    set newname for datafile 4 to '/usr/oracle/oradata/std/users01.dbf';
    set newname for tempfile 1 to '/usr/oracle/oradata/std/temp01.dbf';
    duplicate target database for standby;
    }

     配置对应参数之后,可以直接

    duplicate target database for standby;

    创建redo

    SQL> alter system set standby_file_management=auto;
    SQL> alter database add standby logfile group 4 '/usr/oracle/oradata/std/standbyredo4.log' size 50m;
    SQL> alter database add standby logfile group 5 '/usr/oracle/oradata/std/standbyredo5.log' size 50m;
    SQL> alter database add standby logfile group 6 '/usr/oracle/oradata/std/standbyredo6.log' size 50m;

    为了以后主库切换为备库,主库也同样创建,但需要注意,创建之前需要修改
    standby_file_management=MANUAL

     11、应用日志

    sqlplus / as sysdba
    SQL> recover managed standby database disconnect from session;
    Media recovery complete.

    12、验证日志传输

    主库执行:
    SQL> alter system switch logfile;
    System altered.
    备库执行:
    SQL> select name from v$archived_log;
    检查新归档的重做日志文件已经应用(备库):
    SQL> select sequence#,applied from v$archived_log order by sequence#;

     13、问题排查

    1、检查归档目录

    column DEST_NAME format a20
    column status format a20
    column error format a20
    select DEST_NAME,status,error from v$archive_dest;

     2、rman 连接实例

    rman连接哪个实例,根据参数文件中的db_name连接,dataguard配置时,db_name都写的一样

    14、测试

    取消应用日志

    recover managed standby database cancel;
  • 相关阅读:
    sql 时间函数大全
    JavaScript代码收集
    inno setup打包.netframework
    Mono for Android 安装配置方法 附破解版
    恢复Reflector反编译后资源文件的办法
    sql时间格式转换
    函数式编程
    获取Java程序运行的路径 | 获取当前jar包的路径
    CIPAddressCtrl类的使用(IP地址与CString的互相转化)
    java的System.getProperty()方法可以获取的值
  • 原文地址:https://www.cnblogs.com/huanhuanang/p/5305610.html
Copyright © 2011-2022 走看看