.查询命令
select name,db_unique_name from v$database;
select max(sequence#) from v$archived_log;
查询保护模式
select protection_mode,database_role,open_mode from v$database;
查询最近5个应用的归档
select * from (select name,recid,sequence#,status,applied from v$archived_log order by recid desc) where rownum<5;
查询归档日志号及
select sequence#,status,thread#,block#,process,status from v$managed_standby;
2.打开日志应用及取消日志应用语句:
alter database recover managed standby database using current logfile disconnect from session;
alter database recover managed standby database disconnect from session;
alter database recover managed standby database cancel;
针对data guard采用不同的模式,主备库的启动顺序如下:
1.max performance(最大性能):主库,备库的启动和关闭顺序没有先后
2.max availability(最大可用):
要先启动备库,再启动主库,如果启动顺序相反,主库仍然能启动,但会在主库的alert.log文件中出现如下出错提示:
3.max protection(最大保护):
先启动备库,再启动主库,如果顺序相反,主库实例会自动中断,数据库无法启动,并会在alert.log文件中留下如下的信息:
关库时,先关主库,再关备库
1.standby database 正常的打开与关闭
1.1 针对 physical standby
打开:
--打开数据库
SQL>startup;
-- 开启 mgr 进程
SQL>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE disconnect from session; ( physical standby )
关闭:
-- 关闭 mgr 进程
SQL>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
-- 正常关闭数据库
SQL> shutdown immediate;
1.2 针对 logical standby
-- 开启 mgr 进程
SQL>ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;
-- 关闭 mgr 进程
SQL>ALTER DATABASE STOP LOGICAL STANDBY APPLY;
2. 查看数据库角色与保护模式
SQL> select protection_mode, protection_level, database_role role, switchover_status from v$database;
3.查询每个standby 的状态:
-- 主库执行
SQL> SELECT DEST_ID, STATUS,APPLIED_SCN FROM V$ARCHIVE_DEST WHERE TARGET='STANDBY';
DEST_ID STATUS APPLIED_SCN
---------- --------- -----------
2 VALID 1818069
4. 检查redo 传送情况
-- 备库查看当前 log sequence
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 41
Next log sequence to archive 0
Current log sequence 41
-- 主库日志切换
SQL> alter system switch logfile;
System altered.
-- 备库查看当前 log sequence ,如果 log sequence 有变化说明传输没有问题。
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 41
Next log sequence to archive 0
Current log sequence 42
5. 检查 mrp 应用情况
--备库执行
SQL> SELECT THREAD#, SEQUENCE#, FIRST_CHANGE#,NEXT_CHANGE#,APPLIED FROM V$ARCHIVED_LOG;
THREAD# SEQUENCE# FIRST_CHANGE# NEXT_CHANGE# APPLIED
---------- ---------- ------------- ------------ ---------
1 24 1449716 1451135 YES
1 26 1476706 1481494 YES
1 25 1451135 1476706 YES
1 27 1481494 1491422 YES
1 29 1524315 1547524 YES
6. 查询archived log 的历史信息:(主备都执行,对比是否相同)
SQL> SELECT THREAD#, SEQUENCE#, FIRST_CHANGE#, NEXT_CHANGE# FROM V$LOG_HISTORY;
7. 查询DG的日志信息,这些日志信息可以写入alert log 或者进程的trace 文件
SQL> set pagesize 200
SQL> SELECT MESSAGE FROM V$DATAGUARD_STATUS;
MESSAGE
------------------------------------------
ARC0: Archival started
ARC1: Archival started
ARC2: Archival started
ARC2: Becoming the 'no FAL' ARCH
ARC1: Becoming the heartbeat ARCH
ARC1: Becoming the active heartbeat ARCH
ARC3: Archival started
3、
检查灾备
检查保护模式
在主备库
set linesize 1000;
col DATABASE_ROLE for a25;
col INSTANCE for a25;
col OPEN_MODE for a25;
col PROTECTION_MODE for a25;
col PROTECTION_LEVEL for a25;
col SWITCHOVER_STATUS for a25;
SQL> SELECT DATABASE_ROLE, DB_UNIQUE_NAME INSTANCE, OPEN_MODE, PROTECTION_MODE, PROTECTION_LEVEL, SWITCHOVER_STATUS FROM V$DATABASE;
--确认主库状态为to standby或者为sessions active、保护模式应该maximum performance、角色为PRIMARY,
如果状态异常,请按《检查DataGauard状态》章节操作检查DataGuard信息
--在备库查询时通常为not allowed 或者sessions active,角色为PHYSICAL STANDBY; 当primary主库改为standby角色后,那么其中的任意一个standby库都可能被切换为primary角色,这时需要确认standby库的状态为to primary
检查DataGuard状态
在主备库
SQL> SELECT MESSAGE FROM V$DATAGUARD_STATUS;
MESSAGE
--------------------------------------------------------------------------------
ARC0: Archival started
ARC1: Archival started
Archivelog destination LOG_ARCHIVE_DEST_2 validated for no-data-loss
recovery
Creating archive destination LOG_ARCHIVE_DEST_2: 'dest2'
ARCH: Transmitting activation ID 0
LGWR: Completed archiving log 3 thread 1 sequence 11
Creating archive destination LOG_ARCHIVE_DEST_2: 'dest2'
LGWR: Transmitting activation ID6877c1fe
LGWR: Beginning to archive log 4 thread 1 sequence 12
ARC0: Evaluating archive log 3 thread 1 sequence 11
ARC0: Archive destination LOG_ARCHIVE_DEST_2: Previously completed
ARC0: Beginning to archive log 3 thread 1 sequence 11
Creating archive destination LOG_ARCHIVE_DEST_1:
'/oracle/arch/arch_1_11.arc'
ARC0: Completed archiving log 3 thread 1 sequence 11
ARC1: Transmitting activation ID6877c1fe
15 rows selected.
--使用V$DATAGUARD_STATUS结合alert日志信息,判断DataGuard使用过程中的错误信息,查看当前日志应用的状态。
可以用ls -lt|more命令来查看主库最新归档日志文件的序号,对比备库当前归档日志应用状态了解备库目前和主库日志文件之间的差异情况。
检查进程
在主库
SQL> SELECT PROCESS, CLIENT_PROCESS, SEQUENCE#, STATUS FROM V$MANAGED_STANDBY;
PROCESS CLIENT_P SEQUENCE# STATUS
--------- -------- ---------- ------------
ARCH ARCH 9 CLOSING
ARCH ARCH 9 CLOSING
在备库
SQL> SELECT PROCESS, CLIENT_PROCESS, SEQUENCE#, STATUS FROM V$MANAGED_STANDBY;
PROCESS CLIENT_P SEQUENCE# STATUS
--------- -------- ---------- ------------
ARCH ARCH 0 CONNECTED
ARCH ARCH 0 CONNECTED
MRP0 N/A 10 WAIT_FOR_LOG --备库已经完成了来至于主库的日志文件9,现在正在等待日志文件10
RFS UNKNOWN 0 IDLE
--MRP是应用日志,ARCH是归档进程,RFS是取重做日志的进程。
主库进程需要确认有ARCH进程,备库需要确认存在MRP、ARCH、RFS进程,如果不存在则表示dataguard工作不正常,查询V$DATAGUARD_STATUS视图和alert日志需找具体的错误信息。
检查归档状态
在主库
SELECT DEST_ID,DEST_NAME,STATUS from V$ARCHIVE_DEST_STATUS;
--判断primary库的2个归档路径status是否为valid
在主备库
set linesize 1000
col NAME for a60
col CREATOR for a10
col SEQUENCE# for a10
col APPLIED for a10
col COMPLETION_TIME for a15
SQL> SELECT NAME, CREATOR, SEQUENCE#, APPLIED, COMPLETION_TIME FROM V$ARCHIVED_LOG;
NAME CREATOR SEQUENCE# APP COMPLETIO
---------------------------------------------- ------- --------- --- ---------
H:\ORACLE\ORADATA\PAYROLL\STANDBY\ARC00198.001 ARCH 198 YES 30-MAY-02
H:\ORACLE\ORADATA\PAYROLL\STANDBY\ARC00199.001 ARCH 199 YES 30-MAY-02
H:\ORACLE\ORADATA\PAYROLL\STANDBY\ARC00200.001 ARCH 200 YES 30-MAY-02
H:\ORACLE\ORADATA\PAYROLL\STANDBY\ARC00201.001 LGWR 201 YES 30-MAY-02
H:\ORACLE\ORADATA\PAYROLL\STANDBY\ARC00202.001 ARCH 202 YES 30-MAY-02
H:\ORACLE\ORADATA\PAYROLL\STANDBY\ARC00203.001 LGWR 203 YES 30-MAY-02
判断当前有哪些未APPLY,可通过操作系统命令ls查看对应目录下未APPLY的日志是否已经传输到standby端
或者依据《检查主库未传输的日志》章节操作进行判断;
查询V$DATAGUARD_STATUS是否有ERROR信息;依据《检查进程》章节判断进程是否正常
检查备库归档应用状态
在备库查询
SQL>
ARCHIVED_THREAD# ARCHIVED_SEQ# APPLIED_THREAD# APPLIED_SEQ#
---------------- ------------- --------------- ------------
1 947 1 945
--注意ARCHIVED_SEQ#和APPLIED_SEQ#的差异
SQL> SELECT THREAD#, MAX(SEQUENCE#) FROM V$LOG_HISTORY GROUP BY THREAD#;
THREAD# LAST_APPLIED_LOG
---------- ----------------
1 7
--找出最后应用的日志的sequence
SQL> select t.THREAD#,t.SEQUENCE#,t.APPLIED from v$archived_log t;
THREAD# SEQUENCE# APP
---------- ---------- ---
1 1 YES
1 2 YES
1 3 YES
1 4 YES
1 5 YES
1 6 YES
1 7 YES
7 rows selected.
--找出具体哪些日志被应用了,哪些未被应用
SELECT FIRST_TIME, THREAD#, SEQUENCE#, FIRST_CHANGE#, NEXT_CHANGE# FROM V$LOG_HISTORY;
THREAD# SEQUENCE# FIRST_CHANGE# NEXT_CHANGE#
---------- ---------- ------------- ------------
1 945 74651 74739
--查找备库应用的SCN号
检查主库未传输的日志
--在主库
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#);
THREAD# SEQUENCE#
---------- ----------
1 12
1 13
1 14
在主备库
SQL> select * from V$ARCHIVE_GAP;
注:dest_2目录与dest_1目录中的日志差异
如果有较多未应用的日志,可参考《检查归档状态》章节进行处理。
相关视图
V$ARCHIVE_DEST
V$ARCHIVE_DEST_STATUS
V$ARCHIVE_GAP
V$ARCHIVED_LOG
V$DATABASE
V$DATAFILE
V$DATAGUARD_STATUS
V$LOG
V$LOGFILE
V$LOG_HISTORY
V$MANAGED_STANDBY (Physical Standby Databases Only)
V$STANDBY_LOG
正常开关机顺序
关闭的时候,先关闭主库的listener,再关闭主库,再关闭备库的listene,再关闭备库。
主库(hsvipdb1)
[oracle@vipdb1 ~]$ lsnrctl stop
[oracle@vipdb1 ~]$ sqlplus / as sysdba
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
备库(hsvipdb2)
[oracle@vipdb2 ~]$ lsnrctl stop
[oracle@vipdb2 ~]$ sqlplus / as sysdba
SQL> shutdown immediate;
ORA-01109: database not open
Database dismounted.
ORACLE instance shut down.
启动的时候,先启动备库的listener,再启动备库,再启动主库的listener,再启动主库。
备库(hsvipdb2)
[oracle@vipdb2 ~]$ lsnrctl start
[oracle@vipdb2 ~]$ sqlplus / as sysdba
SQL> startup mount;
ORACLE instance started.
Total System Global Area 2.5166E+10 bytes
Fixed Size 2141736 bytes
Variable Size 2617246168 bytes
Database Buffers 2.2532E+10 bytes
Redo Buffers 14635008 bytes
Database mounted.
SQL> alter database recover managed standby database disconnect from session;
Database altered.
主库(hsvipdb1)
[oracle@vipdb1 ~]$ lsnrctl start
[oracle@vipdb1 ~]$ sqlplus / as sysdba
SQL>startup;
Database closed.
Database dismounted.
ORACLE instance shut down.