檢查資料庫狀態
確認所有的INSTANCE狀態以及listener狀態正常,登陸到所有資料庫或常式,檢測ORACLE後台進程:
$ ps –ef|grep ora
$ lsnrctl status
SQL> select status from v$instance;
檢查檔案系統
如果檔案系統的剩餘空間過小或增長較快,需對其進行確認並刪除不用的檔案以釋放空間。
$df –k
$df -h
檢查警告記錄檔(alert_SID.log)
Oracle在運行過程中,會在警告記錄檔(alert_SID.log)中記錄資料庫的一些運行情況:資料庫的啟動、關閉,啟動時的非預設參數;資料庫的重做日誌切換情況,記錄每次切換的時間,及如果因為檢查點(checkpoint)操作沒有執行完成造成不能切換,會記錄不能切換的原因;對資料庫進行的某些操作,如建立或刪除資料表空間、增加資料檔案;
資料庫發生的錯誤,如資料表空間不夠、出現壞塊、資料庫內部錯誤(ORA-600)定期檢查記錄檔,根據日誌中發現的問題及時進行處理
問題 |
處理 |
啟動參數不對 |
檢查初始化參數檔案 |
因為檢查點操作或歸檔操作沒有完成造成重做日誌不能切換 |
如果經常發生這樣的情況,可以考慮增加重做記錄檔組;想辦法提高檢查點或歸檔操作的效率; |
有人未經授權刪除了資料表空間 |
檢查資料庫的安全問題,是否密碼太簡單;如有必要,撤消某些使用者的系統許可權 |
出現壞塊 |
檢查是否是硬體問題(如磁碟本生有壞塊),如果不是,檢查是那個資料庫物件出現了壞塊,對這個對象進行重建 |
資料表空間不夠 |
增加資料檔案到相應的資料表空間 |
出現ORA-600 |
根據記錄檔的內容查看相應的TRC檔案,如果是Oracle的bug,要及時打上相應的補丁 |
alert_SID.log通常是在$ORACLE_BASE/admin/<SID>/bdump目錄下。
使用 Unix ‘tail’或者more命令查看該日誌資訊(為了方便查詢,每天查詢後將查詢的日誌mv到與日誌同一目錄下的bak目錄下);
定期檢查警告日誌、TRC檔案及listener日誌
如果這些日誌量非常大,佔用很大的資源空間,可考慮定期刪除以便釋放資源。
一般情況下這些檔案存在的相關目錄:
警告日誌: $ORACLE_BASE/admin/<SID>/bdump
或者
通過 SQL> show parameter background_dump_dest參數查看其存放位置;
Trc檔案: $ORACLE_BASE/admin/<SID>/udump
或者
通過 SQL> show parameter user_dump_dest參數查看其存放位置;
Listener日誌: $ORACLE_HOME/network/log
查看資料庫連接資訊
定時對資料庫的串連情況進行檢查,看與資料庫建立的會話數目是不是正常,如果建立了過多的串連,會消耗資料庫的資源。同時,對一些“掛死”的串連,可能需要手工進行清理。
以下的SQL語句列出當前資料庫建立的會話情況:
Select count(*) from v$session; ――查看當前會話串連數
select sid,serial#,username,program,machine,status from v$session;
SID SERIAL# USERNAME PROGRAM MACHINE STATUS
---- ---------- ------------ ---------------------------- ------------ --------
1 3 oracle@xz15saledb (PMON) xz15saledb ACTIVE
2 3 oracle@xz15saledb (DBW0) xz15saledb ACTIVE
3 3 oracle@xz15saledb (DBW1) xz15saledb ACTIVE
4 3 oracle@xz15saledb (LGWR) xz15saledb ACTIVE
5 3 oracle@xz15saledb (CKPT) xz15saledb ACTIVE
6 3 oracle@xz15saledb (SMON) xz15saledb ACTIVE
7 3 oracle@xz15saledb (RECO) xz15saledb ACTIVE
8 1 oracle@xz15saledb (CJQ0) xz15saledb ACTIVE
9 3 oracle@xz15saledb (ARC0) xz15saledb ACTIVE
10 3 oracle@xz15saledb (ARC1) xz15saledb ACTIVE
11 11319 ZK AccPrtInv_svr@xz15tuxedo2 (TNS V1-V3) xz15tuxedo2 INACTIVE
13 48876 ZG upload@xz15saleap (TNS V1-V3) xz15saleap INACTIVE
17 20405 ZK AccCreateRpt@xz15tuxedo1 (TNS V1-V3) xz15tuxedo1 INACTIVE
20 12895 ZK OweScanSvr@xz15billdb (TNS V1-V3) xz15billdb INACTIVE
其中,
SID 會話(session)的ID號;
SERIAL# 會話的序號,和SID一起用來唯一標識一個會話;
USERNAME 建立該會話的使用者名稱;
PROGRAM 這個會話是用什麼工具串連到資料庫的;
STATUS 當前這個會話的狀態,ACTIVE表示會話正在執行某些任務,INACTIVE表示當前會話沒有執行任何操作;
如果DBA要手工斷開某個會話,則執行:(一般不建議使用這種方式去殺掉資料庫的串連,這樣有時候session不會斷開。容易引起死串連。建議通過sid查到作業系統的spid,使用ps –ef|grep spidno的方式確認spid不是ORACLE的後台進程。使用作業系統的kill -9命令殺掉串連 )
alter system kill session 'SID,SERIAL#';
注意:
上例中SID為1到10(USERNAME列為空白)的會話,是Oracle的後台進程,不要對這些會話進行任何操作。
檢查資料庫當日備份的有效性。
對RMAN備份方式: 檢查第三方備份工具的備份日誌以確定備份是否成功
對EXPORT備份方式: 檢查exp記錄檔以確定備份是否成功
對其他備份方式: 檢查相應的記錄檔
檢查資料檔案的狀態
SQL>select file_name,status from dba_data_files;
SQL>select count(*) from dba_data_files;
SQL>select count(*) from dba_data_files where status='AVAILABLE';
如果資料檔案的STATUS列不是AVAILABLE,那麼就要採取相應的措施,如對該資料檔案進行恢複操作,或重建該資料檔案所在的資料表空間。
檢查資料表空間的使用方式
select
f.tablespace_name,
a.total,
f.free,
round((f.free/a.total)*100) "% Free"
from
(select tablespace_name, sum(bytes/(1024*1024)) total from dba_data_files group by tablespace_name) a,
(select tablespace_name, round(sum(bytes/(1024*1024))) free from dba_free_space group by tablespace_name) f
WHERE a.tablespace_name = f.tablespace_name(+)
order by "% Free"
檢查資料庫的等待事件
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等等待事件時,需要對其進行分析,可能存在問題的語句。
鎖表問題的處理
查詢目前鎖對象資訊,更細節的鎖處理方式請查看工作中長用指令碼
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;
解鎖處理:
alter system kill session '&sid,&serial#';
檢查資料庫效能,記錄資料庫的cpu使用、IO、buffer命中率等等
使用vmstat,iostat,sar,top等命令進行資訊收集並檢查這些資訊,判斷資源使用方式。
查看是否有僵死進程
select spid from v$process where addr not in (select paddr from v$session);
有些殭屍進程有阻塞其他業務的