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