zoukankan      html  css  js  c++  java
  • Oracle 11g Data Guard搭建物理Standby数据库(一)

    Oracle Data Guard保证了企业数据的高可用性、数据保护和灾难恢复。它提供了一套全面的服务,可以创建、维护、管理和监视一个或多个备用数据库(Standby),以使生产数据库能够从灾难和数据损坏中恢复。Data Guard将维护备用数据库作为生产数据库的副本,然后,如果生产数据库由于计划内或计划外的停机而变得不可用,那么它可以将任何备用数据库切换到生产角色,最小化停机时间。Data Guard可以与传统的备份、恢复和集群技术一起使用,以提供高水平的数据保护和数据可用性。

    Data Guard的本质是对事务数据的Redo传输,保证主库和备库之间的数据更新同步。Oracle支持一个主库最多有9个备库,Redo的传输既可以是LGWR触发,也可以是ARCn进程触发,本篇主要使用LGWR来演示Data Guard的搭建。

    首先搭建Oracle 11G Data Guard环境,先对Data Guard有个初步的了解,然后后面再分别对其进行详细的讲解,欢迎一起学习、探讨Data Guard相关的知识。

    一 软件环境
    • CentOS-6.5-x86_64
    • p13390677_112040_Linux-x86-64
    • 主库:sz.pri.com,IP:192.168.1.106 ORACLE_SID:szpri
    • 备库:sh.std.com,IP:192.168.1.109 ORACLE_SID:szpri
    二 数据库设置

    1、数据库软件安装与数据库安装
    2、监听器配置
    • 主库LISTENER配置
    [oracle@sz ~]$ more /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora 
    # listener.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
    # Generated by Oracle configuration tools.
    
    SZ =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.106)(PORT = 1521))
      )
    
    ADR_BASE_SZ = /u01/app/oracle
    
    SH =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.109)(PORT = 1521))
      )
    
    ADR_BASE_SH = /u01/app/oracle
    
    SID_LIST_SZ =
      (SID_LIST =
        (SID_DESC =
          (GLOBAL_DBNAME = szpri)
          (ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
          (SID_NAME = szpri)
        )
      )
    
    SID_LIST_SH =
      (SID_LIST =
        (SID_DESC =
          (GLOBAL_DBNAME = szpri)
          (ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
          (SID_NAME = szpri)
        )
      )
    • 备库LISTENER配置
    [oracle@sh ~]$ more /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
    # listener.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
    # Generated by Oracle configuration tools.
    
    SZ =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.106)(PORT = 1521))
      )
    
    ADR_BASE_SZ = /u01/app/oracle
    
    SH =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.109)(PORT = 1521))
      )
    
    ADR_BASE_SH = /u01/app/oracle
    
    SID_LIST_SZ =
      (SID_LIST =
        (SID_DESC =
          (GLOBAL_DBNAME = szpri)
          (ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
          (SID_NAME = szpri)
        )
      )
    
    SID_LIST_SH =
      (SID_LIST =
        (SID_DESC =
          (GLOBAL_DBNAME = szpri)
          (ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
          (SID_NAME = szpri)
        )
      )
    3、TNS配置
    • 主库TNS配置
    [oracle@sz ~]$ more /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora 
    # tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
    # Generated by Oracle configuration tools.
    
    SZPRI =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.106)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SERVICE_NAME = szpri)
        )
      )
    
    SHSTD =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.109)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SERVICE_NAME = szpri)
        )
      )
    • 备库TNS配置(和主库TNS相同)
    [oracle@sh ~]$ more /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora 
    # tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
    # Generated by Oracle configuration tools.
    
    SZPRI =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.106)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SERVICE_NAME = szpri)
        )
      )
    
    SHSTD =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.109)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SERVICE_NAME = szpri)
        )
      )

    三 Data Guard设置

    1、激活Force Logging
         在Mount或者Open模式,激活主库的Force Logging:
    SQL> alter database force logging;
    
    Database altered.
    2、启用归档
         在Mount模式,启用主库的数据归档模式:
    SQL> alter database archivelog;
    
    Database altered.
    
    SQL> alter database open;
    
    Database altered.
    
    SQL> archive log list;
    Database log mode	       Archive Mode
    Automatic archival	       Enabled
    Archive destination	       USE_DB_RECOVERY_FILE_DEST
    Oldest online log sequence     5
    Next log sequence to archive   7
    Current log sequence	       7
    3、配置主库的参数文件
    SQL> create pfile='/home/oracle/initszpri.ora' from spfile;
    
    File created.
    [oracle@sz ~]$ vim initszpri.ora
    
    *.audit_file_dest='/u01/app/oracle/admin/szpri/adump'
    *.audit_trail='db'
    *.compatible='11.2.0.4.0'
    *.control_files='/u01/app/oracle/oradata/szpri/control01.ctl','/u01/app/oracle/fast_recovery_area/szpri/control02.ctl'
    *.db_block_size=8192
    *.db_domain=''
    *.db_name='szpri'
    *.db_recovery_file_dest='/u01/app/oracle/fast_recovery_area'
    *.db_recovery_file_dest_size=4385144832
    *.diagnostic_dest='/u01/app/oracle'
    *.dispatchers='(PROTOCOL=TCP) (SERVICE=szpriXDB)'
    *.memory_target=833617920
    *.open_cursors=300
    *.processes=150
    *.remote_login_passwordfile='EXCLUSIVE'
    *.undo_tablespace='UNDOTBS1'
    #############################The following is adding for DG by Alen Liu 2017-09-11####################################
    DB_UNIQUE_NAME=szpri
    LOG_ARCHIVE_CONFIG='DG_CONFIG=(szpri,shstd)'
    LOG_ARCHIVE_DEST_2=
     'SERVICE=shstd LGWR SYNC AFFIRM
      VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
      DB_UNIQUE_NAME=shstd'
    LOG_ARCHIVE_DEST_STATE_1=ENABLE
    LOG_ARCHIVE_DEST_STATE_2=ENABLE
    REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
    STANDBY_FILE_MANAGEMENT=AUTO
    FAL_SERVER=shstd
    FAL_CLIENT=szpri
    #############################The following is adding for DG by Alen Liu 2017-09-11####################################
    4、配置备库的参数文件
    [oracle@sh ~]$ vim initszpri.ora 
    
    szpri.__db_cache_size=352321536
    szpri.__java_pool_size=4194304
    szpri.__large_pool_size=8388608
    szpri.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
    szpri.__pga_aggregate_target=335544320
    szpri.__sga_target=499122176
    szpri.__shared_io_pool_size=0
    szpri.__shared_pool_size=125829120
    szpri.__streams_pool_size=0
    *.audit_file_dest='/u01/app/oracle/admin/szpri/adump'
    *.audit_trail='db'
    *.compatible='11.2.0.4.0'
    *.control_files='/u01/app/oracle/oradata/szpri/control01.ctl','/u01/app/oracle/fast_recovery_area/szpri/control02.ctl'
    *.db_block_size=8192
    *.db_domain=''
    *.db_name='szpri'
    *.db_recovery_file_dest='/u01/app/oracle/fast_recovery_area'
    *.db_recovery_file_dest_size=4385144832
    *.diagnostic_dest='/u01/app/oracle'
    *.dispatchers='(PROTOCOL=TCP) (SERVICE=szpriXDB)'
    *.memory_target=833617920
    *.open_cursors=300
    *.processes=150
    *.remote_login_passwordfile='EXCLUSIVE'
    *.undo_tablespace='UNDOTBS1'
    #############################The following is adding for DG by Alen Liu 2017-09-11####################################
    DB_UNIQUE_NAME=shstd
    LOG_ARCHIVE_CONFIG='DG_CONFIG=(szpri,shstd)'
    LOG_ARCHIVE_DEST_2=
     'SERVICE=szpri LGWR SYNC AFFIRM
      VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
      DB_UNIQUE_NAME=szpri'
    LOG_ARCHIVE_DEST_STATE_1=ENABLE
    LOG_ARCHIVE_DEST_STATE_2=ENABLE
    REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
    STANDBY_FILE_MANAGEMENT=AUTO
    FAL_SERVER=szpri
    FAL_CLIENT=shstd
    #############################The following is adding for DG by Alen Liu 2017-09-11####################################
    5、创建备库密码文件
    如果在同一主机进行Standby搭建,将主库的密码文件拷贝至备库目录即可;如果不在同一主 机,则此步骤可省略。
    [oracle@sz oracle]$ scp product/11.2.0/dbhome_1/dbs/orapwszpri oracle@192.168.1.109:/home/oracle/
    6、创建备库所需目录
    如果在同一主机进行Standby搭建,则需要创建相应的目录,因为同一主机数据库实例名不能相同;如果不在同一主机,则此步骤可省略。
    [oracle@sh ~]$ mkdir -p /u01/app/oracle/admin/szpri/adump
    [oracle@sh ~]$ mkdir -p /u01/app/oracle/oradata/szpri/
    [oracle@sh ~]$ mkdir -p /u01/app/oracle/fast_recovery_area/szpri/
    7、打开主库
    [oracle@sz ~]$ sqlplus / as sysdba
    
    SQL*Plus: Release 11.2.0.4.0 Production on Mon Sep 11 22:46:03 2017
    
    Copyright (c) 1982, 2013, Oracle.  All rights reserved.
    
    Connected to an idle instance.
    
    SQL> startup nomount pfile='/home/oracle/initszpri.ora';
    ORACLE instance started.
    
    Total System Global Area  830930944 bytes
    Fixed Size		    2257800 bytes
    Variable Size		  536874104 bytes
    Database Buffers	  289406976 bytes
    Redo Buffers		    2392064 bytes
    SQL> alter database mount;
    
    Database altered.
    
    SQL> alter database open;
    
    Database altered.
    8、启动备库至Nomount状态
    SQL> startup nomount pfile='/home/oracle/initshstd.ora';
    ORACLE instance started.
    
    Total System Global Area  830930944 bytes
    Fixed Size		    2257800 bytes
    Variable Size		  536874104 bytes
    Database Buffers	  289406976 bytes
    Redo Buffers		    2392064 bytes
    SQL> 
    9、RMAN在线复制数据库
    [oracle@sh ~]$ rman target sys/system@szpri auxiliary sys/system@shstd
    
    Recovery Manager: Release 11.2.0.4.0 - Production on Mon Sep 11 23:44:42 2017
    
    Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.
    
    connected to target database: SZPRI (DBID=4248758477)
    connected to auxiliary database: SZPRI (not mounted)
    
    RMAN> duplicate target database for standby from active database nofilenamecheck;
    
    Starting Duplicate Db at 11-SEP-17
    using target database control file instead of recovery catalog
    allocated channel: ORA_AUX_DISK_1
    channel ORA_AUX_DISK_1: SID=19 device type=DISK
    
    contents of Memory Script:
    {
       backup as copy reuse
       targetfile  '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/orapwszpri' auxiliary format 
     '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/orapwszpri'   ;
    }
    executing Memory Script
    
    Starting backup at 11-SEP-17
    allocated channel: ORA_DISK_1
    channel ORA_DISK_1: SID=50 device type=DISK
    Finished backup at 11-SEP-17
    
    contents of Memory Script:
    {
       backup as copy current controlfile for standby auxiliary format  '/u01/app/oracle/oradata/szpri/control01.ctl';
       restore clone controlfile to  '/u01/app/oracle/fast_recovery_area/szpri/control02.ctl' from 
     '/u01/app/oracle/oradata/szpri/control01.ctl';
    }
    executing Memory Script
    
    Starting backup at 11-SEP-17
    using channel ORA_DISK_1
    channel ORA_DISK_1: starting datafile copy
    copying standby control file
    output file name=/u01/app/oracle/product/11.2.0/dbhome_1/dbs/snapcf_szpri.f tag=TAG20170911T234534 RECID=2 STAMP=954459937
    channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:07
    Finished backup at 11-SEP-17
    
    Starting restore at 11-SEP-17
    using channel ORA_AUX_DISK_1
    
    channel ORA_AUX_DISK_1: copied control file copy
    Finished restore at 11-SEP-17
    
    contents of Memory Script:
    {
       sql clone 'alter database mount standby database';
    }
    executing Memory Script
    
    sql statement: alter database mount standby database
    
    contents of Memory Script:
    {
       set newname for tempfile  1 to 
     "/u01/app/oracle/oradata/szpri/temp01.dbf";
       switch clone tempfile all;
       set newname for datafile  1 to 
     "/u01/app/oracle/oradata/szpri/system01.dbf";
       set newname for datafile  2 to 
     "/u01/app/oracle/oradata/szpri/sysaux01.dbf";
       set newname for datafile  3 to 
     "/u01/app/oracle/oradata/szpri/undotbs01.dbf";
       set newname for datafile  4 to 
     "/u01/app/oracle/oradata/szpri/users01.dbf";
       set newname for datafile  5 to 
     "/u01/app/oracle/oradata/szpri/example01.dbf";
       backup as copy reuse
       datafile  1 auxiliary format 
     "/u01/app/oracle/oradata/szpri/system01.dbf"   datafile 
     2 auxiliary format 
     "/u01/app/oracle/oradata/szpri/sysaux01.dbf"   datafile 
     3 auxiliary format 
     "/u01/app/oracle/oradata/szpri/undotbs01.dbf"   datafile 
     4 auxiliary format 
     "/u01/app/oracle/oradata/szpri/users01.dbf"   datafile 
     5 auxiliary format 
     "/u01/app/oracle/oradata/szpri/example01.dbf"   ;
       sql 'alter system archive log current';
    }
    executing Memory Script
    
    executing command: SET NEWNAME
    
    renamed tempfile 1 to /u01/app/oracle/oradata/szpri/temp01.dbf in control file
    
    executing command: SET NEWNAME
    
    executing command: SET NEWNAME
    
    executing command: SET NEWNAME
    
    executing command: SET NEWNAME
    
    executing command: SET NEWNAME
    
    Starting backup at 11-SEP-17
    using channel ORA_DISK_1
    channel ORA_DISK_1: starting datafile copy
    input datafile file number=00001 name=/u01/app/oracle/oradata/szpri/system01.dbf
    output file name=/u01/app/oracle/oradata/szpri/system01.dbf tag=TAG20170911T234556
    channel ORA_DISK_1: datafile copy complete, elapsed time: 00:03:58
    channel ORA_DISK_1: starting datafile copy
    input datafile file number=00002 name=/u01/app/oracle/oradata/szpri/sysaux01.dbf
    output file name=/u01/app/oracle/oradata/szpri/sysaux01.dbf tag=TAG20170911T234556
    channel ORA_DISK_1: datafile copy complete, elapsed time: 00:05:49
    channel ORA_DISK_1: starting datafile copy
    input datafile file number=00005 name=/u01/app/oracle/oradata/szpri/example01.dbf
    output file name=/u01/app/oracle/oradata/szpri/example01.dbf tag=TAG20170911T234556
    channel ORA_DISK_1: datafile copy complete, elapsed time: 00:04:19
    channel ORA_DISK_1: starting datafile copy
    input datafile file number=00003 name=/u01/app/oracle/oradata/szpri/undotbs01.dbf
    output file name=/u01/app/oracle/oradata/szpri/undotbs01.dbf tag=TAG20170911T234556
    channel ORA_DISK_1: datafile copy complete, elapsed time: 00:04:11
    channel ORA_DISK_1: starting datafile copy
    input datafile file number=00004 name=/u01/app/oracle/oradata/szpri/users01.dbf
    output file name=/u01/app/oracle/oradata/szpri/users01.dbf tag=TAG20170911T234556
    channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:04
    Finished backup at 12-SEP-17
    
    sql statement: alter system archive log current
    
    contents of Memory Script:
    {
       switch clone datafile all;
    }
    executing Memory Script
    
    datafile 1 switched to datafile copy
    input datafile copy RECID=2 STAMP=954461064 file name=/u01/app/oracle/oradata/szpri/system01.dbf
    datafile 2 switched to datafile copy
    input datafile copy RECID=3 STAMP=954461064 file name=/u01/app/oracle/oradata/szpri/sysaux01.dbf
    datafile 3 switched to datafile copy
    input datafile copy RECID=4 STAMP=954461064 file name=/u01/app/oracle/oradata/szpri/undotbs01.dbf
    datafile 4 switched to datafile copy
    input datafile copy RECID=5 STAMP=954461064 file name=/u01/app/oracle/oradata/szpri/users01.dbf
    datafile 5 switched to datafile copy
    input datafile copy RECID=6 STAMP=954461064 file name=/u01/app/oracle/oradata/szpri/example01.dbf
    Finished Duplicate Db at 12-SEP-17
    
    RMAN> 
    此步骤完成后,备库处于Mounted状态,将其打开:
    SQL> select instance_name,status from v$instance;
    
    INSTANCE_NAME	 STATUS
    ---------------- ------------
    szpri		 MOUNTED
    
    SQL> alter database open;
    
    Database altered.
    10、检查主备库状态
    • 主库
    SQL> select name,open_mode,protection_mode,database_role from v$database;
    
    NAME	  OPEN_MODE	       PROTECTION_MODE	    DATABASE_ROLE
    --------- -------------------- -------------------- ----------------
    SZPRI	  READ WRITE	       MAXIMUM PERFORMANCE  PRIMARY
    • 备库
    SQL> select name,open_mode,protection_mode,database_role from v$database;
    
    NAME	  OPEN_MODE	       PROTECTION_MODE	    DATABASE_ROLE
    --------- -------------------- -------------------- ----------------
    SZPRI	  READ ONLY	       MAXIMUM PERFORMANCE  PHYSICAL STANDBY
    11、启动MRP0进程应用日志
    SQL> alter database recover managed standby database disconnect from session;
    
    Database altered.
    SQL> select process,group#,status from v$managed_standby;
    
    PROCESS   GROUP#				   STATUS
    --------- ---------------------------------------- ------------
    ARCH	  N/A					   CONNECTED
    ARCH	  N/A					   CONNECTED
    ARCH	  N/A					   CONNECTED
    ARCH	  N/A					   CONNECTED
    RFS	  N/A					   IDLE
    RFS	  N/A					   IDLE
    RFS	  N/A					   IDLE
    RFS	  1					   IDLE
    MRP0	  N/A					   WAIT_FOR_LOG
    
    9 rows selected.
    12、验证主备数据同步
    • 主库操作
    SQL> create table test(id number , name varchar2(50));
    
    Table created.
    
    SQL> insert into test values(1,'Alen Liu');
    
    1 row created.
    
    SQL> commit;
    
    Commit complete.
    SQL> alter system switch logfile;
    
    System altered.
    
    SQL> /
    
    System altered.
    • 备库查询
    SQL> select *from test;
    select *from test
                 *
    ERROR at line 1:
    ORA-00942: table or view does not exist
    
    
    SQL> /
    
    	ID NAME
    ---------- --------------------------------------------------
    	 1 Alen Liu
    13、创建主备库SPFile
    分别在主库、备库执行下面命令即可创建SPFile,这样下次启动数据库就可以不指定PFile了。
    SQL> create spfile from pfile='/home/oracle/initszpri.ora';
    
    File created.
    至此,Data Guard搭建物理Standby数据库完成,下面我们进行Standby Redo Log的建立,继续完善该Data Guard环境。


  • 相关阅读:
    【python】绘图,颜色,线型
    【python】绘图,画虚线
    【python】绘图坐标轴标题中包含上标或下标
    【python】python3.7与3.9共存,两个3版本同时存在(平时用vscode敲代码)pip复制
    【python】 matplotlib 画图刻度、图例等字体、字体大小、刻度密度、线条样式设置
    Charles乱码问题
    charles的设置断点
    Charles的设置手机抓包
    ajax
    java jdbc连接mysql数据库实现增删改查操作
  • 原文地址:https://www.cnblogs.com/alen-liu-sz/p/12975715.html
Copyright © 2011-2022 走看看