Oracle Dataguard备库异常停机修复

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

Oracle Dataguard备库异常停机修复

由于异常关机导致DG备库在启动时遇到以下报错:

SQL> startup nomount;
SQL> alter database mount standby database;
SQL> alter database open;  
alter database open
*
ERROR at line 1:
ORA-10458: standby database requires recovery
ORA-01196: file 1 is inconsistent due to a failed media recovery session
ORA-01110: data file 1:
'/oradata/BANGKOKDG/datafile/o1_mf_system_kxd67djb_.dbf'

下面介绍利用RMAN备份来对备库进行修复的方法。

检查备库SCN

SQL> select to_char(current_scn) from v$database;

TO_CHAR(CURRENT_SCN)
----------------------------------------
1464788

创建主库RMAN备份

在主库上基于SCN做一次RMAN备份:

RMAN> run {
    allocate channel c1 device type disk;
    allocate channel c2 device type disk;
    backup as compressed backupset incremental level 0 database format '/oradata/backup/%d_%T_dbf_%s.bkp';
    backup as compressed backupset archivelog from scn 1464788 format '/oradata/backup/%d_%T_arc_%s.bkp';
    }

在主库上创建备库控制文件:

alter database create standby controlfile as '/oradata/backup/bangkok_4standby_ctl_0201.bkp';

将备份文件拷贝到备库:

scp /oradata/backup/BANGKOK_20230201_arc_2* oracle@172.x.x.x:/oradata/backup/
scp /oradata/backup/BANGKOK_20230201_dbf_* oracle@172.x.x.x:/oradata/backup/
scp /oradata/backup/bangkok_4standby_ctl_0201.bkp oracle@172.x.x.x:/oradata/backup/

利用备份恢复备库

重启备库:

shutdown immediate;
startup nomount;

恢复备库控制文件并挂载备库:

RMAN> restore controlfile from '/oradata/backup/bangkok_4standby_ctl_0201.bkp';
RMAN> sql 'alter database mount';

利用拷贝过来的备份恢复备库:

RMAN> catalog start with '/oradata/backup/' noprompt;
RMAN> run {
    allocate channel c1 device type disk;
    allocate channel c2 device type disk;
    set newname for database to new;        
    restore database;                        
    switch datafile all;                    
    switch tempfile all;
    recover database noredo;                        
    }

需要根据Oracle文件管理模式修改上面的语句(示例中为OMF模式。

检查恢复后的数据文件与操作系统中是否一致:

RMAN> report schema;

RMAN-06139: warning: control file is not current for REPORT SCHEMA
Report of database schema for database with db_unique_name BANGKOKDG

List of Permanent Datafiles
===========================
File Size(MB) Tablespace           RB segs Datafile Name
---- -------- -------------------- ------- ------------------------
1    890      SYSTEM               ***     /oradata/BANGKOKDG/datafile/o1_mf_system_kxmjjs3g_.dbf
2    580      SYSAUX               ***     /oradata/BANGKOKDG/datafile/o1_mf_sysaux_kxmjjs4b_.dbf
3    1010     UNDOTBS1             ***     /oradata/BANGKOKDG/datafile/o1_mf_undotbs1_kxmjjs39_.dbf
4    5        USERS                ***     /oradata/BANGKOKDG/datafile/o1_mf_users_kxmjjs4q_.dbf
5    100      OMF_TBS1             ***     /oradata/BANGKOKDG/datafile/o1_mf_omf_tbs1_kxmjjs4b_.dbf
6    100      omf_tbs2             ***     /oradata/BANGKOKDG/datafile/o1_mf_omf_tbs2_kxmjjs4q_.dbf

List of Temporary Files
=======================
File Size(MB) Tablespace           Maxsize(MB) Tempfile Name
---- -------- -------------------- ----------- --------------------
1    20       TEMP                 32767       /oradata/BANGKOKDG/datafile/o1_mf_temp_%u_.tmp

备库开启日志应用进程:

SQL> alter database recover managed standby database using current logfile disconnect;
SQL> select process,status,sequence#,thread# from v$managed_standby where process='MRP0';

PROCESS   STATUS        SEQUENCE#    THREAD#
--------- ------------ ---------- ----------
MRP0      WAIT_FOR_GAP          9          1

检查备库延迟:

SQL> set lines 200
SQL> col value for a30
SQL> select name,value,unit,time_computed from v$dataguard_stats where name in ('transport lag','apply lag');

NAME                             VALUE                          UNIT                           TIME_COMPUTED
-------------------------------- ------------------------------ ------------------------------ ------------------------------
transport lag                    +00 00:00:00                   day(2) to second(0) interval   02/01/2023 09:38:31
apply lag                        +00 00:00:00                   day(2) to second(0) interval   02/01/2023 09:38:31

SQL> select process,status,sequence#,thread# from v$managed_standby where process='MRP0';

PROCESS   STATUS        SEQUENCE#    THREAD#
--------- ------------ ---------- ----------
MRP0      APPLYING_LOG         10          1

等待transport lagapply lag的VALUE值都变为0后再打开备库:

SQL> alter database recover managed standby database cancel;

SQL> alter database open;

SQL> alter database recover managed standby database using current logfile disconnect from session;

检查DG同步状态

检查备库状态:

SQL> select database_role,protection_mode,protection_level,open_mode from v$database;

DATABASE_ROLE    PROTECTION_MODE      PROTECTION_LEVEL     OPEN_MODE
---------------- -------------------- -------------------- --------------------
PHYSICAL STANDBY MAXIMUM PERFORMANCE  MAXIMUM PERFORMANCE  READ ONLY WITH APPLY

SQL> select a.inst_id,a.db_unique_name,a.database_role,a.protection_level,a.protection_mode,a.open_mode,a.switchover_status,
b.host_name,b.thread# from gv$database a left join gv$instance b on a.inst_id=b.inst_id order by a.inst_id;   

   INST_ID DB_UNIQUE_NAME  DATABASE_ROLE    PROTECTION_LEVEL     PROTECTION_MODE      OPEN_MODE            SWITCHOVER_STATUS    HOST_NAME          THREAD#
---------- --------------- ---------------- -------------------- -------------------- -------------------- -------------------- --------------- ----------
         1 bangkokdg       PHYSICAL STANDBY MAXIMUM PERFORMANCE  MAXIMUM PERFORMANCE  READ ONLY WITH APPLY NOT ALLOWED          standbydb                1
--> NOT ALLOWED在备库表示未收到主库发来的切换请求

检查主库状态:

set lines 220
col host_name for a15
col db_unique_name for a15
col switchover_status for a20
SQL> select a.inst_id,a.db_unique_name,a.database_role,a.protection_level,a.protection_mode,a.open_mode,a.switchover_status,
b.host_name,b.thread# from gv$database a left join gv$instance b on a.inst_id=b.inst_id order by a.inst_id;    

   INST_ID DB_UNIQUE_NAME  DATABASE_ROLE    PROTECTION_LEVEL     PROTECTION_MODE      OPEN_MODE            SWITCHOVER_STATUS    HOST_NAME          THREAD#
---------- --------------- ---------------- -------------------- -------------------- -------------------- -------------------- --------------- ----------
         1 bangkok         PRIMARY          MAXIMUM PERFORMANCE  MAXIMUM PERFORMANCE  READ WRITE           TO STANDBY           primarydb                
--> TO STANDBY在主库表示可以切换为备库
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: oracle