【DB笔试面试763】在Oracle中,物理DG维护中常用到的SQL语句有哪些?


题目部分

在Oracle中,物理DG维护中常用到的SQL语句有哪些?

     

答案部分

1.启用日志应用

1ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

2.启用实时的日志应用

1ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;

DISCONNECT FROM SESSION子句并非必需,该子句的作用是指定启动完应用后自动退出到命令操作符前。如果不指定该子句的话,那么当前SESSION就会一直停留处理Redo应用,如果想做其它操作,那么就只能新建一个连接。

3.停止日志应用服务

1ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

4.查看DG备机是否启用了日志应用,有两种办法可以判断:①可以查看是否有mrp进程,如果看不到mrp进程,那么说明没有启用日志应用。②查看V$ARCHIVE_DEST_STATUSRECOVERY_MODE列,若启用了实时应用,则在Oracle 11g显示MANAGED REAL TIME APPLY,在Oracle 10g显示MANAGED

1[oracle@dg ~]$ ps -ef|grep ora_mrp
2oracle   19592     1  0 10:15 ?        00:00:01 ora_mrp0_phydb

5.DG总体情况查询

以下的SQL是一个非常有用的SQL语句,可以查询出当前DG的运行和配置的总体情况:

 1SET LINE 9999
 2COL  DEST_NAME FORMAT A20
 3COL DESTINATION FORMAT A15
 4COL GAP_STATUS FORMAT A10
 5COL DB_UNIQUE_NAME FORMAT A15
 6COL ERROR FORMAT A10
 7COL APPLIED_SCN FOR 999999999999999
 8SELECT AL.THREAD#,
 9       ADS.DEST_ID,
10       ADS.DEST_NAME,
11       (SELECT ADS.TYPE || ' ' || AD.TARGET
12          FROM V$ARCHIVE_DEST AD
13         WHERE AD.DEST_ID = ADS.DEST_ID) TARGET,
14       ADS.DATABASE_MODE,
15       ADS.STATUS,
16       ADS.ERROR,
17       ADS.RECOVERY_MODE,
18       ADS.DB_UNIQUE_NAME,
19       ADS.DESTINATION,
20       ADS.GAP_STATUS,
21       (SELECT MAX(SEQUENCE#) FROM V$LOG NA WHERE NA.THREAD# = AL.THREAD#) CURRENT_SEQ#,
22       MAX(SEQUENCE#) LAST_ARCHIVED,
23       MAX(CASE
24             WHEN AL.APPLIED = 'YES' AND ADS.TYPE <> 'LOCAL' THEN
25              AL.SEQUENCE#
26           END) APPLIED_SEQ#,
27       (SELECT AD.APPLIED_SCN
28          FROM V$ARCHIVE_DEST AD
29         WHERE AD.DEST_ID = ADS.DEST_ID) APPLIED_SCN
30  FROM (SELECT *
31          FROM V$ARCHIVED_LOG V
32         WHERE V.RESETLOGS_CHANGE# =
33               (SELECT D.RESETLOGS_CHANGE# FROM V$DATABASE D)) AL,
34       V$ARCHIVE_DEST_STATUS ADS
35 WHERE AL.DEST_ID(+) = ADS.DEST_ID
36   AND ADS.STATUS != 'INACTIVE'
37 GROUP BY AL.THREAD#,
38          ADS.DEST_ID,
39          ADS.DEST_NAME,
40          ADS.STATUS,
41          ADS.ERROR,
42          ADS.TYPE,
43          ADS.DATABASE_MODE,
44          ADS.RECOVERY_MODE,
45          ADS.DB_UNIQUE_NAME,
46          ADS.DESTINATION,
47          ADS.GAP_STATUS
48 ORDER BY ADS.DEST_ID,AL.THREAD#;

如下是一个运行结果截图,由于太长,作者分割成了2块图,可以看到主库和备库都是RAC环境,RAC1当前的日志号为26DG应用到了25,而RAC2当前的日志号为16DG应用到了14号日志,备库的模式都是实时应用模式(MANAGED REAL TIME APPLY),说明当前的RACDG环境是正常的环境。

 

6.日志应用情况

检查是否存在GAPSQL语句:

1SELECT THREAD#,LOW_SEQUENCE#,HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;

物理DG日志应用情况:

 1COL NAME FOR A100
 2SET LINESIZE 9999  PAGESIZE 9999
 3COL NEXT_CHANGE# FOR 999999999999999
 4SELECT THREAD#, NAME, SEQUENCE#, ARCHIVED, APPLIED, A.NEXT_CHANGE#
 5  FROM V$ARCHIVED_LOG A
 6 WHERE A.SEQUENCE# >= (SELECT MAX(B.SEQUENCE#) - 3
 7                         FROM V$ARCHIVED_LOG B
 8                        WHERE B.THREAD# = A.THREAD#
 9                          AND B.RESETLOGS_CHANGE# = A.RESETLOGS_CHANGE#
10                          AND B.RESETLOGS_CHANGE# =
11                              (SELECT D.RESETLOGS_CHANGE# FROM V$DATABASE D)
12                          AND B.APPLIED = 'YES' 
13              GROUP BY B.THREAD#)
14 ORDER BY A.THREAD#, A.SEQUENCE#;

假设有如下的结果:

1   THREAD# NAME                           SEQUENCE# ARC APPLIED       NEXT_CHANGE#
2---------- ----------------------------- ---------- --- --------- ----------------
3         1 /arch/1_121_916055651.dbf            121 YES YES                5792359
4         1 /arch/1_122_916055651.dbf            122 YES YES                5799614
5         1 /arch/1_123_916055651.dbf            123 YES NO                 5839995
6         2 /arch/2_94_916055651.dbf              94 YES YES                5782610
7         2 /arch/2_95_916055651.dbf              95 YES YES                5799607
8         2 /arch/2_96_916055651.dbf              96 YES YES                5839974

可以看出,实例1日志应用到了123号,而实例2日志应用到了96号。

7.物理备库进程信息

 1COL GROUP_# FORMAT A5
 2COL CLIENT_PID FORMAT A8
 3SET LINE 9999 PAGESIZE 9999
 4SELECT A.INST_ID,
 5       A.PROCESS,
 6       A.CLIENT_PROCESS,
 7       A.CLIENT_PID,
 8       A.STATUS,
 9       A.GROUP#         GROUP_#,
10       A.THREAD#,
11       A.SEQUENCE#,
12       A.DELAY_MINS,
13       A.RESETLOG_ID,
14       C.SID,
15       C.SERIAL#,
16       A.PID            SPID,
17       B.PNAME
18  FROM GV$MANAGED_STANDBY A, GV$PROCESS B, GV$SESSION C
19 WHERE A.PID = B.SPID
20   AND B.ADDR = C.PADDR
21   AND A.INST_ID = B.INST_ID
22   AND B.INST_ID = C.INST_ID
23ORDER BY A.INST_ID,B.PNAME;

【DB笔试面试763】在Oracle中,物理DG维护中常用到的SQL语句有哪些?_第1张图片

① PROCESS:进程名称,如ARCHRFSMRP0

② CLIENT_PID:在备库查询时对应的Primary数据库中的进程,如ARCHLGWR等,在主库查询时就是后台进程

③ SEQUENCE#:归档序号

④ STATUS:进程的当前状态,值较多,常见的有:

ALLOCATED:正准备连接Primary数据库

ATTACHED:正在连接Primary数据库

CONNECTED:已连接至Primary数据库

IDLE:空闲中

RECEIVING:归档文件接收中

OPENING:归档文件处理中

CLOSING:归档文件处理完,收尾中

WRITINGRedo数据库写向归档文件中

WAIT_FOR_LOG:等待新的Redo数据中

WAIT_FOR_GAP:归档有中断,正等待中断的那部分Redo数据

APPLYING_LOG:应用Redo数据中

8.手动注册日志

如果有日志文件未被传输或未被注册到备库,那么可以使用如下命令手工注册到备库。下面的SQL语句可以生成物理和逻辑DG注册的SQL语句,日志号从19802000

1SELECT 'alter database register or replace logical logfile ''/arch/log_1_' || A ||
2       ' _666200636.arc'';' LOGICAL_DG,
3       'alter database register or replace  logfile ''/arch/log_1_' || A ||
4       ' _666200636.arc'';' PHYSICAL_DG
5  FROM (SELECT LEVEL A FROM DUAL CONNECT BY LEVEL <= 2000)
6 WHERE A >= 1980;

本文选自《Oracle程序员面试笔试宝典》,作者:小麦苗

---------------优质麦课------------

详细内容可以添加麦老师微信或QQ私聊。

About Me:小麦苗

 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用

● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/

 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

 版权所有,欢迎分享本文,转载请保留出处

 QQ:646634621  QQ群:618766405

 提供OCP、OCM和高可用部分最实用的技能培训

● 题目解答若有不当之处,还望各位朋友批评指正,共同进步

DBA宝典

长按下图识别二维码或微信扫描下图二维码来关注小麦苗的微信公众号:xiaomaimiaolhr,学习最实用的数据库技术。

你可能感兴趣的:(【DB笔试面试763】在Oracle中,物理DG维护中常用到的SQL语句有哪些?)