oracle 日常巡檢____oracle
來源:互聯網
上載者:User
巡檢內容 1. 檢查資料庫基本狀況 在本節中主要對資料庫的基本狀況進行檢查,其中包含:檢查Oracle執行個體狀態,檢查Oracle服 務進程,檢查Oracle監聽進程,共個部分。 1.1. 檢查Oracle執行個體狀態 SQL> select instance_name,host_name,startup_time,status,database_status from v$instance; INSTANCE_NAME HOST_NAME STARTUP_TIME STATUS DATABASE_STATUS ---------------- ------------------- -------------------- ----------
CKDB AS14 2009-5-7 9:3 OPEN ACTIVE 其中“STATUS”表示Oracle當前的執行個體狀態,必須為“OPEN”;“DATABASE_STATUS”表示Oracle 當前資料庫的狀態,必須為“ACTIVE”。 SQL> select name,log_mode,open_mode from v$database; NAME LOG_MODE OPEN_MODE --------- ------------ ----------------- CKDB ARCHIVELOG READ WRITE 其中“LOG_MODE”表示Oracle當前的歸檔方式。“ARCHIVELOG”表示資料庫運行在歸檔模式下, “NOARCHIVELOG”表示資料庫運行在非歸檔模式下。在我們的系統中資料庫必須運行在歸檔方式下。 1.2. 檢查Oracle服務進程 $ps -ef|grep ora_|grep -v grep&&ps -ef|grep ora_|grep -v grep|wc -l oracle 2960 1 0 May07 ? 00:01:02 ora_pmon_CKDB oracle 2962 1 0 May07 ? 00:00:22 ora_psp0_CKDB oracle 2964 1 0 May07 ? 00:00:00 ora_mman_CKDB oracle 2966 1 0 May07 ? 00:03:20 ora_dbw0_CKDB oracle 2968 1 0 May07 ? 00:04:29 ora_lgwr_CKDB oracle 2970 1 0 May07 ? 00:10:31 ora_ckpt_CKDB oracle 2972 1 0 May07 ? 00:03:45 ora_smon_CKDB oracle 2974 1 0 May07 ? 00:00:00 ora_reco_CKDB oracle 2976 1 0 May07 ? 00:01:24 ora_cjq0_CKDB oracle 2978 1 0 May07 ? 00:06:17 ora_mmon_CKDB oracle 2980 1 0 May07 ? 00:07:26 ora_mmnl_CKDB oracle 2982 1 0 May07 ? 00:00:00 ora_d000_CKDB oracle 2984 1 0 May07 ? 00:00:00 ora_s000_CKDB oracle 2994 1 0 May07 ? 00:00:28 ora_arc0_CKDB oracle 2996 1 0 May07 ? 00:00:29 ora_arc1_CKDB oracle 3000 1 0 May07 ? 00:00:00 ora_qmnc_CKDB oracle 3625 1 0 May07 ? 00:01:40 ora_q000_CKDB oracle 31594 1 0 Jul20 ? 00:00:00 ora_q003_CKDB oracle 23802 1 0 05:09 ? 00:00:33 ora_j000_CKDB 19 在檢查Oracle的進程命令輸出後,輸出顯示至少應包括以下一些進程: . Oracle寫資料檔案的進程,輸出顯示為:“ora_dbw0_CKDB” . Oracle寫記錄檔的進程,輸出顯示為:“ora_lgwr_ CKDB” . Oracle監聽執行個體狀態的進程,輸出顯示為:“ora_smon_ CKDB” . Oracle監聽用戶端串連進程狀態的進程,輸出顯示為:“ora_pmon_ CKDB” . Oracle進行歸檔的進程,輸出顯示為:“ora_arc0_ CKDB” . Oracle進行檢查點的進程,輸出顯示為:“ora_ckpt_ CKDB” . Oracle進行恢複的進程,輸出顯示為:“ora_reco_ CKDB”
1.3. 檢查Oracle監聽狀態 /home/oracle>lsnrctl status LSNRCTL for Linux: Version 10.2.0.2.0 - Production on 23-JUL-2009 14:11:53 Copyright (c) 1991, 2005, Oracle. All rights reserved. Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521)) STATUS of the LISTENER ------------------------ Alias LISTENER Version TNSLSNR for Linux: Version 10.2.0.2.0 - Production Start Date 07-MAY-2009 09:35:52 Uptime 77 days 4 hr. 36 min. 0 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Listener Parameter File /data/oracle/product/10.2.0/network/admin/listener.ora Listener Log File /data/oracle/product/10.2.0/network/log/listener.log Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=AS14)(PORT=1521))) Services Summary... Service "CKDB" has 1 instance(s). Instance "CKDB", status READY, has 1 handler(s) for this service... Service "CKDBXDB" has 1 instance(s). Instance "CKDB", status READY, has 1 handler(s) for this service... Service "CKDB_XPT" has 1 instance(s). Instance "CKDB", status READY, has 1 handler(s) for this service... The command completed successfully “Services Summary”項表示Oracle的監聽進程正在監聽哪些資料庫執行個體,輸出顯示中至少應該 “CKDB”這一項。 檢查監聽進程是否存在: [oracle@AS14 ~]$ ps -ef|grep lsn|grep -v grep oracle 2954 1 0 May07 ? 00:01:17 /data/oracle/product/10.2.0/bin/tnslsnr LISTENER -inherit 2. 檢查系統和oracle記錄檔 在本節主要檢查相關的記錄檔,包含:檢查作業系統的記錄檔,檢查Oracle記錄檔,檢 查Oracle核心轉儲目錄,檢查Root使用者和Oracle使用者的email,總共四個部分。
2.1. 檢查作業系統記錄檔 # cat /var/log/messages |grep failed 查看是否與Oracle使用者相關的出錯資訊。 2.2. 檢查oracle記錄檔 [oracle@AS14 ~]$ cat /data/oracle/admin/CKDB/bdump/alert_CKDB.log |grep ora- [oracle@AS14 ~]$ cat /data/oracle/admin/CKDB/bdump/alert_CKDB.log |grep err [oracle@AS14 ~]$ cat /data/oracle/admin/CKDB/bdump/alert_CKDB.log |grep fail Oracle在運行過程中,會在警告記錄檔(alert_SID.log)中記錄資料庫的一些運行情況:資料庫的 啟動、關閉,啟動時的非預設參數;資料庫的重做日誌切換情況,記錄每次切換的時間,及如果因 為檢查點(checkpoint)操作沒執行完成造成不能切換,會記錄不能切換的原因;對資料庫進行的某 些操作,如建立或刪除資料表空間、增加資料檔案;資料庫發生的錯誤,如資料表空間不夠、出現壞塊、數 據庫內部錯誤(ORA-600)等。定期檢查記錄檔,根據日誌中發現的問題及時進行處理: 問題 處理 啟動參數不對 檢查初始化參數檔案 因為檢查點操作或歸檔操作沒完成造成重做 日誌不能切換 如果經常發生這樣的情況,可以考慮增加重做記錄檔 組;想辦法提高檢查點或歸檔操作的效率; 人未經授權刪除了資料表空間 檢查資料庫的安全問題,是否密碼太簡單;如必要,撤 消某些使用者的系統許可權 出現壞塊 檢查是否是硬體問題(如磁碟本生壞塊),如果不是,檢 查是那個資料庫物件出現了壞塊,對這個對象進行重建 資料表空間不夠 增加資料檔案到相應的資料表空間 出現ORA-600 根據記錄檔的內容查看相應的TRC檔案,如果是 Oracle的bug,要及時打上相應的補丁 Listener日誌:$ORACLE_HOME/network/log 2.3. 檢查Oracle核心轉儲目錄 $ls $ORACLE_BASE/admin/CKDB/cdump/*.trc|wc -l $ls $ORACLE_BASE/admin/CKDB/udump/*.trc|wc -l 如果上面命令的結果每天都在增長,則說明Oracle進程經常發生核心轉儲。這說明某些使用者進程或 者資料庫後台進程由於無法處理的原因而異常退出。頻繁的核心轉儲特別是資料庫後台進程的核心 轉儲會導致資料庫異常終止。 2.4. 檢查Root使用者和Oracle使用者的email #tail -n 200 /var/mail/root #tail -n 200 /var/mail/oracle 查看無與Oracle使用者相關的出錯資訊。 ORACLE OCM 大師 QQ 群:2878026 190467784 歡迎資深 DBA 人脈合作 3. 檢查Oracle對象狀態 在本節主要檢查相關Oracle對象的狀態,包含:檢查Oracle控制檔案狀態,檢查Oracle線上日 志狀態,檢查Oracle資料表空間的狀態,檢查Oracle所資料檔案狀態,檢查Oracle所表、索引、儲存過 程、觸發器、包等對象的狀態,檢查Oracle所復原段的狀態,總共六個部分。 3.1. 檢查Oracle控制檔案狀態 SQL> select status,name from v$controlfile; STATUS NAME ------- -------------------------------------------------------------------------------- /data/oradata/CKDB/control01.ctl /data/oradata/CKDB/control02.ctl /data/oradata/CKDB/control03.ctl 輸出結果應該3條以上(包含3條的記錄,“STATUS”應該為空白。狀態為空白表示控制檔案狀態正常。 3.2. 檢查Oracle線上日誌狀態 SQL> select group#,status,type,member from v$logfile; GROUP# STATUS TYPE MEMBER ---------- ------- ------- ----------- 3 ONLINE /data/oradata/CKDB/redo03.log 2 ONLINE /data/oradata/CKDB/redo02.log 1 ONLINE /data/oradata/CKDB/redo01.log 4 ONLINE /data/oradata/CKDB/redo04.log 5 ONLINE /data/oradata/CKDB/redo05.log 6 ONLINE /data/oradata/CKDB/redo06.log 6 rows selected 輸出結果應該3條以上(包含3條記錄,“STATUS”應該為非“INVALID”,非“DELETED”。 註:“STATUS” 顯示為空白表示正常。 3.3. 檢查Oracle資料表空間的狀態 SQL> select tablespace_name,status from dba_tablespaces; TABLESPACE_NAME STATUS ------------------------------ --------- SYSTEM ONLINE UNDOTBS1 ONLINE SYSAUX ONLINE TEMP ONLINE USERS ONLINE SJ1 ONLINE ADM_INDEX ONLINE HOME_DATA ONLINE HOME_INDEX ONLINE PHOTO_DATA ONLINE PHOTO_INDEX ONLINE 。。。。。。。 輸出結果中STATUS應該都為ONLINE。 3.4. 檢查Oracle所資料檔案狀態 SQL> select name,status from v$datafile; NAME STATUS -------------------------------------------------- ------- /data/oradata/CKDB/system01.dbf SYSTEM /data/oradata/CKDB/undotbs01.dbf ONLINE /data/oradata/CKDB/sysaux01.dbf ONLINE /data/oradata/CKDB/users01.dbf ONLINE /data/oradata/CKDB/sj.dbf ONLINE /data/oradata/CKDB/HOME_DATA1.dbf ONLINE /data/oradata/CKDB/HOME_INDEX1.dbf ONLINE /data/oradata/CKDB/PHOTO_DATA1.dbf ONLINE /data/oradata/CKDB/PHOTO_INDEX1.dbf ONLINE /data/oradata/CKDB/BLOG_DATA1.dbf ONLINE /data/oradata/CKDB/BLOG_INDEX1.dbf ONLINE /data/oradata/CKDB/AUDIO_DATA1.dbf ONLINE /data/oradata/CKDB/AUDIO_INDEX1.dbf ONLINE /data/oradata/CKDB/VIDEO_DATA1.dbf ONLINE /data/oradata/CKDB/VIDEO_INDEX1.dbf ONLINE /data/oradata/CKDB/SYS_DATA1.dbf ONLINE /data/oradata/CKDB/SYS_INDEX1.dbf ONLINE /data/oradata/CKDB/ADM_DATA1.dbf ONLINE /data/oradata/CKDB/ADM_INDEX1.dbf ONLINE /data/oradata/CKDB/perfstat.dbf ONLINE 輸出結果中“STATUS”應該都為“ONLINE”。或者: SQL> select file_name,status from dba_data_files; FILE_NAME STATUS --------------------------------------------- --------- /data/oradata/CKDB/users01.dbf AVAILABLE ORACLE OCM 大師 QQ 群:2878026 190467784 歡迎資深 DBA 人脈合作 /data/oradata/CKDB/sysaux01.dbf AVAILABLE /data/oradata/CKDB/undotbs01.dbf AVAILABLE /data/oradata/CKDB/system01.dbf AVAILABLE /data/oradata/CKDB/sj.dbf AVAILABLE /data/oradata/CKDB/perfstat.dbf AVAILABLE /data/oradata/CKDB/HOME_DATA1.dbf AVAILABLE /data/oradata/CKDB/HOME_INDEX1.dbf AVAILABLE /data/oradata/CKDB/PHOTO_DATA1.dbf AVAILABLE 輸出結果中“STATUS”應該都為“AVAILABLE”。
3.5. 檢查無效對象 sql>select owner,object_name,object_type from dba_objects where status!='VALID' and owner!='SYS' and owner!='SYSTEM'; no rows selected 如果記錄返回,則說明存在無效對象。若這些對象與應用相關,那麼需要重新編譯產生這個對象, 或者: SELECT owner, object_name, object_type FROM dba_objects WHERE status= 'INVALID';
3.6. 檢查所復原段狀態 SQL> select segment_name,status from dba_rollback_segs; SEGMENT_NAME STATUS ------------------------------ ---------------- SYSTEM ONLINE _SYSSMU1$ ONLINE _SYSSMU2$ ONLINE _SYSSMU3$ ONLINE _SYSSMU4$ ONLINE _SYSSMU5$ ONLINE _SYSSMU6$ ONLINE _SYSSMU7$ ONLINE _SYSSMU8$ ONLINE _SYSSMU9$ ONLINE _SYSSMU10$ ONLINE 11 rows selected 輸出結果中所復原段的“STATUS”應該為“ONLINE”。
4. 檢查Oracle相關資源的使用方式 在本節主要檢查Oracle相關資源的使用方式,包含:檢查Oracle初始設定檔案中相關的參數值, 檢查資料庫連接情況,檢查系統磁碟空間,檢查Oracle各個資料表空間使用方式,檢查一些擴充異常的 對象,檢查system資料表空間內的內容,檢查對象的下一擴充與資料表空間的最大擴充值,總共七個部分。
4.1. 檢查Oracle初始設定檔案中相關參數值 SQL> select resource_name,max_utilization,initial_allocation, limit_value from v$resource_limit; RESOURCE_NAME MAX_UTILIZATION INITIAL_ALLOCAT LIMIT_VALUE -------------------- --------------- --------------- --------------- processes 162 500 500 sessions 168 555 555 enqueue_locks 136 6930 6930 enqueue_resources 111 2660 UNLIMITED ges_procs 0 0 0 ges_ress 0 0 UNLIMITED ges_locks 0 0 UNLIMITED ges_cache_ress 0 0 UNLIMITED ges_reg_msgs 0 0 UNLIM