oracle 数据库日常巡检:数据库基本状况、oracle资源使用、数据备份结果、性能、cpu等、数据安全、归档日志、会话、SGA/PGA使用情况
巡檢目錄
- 1. 檢查數(shù)據(jù)庫基本狀況
- 2. 檢查Oracle相關(guān)資源的使用情況
- 3. 檢查Oracle數(shù)據(jù)庫備份結(jié)果
- 4. 檢查Oracle數(shù)據(jù)庫性能
- 5. 檢查數(shù)據(jù)庫cpu、I/O、內(nèi)存性能
- 6. 檢查數(shù)據(jù)庫安全性
- 7. 其他檢查
?
1. 檢查數(shù)據(jù)庫基本狀況
包含:檢查Oracle實(shí)例狀態(tài),檢查Oracle服務(wù)進(jìn)程,檢查Oracle監(jiān)聽進(jìn)程,共三個(gè)部分。
1.1. 檢查Oracle實(shí)例狀態(tài)
select?instance_name,host_name,startup_time,status,database_status from?v$instance;?
其中“STATUS”表示Oracle當(dāng)前的實(shí)例狀態(tài),必須為“OPEN”;“DATABASE_STATUS”表示Oracle當(dāng)前數(shù)據(jù)庫的狀態(tài),必須為“ACTIVE”。
1.2. 檢查Oracle在線日志狀態(tài)
select?group#,status,type,member from?v$logfile;?
輸出結(jié)果應(yīng)該有3條以上(包含3條)記錄,“STATUS”應(yīng)該為非“INVALID”,非“DELETED”。注:“STATUS”顯示為空表示正常。
1.3. 檢查Oracle表空間的狀態(tài)
select?tablespace_name,status from?dba_tablespaces;?
輸出結(jié)果中STATUS應(yīng)該都為ONLINE。
1.4. 檢查Oracle所有數(shù)據(jù)文件狀態(tài)
select?name,status from?v$datafile;
輸出結(jié)果中“STATUS”應(yīng)該都為“ONLINE”。或者:
select?file_name,status from?dba_data_files;?
輸出結(jié)果中“STATUS”應(yīng)該都為“AVAILABLE”。
?
2. 檢查Oracle相關(guān)資源的使用情況
2.1. 檢查數(shù)據(jù)庫連接情況
查看當(dāng)前會(huì)話連接數(shù),是否屬于正常范圍。
select?count(*) from?v$session;
2.2. 檢查系統(tǒng)磁盤空間
如果文件系統(tǒng)的剩余空間過小或增長(zhǎng)較快,需對(duì)其進(jìn)行確認(rèn)并刪除不用的文件以釋放空間。
[oracle@AS14 ~]$ df -h
Filesystem ???????????Size ?Used Avail Use% Mounted on
/dev/mapper/vg_ssc-LogVol00
??????????????????????902G ??12G ?845G ??2% /
tmpfs ????????????????3.9G ?8.0K ?3.9G ??1% /dev/shm
/dev/sda1 ????????????194M ??33M ?152M ?18% /boot
2.3. 檢查表空間使用情況
select tablespace_name,file_id,file_name,round(bytes / (1024 * 1024), 0) total_space from dba_data_files order by tablespace_name;
2.4. 檢查一些擴(kuò)展異常的對(duì)象
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;
如果有記錄返回,則這些對(duì)象的擴(kuò)展已經(jīng)快達(dá)到它定義時(shí)的最大擴(kuò)展值。對(duì)于這些對(duì)象要修改它的存儲(chǔ)結(jié)構(gòu)參數(shù)。
2.5. 檢查system表空間內(nèi)的內(nèi)容
select?distinct?(owner)
from?dba_tables
where?tablespace_name =?'SYSTEM'
and?owner !=?'SYS'
and?owner !=?'SYSTEM'
union
select?distinct?(owner)
from?dba_indexes
where?tablespace_name =?'SYSTEM'
and?owner !=?'SYS'
and?owner !=?'SYSTEM';
如果記錄返回,則表明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ì)象屬主的缺省表空間值。
2.6. 檢查對(duì)象的下一擴(kuò)展與表空間的最大擴(kuò)展值
select?a.table_name, a.next_extent, a.tablespace_name
from?all_tables a,
(select?tablespace_name, max(bytes) as?big_chunk
from?dba_free_space
group?by?tablespace_name) f
where?f.tablespace_name =?a.tablespace_name
and?a.next_extent >?f.big_chunk
union
select?a.index_name, a.next_extent, a.tablespace_name
from?all_indexes a,
(select?tablespace_name, max(bytes) as?big_chunk
from?dba_free_space
group?by?tablespace_name) f
where?f.tablespace_name =?a.tablespace_name
and?a.next_extent >?f.big_chunk;
如果有記錄返回,則表明這些對(duì)象的下一個(gè)擴(kuò)展大于該對(duì)象所屬表空間的最大擴(kuò)展值,需調(diào)整相應(yīng)表空間的存儲(chǔ)參數(shù)。
?
3. 檢查Oracle數(shù)據(jù)庫備份結(jié)果
3.1. 檢查數(shù)據(jù)庫備份日志信息
假設(shè):備份的臨時(shí)目錄為/backup/hotbakup,我們需要檢查2019年12月30日的備份結(jié)果,則用下面的命令來檢查:
cat /backup/hotbackup/hotbackup-19-12-30.log|grep –i error
備份腳本的日志文件為hotbackup-月份-日期-年份.log,在備份的臨時(shí)目錄下面。如果文件中存在“ERROR:”,則表明備份沒有成功,存在問題需要檢查。
?
?
4. 檢查Oracle數(shù)據(jù)庫性能
在本節(jié)主要檢查Oracle數(shù)據(jù)庫性能情況,包含:檢查數(shù)據(jù)庫的等待事件,檢查死鎖及處理,檢查cpu、I/O、內(nèi)存性能,查看是否有僵死進(jìn)程,檢查行鏈接/遷移,定期做統(tǒng)計(jì)分析,檢查緩沖區(qū)命中率,檢查共享池命中率,檢查排序區(qū),檢查日志緩沖區(qū),總共十個(gè)部分。
4.1. 檢查數(shù)據(jù)庫的等待事件
select event, count(*)
from v$session_wait
group by event
order by count(*) desc;
如果數(shù)據(jù)庫長(zhǎng)時(shí)間持續(xù)出現(xiàn)大量像latch free,enqueue,buffer busy waits,db file sequential read,db file scattered read等等待事件時(shí),需要對(duì)其進(jìn)行分析,可能存在問題的語句。
4.2. Disk Read最高的SQL語句的獲取
SELECT?SQL_TEXT
FROM?(SELECT?*?FROM?V$SQLAREA ORDER?BY?DISK_READS)
WHERE?ROWNUM <=?5;
4.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;
4.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;
4.5. 檢查碎片程度高的表
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);
4.6. 檢查表空間的I/O比例
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;?
4.7. 檢查文件系統(tǒng)的I/O比例
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#;?
4.8.檢查死鎖及處理
查詢目前鎖對(duì)象信息:
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;?
select sid,serial#,username,SCHEMANME,osuser,MACHINE,terminal,program,owner,object_name,object_type,o.object_id from dba_objects o,v$locked_object l,v$session s whereoracle級(jí)kill掉該session:
alter?system kill?session '&sid,&serial#';
操作系統(tǒng)級(jí)kill掉session:
#>kill -9 pid
?
?
5. 檢查數(shù)據(jù)庫CPU,I/O,內(nèi)存性能
記錄數(shù)據(jù)庫的cpu使用、IO、內(nèi)存等使用情況,使用vmstat,iostat,sar,top等命令進(jìn)行信息收集并檢查這些信息,判斷資源使用情況。
5.1 CPU使用情況:
[root@sale8 ~]# top
查看系統(tǒng)剩余的cpu,當(dāng)其平均值下降至10%以下的時(shí)視為CPU使用率異常,需記錄下該數(shù)值,并將狀態(tài)記為異常。
5.2 內(nèi)存使用情況:
[root@sale8 ~]# free -m
查看系統(tǒng)剩余內(nèi)存,當(dāng)剩余內(nèi)存低于總內(nèi)存的10%時(shí)視為異常。
5.3 系統(tǒng)I/O情況:
[root@sale8 ~]# iostat -k 1 3
查看cpu IO等待情況。
5.4 系統(tǒng)負(fù)載情況:
[root@sale8 ~]#uptime
最后3個(gè)數(shù)值如果有高于2.5的時(shí)候就表明系統(tǒng)在超負(fù)荷運(yùn)轉(zhuǎn)了,并將此值記錄到巡檢表,視為異常。
5.5.查看是否有僵尸進(jìn)程
select?spid from?v$process where?addr not?in?(select?paddr from?v$session);?
有些僵尸進(jìn)程有阻塞其他業(yè)務(wù)的正常運(yùn)行,定期殺掉僵尸進(jìn)程。
5.6?檢查緩沖區(qū)命中率
SELECT?a.VALUE +?b.VALUE logical_reads,
???????c.VALUE phys_reads,
???????round(100?*?(1?-?c.value /?(a.value +?b.value)), 4) hit_ratio
??FROM?v$sysstat a, v$sysstat b, v$sysstat c
?WHERE?a.NAME =?'db block gets'
???AND?b.NAME =?'consistent gets'
???AND?c.NAME =?'physical reads';
如果命中率低于90%則需加大數(shù)據(jù)庫參數(shù)db_cache_size。
5.7?檢查共享池命中率
select?sum(pinhits) /?sum(pins) *?100?from?v$librarycache;?
如低于95%,則需要調(diào)整應(yīng)用程序使用綁定變量,或者調(diào)整數(shù)據(jù)庫參數(shù)shared pool的大小。
5.8?檢查排序區(qū)
select?name,value from?v$sysstat where?name like?'%sort%';?
如果disk/(memoty+row)的比例過高,則需要調(diào)整sort_area_size(workarea_size_policy=false)或pga_aggregate_target(workarea_size_policy=true)。
5.9?檢查日志緩沖區(qū)
select?name,value from?v$sysstat where?name in?('redo entries','redo buffer allocation retries');
如果redo buffer allocation retries/redo entries超過1%,則需要增大log_buffer。
?
?
6. 檢查數(shù)據(jù)庫安全性
本節(jié)主要檢查Oracle數(shù)據(jù)庫的安全性,包含:檢查系統(tǒng)安全信息,定期修改密碼,總共兩個(gè)部分。
6.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)的日志信息中沒有錯(cuò)誤(Invalid、refused)提示,如果沒有(Invalid、refused)視為系統(tǒng)正常,出現(xiàn)錯(cuò)誤提示,應(yīng)作出系統(tǒng)告警通知。
6.2. 檢查用戶修改密碼
在數(shù)據(jù)庫系統(tǒng)上往往存在很多的用戶,如:第三方數(shù)據(jù)庫監(jiān)控系統(tǒng),初始安裝數(shù)據(jù)庫時(shí)的演示用戶,管理員用戶等等,這些用戶的密碼往往是寫定的,被很多人知道,會(huì)被別有用心的人利用來攻擊系統(tǒng)甚至進(jìn)行修改數(shù)據(jù)。需要修改密碼的用戶包括:
數(shù)據(jù)庫管理員用戶SYS,SYSTEM;其他用戶。
登陸系統(tǒng)后,提示符下輸入cat /etc/passwd,在列出來的用戶中查看是否存在已經(jīng)不再使用的或是陌生的帳號(hào)。若存在,則記錄為異常。
修改密碼方法:
alter?user?USER_NAME?identified by?PASSWORD;?
?
?
7. 其他檢查
在本節(jié)主要檢查當(dāng)前crontab任務(wù)是否正常,檢查Oracle Job是否有失敗等共六個(gè)部分。
7.1 檢查當(dāng)前crontab任務(wù)是否正常
[oracle@AS14 ~]$ crontab -l
7.2 Oracle Job是否有失敗
select?job,what,last_date,next_date,failures,broken from?dba_jobs Where?schema_user='CAIKE';
如有問題建議重建job
7.3. 監(jiān)控?cái)?shù)據(jù)量的增長(zhǎng)情況
select?A.tablespace_name, (1?-?(A.total) /?B.total) *?100?used_percent
??from?(select?tablespace_name, sum(bytes) total
??????????from?dba_free_space
?????????group?by?tablespace_name) A,
???????(select?tablespace_name, sum(bytes) total
??????????from?dba_data_files
?????????group?by?tablespace_name) B
?where?A.tablespace_name =?B.tablespace_name;
根據(jù)本周每天的檢查情況找到空間擴(kuò)展很快的數(shù)據(jù)庫對(duì)象,并采取相應(yīng)的措施:
--刪除歷史數(shù)據(jù)
移動(dòng)規(guī)定數(shù)據(jù)庫中至少保留6個(gè)月的歷史數(shù)據(jù),所以以前的歷史數(shù)據(jù)可以考慮備份然后進(jìn)行清除以便釋放其所占的資源空間。
---擴(kuò)表空間
alter?tablespace <tablespace_name>?add?datafile ‘<file>’ size <size>?autoextend off;
?
注意:在數(shù)據(jù)庫結(jié)構(gòu)發(fā)生變化時(shí),如增加了表空間,增加了數(shù)據(jù)文件或重做日志文件這些操作,都會(huì)造成Oracle數(shù)據(jù)庫控制文件的變化,DBA應(yīng)及進(jìn)行控制文件的備份,備份方法是:
執(zhí)行SQL語句:
alter?database?backup?controlfile to?'/home/backup/control.bak';
或:
alter?database?backup?controlfile to?trace;
這樣,會(huì)在USER_DUMP_DEST(初始化參數(shù)文件中指定)目錄下生成創(chuàng)建控制文件的SQL命令。
7.4. 檢查無效的trigger
SELECT?owner, trigger_name, table_name, status FROM?dba_triggers WHERE?status =?'DISABLED';
如有失效觸發(fā)器則啟用,如:
alter?Trigger?TRIGGER_NAME Enable;?
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
?
? 數(shù)據(jù)庫歸檔日志狀態(tài)情況
SQL> archive log list;
?
查詢歸檔日志存儲(chǔ)大小
SQL> show parameter db_recovery_file_dest_size; SQL> select sum(a.BLOCK_SIZE*a.BLOCKS)/1024/1024 from v$archived_log a where a.DELETED='NO';.??? 查看鎖住的表
?SELECT b.owner,b.object_name,a.session_id,a.locked_mode
??????? FROM v$locked_object a ,dba_objects b
??????? WHERE b.object_id = a.object_id;
查看被鎖住的會(huì)話
SELECT b.username,b.sid,b.serial#,logon_timeFROM v$locked_object a,v$session bWHERE a.session_id = b.sid order by b.logon_time;如果要斷開某個(gè)會(huì)話,執(zhí)行
? Alter system kill session ‘sid,serial#’
?
+++++++++++++++++++++++++++++++++++++++++++=
SGA、PGA使用情況SQL> select name,total,round(total-free,2) used, round(free,2) free,round((total-free)/total*100,2) pctused from (select 'SGA' name,(select sum(value/1024/1024) from v$sga) total, (select sum(bytes/1024/1024) from v$sgastat where name='free memory')free from du 2 3 al) union select name,total,round(used,2)used,round(total-used,2)free,round(used/total*100,2)pctused from ( select 'PGA' name,(select value/1024/1024 total from v$pgastat where name='aggregate PGA target parameter')total, (select value/1024/1024 used from v$pgastat where name='total PGA allocated')used from dual); 4 5 6 7 NAM TOTAL USED FREE PCTUSED --- ---------- ---------- ---------- ---------- PGA 25088 1596.19 23491.81 6.36 SGA 71614.8477 65943.05 5671.8 92.08?
?
以上,為oracle數(shù)據(jù)庫巡檢全部?jī)?nèi)容。
總結(jié)
以上是生活随笔為你收集整理的oracle 数据库日常巡检:数据库基本状况、oracle资源使用、数据备份结果、性能、cpu等、数据安全、归档日志、会话、SGA/PGA使用情况的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VCenter (虚拟架构环境的集中管理
- 下一篇: 一 如何检查oracle的归档日志及空