• 物理standby部署


    环境:

    主机ip dg角色 db_name db_unique_name
    192.168.56.110 primary SHPD SHPD
    192.168.56.111 standby SHPD SHST

    主机必要条件check

    select NAME,LOG_MODE,FORCE_LOGGING from v$database;
    alter database force logging;

    前提

    1. SHPD和SHST都已安装好oracle软件,配置好环境变量,listener.ora,tnsnames.ora

    2. SHPD数据库已创建好,启动到open,SHST启动到nomount

    3. 目录结构同clone db

    4. init.ora也使用clonedb的,db_unique_name需要修改,其余的下面在具体配置

    tnsname.ora内容:

    shpd =
    (DESCRIPTION =
    (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.110)(PORT = 1521))
    )
    (CONNECT_DATA =
    (SERVICE_NAME = SHPD)
    )
    )
    
    shst =
    (DESCRIPTION =
    (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.111)(PORT = 1521))
    )
    (CONNECT_DATA =
    (SERVICE_NAME = SHST)
    )
    )

    配置主库参数

    --参数check
    col name format a30;
    col value format a200;
    set linesize 1000;
    set pagesize 1000;
    select name,value from v$parameter
    where name in('fal_server',
    'fal_client',
    'standby_file_management',
    'db_file_name_convert',
    'log_file_name_convert',
    'db_name',
    'db_unique_name',
    'log_archive_dest_1',
    'log_archive_dest_2',
    'log_archive_config')
    order by name;
    --主备db和log路径转换
    select 'datafile',name from v$datafile
    union all
    select 'tempfile',name from v$tempfile
    union all
    select 'logifle',member from V$LOGFILE where TYPE='ONLINE';
    
    ALTER SYSTEM SET db_unique_name='SHPD' SCOPE=SPFILE;
    ALTER SYSTEM SET db_file_name_convert='/u01/oradata/SHST/datafile','/u01/oradata/SHPD/datafile','/u01/oradata/SHST/tempfile','/u01/oradata/SHPD/tempfile' scope=spfile;
    ALTER SYSTEM SET log_file_name_convert='/u01/oradata/SHST/onlinefile','/u01/oradata/SHPD/onlinefile' scope=spfile;
    ALTER SYSTEM SET log_archive_config='DG_CONFIG=(SHPD,SHST)' SCOPE=BOTH;
    ALTER SYSTEM SET log_archive_dest_1='location=/u01/oradata/SHPD/arch valid_for=(all_logfiles,all_roles) db_unique_name=SHPD' SCOPE=BOTH;
    ALTER SYSTEM SET log_archive_dest_2='SERVICE=SHST LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=SHST' SCOPE=BOTH;
    alter system set LOG_ARCHIVE_DEST_STATE_1=enable scope=both;
    alter system set LOG_ARCHIVE_DEST_STATE_2=enable scope=both;
    ALTER SYSTEM SET fal_server='SHST' SCOPE=BOTH;
    ALTER SYSTEM SET fal_client='SHPD' SCOPE=BOTH;
    ALTER SYSTEM SET standby_file_management=AUTO SCOPE=BOTH;

    配置从库参数

    ALTER SYSTEM SET db_unique_name='SHST' scope=spfile;
    ALTER SYSTEM SET db_name='SHPD' scope=spfile;
    ALTER SYSTEM SET db_file_name_convert='/u01/oradata/SHPD/datafile','/u01/oradata/SHST/datafile','/u01/oradata/SHPD/tempfile','/u01/oradata/SHST/tempfile' scope=spfile;
    ALTER SYSTEM SET log_file_name_convert='/u01/oradata/SHPD/onlinefile','/u01/oradata/SHST/onlinefile' scope=spfile;
    ALTER SYSTEM SET log_archive_config='DG_CONFIG=(SHPD,SHST)'  SCOPE=BOTH;
    ALTER SYSTEM SET log_archive_dest_1='location=/u01/oradata/SHST/arch valid_for=(all_logfiles,all_roles) db_unique_name=SHST' SCOPE=BOTH;
    ALTER SYSTEM SET log_archive_dest_2='SERVICE=SHPD LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=SHPD' SCOPE=BOTH;
    alter system set LOG_ARCHIVE_DEST_STATE_1=enable scope=both;
    alter system set LOG_ARCHIVE_DEST_STATE_2=enable scope=both;
    ALTER SYSTEM SET fal_server='SHPD' SCOPE=BOTH;
    ALTER SYSTEM SET fal_client='SHST' SCOPE=BOTH;
    ALTER SYSTEM SET standby_file_management=AUTO SCOPE=BOTH;

    添加日志文件

    根据primary的online redo log大小和组数,按规则添加Standby online log,添加的group的编号最好有预留,方便扩展

    select * from V$LOGFILE;
    select * from v$log;
    select * from V$STANDBY_LOG;
    /*主库添加Standby online log*/
    alter database add standby logfile
    group 11 '/u01/oradata/SHPD/onlinefile/standbyredo04.log' size 50M,
    group 12 '/u01/oradata/SHPD/onlinefile/standbyredo05.log' size 50M,
    group 13 '/u01/oradata/SHPD/onlinefile/standbyredo06.log' size 50M,
    group 14 '/u01/oradata/SHPD/onlinefile/standbyredo07.log' size 50M;
    /*备库添加Standby online log*/
    alter database add standby logfile group 10('/u01/app/oracle/oradata/intedb/standby_redo10.log') size 50M;
    alter database add standby logfile group 11('/u01/app/oracle/oradata/intedb/standby_redo11.log') size 50M;
    alter database add standby logfile group 12('/u01/app/oracle/oradata/intedb/standby_redo12.log') size 50M;
    alter database add standby logfile group 13('/u01/app/oracle/oradata/intedb/standby_redo13.log') size 50M;
    alter database add standby logfile group 14('/u01/app/oracle/oradata/intedb/standby_redo14.log') size 50M;

    备库同步主库数据

    生成standby controlfile,并复制到standby目录(忽略)

    --ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/tmp/control01.ctl';
    --cp /tmp/control01.ctl /tmp/control02.ctl
    --scp /tmp/control01.ctl /tmp/control02.ctl oracle@192.168.56.111:/u01/oradata/SHST/controlfile/

    Standby数据恢复,Standby上执行

    ##Method1 在线还原数据,需要配置配置静态监听,STANDBY上执行

    rman target sys@SHPD auxiliary sys@SHST
    duplicate database for standby from active database nofilenamecheck;

     ##Method2利用备份集,有target连接

    先备份,duplicate复制库

    rman target sys@SHPD auxiliary /
    duplicate target database for standby;

     ##Method3利用备份集,无target连接

    先备份,duplicate复制库

    rman auxiliary /
    duplicate database for standby backup location '/data/backup' nofilenamecheck;

    开启日志应用

    --打开Standby数据库
    alter database open read only;
    --开启实时日志应用,启用Real-Time Apply;开启MRP进程,停止redo应用
    ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
    --关闭MRP进程(停止应用日志),开启redo应用
    ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
    --使用arch同步模式
    ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

    Monitoring DG

    DG状态监控

    --查看DB状态
    select instance_name,status from v$instance;
    --验证测试data guard
    ALTER SYSTEM ARCHIVE LOG  CURRENT;
    select name,controlfile_type,open_mode,protection_mode,
    protection_level,database_role,SWITCHOVER_STATUS,db_unique_name,
    guard_status,PRIMARY_DB_UNIQUE_NAME
    from v$database;
    SELECT * FROM v$dataguard_stats;
    SELECT NAME,applied FROM v$archived_log order by COMPLETION_TIME desc;
    select * from V$ARCHIVE_DEST;
    select * from v$archive_dest_status;
    select * from v$archive_gap;
    select * from v$archived_log;
    SELECT * FROM v$standby_log;
    select * from v$managed_standby;
    select * from V$LOG;
    select * from v$logfile;
    select * from V$LOG_HISTORY; 

    监控redo传输服务

    Step 1-查看主库最新的归档日志,如果dest2的最新归档日志和dest1的相同,表示已传输到dest2

    SELECT dest_id,MAX(SEQUENCE#), THREAD#
    FROM V$ARCHIVED_LOG
    WHERE RESETLOGS_CHANGE# = (SELECT MAX(RESETLOGS_CHANGE#) FROM V$ARCHIVED_LOG)
    GROUP BY dest_id,THREAD#;

    Step 2-查看备库最新的归档日志,如果dest1的最新归档日志和主库上的相同,表示接受成功

    SELECT dest_id,dest_name,DESTINATION, STATUS, ARCHIVED_THREAD#, ARCHIVED_SEQ#
    FROM V$ARCHIVE_DEST_STATUS
    WHERE STATUS <> 'DEFERRED' 
    AND STATUS <> 'INACTIVE';

    Step 3-确认已在目标上接收到归档重做日志文件

    SELECT LOCAL.THREAD#, LOCAL.SEQUENCE# 
    FROM (SELECT THREAD#, SEQUENCE# 
    FROM V$ARCHIVED_LOG WHERE DEST_ID=1)LOCAL 
    WHERE LOCAL.SEQUENCE# NOT IN(SELECT SEQUENCE# FROM V$ARCHIVED_LOG WHERE DEST_ID=2 
    AND THREAD# = LOCAL.THREAD#);

    Step 4-Trace the progression of redo transmitted to a redo transport destination.LOG_ARCHIVE_TRACE

      


    switchover步骤

    switchover包含两个步骤,首先主库被转换成STANDBY,然后STANDBY被转换成主库,确认没有用户连接到数据库

    /*check1-主库确认没有日志缺口,应该返回VALID和NO GAP*/
    select STATUS, GAP_STATUS from V$ARCHIVE_DEST_STATUS; 
    /*check2-确认备库的临时文件和主库一样*/
    SELECT * FROM v$tempfile;
    /*check3-确认所有重做日志都已在备库应用,查询备库*/
    select NAME, VALUE, DATUM_TIME from V$DATAGUARD_STATS;
    /*check4-主数据库的状态检查,分别确认主库和备库都可以进行角色切换,查询主库-返回TO STANDBY,SESSIONS ACTIVE,那么主库就可以进行切换;备库返回TO PRIMARY,SESSIONS ACTIVE,NOT ALLOWED,就可以切换,备库如果返回SWITCHOVER LATENT或SWITCHOVER PENDING,就要去检查告警日志,看有什么问题,一般是需要应用一些日志,如果是需要应用日志的话,在备库执行如下命令:*/
    select name,open_mode,database_role,protection_mode,SWITCHOVER_STATUS From v$database;
    --recover standby database using backup controlfile;
    /*先将primary切换为standby
    如果SWITCHOVER_STATUS为TO STANDBY,直接switchover;
    如果SWITCHOVER_STATUS为SESSIONS ACTIVE,,需要加with session shutdown,
    实例会关闭
    说明:PRIMARY进行转换完毕后,查看状态会变成RECOVERY NEEDED
    */
    alter database commit to switchover to physical standby;
    alter database commit to switchover to physical standby with session shutdown;
    startup mount;
    /*备库切为主库
    如果SWITCHOVER_STATUS为TO_PRIMARY,直接switchover;
    如果SWITCHOVER_STATUS为SESSIONS ACTIVE,先停MRP,switchover加上with session shutdown*/
    ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; 
    alter database commit to switchover to primary;
    alter database commit to switchover to primary with session shutdown; 
    alter database open; 
    /*在切换后的standby上开启实时日志应用*/ 
    alter database open read only; 
    ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION; 

     failover步骤

    一般情况下failover都是表示primary数据库瘫痪,最起码也是起不来了,因此这种类型的切换基本上不需要primary数据库做什么操作

    /*standby上先查看有没有日志间隙*/
    SELECT * FROM v$archive_gap;
    /*如果存在间隙(online redolog),还能将主库启动到挂载(mount)状态,可以试着将刷新未传输的online日志到备库,如能刷新,故障转移可能不会丢失任何数据*/
    alter system flush redo to 'JED'; 
    /*如果存在间隙,为了尽可能少的丢失数据,应该尝试将所有归档日志应用,应该将主库上的所有归档日志复制到备库,可能有一些归档日志已经在备库存在,但这样能有尽可能多的归档日志,然后要解决备库中的任何日志缺口,首先,复制所有主库的归档到备库,并在数据库中注册它们*/
    alter database register physical logfile '&logfile_path_name'; 
    /*在备库停止日志应用*/
    ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; 
    /*结束应用任何日志,一旦执行了这个命令,备库就必须转换为主库,要不就得重建*/
    ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH;
    /*转换备库为主库*/
    alter database commit to switchover to primary with session shutdown;
    alter database open;
    /*检查*/
    select SWITCHOVER_STATUS from V$DATABASE;
    /*获得原备库转换为主库时的SCN*/
    SELECT to_char(STANDBY_BECAME_PRIMARY_SCN) from V$DATABASE;

    切换为快照standby

    步骤:

    1. 停止Redo Apply
    2. 数据库处于mount,不是open
    3. Ensure that a fast recovery area has been configured. It is not necessary for flashback database to be enabled.
    4. 执行sql,完成转换:
      • ALTER DATABASE CONVERT TO SNAPSHOT STANDBY;
    --查看当前备用数据库的角色,设置FRA,停止mrp
    select open_mode,database_role,flashback_on from v$database;
    alter database recover managed standby database cancel;
    alter system set db_recovery_file_dest_size=500m scope=both;
    alter system set db_recovery_file_dest='/u01/oradata/SHPD/fra' scope=both;
    --关闭并启动到mount
    shutdown immediate;
    startup mount;
    --转换物理standby到快照standby
    alter database convert to snapshot standby;
    select status from v$instance;
    alter database open;
    select open_mode,database_role from v$database;
    --oracle创建了还原点
    select name,storage_size from v$restore_point;

    切换回物理standby

    --查看当前备用数据库的角色
    select open_mode,database_role from v$database;
    --关闭并启动到mount
    shutdown immediate;
    startup mount;
    --转换快照standby到物理standby
    alter database convert to physical standby;
    shutdown immediate;
    startup;

    保护模式切换 

    /*主备保护模式切换,要注意的是log_archive_dest参数的切换,由于最大保护模式与最大可用模式的重做归档进程、网络传输与磁盘写选项是一样的--所以可以直接更改模式就可以了,不需要先修改参数信息*/
    --物理standby先停用mrp
    ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
    --主库启动到mount
    shutdown immediate;
    startup mount;
    --切换到高可用或高保护
    ALTER SYSTEM SET log_archive_dest_2='SERVICE=SHPD SYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=SHPD' SCOPE=BOTH;
    alter database set standby database to maximize protection;
    alter database set standby database to maximize availability;
    alter database open;
    --切换到高性能模式
    ALTER SYSTEM SET log_archive_dest_2='SERVICE=SHPD ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=SHPD' SCOPE=BOTH;
    alter database set standby database to maximize performance;

     

     

     

  • 相关阅读:
    冒泡排序与选择排序
    SVN-cheanup反复操作失败的问题。
    js区分汉字和字符,校验长度
    maven的安装与使用
    java获取登陆用户的IP地址
    kafka创建topics 错误: 找不到或无法加载主类 FilesJavajdk1.7.0_80lib;C:Program
    SOAPwebservice 与Restfull webservice之间的区别
    CAD数据导入Arcgis10.1的依赖关系
    wpf之StackPanel、WrapPanel、WrapPanel之间的关系
    浅谈修饰符
  • 原文地址:https://www.cnblogs.com/guaiguaixiaoqiang/p/11325735.html
Copyright © 2020-2023  润新知