高效进行 Oracle 日常巡检——数据库性能与安全检查

​对于线上的业务,oracle的数据库运行的稳定性和安全性是用户关心的一个至关重要的问题,除了通过监控平台对数据库进行监控以外,还需要定期对数据库进行“体检”,是保障数据库稳定运行的必不可的辅助手段。本文简要介绍在系列一的基础上需要巡检的内容,主要包括资源使用、性能、安全性等。

检查oracle相关资源的使用情况

主要检查Oracle相关资源的使用情况,包含:

  • 检查Oracle初始化文件中相关的参数值
  • 检查数据库连接情况
  • 检查系统磁盘空间
  • 检查Oracle各个表空间使用情况
  • 检查一些扩展异常的对象
  • 检查system表空间内的内容
  • 检查对象的下一扩展与表空间的最大扩展值

总共七个部分。

1.1 检查oracle初始化文件中相关参数

若LIMITVALU-MAXUTILIZATION<=5,则表明与RESOURCENAME相关的Oracle初始化参数需要调整。可以通过修改Oracle初始化参数文件$ORACLEBASE/admin/ORCL/pfile/initORCL.ora来修改。

1.2 检查数据库连接情况

查看当前会话连接数,是否属于正常范围。

其中:SID 会话(session)的ID号;

SERIAL# 会话的序列号,和SID一起用来唯一标识一个会话;

USERNAME 建立该会话的用户名;

PROGRAM 这个会话是用什么工具连接到数据库的;

STATUS 当前这个会话的状态,ACTIVE表示会话正在执行某些任务,INACTIVE表示当前会话没有执行任何操作;

1.3 检查系统磁盘空间

如果文件系统的剩余空间过小或增长较快,需对其进行确认并删除不用的文件以释放空间。

1.4 检查表空间的使用情况

如果空闲率%Free小于10%以上(包含10%),则注意要增加数据文件来扩展表空间而不要是用数据文件的自动扩展功能。

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

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

1.6 检查system表空间内的内容

如果记录返回,则表明system表空间内存在一些非system和sys用户的对象。应该进一步检查这些对象是否与我们应用相关。如果相关请把这些对象移到非System表空间,同时应该检查这些对象属主的缺省表空间值。

1.7 检查对象的下一扩展与表空间的最大扩展值

如果有记录返回,则表明这些对象的下一个扩展大于该对象所属表空间的最大扩展值,需调整相应表空间的存储参数。

检查数据库的性能

检查Oracle数据库性能情况,包含:

  • 检查数据库的等待事件
  • 检查死锁及处理
  • 检查cpu、I/O、内存性能
  • 查看是否有僵死进程
  • 检查行链接/迁移
  • 定期做统计分析
  • 检查缓冲区命中率
  • 检查共享池命中率
  • 检查排序区
  • 检查日志缓冲区

总共十个部分。

2.1 检查数据库的等待事件

set pages 80
set lines 120
col event for a40
select sid,event,p1,p2,p3,WAIT_TIME,SECONDS_IN_WAIT from v$session_wait where event not like 'SQL%' and event not like 'rdbms%';

如果数据库长时间持续出现大量像latch free,enqueue,buffer busy waits,db file sequential read,db file scattered read等等待事件时,需要对其进行分析,可能存在问题的语句。

2.2 Disk Read最高的SQL语句的获取

SQL>SELECT SQL_TEXT FROM (SELECT * FROM V$SQLAREA ORDER BY DISK_READS)
WHERE ROWNUM<=5 desc;

2.3 查找前十条性能差的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 ;

2.4 等待时间最多的5个系统等待事件的获取

SELECT * FROM (SELECT * FROM V$SYSTEM_EVENT WHERE EVENT NOT LIKE 'SQL%' ORDER BY TOTAL_WAITS DESC) WHERE ROWNUM<=5;

2.5 检查运行很久的SQL

COLUMN USERNAME FORMAT A12
COLUMN OPNAME FORMAT A16
COLUMN PROGRESS FORMAT A8
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;

2.6 检查消耗CPU最高的进程

SET LINE 240
SET VERIFY OFF
COLUMN SID FORMAT 999
COLUMN PID FORMAT 999
COLUMN S_# FORMAT 999
COLUMN USERNAME FORMAT A9 HEADING "ORA USER"
COLUMN PROGRAM FORMAT A29
COLUMN SQL FORMAT A60
COLUMN OSNAME FORMAT A9 HEADING "OS USER"
SELECT P.PID PID,S.SID SID,P.SPID SPID,S.USERNAME USERNAME,S.OSUSER OSNAME,P.SERIAL# S_#,P.TERMINAL,P.PROGRAM PROGRAM,P.BACKGROUND,S.STATUS,RTRIM(SUBSTR(A.SQL_TEXT, 1, 80)) SQLFROM V$PROCESS P, V$SESSION S,V$SQLAREA A WHERE P.ADDR = S.PADDR AND S.SQL_ADDRESS = A.ADDRESS (+) AND P.SPID LIKE '%&1%';

2.7 检查碎片程序高的表

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);

2.8 检查表空间的 I/O 比例

SQL>  SELECT DF.TABLESPACE_NAME NAME,DF.FILE_NAME "FILE",F.PHYRDS PYR, F.PHYBLKRD PBR,F.PHYWRTS PYW, F.PHYBLKWRT PBW FROM V$FILESTAT F, DBA_DATA_FILES DF WHERE F.FILE# = DF.FILE_ID ORDER BY DF.TABLESPACE_NAME;

2.9 检查文件系统的 I/O 比例

SQL> SELECT SUBSTR(A.FILE#,1,2) "#", SUBSTR(A.NAME,1,30) "NAME", A.STATUS,A.BYTES,B.PHYRDS,B.PHYWRTS FROM V$DATAFILE A, V$FILESTAT B WHERE A.FILE# = B.FILE#;

2.10 检查死锁及处理

查询目前锁对象信息:

col sid for 999999
col username for a10
col schemaname for a10
col osuser for a16
col machine for a16
col terminal for a20
col owner for a10
col object_name for a30
col object_type for a10
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;

oracle级kill掉该session:

alter system kill session '&sid,&serial#';

操作系统级kill掉session:

#> kill -9 pid

2.11查看是否有僵死进程

select spid from v$process where addr not in (select paddr from v$session);

有些僵尸进程有阻塞其他业务的正常运行,定期杀掉僵尸进程。

2.12 检查缓冲区命令中率

2.13 检查共享池命令中率

如低于95%,则需要调整应用程序使用绑定变量,或者调整数据库参数shared pool的大小。

2.14检查排序区

如果disk/(memoty+row)的比例过高,则需要调整sortareasize(workareasizepolicy=false)或pgaaggregatetarget(workareasizepolicy=true)。

2.15 检查日志缓中区

如果redo buffer allocation retries/redo entries 超过1% ,则需要增大log_buffer。

检查数据库cpu、I/O、内存性能

3.1 CPU使用情况

# top# date;top

3.2 内存使用情况

# free -m
# free -g

3.3 系统io情况

# iostat -k 1 3

检查Oracle数据库的安全性

主要检查Oracle数据库的安全性,包含:检查系统安全信息,定期修改密码,总共两个部分。

4.1 检查系统安全日志信息

系统安全日志文件的目录在/var/log 下,主要检查登录成功或失败的用户日志信息。

检查登录成功的日志:

[root@rac2 ~]# grep -i accepted /var/log/secure
Jan 8 08:44:43 rac2 sshd[29559]: Accepted password for root from ::ffff:10.10.10.6 port 1119 ssh2……

检查登录失败的日志:

[root@rac2 ~]# grep -i inval /var/log/secure &&grep -i failed /var/log/secure
Jan 9 10:30:44 rac2 sshd[3071]: Invalid user ydbuser from ::ffff:192.168.3.5
Jan 9 10:30:56 rac2 sshd[3071]: Failed password for invalid user ydbuser from ::ffff:192.168.3.5 port 36005 ssh2
Jan 9 10:30:56 rac2 sshd[3071]: Failed password for invalid user ydbuser from ::ffff:192.168.3.5 port 36005 ssh2
Jan 10 22:44:38 rac2 sshd[21611]: Failed password for root from ::ffff:10.10.10.6 port 1723 ssh2

在出现的日志信息中没有错误(Invalid、refused)提示,如果没有(Invalid、refused)视为系统正常,出现错误提示,应作出系统告警通知。

4.2 检查用户修改密码

数据库系统上往往存在很多的用户,如:第三方数据库监控系统,初始安装数据库时的演示用户,管理员用户等等,这些用户的密码往往是写定的,被很多人知道,会被别有用心的人利用来攻击系统甚至进行修改数据。需要修改密码的用户包括: 数据库管理员用户SYS,SYSTEM;其他用户。

修改密码方法:

Sql>  alter user USER_NAME identified by PASSWORD;

Oralce日常高效率巡检_数据库性能、安全检查相关推荐

  1. 检查oracle当前性能,高效进行Oracle日常巡检:数据库性能与安全检查

    前言 ​对于线上的业务,oracle的数据库运行的稳定性和安全性是用户关心的一个至关重要的问题,除了通过监控平台对数据库进行监控以外,还需要定期对数据库进行"体检",是保障数据库稳 ...

  2. 数据库下午怎么插入_数据库性能调优大全(附某大型医院真实案例)

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:2020 年最棒的 9 个 Java 框架,哪个最香? 个人原创+1博客:点击前往,查看更多 出处:https: ...

  3. mysql数据库容量估算_数据库性能与容量评估

    一.数据库设计 1.表结构设计 -表中的自增列(auto_increment属性)推荐使用bigint类型 -首选使用非空的唯一键, 其次选择自增列或发号器 不使用更新频繁的列,尽量不选择字符串列,不 ...

  4. oracle 数据库日常巡检:数据库基本状况、oracle资源使用、数据备份结果、性能、cpu等、数据安全、归档日志、会话、SGA/PGA使用情况

    巡检目录 1. 检查数据库基本状况 2. 检查Oracle相关资源的使用情况 3. 检查Oracle数据库备份结果 4. 检查Oracle数据库性能 5. 检查数据库cpu.I/O.内存性能 6. 检 ...

  5. MySQL数据库性能优化及自动化运维实践教程!DBA日常工作

    MySQL数据库性能优化及自动化运维实践教程!本文作者将站在更加全面的角度分享他在这一年多 DBA 工作中的经验,希望可以给大家带来启发和帮助. DBA 的日常工作 我觉得 DBA 真的很忙,我们来看 ...

  6. OCM_第十二天课程:Section6 —》数据库性能调优_ 资源管理器/执行计划

    注:本文为原著(其内容来自 腾科教育培训课堂).阅读本文注意事项如下: 1:所有文章的转载请标注本文出处. 2:本文非本人不得用于商业用途.违者将承当相应法律责任. 3:该系列文章目录列表: 一:&l ...

  7. python读取oracle数据库性能_用python对oracle进行简单性能测试

    一.概述 dba在工作中避不开的两个问题,sql使用绑定变量到底会有多少的性能提升?数据库的审计功能如果打开对数据库的性能会产生多大的影响?最近恰好都碰到了,索性做个实验. sql使用绑定变量对性能的 ...

  8. mysql自动化巡检_美团MySQL数据库巡检系统的设计与应用

    巡检工作是保障系统平稳有效运行必不可少的一个环节,目的是能及时发现系统中存在的隐患.我们生活中也随处可见各种巡检,比如电力巡检.消防检查等,正是这些巡检工作,我们才能在稳定的环境下进行工作.生活.巡检 ...

  9. sql server express 并发数的限制_阿里数据库性能诊断的利器——SQL执行干预

    概述 在业务数据库性能问题诊断中,如果发现一个业务性能很差跟某个SQL有关,应用连接池几乎被该SQL占满,同时数据库服务器上也不堪重负.此时情况很紧急,业务改SQL重发布已经来不及了,运维能选择的操作 ...

最新文章

  1. python400集视频教程 百度云-Python自动化测试视频教程【百度云盘下载】
  2. torch_geometric 笔记:global_mean_pool
  3. surging 微服务引擎 1.0 正式发布
  4. codeforces 318A-C语言解题报告
  5. 排查指南 | 关于 mPaaS-iOS 小程序打不开问题的解决方案
  6. linux utmp结构体,Linux C编程如何使用联机帮助来解决编程问题?
  7. 一个 wince 开发经验的杰出blog
  8. Excel中的数组函数
  9. ROS的学习(三)创建一个工作空间
  10. SecureCRT学习之道:SecureCRT常用快捷键设置与字体设置方法
  11. 如何用java代码实现隐藏自己的电话号码
  12. 计算机电脑键盘英语,知识整理:计算机键盘指法练习(英语+数字)
  13. 替罪羊树——平衡二叉树
  14. mysql怎么设置id自动编号_MySQL中实现ID编号自动增加的方法
  15. MacOS 下恢复使用谷歌浏览器翻译功能
  16. iOS storyBoard 和 纯代码 实现 九宫格 切图
  17. 让技术Leader狂点赞的Linux速成手册,到底有多强悍?
  18. RMA Line stuck in AWAITING_RETURN or AWAITING_RETURN_DISPOSITION (文档 ID 378221.1)
  19. HiveConf of name hive.metastore.local does not exis问题
  20. Arty A7-100(XC7A100TCSG324)开箱照

热门文章

  1. jsp+mysql开发论坛程序
  2. 【WinCE】SD card技术了解并WINCE下SDHC驱动开发(updated)
  3. Struts1.x系列教程(6):Bean标签库
  4. VMware下安装Ubuntu不支持1920X1080分辨率问题
  5. codeforces Round#429 (Div2)
  6. JSON,java对象转json
  7. zoj 1670 Jewels from Heaven
  8. 深入理解html5系列-文本标签
  9. *[hackerrank]Maximizing XOR
  10. poj 1106 Transmitters (枚举+叉积运用)