1、檢查數據庫實例狀態
select instance_name,host_name,startup_time,status,database_status from v$instance;
其中“STATUS”表示Oracle當前的實例狀態,必須為“OPEN”;“DATABASE_STATUS”表示Oracle當前數據庫的狀態,必須為“ACTIVE”。
select name,log_mode,open_mode from v$database;
其中“LOG_MODE”表示Oracle當前的歸檔方式。“ARCHIVELOG”表示數據庫運行在歸檔模式下,“NOARCHIVELOG”表示數據庫運行在非歸檔模式下。
2、檢查oralce表空間的狀態
select tablespace_name,status from dba_tablespaces;
3、檢查oracle數據文件狀態
select name,status from v$datafile;
輸出結果中“STATUS”應該都為“ONLINE”
select file_name,status from dba_data_files
輸出結果中“STATUS”應該都為“AVAILABLE”。
4、檢查無效對象
select owner,object_name,object_type from dba_objects where status!='VALID' and owner!='SYS' and owner!='SYSTEM';
如果有記錄返回,則說明存在無效對象。若這些對象與應用相關,那麼需要重新編譯生成這個對象,或者:
SELECT owner, object_name, object_type FROM dba_objects WHERE status= 'INVALID';
5、檢查所有回滾段狀態
select segment_name,status from dba_rollback_segs;
6、檢查數據庫連接情況
select sid,serial#,username,program,machine,status from v$session;
其中: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#';
7、檢查表空間使用情況
select f.tablespace_name,a.total,f.free,round((f.free/a.total)100) "% Free" from
(select tablespace_name, sum(bytes/(10241024)) 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";
如果空閒率%Free小於10%以上(包含10%),則注意要增加數據文件來擴展表空間而不要是用數據文件的自動擴展功能。請不要對錶空間增加過多的數據文件,增加數據文件的原則是每個數據文件大小為2G或者4G,自動擴展的最大限制在8G。
8、增加表空間大小
兩種方法:
一種是為表空間增加數據文件
alter tablespace users add datafile '/opt/oracle/oradata/esop/so_data02.dbf' size 200M;
一種是增加表空間原有數據文件尺寸
alter database datafile '/opt/oracle/oradata/esop/so_data01.dbf' resize 200M;
9、檢查是否有僵死進程
select spid from vprocesswhereaddrnotin(selectpaddrfromv
session);
10、檢查日誌緩衝區
select name,value from v$sysstat where name in ('redo entries','redo buffer allocation retries');
如果redo buffer allocation retries/redo entries 超過1% ,則需要增大log_buffer。