Oralce数据库巡检SQL脚本

文章目录

    • Oralce数据库巡检SQL脚本
      • [1 检查表空间使用情况](#1 检查表空间使用情况)
      • [2 检查是否有 offline 状态的表空间](#2 检查是否有 offline 状态的表空间)
      • [3 在线日志是否存在小于 50M 的及状态不正常](#3 在线日志是否存在小于 50M 的及状态不正常)
      • [4 检查锁阻塞](#4 检查锁阻塞)
      • [5 查看是否有僵死进程](#5 查看是否有僵死进程)
      • [6 检查是否有失效索引](#6 检查是否有失效索引)
      • [7 检查不起作用的约束](#7 检查不起作用的约束)
      • [8 缓冲区命中率](#8 缓冲区命中率)
      • [9 数据字典命中率](#9 数据字典命中率)
      • [10 库缓存命中率](#10 库缓存命中率)
      • [11 内存中的排序](#11 内存中的排序)
      • [12 磁盘中的排序](#12 磁盘中的排序)
      • [13 临时空间使用率](#13 临时空间使用率)
      • [14 检查ORACLE实例状态](#14 检查ORACLE实例状态)
      • [15 检查ORACLE表空间的状态](#15 检查ORACLE表空间的状态)
      • [16 检查ORACLE所有数据文件状态](#16 检查ORACLE所有数据文件状态)
      • [17 检查所有回滚段状态](#17 检查所有回滚段状态)
      • [18 检查一些扩展异常的对象](#18 检查一些扩展异常的对象)
      • [19 DISK READ最高的SQL语句的获取](#19 DISK READ最高的SQL语句的获取)
      • [20 性能最差的前10条SQL](#20 性能最差的前10条SQL)
      • [21 检查运行很久的SQL](#21 检查运行很久的SQL)
      • [22 检查碎片程度高的表](#22 检查碎片程度高的表)
      • [23 检查死锁及处理](#23 检查死锁及处理)
      • [24 失效的触发器](#24 失效的触发器)
      • [25 失败的JOB](#25 失败的JOB)

Oralce数据库巡检SQL脚本

1 检查表空间使用情况

sql 复制代码
SELECT B.TABLESPACE_NAME          TABLESPACE,
       A.EXTENT_MANAGEMENT        EXT_MGT,
       A.SEGMENT_SPACE_MANAGEMENT SEG_MGT,
       A.STATUS,
       A.LOGGING,
       B.TOTAL,
       B.FREE,
       B.USED_PCT
  FROM DBA_TABLESPACES A,
       (SELECT D.TABLESPACE_NAME TABLESPACE_NAME,
               ROUND((D.SUMBYTES / 1024 / 1024 / 1024), 2) || 'GB' TOTAL,
               ROUND(DECODE(F.SUMBYTES, NULL, 0, F.SUMBYTES) / 1024 / 1024 / 1024,
                     2) || 'GB' FREE,
               ROUND((D.SUMBYTES - DECODE(F.SUMBYTES, NULL, 0, F.SUMBYTES)) * 100 /
                     D.SUMBYTES,
                     2) || '%' USED_PCT
          FROM (SELECT TABLESPACE_NAME, SUM(BYTES) SUMBYTES
                  FROM DBA_FREE_SPACE
                 GROUP BY TABLESPACE_NAME) F,
               (SELECT TABLESPACE_NAME,     
                       SUM(BYTES) SUMBYTES
                  FROM DBA_DATA_FILES
                 GROUP BY TABLESPACE_NAME) D
         WHERE F.TABLESPACE_NAME(+) = D.TABLESPACE_NAME
         ORDER BY D.TABLESPACE_NAME) B
 WHERE A.TABLESPACE_NAME = B.TABLESPACE_NAME;

2 检查是否有 offline 状态的表空间

sql 复制代码
SELECT FILE_ID AS ID,
       RELATIVE_FNO "FNO",
       ROUND(BYTES / 1024 / 1024) AS MBYTES,
       ROUND(MAXBYTES / 1024 / 1024) MAXMBYTES,
       BLOCKS,
       MAXBLOCKS,
       AUTOEXTENSIBLE "AUTO",
       INCREMENT_BY "INC",
       ROUND(USER_BYTES / 1024 / 1024) "NOW_MB",
       USER_BLOCKS,
       STATUS,
       ONLINE_STATUS "ONLINE_S"
  FROM DBA_DATA_FILES;

3 在线日志是否存在小于 50M 的及状态不正常

sql 复制代码
SELECT A.GROUP#, A.STATUS, A.BYTES, B.MEMBER, A.ARCHIVED
  FROM V$LOG A, V$LOGFILE B
 WHERE A.GROUP# = B.GROUP#;

4 检查锁阻塞

sql 复制代码
SELECT DECODE(REQUEST, 0, '阻塞者:', '等待者:') || SID SID,
       ID1,
       ID2,
       LMODE,
       REQUEST,
       TYPE
  FROM V$LOCK
 WHERE (ID1, ID2, TYPE) IN
       (SELECT ID1, ID2, TYPE FROM V$LOCK WHERE REQUEST > 0)
 ORDER BY ID1, REQUEST;

5 查看是否有僵死进程

sql 复制代码
SELECT SPID FROM V$PROCESS WHERE ADDR NOT IN (SELECT PADDR FROM V$SESSION);

6 检查是否有失效索引

sql 复制代码
SELECT OWNER, A.INDEX_NAME, A.INDEX_TYPE, A.STATUS
  FROM DBA_INDEXES A
 WHERE STATUS = 'UNUSABLE';

SELECT A.INDEX_NAME, A.PARTITION_NAME, A.TABLESPACE_NAME, A.STATUS
  FROM DBA_IND_PARTITIONS A
 WHERE STATUS = 'UNUSABLE';

7 检查不起作用的约束

sql 复制代码
SELECT OWNER, CONSTRAINT_NAME, TABLE_NAME, CONSTRAINT_TYPE, STATUS
  FROM DBA_CONSTRAINTS
 WHERE STATUS = 'DISABLE'
   AND CONSTRAINT_TYPE = 'P';

8 缓冲区命中率

缓冲命中率应大于90%。

sql 复制代码
SELECT (1 - (SUM(DECODE(NAME, 'PHYSICAL READS', VALUE, 0)) /
       (SUM(DECODE(NAME, 'DB BLOCK GETS', VALUE, 0)) +
       SUM(DECODE(NAME, 'CONSISTENT GETS', VALUE, 0))))) * 100 "HIT RATIO"
  FROM V$SYSSTAT;

9 数据字典命中率

数据字典命中率应大于 95%。

sql 复制代码
SELECT (1 - (SUM(GETMISSES) / SUM(GETS))) * 100 "HIT RATIO" FROM V$ROWCACHE;

10 库缓存命中率

库缓存命中率应大于 95%。

sql 复制代码
SELECT SUM(PINS) / (SUM(PINS) + SUM(RELOADS)) * 100 "HIT RATIO" FROM V$LIBRARYCACHE;

11 内存中的排序

如果存在大量的磁盘排序,则表明检查目前系统中消耗大量磁盘的 SQL 是否已经经过调整。

sql 复制代码
SELECT NAME, VALUE FROM V$SYSSTAT WHERE NAME LIKE '%SORTS%';

12 磁盘中的排序

检查使用磁盘排序的会话信息,可以定位执行了大量磁盘排序的会话。

sql 复制代码
SELECT B.NAME, A.SID, A.VALUE
  FROM V$SESSTAT A, V$STATNAME B
 WHERE A.STATISTIC# = B.STATISTIC#
   AND B.NAME = 'SORTS (DISK)'
   AND A.VALUE > 0
   AND ROWNUM < 10
 ORDER BY A.VALUE DESC;

13 临时空间使用率

sql 复制代码
SELECT * FROM V$TEMP_SPACE_HEADER;

14 检查ORACLE实例状态

其中"STATUS"表示ORACLE当前的实例状态,必须为"OPEN";"DATABASE_STATUS"表示ORACLE当前数据库的状态,必须为"ACTIVE"。

sql 复制代码
SELECT INSTANCE_NAME, HOST_NAME, STARTUP_TIME, STATUS, DATABASE_STATUS FROM V$INSTANCE;

15 检查ORACLE表空间的状态

输出结果中STATUS应该都为ONLINE。

sql 复制代码
SELECT TABLESPACE_NAME, STATUS FROM DBA_TABLESPACES;

16 检查ORACLE所有数据文件状态

输出结果中"STATUS"应该都为"ONLINE"。

sql 复制代码
SELECT NAME, STATUS FROM V$DATAFILE;

输出结果中"STATUS"应该都为"AVAILABLE"。

sql 复制代码
SELECT FILE_NAME, STATUS FROM DBA_DATA_FILES;

17 检查所有回滚段状态

输出结果中所有回滚段的"STATUS"应该为"ONLINE"。

sql 复制代码
SELECT SEGMENT_NAME, STATUS FROM DBA_ROLLBACK_SEGS;

18 检查一些扩展异常的对象

如果有记录返回,则这些对象的扩展已经快达到它定义时的最大扩展值,对于这些对象要修改它的存储结构参数。

sql 复制代码
SELECT SEGMENT_NAME,
       SEGMENT_TYPE,
       TABLESPACE_NAME,
       (EXTENTS / MAX_EXTENTS) * 100 PERCENT
  FROM SYS.DBA_SEGMENTS
 WHERE MAX_EXTENTS != 0
   AND (EXTENTS / MAX_EXTENTS) * 100 >= 95
 ORDER BY PERCENT;

19 DISK READ最高的SQL语句的获取

sql 复制代码
SELECT SQL_TEXT
  FROM (SELECT * FROM V$SQLAREA ORDER BY DISK_READS)
 WHERE ROWNUM <= 5;

20 性能最差的前10条SQL

sql 复制代码
SELECT *
  FROM (SELECT PARSING_USER_ID EXECUTIONS,
               SORTS,
               COMMAND_TYPE,
               DISK_READS,
               SQL_TEXT
          FROM V$SQLAREA
         ORDER BY DISK_READS DESC)
 WHERE ROWNUM < 10;

21 检查运行很久的SQL

sql 复制代码
SELECT USERNAME,
       SID,
       OPNAME,
       ROUND(SOFAR * 100 / TOTALWORK, 0) || '%' AS PROGRESS,
       TIME_REMAINING,
       SQL_TEXT
  FROM V$SESSION_LONGOPS, V$SQL
 WHERE TIME_REMAINING <> 0
   AND SQL_ADDRESS = ADDRESS
   AND SQL_HASH_VALUE = HASH_VALUE;

22 检查碎片程度高的表

sql 复制代码
SELECT SEGMENT_NAME TABLE_NAME, COUNT(*) EXTENTS
  FROM DBA_SEGMENTS
 WHERE OWNER NOT IN ('SYS', 'SYSTEM')
 GROUP BY SEGMENT_NAME
HAVING COUNT(*) = (SELECT MAX(COUNT(*))
                     FROM DBA_SEGMENTS
                    GROUP BY SEGMENT_NAME);

23 检查死锁及处理

sql 复制代码
SELECT SID,
       SERIAL#,
       USERNAME,
       SCHEMANAME,
       OSUSER,
       MACHINE,
       TERMINAL,
       PROGRAM,
       OWNER,
       OBJECT_NAME,
       OBJECT_TYPE,
       O.OBJECT_ID
  FROM DBA_OBJECTS O, V$LOCKED_OBJECT L, V$SESSION S
 WHERE O.OBJECT_ID = L.OBJECT_ID
   AND S.SID = L.SESSION_ID;

24 失效的触发器

sql 复制代码
SELECT OWNER, TRIGGER_NAME, TABLE_NAME, STATUS
  FROM DBA_TRIGGERS
 WHERE STATUS = 'DISABLED';

25 失败的JOB

sql 复制代码
SELECT JOB, WHAT, LAST_DATE, NEXT_DATE, FAILURES, BROKEN
  FROM DBA_JOBS
 WHERE SCHEMA_USER = 'USER';

原文链接:https://mp.weixin.qq.com/s?__biz=MzkxNzI1OTE3Mw==\&mid=2247493675\&idx=1\&sn=2d8caece9f669925cda2f364ebfdb9c3\&chksm=c141fee1f63677f7bb22b74db64d0849830e7b11adce56472bc33afab5b022c223666c624fbf#rd

👍 点赞,你的认可是我创作的动力!

⭐️ 收藏,你的青睐是我努力的方向!

✏️ 评论,你的意见是我进步的财富!

相关推荐
8Qi818 分钟前
Redis哨兵模式(Sentinel)深度解析
java·数据库·redis·分布式·缓存·sentinel
数据库小组22 分钟前
从业务库到实时分析库,NineData 构建 MySQL 到 SelectDB 同步链路
数据库·mysql·数据库管理工具·数据同步·ninedata·数据库迁移·selectdb
CDN36028 分钟前
CDN HTTPS 证书配置失败?SSL 部署与域名绑定常见问题
数据库·https·ssl
Chengbei1134 分钟前
一次比较简单的360加固APP脱壳渗透
网络·数据库·web安全·网络安全·系统安全·网络攻击模型·安全架构
寒秋花开曾相惜35 分钟前
(学习笔记)3.9 异质的数据结构(3.9.1 结构)
c语言·网络·数据结构·数据库·笔记·学习
mcooiedo1 小时前
mybatisPlus打印sql配置
数据库·sql
wudl55661 小时前
MySQL 8.0.42 Docker 开发部署手册
数据库·mysql·docker
xhuiting1 小时前
MySQL专题总结(四)—— 高可用
java·数据库·mysql
kjmkq1 小时前
目工业级宽温SSD哪个品牌不掉盘最稳定?宽温环境下的稳定性性技术解析
数据库·存储
Predestination王瀞潞1 小时前
Java EE3-我独自整合(第二章:Spring IoC 入门案例)
数据库·spring·java-ee