高效進(jìn)行 Oracle 日常巡檢之?dāng)?shù)據(jù)庫基本情況檢查
前言
對于線上的業(yè)務(wù),Oracle 的數(shù)據(jù)庫運行的穩(wěn)定性和安全性是用戶關(guān)心的一個至關(guān)重要的問題,除了通過監(jiān)控平臺對數(shù)據(jù)庫進(jìn)行監(jiān)控以外,還需要定期對數(shù)據(jù)庫進(jìn)行“體檢”,數(shù)據(jù)庫巡檢是保障數(shù)據(jù)庫穩(wěn)定運行的必不可少的輔助手段。
本文將簡要介紹一下從哪些方面對 Oracle 數(shù)據(jù)庫進(jìn)行巡檢以及巡檢的方法。
一、檢查數(shù)據(jù)庫的基本狀況
1. 檢查 Oracle 實例狀態(tài)
- SQL> select instance_name,host_name,startup_time,status,database_status from v$instance;
其中“STATUS”表示Oracle當(dāng)前的實例狀態(tài),必須為“OPEN”;“DATABASE_STATUS”表示Oracle當(dāng)前數(shù)據(jù)庫的狀態(tài),必須為“ACTIVE”。
- SQL> select name,log_mode,open_mode from v$database;
其中
- “LOG_MODE”表示Oracle當(dāng)前的歸檔方式;
- “ARCHIVELOG”表示數(shù)據(jù)庫運行在歸檔模式下;
- “NOARCHIVELOG”表示數(shù)據(jù)庫運行在非歸檔模式下。
在我們的系統(tǒng)中數(shù)據(jù)庫必須運行在歸檔方式下。
2. 檢查 Oracle 服務(wù)進(jìn)程
- $ps -ef|grep ora_|grep -v grep&&ps -ef|grep ora_|grep -v grep|wc –l
在檢查Oracle的進(jìn)程命令輸出后,輸出顯示至少應(yīng)包括以下一些進(jìn)程:
- Oracle寫數(shù)據(jù)文件的進(jìn)程,輸出顯示為:“oradbw0CKDB”
- Oracle寫日志文件的進(jìn)程,輸出顯示為:“oralgwr CKDB”
- Oracle監(jiān)聽實例狀態(tài)的進(jìn)程,輸出顯示為:“orasmon CKDB” .
- Oracle監(jiān)聽客戶端連接進(jìn)程狀態(tài)的進(jìn)程,輸出顯示為:“orapmon CKDB”
- Oracle進(jìn)行歸檔的進(jìn)程,輸出顯示為:“oraarc0 CKDB”
- Oracle進(jìn)行檢查點的進(jìn)程,輸出顯示為:“orackptCKDB” .
- Oracle進(jìn)行恢復(fù)的進(jìn)程,輸出顯示為:“orareco CKDB”
3. 檢查 Oracle 的監(jiān)聽狀態(tài)
- lsnrctl status
“Services Summary”項表示Oracle的監(jiān)聽進(jìn)程正在監(jiān)聽哪些數(shù)據(jù)庫實例。
檢查監(jiān)聽進(jìn)程是否存在:
- ps -ef|grep lsn|grep -v grep
- oracle 2954 1 0 May07 ? 00:01:17 /data/oracle/product/11.2.0/bin/tnslsnr LISTENER –inherit
二、檢查系統(tǒng)和 Oracle 日志文件
檢查相關(guān)的日志文件主要包含:
- 檢查操作系統(tǒng)的日志文件
- 檢查Oracle日志文件
- 檢查Oracle核心轉(zhuǎn)儲目錄
- 檢查Root用戶和Oracle用戶的email
總共四個部分。
1. 檢查操作系統(tǒng)日志文件
- # cat /var/log/messages |grep failed
查看是否有與Oracle用戶相關(guān)的出錯信息。
2. 檢查 Oracle 日志文件
- $ cat /data/oracle/admin/CKDB/bdump/alert_CKDB.log |grep ora-
- $ cat /data/oracle/admin/CKDB/bdump/alert_CKDB.log |grep err
- $ cat /data/oracle/admin/CKDB/bdump/alert_CKDB.log |grep fail
在Oracle的運行中,會在警告日志文件中記錄數(shù)據(jù)庫的一些運行情況 ,定時查看此文件,可以及時了解數(shù)據(jù)庫運行狀態(tài)是否異常。
3. 檢查 Oracle 核心轉(zhuǎn)儲目錄
- $ls $ORACLE_BASE/admin/CKDB/cdump/*.trc|wc -l
- $ls $ORACLE_BASE/admin/CKDB/udump/*.trc|wc –l
如果上面命令的結(jié)果每天都在增長,則說明Oracle進(jìn)程經(jīng)常發(fā)生核心轉(zhuǎn)儲。這說明某些用戶進(jìn)程或者數(shù)據(jù)庫后臺進(jìn)程由于無法處理的原因而異常退出。頻繁的核心轉(zhuǎn)儲特別是數(shù)據(jù)庫后臺進(jìn)程的核心轉(zhuǎn)儲會導(dǎo)致數(shù)據(jù)庫異常終止。
4. 檢查Root用戶和Oracle用戶的email
- #tail –n 200 /var/mail/root
- #tail –n 200 /var/mail/oracle
查看有無與Oracle用戶相關(guān)的出錯信息。
三、檢查oracle對象狀態(tài)
主要檢查相關(guān)Oracle對象的狀態(tài),包含:
- 檢查Oracle控制文件狀態(tài)
- 檢查Oracle在線日志狀態(tài)
- 檢查Oracle表空間的狀態(tài)
- 檢查Oracle所有數(shù)據(jù)文件狀態(tài)
- 檢查Oracle所有表、索引、存儲過程、觸發(fā)器、包等對象的狀態(tài)
- 檢查Oracle所有回滾段的狀態(tài)
總共六個部分。
1. 檢查控制文件狀態(tài)
- SQL> select status,name from v$controlfile;
輸出結(jié)果“STATUS”應(yīng)該為空。狀態(tài)為空表示控制文件狀態(tài)正常。
2. 檢查在線日志文件狀態(tài)
- SQL>select group#,status,type,member from v$logfile;
輸出結(jié)果“STATUS”應(yīng)該為非“INVALID”,非“DELETED”。
注:“STATUS”顯示為空表示正常。
3. 檢查表空間的狀態(tài)
- SQL> select tablespace_name,status from dba_tablespaces;
輸出結(jié)果中STATUS應(yīng)該都為ONLINE。
4. 檢查所有數(shù)據(jù)文件狀態(tài)
- SQL> select name,status from v$datafile;
輸出結(jié)果中“STATUS”應(yīng)該都為“ONLINE”或者為“AVAILABLE”
5. 檢查無效的對象
- sql>select owner,object_name,object_type from dba_objects where status!='VALID' and owner!='SYS' and owner!='SYSTEM';
- no rows selected
如果有記錄返回,則說明存在無效對象。若這些對象與應(yīng)用相關(guān),那么需要重新編譯生成這個對象。