一.檢查活動狀态
通過查詢基本視圖,确認資料庫和執行個體處于正常運作狀态,可以對外提供資料服務。
1.1執行個體狀态
<code>SELECT instance_name,status FROM v$instance;</code>
查詢傳回執行個體名稱、狀态,正常狀态應為Open。
1.2會話資訊
<code>SELECT </code>
<code>SESSIONS_CURRENT,SESSIONS_HIGHWATER FROM v$license;</code>
輔助查詢,執行個體目前會話數和啟動最高連接配接會話數量。
<code>SELECT inst_id,username,COUNT(*)</code>
<code>FROM gv$session GROUP BYinst_id,username;</code>
查詢資料庫連接配接數以執行個體和使用者分組。
1.3參數檢查
<code>SELECT value FROM v$parameter </code>
<code>WHERE name=</code><code>'open_cursors'</code><code>;</code>
查詢給定參數的設定值,示例參數預設值為300,通常中等規模資料庫推薦設定為1000。
1.4參數修改
<code>ALTER SYSTEM SET undo_retention=3600 COMMENT=</code><code>'default 900'</code> <code>SID=</code><code>'*'</code> <code>SCOPE=both;</code>
修改給定的初始化參數,RAC環境需要注意SID參數。
1.5隐含參數
<code>ALTER SYSTEM SET </code><code>"_optimizer_use_feedback"</code><code>=FALSE SCOPE=spfile;</code>
為了解決特殊問題,有時需要設定以下劃線開頭的隐含參數。
示例關閉了11.2版本中引入的Cardinality Feedback - 基數回報特性。
1.6執行個體異常
當連接配接資料庫執行個體出現緩慢、挂起等現象,需要進行診斷和分析,甚至可能需要重新啟動資料庫執行個體。
1.6.1資訊采集
<code>SQL>sqlplus -prelim / as sysdba</code>
<code>SQL>oradebug setmypid</code>
<code>SQL>oradebug unlimit</code>
<code>SQL>oradebug hanganalyze 3</code>
<code>SQL>oradebug dump systemstate 266</code>
<code><間隔一定時間,如20秒,執行下一次資料采樣. ></code>
示範指令,通過采集系統的Hang資訊、系統狀态資訊等,可以分析系統挂起的原因,間隔采樣,可以用于對比變化,輔助分析。
1.6.2 跟蹤
<code>SQL>alter session set events </code><code>'10046 trace name context forever,level 12'</code><code>;</code>
<code>SQL>shutdown immedaite; </code>
<code>SQL>startup mount;</code>
<code>SQL>alter database open;</code>
如果在資料庫關閉、啟動時遇到阻塞、挂起等,可以通過示範指令進行跟蹤,擷取跟蹤檔案進行分析。
1.6.3 安全停庫
<code>SQL>alter </code><code>system</code> <code>checkpoint;</code>
<code>SQL>alter </code><code>system</code> <code>archive </code><code>log</code> <code>current;</code>
<code>SQL>shutdown immediate;</code>
如果資料庫出現異常需要重新啟動,可以通過示範指令執行檢查點、歸檔指令,然後嘗試以立即方式關閉資料庫。
1.6.4 強制停庫
<code>SQL>shutdown </code><code>abort</code><code>;</code>
<code>SQL>startup nomount;</code>
<code>SQL>alter database mount;</code>
如果立即方式不能順利關閉資料庫,強制的關閉方式為abort。示範指令可以通過分步驟的方式執行資料庫啟動。
1.7連接配接異常
當連接配接資料庫出現異常,需要檢測包括網絡連通性,監聽器狀态等資訊。
1.7.1連通性
<code>tnsping tns_name</code>
在安裝具有Oracle用戶端的環境,可以通過tnsping工具測試配置的服務名稱,觀察網絡是否連通以及響應時間。
1.7.2監聽器
<code>lsnrctl status LISTENER</code>
<code>lsnrctl status LISTENER_SCAN1</code>
<code>lsnrctl service</code>
在資料庫伺服器上,可以通過lsnrctl工具檢查監聽狀态和服務資訊,具體的監聽服務名稱可以在最後定義修改。
1.7.3監聽日志檢查
<code>adrci>showalert</code>
在伺服器上,可以通過adrci工具,顯示各類告警檔案,檢查監聽器日志,可以診斷監聽問題。
二.檢查日志資訊
日志狀态檢查檢查資料庫各類日志資訊,确認資料庫執行個體、叢集等是否出現錯誤、告警,如存在問題,則需要進一步分析和應對。
2.1告警日志
<code>$ORACLE_BASE/diag/rdbms/<db_name>/$ORACLE_SID/</code>
<code>trace/alert_$ORACLE_SID.</code><code>log</code>
<code>SQL>show parameter background_dump_dest</code>
根據示例找到告警日志,檢查執行個體是否存在 ORA- 錯誤提示等。
2.2叢集日志
11G:
<code>$GRID_HOME/</code><code>log</code><code>/<nodename>/alert<nodename>.</code><code>log</code>
<code>$GRID_HOME/</code><code>log</code><code>/<nodename>/(crsd、cssd、evmd、ohasd)/</code>
12C:
<code>$GRID_BASE/diag/crs/dg2/crs/trace/alter||nodename.</code><code>log</code>
在相應路徑找到RAC叢集日志,檢查是否存在錯誤提示資訊等。
2.3ASM日志
<code>$GRID_HOME/diag/asm/+asm/<ASM_instance_name>/trace/alert_<instance_name>.</code><code>log</code>
在相應路徑找到ASM日志,檢查是否存在錯誤提示資訊等。
2.4Trace檔案
<code>SQL>SELECT value FROM v$diag_info WHERE name=</code><code>'Default Trace File'</code><code>;</code>
<code>SQL>show parameter user_dump_dest</code>
擷取會話産生或全局轉儲位置,在診斷時需檢查最近日期檔案内容。
2.5叢集狀态
<code>$crsctl status resource -t</code>
確定資源狀态顯示線上。
2.6 errorstack分析
當遇到 ORA- 錯誤,而資料庫的輸出資訊不足時,可以采用errorstack進行跟蹤,采集更詳細的轉儲資訊。
<code>SQL> alter </code><code>system</code> <code>set events='600 trace name</code>
<code>errorstack forever, level 10';</code>
<code>SQL>alter </code><code>system</code> <code>set events='600 trace name</code>
<code>errorstack off';</code>
示例顯示了對ORA-600錯誤設定跟蹤,并關閉。
三.重做日志維護
Oracle REDO日志是資料庫的核心元件,檢查其狀态,維護其成員,監控其歸檔,稽核其性能,是DBA的重要工作。
3.1REDO組
<code>SELECT group#,sequence#,archived,status FROM v$</code><code>log</code><code>;</code>
查詢日志組号、序号,是否歸檔完成和狀态資訊,如多組日志顯示ACTIVE狀态,則可能說明資料庫存在IO方面的性能問題。
3.2REDO成員
SELECT group#,member FROM v$logfile;
檢視日志組和成員資訊。
3.3增加日志組或成員
<code>SQL>ALTER DATABASE ADD LOGFILE GROUP 10</code>
<code>(</code><code>'/oracle/dbs/log1c.rdo'</code><code>,</code><code>'/oracle/dbs/log2c.rdo'</code><code>) SIZE 500M;</code>
<code>SQL>ALTER DATABASE ADD LOGFILE MEMBER</code>
<code>'/oracle/dbs/log3c.rdo'</code><code>TO GROUP 10;</code>
在日志切換頻繁時,可能需要增加日志組或者加大日志大小。
3.4切換日志
<code>SQL>ALTER SYSTEM SWITCH LOGFILE;</code>
切換日志組,開始寫入下一個日志組。
3.5執行歸檔
<code>SQL>ALTER SYSTEM ARCHIVE LOG CURRENT;</code>
對目前日志組執行歸檔,切換到下一個日志組,
在RAC會對所有執行個體執行歸檔,Thread參數指定歸檔執行個體。
3.6删除日志組或成員
<code>SQL>ALTER DATABASE DROP LOGFILE GROUP 10;</code>
<code>SQL>ALTER DATABASE DROP LOGFILE MEMBER </code><code>'/oracle/dbs/redo03.log'</code><code>;</code>
删除指定日志組或日志成員,注意隻能對INACTIVE狀态的日志執行删除操作。
3.7歸檔檢查
<code>SQL>archive </code><code>log</code> <code>list;</code>
檢查資料庫是否處于歸檔模式。
3.8歸檔狀态變更
<code>SQL>alter database archivelog | noarchivelog;</code>
示例步驟在MOUNT狀态改變歸檔模式,注意啟動歸檔模式之後
務必制訂備份歸檔的日常政策,防止磁盤空間被耗盡。
3.9調整歸檔路徑
<code>SQL>alter </code><code>system</code> <code>set log_archive_dest_2=</code><code>'location=&path'</code> <code>sid=</code><code>'&sid'</code><code>;</code>
如果資料庫因歸檔耗盡空間,可以指定另外的歸檔路徑,以盡快歸檔日志,恢複資料庫運作。
四.檢查空間資訊
確定資料存儲空間可用,定期檢查表空間餘量,進行表空間和檔案維護。
4.1 空間使用查詢
<code>SQL> SELECT * FROM sys.sm$ts_used;</code>
檢視資料庫表空間的使用資訊。
<code>SQL> SELECT * FROM sys.sm$ts_free;</code>
檢視資料庫表空間的剩餘空間。
4.2 檔案資訊
<code>SELECT tablespace_name,file_name FROM dba_data_files;</code>
檢視資料庫表空間的資料檔案資訊。
4.3 檔案維護
<code>alter database datafile </code><code>'&path'</code> <code>resize 900M;</code>
<code>alter tablespace &tbs_name add datafile </code><code>'&path'</code> <code>size 900M;</code>
對資料庫的表空間容量進行擴容。
五.鎖/闩資訊檢查
Lock/Latch是資料庫控制并發的核心手段,檢查相關資訊可以監控資料庫的事務和運作狀況。
5.1鎖資訊
<code>SQL>SELECT sid, type, lmode, </code><code>ctime</code><code>, block FROMv$lock WHERE type not in (</code><code>'MR'</code><code>,</code><code>'AE'</code><code>);</code>
檢視鎖會話ID,類型,持有時間等,
注意如果block >1,可能意味着阻塞了其他會話。
5.2鎖故障排查
在資料庫出現鎖競争和阻塞時,需要排查和處理鎖定,必要時通過Kill阻塞程序消除鎖定。
5.2.1查詢阻塞會話
<code>SQL>SELECT sid,sql_id,status,blocking_session FROMv$session WHERE sid in(SELECT session_id FROM v$locked_object);</code>
查詢目前鎖事物中阻塞會話與被阻塞會話的sid,sql_id和狀态資訊
5.2.2阻塞SQL文本
<code>SQL> SELECT sql_id,sql_text FROMv$sqltext WHERE sql_id=</code><code>'&sql_id'</code> <code>ORDER BY piece;</code>
通過sql_id查詢得到SQL文本,例如通過sql_id查詢出阻塞的SQL語句。
5.2.3鎖阻塞對象資訊
<code>SQL>SELECT owner,object_name,object_type FROM dba_objects</code>
<code>WHEREobject_id in (SELECT object_id FROM v$locked_object);</code>
通過sid查詢阻塞對象的詳細資訊如對象名稱,所屬使用者等
5.2.4殺阻塞會話
<code>SQL>altersystem kill session </code><code>'sid,serial#'</code><code>;</code>
在Oracle執行個體内殺死阻塞的會話程序,其中sid,serial# 為中止會話對應資訊,來自v$session。
5.2.5殺系統程序
<code>SQL>SELECTpro.spid,pro.program</code>
<code>FROMv$session ses,v$process pro</code>
<code>WHEREses.sid=&sid and ses.paddr=pro.addr;</code>
<code>#kill -9 spid</code>
有時對于活動程序,在系統層面中止更為快速安全,示例找到系統程序号,然後kill中止。
注意:無論何時,需要認真分析,并且避免誤殺重要背景程序。
5.3闩檢查
<code>SELECTname,</code><code>gets</code><code>,misses,immediate_gets,spin_gets</code>
<code>FROMv$latch ORDER BY 2;</code>
檢查資料庫闩的使用情況,misses、SPIN_GETS統計高的,需要關注。
5.3.1 闩使用檢查
<code>SQL>SELECT addr,</code><code>gets</code> <code>FROM v$latch_children</code>
<code>WHEREname=</code><code>'cache buffers chains'</code><code>;</code>
<code>SQL>SELECT hladdr,file#,dbablk FROM x$bh</code>
<code>WHEREhladdr in (SELECT addr FROM v$latch_children WHERE addr=</code><code>'&addr'</code><code>);</code>
僅供學習:通過獲得Latch的位址,找到該Latch守護的X$BH中相關的Buffer。
六.等待和統計資料
Wait和Statistics資料分别代表了資料庫的等待和運作資料,觀察這些資料以了解資料庫的等待瓶頸和健康程度。
6.1等待事件查詢
<code>SELECT sid,event,wait_time_micro</code>
<code>FROM v$session_wait ORDER BY 3;</code>
通過等待事件和等待時間,了解資料庫目前連接配接會話的等待情況。
注意,如果會話衆多,需要限定查詢輸出行數。
6.2TOP10等待事件
<code>SQL> SELECT * FROM (</code>
<code>SELECTEVENT,TOTAL_WAITS,AVERAGE_WAIT,TIME_WAITED</code>
<code>FROM v$system_event WHEREwait_class<></code><code>'Idle'</code>
<code>ORDER BY time_waited desc) WHERE rownum<=10;</code>
檢視目前資料中TOP10等待事件資訊,需要分析和關注非空閑的顯著等待。
6.3會話統計資料
<code>SQL>SELECT s.sid,s.statistic#,n.name,s.value</code>
<code>FROM v$sesstat s,v$statname n</code>
<code>WHERE s.statistic#=n.statistic# andn.name=</code><code>'redo size'</code> <code>and sid=</code><code>'&sid'</code><code>;</code>
查詢資料庫會話的統計資訊資料,示例查詢了Redo的大小,SID需要提供。
本文轉自 張沖andy 部落格園部落格,原文連結:http://www.cnblogs.com/andy6/p/5840540.html ,如需轉載請自行聯系原作者