Oralce日常高效率巡检_数据库性能、安全检查
高效進(jìn)行 Oracle 日常巡檢——數(shù)據(jù)庫(kù)性能與安全檢查
?
?對(duì)于線上的業(yè)務(wù),oracle的數(shù)據(jù)庫(kù)運(yùn)行的穩(wěn)定性和安全性是用戶關(guān)心的一個(gè)至關(guān)重要的問(wèn)題,除了通過(guò)監(jiān)控平臺(tái)對(duì)數(shù)據(jù)庫(kù)進(jìn)行監(jiān)控以外,還需要定期對(duì)數(shù)據(jù)庫(kù)進(jìn)行“體檢”,是保障數(shù)據(jù)庫(kù)穩(wěn)定運(yùn)行的必不可的輔助手段。本文簡(jiǎn)要介紹在系列一的基礎(chǔ)上需要巡檢的內(nèi)容,主要包括資源使用、性能、安全性等。
?
檢查oracle相關(guān)資源的使用情況
主要檢查Oracle相關(guān)資源的使用情況,包含:
- 檢查Oracle初始化文件中相關(guān)的參數(shù)值
- 檢查數(shù)據(jù)庫(kù)連接情況
- 檢查系統(tǒng)磁盤(pán)空間
- 檢查Oracle各個(gè)表空間使用情況
- 檢查一些擴(kuò)展異常的對(duì)象
- 檢查system表空間內(nèi)的內(nèi)容
- 檢查對(duì)象的下一擴(kuò)展與表空間的最大擴(kuò)展值
總共七個(gè)部分。
1.1 檢查oracle初始化文件中相關(guān)參數(shù)
若LIMITVALU-MAXUTILIZATION<=5,則表明與RESOURCENAME相關(guān)的Oracle初始化參數(shù)需要調(diào)整。可以通過(guò)修改Oracle初始化參數(shù)文件$ORACLEBASE/admin/ORCL/pfile/initORCL.ora來(lái)修改。
?
1.2 檢查數(shù)據(jù)庫(kù)連接情況
查看當(dāng)前會(huì)話連接數(shù),是否屬于正常范圍。
?
其中:SID 會(huì)話(session)的ID號(hào);
SERIAL# 會(huì)話的序列號(hào),和SID一起用來(lái)唯一標(biāo)識(shí)一個(gè)會(huì)話;
USERNAME 建立該會(huì)話的用戶名;
PROGRAM 這個(gè)會(huì)話是用什么工具連接到數(shù)據(jù)庫(kù)的;
STATUS 當(dāng)前這個(gè)會(huì)話的狀態(tài),ACTIVE表示會(huì)話正在執(zhí)行某些任務(wù),INACTIVE表示當(dāng)前會(huì)話沒(méi)有執(zhí)行任何操作;
?
1.3 檢查系統(tǒng)磁盤(pán)空間
如果文件系統(tǒng)的剩余空間過(guò)小或增長(zhǎng)較快,需對(duì)其進(jìn)行確認(rèn)并刪除不用的文件以釋放空間。
?
1.4 檢查表空間的使用情況
如果空閑率%Free小于10%以上(包含10%),則注意要增加數(shù)據(jù)文件來(lái)擴(kuò)展表空間而不要是用數(shù)據(jù)文件的自動(dòng)擴(kuò)展功能。
?
1.5 檢查一些擴(kuò)展異常的對(duì)象
如果有記錄返回,則這些對(duì)象的擴(kuò)展已經(jīng)快達(dá)到它定義時(shí)的最大擴(kuò)展值。對(duì)于這些對(duì)象要修改它的存儲(chǔ)結(jié)構(gòu)參數(shù)。
?
1.6 檢查system表空間內(nèi)的內(nèi)容
如果記錄返回,則表明system表空間內(nèi)存在一些非system和sys用戶的對(duì)象。應(yīng)該進(jìn)一步檢查這些對(duì)象是否與我們應(yīng)用相關(guān)。如果相關(guān)請(qǐng)把這些對(duì)象移到非System表空間,同時(shí)應(yīng)該檢查這些對(duì)象屬主的缺省表空間值。
?
1.7 檢查對(duì)象的下一擴(kuò)展與表空間的最大擴(kuò)展值
?
如果有記錄返回,則表明這些對(duì)象的下一個(gè)擴(kuò)展大于該對(duì)象所屬表空間的最大擴(kuò)展值,需調(diào)整相應(yīng)表空間的存儲(chǔ)參數(shù)。
檢查數(shù)據(jù)庫(kù)的性能
檢查Oracle數(shù)據(jù)庫(kù)性能情況,包含:
- 檢查數(shù)據(jù)庫(kù)的等待事件
- 檢查死鎖及處理
- 檢查cpu、I/O、內(nèi)存性能
- 查看是否有僵死進(jìn)程
- 檢查行鏈接/遷移
- 定期做統(tǒng)計(jì)分析
- 檢查緩沖區(qū)命中率
- 檢查共享池命中率
- 檢查排序區(qū)
- 檢查日志緩沖區(qū)
總共十個(gè)部分。
2.1 檢查數(shù)據(jù)庫(kù)的等待事件
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%';如果數(shù)據(jù)庫(kù)長(zhǎng)時(shí)間持續(xù)出現(xiàn)大量像latch free,enqueue,buffer busy waits,db file sequential read,db file scattered read等等待事件時(shí),需要對(duì)其進(jìn)行分析,可能存在問(wèn)題的語(yǔ)句。
?
2.2 Disk Read最高的SQL語(yǔ)句的獲取
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 等待時(shí)間最多的5個(gè)系統(tǒng)等待事件的獲取
SELECT * FROM (SELECT * FROM V$SYSTEM_EVENT WHERE EVENT NOT LIKE 'SQL%' ORDER BY TOTAL_WAITS DESC) WHERE ROWNUM<=5;2.5 檢查運(yùn)行很久的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最高的進(jìn)程
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 檢查文件系統(tǒng)的 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 檢查死鎖及處理
查詢目前鎖對(duì)象信息:
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級(jí)kill掉該session:
alter system kill session '&sid,&serial#';操作系統(tǒng)級(jí)kill掉session:
#> kill -9 pid2.11查看是否有僵死進(jìn)程
select spid from v$process where addr not in (select paddr from v$session);有些僵尸進(jìn)程有阻塞其他業(yè)務(wù)的正常運(yùn)行,定期殺掉僵尸進(jìn)程。
2.12 檢查緩沖區(qū)命令中率
?
2.13 檢查共享池命令中率
如低于95%,則需要調(diào)整應(yīng)用程序使用綁定變量,或者調(diào)整數(shù)據(jù)庫(kù)參數(shù)shared pool的大小。
?
2.14檢查排序區(qū)
如果disk/(memoty+row)的比例過(guò)高,則需要調(diào)整sortareasize(workareasizepolicy=false)或pgaaggregatetarget(workareasizepolicy=true)。
?
2.15 檢查日志緩中區(qū)
如果redo buffer allocation retries/redo entries 超過(guò)1% ,則需要增大log_buffer。
?
檢查數(shù)據(jù)庫(kù)cpu、I/O、內(nèi)存性能
3.1 CPU使用情況
# top# date;top?
3.2 內(nèi)存使用情況
# free -m # free -g3.3 系統(tǒng)io情況
# iostat -k 1 3?
檢查Oracle數(shù)據(jù)庫(kù)的安全性
主要檢查Oracle數(shù)據(jù)庫(kù)的安全性,包含:檢查系統(tǒng)安全信息,定期修改密碼,總共兩個(gè)部分。
4.1 檢查系統(tǒng)安全日志信息
系統(tǒng)安全日志文件的目錄在/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在出現(xiàn)的日志信息中沒(méi)有錯(cuò)誤(Invalid、refused)提示,如果沒(méi)有(Invalid、refused)視為系統(tǒng)正常,出現(xiàn)錯(cuò)誤提示,應(yīng)作出系統(tǒng)告警通知。
4.2 檢查用戶修改密碼
數(shù)據(jù)庫(kù)系統(tǒng)上往往存在很多的用戶,如:第三方數(shù)據(jù)庫(kù)監(jiān)控系統(tǒng),初始安裝數(shù)據(jù)庫(kù)時(shí)的演示用戶,管理員用戶等等,這些用戶的密碼往往是寫(xiě)定的,被很多人知道,會(huì)被別有用心的人利用來(lái)攻擊系統(tǒng)甚至進(jìn)行修改數(shù)據(jù)。需要修改密碼的用戶包括: 數(shù)據(jù)庫(kù)管理員用戶SYS,SYSTEM;其他用戶。
修改密碼方法:
Sql> alter user USER_NAME identified by PASSWORD;?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的Oralce日常高效率巡检_数据库性能、安全检查的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 高效进行 Oracle 日常巡检——数据
- 下一篇: 慢 SQL 诊断优化套路包,套路用的对,