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

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

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

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

相关推荐
doubt。26 分钟前
【BUUCTF】[RCTF2015]EasySQL1
网络·数据库·笔记·mysql·安全·web安全
Maybe_ch1 小时前
群晖部署-Calibreweb
数据库·群晖·nas
小辛学西嘎嘎1 小时前
MVCC在MySQL中实现无锁的原理
数据库·mysql
CC呢1 小时前
基于STM32单片机火灾安全监测一氧化碳火灾
数据库·mongodb
MasterNeverDown2 小时前
解决 PostgreSQL 中创建 TimescaleDB 扩展的字符串错误
数据库·postgresql·oracle
limts2 小时前
Oracle之开窗函数使用
数据库·oracle
亦黑迷失3 小时前
vue 项目优化之函数式组件
前端·vue.js·性能优化
拾荒的小海螺4 小时前
JAVA:Spring WebClient 的应用指南
java·数据库·spring
LuckyRich14 小时前
2024年博客之星主题创作|2024年度感想与新技术Redis学习
数据库·redis·缓存
重整旗鼓~4 小时前
4.flask-SQLAlchemy,表Model定义、增删查改操作
数据库·python·flask