zoukankan      html  css  js  c++  java
  • Oracle_Data_Gard Create a physical standby database

    创建之前要对DG的环境有一个总体的规划和了解。

                                                                     规划

    IP

    192.168.3.161

    192.168.3.162

    SID

    ITID

    ITID

    DB_UNIQUE_NAME

    Itid1

    Itid2

    DATA BASE SOFTWARE

    /u01/app/oracle/product/11.2.0/dbhome_1

    /u01/app/oracle/product/11.2.0/dbhome_1

    DATA FILE  

    /oracle_asm/standby/itid1/datafile/itid

    /oracle_asm/standby/itid2/datafile/itid

    ARCHIVE LOG

    /oracle_asm/standby/itid1/arch

    /oracle_asm/standby/itid2/arch

    DEBUG LOG

    Log File

    /oracle_asm/standby/itid1/datafile/itid

    /oracle_asm/standby/itid2/datafile/itid

    上面就是我准备设置DG的整个环境规划。其中Debug Log这里是空,因为在规划阶段我想Debug Log有很多种比如 adump bdump cdump ddump.所以索性先空着不管。其实真正搭建DG的时候这一步也确实可以不用管,因为DG一般是在两个一样的机器上装的,DEBUG LOG的目录如果用默认,那么都会是一样的。接下来,开始搭建DG.

    1. 创建单实例DB。

    这一步没什么好讲的,就是安装oracle创建一个DB。当然也可以是RAC的,不过为了是为简便采用了单实例DB。

    注意:如果你是在RAC环境中创建单实例DB。 Cluster一定是要启动着的。否则会报错。我开始用crsctl stop cluster –all吧cluster关闭。结果在用DBCA创建DB的时候遇到错误说:

    prcr-1055 cluster membership check failed for node

    所以一定要启动cluster再创建. crsctl start cluster –all

    2. 准备primary database

    Enable Forced Logging

    Force logging主要是避免有些操作不写redo log。这样在standby端就无法应用。使用下面的命令来查看是否是force logging模式 select force_logging from v$database; 如果不是则用下面的SQL来激活force logging。 alter database force logging;

    Configure Redo Transport Authentication

    Oracle DG使用oracle net session来传输redo数据和控制信息。这些传输redo的session通过SSL或者password file来认证。这里所说的password file就是存储sys的password file.这里我们只关注使用password file的验证方式。那么这一步我们要做什么呢? 什么也不需要。只要保证password file存在并且在后面的步骤中把这个password file copy 到其它的standby database中去就可以了。Oracle DG要求 DG中所有的数据库的sys都使用相同的password。

    Configure the Primary Database to Receive Redo Data

    这一步可选。因为这一步是配置当前的primary数据库从其它的standby数据库接受redo log。很明显这是为了切换后当前数据库可能变成standby而准备的。

    • 配置primary的standby redo log
    SQL> ALTER DATABASE ADD STANDBY LOGFILE ('/oracle_asm/standby/itid1/standby_redo/slog1.rdo') size 50m;
    
    Database altered.
    
    SQL> ALTER DATABASE ADD STANDBY LOGFILE ('/oracle_asm/standby/itid1/standby_redo/slog2.rdo') size 50m;
    
    Database altered.
    
    SQL> ALTER DATABASE ADD STANDBY LOGFILE ('/oracle_asm/standby/itid1/standby_redo/slog3.rdo') size 50m;
    
    Database altered.
    
    SQL> ALTER DATABASE ADD STANDBY LOGFILE ('/oracle_asm/standby/itid1/standby_redo/slog4.rdo') size 50m;
    
    Database altered
    • 设置log_archive_dest_3参数
    log_archive_dest_3='LOCATION=/oracle_asm/standby/itid1/arch_from_standbyredo VALID_FOR=(STANDBY_LOGFILE,STANDBY_ROLE)'

    这一步是为了在切换过来后,standby数据库可以从standby redo log中提取log然后归档。

    要注意这里涉及到修改参数文件以及spfile生成pfile和pifle生成spfile的问题。修改这个参数需要在pfile中手动改,我们要先生成pfile然后修改pfile然后用pfile生成spfile。

    • 设置primary database的initialization parameter

    首先创建pfile。因为我们要编辑initialization parameter需要pfile

    SQL> create pfile='/u01/app/oracle/product/11.2.0/dbhome_1/dbs/pfileitid1.ora' from spfile;

    需要编辑的参数如下

    *.db_name='itid'
    *.db_unique_name='itid1'
    *.log_archive_config='DG_CONFIG=(itid1,itid2)'
    *.control_files='/oracle_asm/standby/itid1/datafile/itid/control01.ctl','/oracle_asm/standby/itid1/datafile/itid/control02.ctl'
    *.log_archive_dest_1='LOCATION=/oracle_asm/standby/itid1/arch'
    *.LOG_ARCHIVE_DEST_2='SERVICE=itid2 ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=itid2'
    *.LOG_ARCHIVE_DEST_3='LOCATION=/oracle_asm/standby/itid1/standby_redo VALID_FOR=(STANDBY_LOGFILE,STANDBY_ROLE)'
    *.remote_login_passwordfile='EXCLUSIVE'
    
    *。FAL_SERVER=itid2
    *。DB_FILE_NAME_CONVERT='/oracle_asm/standby/itid2/datafile/itid','/oracle_asm/standby/itid1/datafile/itid'
    *。LOG_FILE_NAME_CONVERT='/oracle_asm/standby/itid2/datafile/itid','/oracle_asm/standby/itid1/datafile/itid'
    *。STANDBY_FILE_MANAGEMENT=AUTO

    主要看一下以下参数

    Log_archive_config控制从远端数据库接受或者发送redo。详细了解可以查阅文档。

    Log_archive_dest_1很简单是本地的archive路径。

    Log_archive_dest_2是配置通过异步的模式发送redo给itid2。发送给itid2以后,如果itid2有standby redo,就放在standby redo中。

    Log_archive_dest_3其实是当切换后本地变成standby后用来把standby redo中的文件提取到archive用的。

    Enable archiving

    这一部不用详细描述。如果需要知道可以查看官方文档。

    3. Create a Backup Copy of the Primary Database Datafiles Primary

    Oracle推荐的是使用rman。不过这种小规模的偶然性备份用用户管理的方式更简便。而且更清晰。我们采用用户管理的热备份方式。

    SQL> select TABLESPACE_NAME,FILE_NAME from dba_data_files order by TABLESPACE_NAME;
    
    TABLESPA FILE_NAME
    -------- ------------------------------------------------------------------------------------
    SYSAUX   /oracle_asm/standby/itid1/datafile/itid/sysaux01.dbf
    SYSTEM   /oracle_asm/standby/itid1/datafile/itid/system01.dbf
    UNDOTBS1 /oracle_asm/standby/itid1/datafile/itid/undotbs01.dbf
    USERS    /oracle_asm/standby/itid1/datafile/itid/users01.dbf
    
    SQL> alter tablespace system begin backup;
    
    Tablespace altered.
    
    SQL> host cp /oracle_asm/standby/itid1/datafile/itid/system01.dbf /oracle_asm/standby/itid2/datafile/itid/system01.dbf
    
    SQL> alter tablespace system end  backup;
    
    Tablespace altered.
    
    SQL> alter tablespace sysaux begin backup;
    
    Tablespace altered.
    
    SQL> host cp /oracle_asm/standby/itid1/datafile/itid/sysaux01.dbf /oracle_asm/standby/itid2/datafile/itid/sysaux01.dbf
    
    SQL> alter tablespace sysaux end backup;
    
    Tablespace altered.
    
    SQL> alter tablespace UNDOTBS1 begin backup;
    
    Tablespace altered.
    
    SQL> host cp /oracle_asm/standby/itid1/datafile/itid/undotbs01.dbf /oracle_asm/standby/itid2/datafile/itid/undotbs01.dbf
    
    SQL> alter tablespace UNDOTBS1 end backup;
    
    Tablespace altered.
    
    SQL> alter tablespace USERS begin backup;
    
    Tablespace altered.
    
    SQL> host cp /oracle_asm/standby/itid1/datafile/itid/users01.dbf /oracle_asm/standby/itid2/datafile/itid/users01.dbf
    
    SQL> alter tablespace USERS end  backup;
    
    Tablespace altered.

     

    4 从primary数据库为standby数据库创建一个control file

    SQL> alter database create standby controlfile as '/oracle_asm/standby/itid2/datafile/itid/control01.ctl';
    
    Database altered.
    
    SQL> alter database create standby controlfile as '/oracle_asm/standby/itid2/datafile/itid/control02.ctl';
    
    Database altered.

    注意这种方式创建controlfile 一定是要在mount状态下,否则control file可能会出现scn不一致的情况。 当然你可以只创建一个contrl file然后ocpy到不同的地方。

    5 为standby数据库创建parameter file

    下列参数要注意

    *.control_files='/oracle_asm/standby/itid2/datafile/itid/control01.ctl','/oracle_asm/standby/itid2/datafile/itid/control02.ctl'
    *.DB_FILE_NAME_CONVERT='/oracle_asm/standby/itid1/datafile/itid','/oracle_asm/standby/itid2/datafile/itid'
    *.db_unique_name='itid2'
    *.FAL_SERVER='itid1'
    *.log_archive_dest_1='LOCATION=/oracle_asm/standby/itid2/arch'
    *.LOG_ARCHIVE_DEST_2='SERVICE=itid1 ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=itid1'
    *.LOG_ARCHIVE_DEST_3='LOCATION=/oracle_asm/standby/itid2/standby_redo VALID_FOR=(STANDBY_LOGFILE,STANDBY_ROLE)'
    *.LOG_FILE_NAME_CONVERT='/oracle_asm/standby/itid1/datafile/itid','/oracle_asm/standby/itid2/datafile/itid'

    6 把刚才创建的文件copy到standby数据库

    包括 数据文件 控制文件 参数文件 

    Set Up the Environment to Support the Standby Database Standby

    copy密码文件

    要和足以的是如果sysdba或者sysoper权限被赋予或者回收,这个文件也要重新copy。

    为standby和primary配置listener

    在primary这边我用netca创建了一个监听在1528的listener LISTENER_ITID1。因为不是默认端口,要手动注册。过程非常简单。先把listener.ora中关于这个listener的定义copy到tnsname.ora中。这样oracle就能够认识LISTENER_ITID1。然后在sqlplus中运行以下命令:

    SQL> alter system set local_listener='LISTENER_ITID1' scope=both;
    
    System altered.
    
    SQL> alter system register;
    
    System altered.
    
    SQL> alter system register;
    
    System altered.

    在standby端也是一样。 但是要注意的是我们有一个参数 

    创建oracle net service name

    使用netca创建。在primary和standby上都做。简单的说就是在tnsname.ora中配置让itid1认识 itid2. Itid2认识itid1

    创建spfile

    SQL> create spfile from pfile='pfilefromracnode1.ora';
    
    File created.

    8 启动standby

    首先启动到mount

    startup mount

    在standby端创建sandby redolog group

    ALTER DATABASE ADD STANDBY LOGFILE ('/oracle_asm/standby/itid2/standby_redo/slog1.rdo') size 50m;
    ALTER DATABASE ADD STANDBY LOGFILE ('/oracle_asm/standby/itid2/standby_redo/slog2.rdo') size 50m;
    ALTER DATABASE ADD STANDBY LOGFILE ('/oracle_asm/standby/itid2/standby_redo/slog3.rdo') size 50m;
    ALTER DATABASE ADD STANDBY LOGFILE ('/oracle_asm/standby/itid2/standby_redo/slog4.rdo') size 50m;
    log_archive_dest_3='LOCATION=/oracle_asm/standby/itid2/arch_from_standbyredo VALID_FOR=(STANDBY_LOGFILE,STANDBY_ROLE)'

    其中log archive这个参数是用来从standby redo中提取redo 放入archive。

    创建online redo  

    SQL> ALTER DATABASE ADD STANDBY LOGFILE ('/oracle_asm/standby/itid2/datafile/log1.rdo') size 50m;
    
    Database altered.
    
    SQL> ALTER DATABASE ADD STANDBY LOGFILE ('/oracle_asm/standby/itid2/datafile/log2.rdo') size 50m;
    
    Database altered.
    
    SQL> ALTER DATABASE ADD STANDBY LOGFILE ('/oracle_asm/standby/itid2/datafile/log3.rdo') size 50m;
    
    Database altered.

    让standby 开动redo apply

    ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
  • 相关阅读:
    第二阶段冲刺第六天
    梦断代码阅读笔记三
    第二阶段冲刺第五天
    第二阶段冲刺第四天
    第二阶段冲刺第三天
    第二阶段冲刺第二天
    软件工程第十四周总结
    第二阶段冲刺第一天
    第一阶段冲刺意见评论
    软件工程第十三周总结
  • 原文地址:https://www.cnblogs.com/kramer/p/3566899.html
Copyright © 2011-2022 走看看