在Oracle數(shù)據(jù)庫運(yùn)行期間,DBA應(yīng)該對數(shù)據(jù)庫的運(yùn)行日志及表空間的使用情況進(jìn)行監(jiān)控,及早發(fā)現(xiàn)數(shù)據(jù)庫中存在的問題。
一、Oracle警告日志文件監(jiān)控
Oracle在運(yùn)行過程中,會在警告日志文件(alert_SID.log)中記錄數(shù)據(jù)庫的一些運(yùn)行情況:
●數(shù)據(jù)庫的啟動、關(guān)閉,啟動時的非缺省參數(shù);
●數(shù)據(jù)庫的重做日志切換情況,記錄每次切換的時間,及如果因為檢查點(checkpoint)操作沒有執(zhí)行完成造成不能切換,會記錄不能切換的原因;
●對數(shù)據(jù)庫進(jìn)行的某些操作,如創(chuàng)建或刪除表空間、增加數(shù)據(jù)文件;
●數(shù)據(jù)庫發(fā)生的錯誤,如表空間不夠、出現(xiàn)壞塊、數(shù)據(jù)庫內(nèi)部錯誤(ORA-600)
DBA應(yīng)該定期檢查日志文件,根據(jù)日志中發(fā)現(xiàn)的問題及時進(jìn)行處理
問題處理
啟動參數(shù)不對檢查初始化參數(shù)文件
因為檢查點操作或歸檔操作沒有完成造成重做日志不能切換如果經(jīng)常發(fā)生這樣的情況,可以考慮增加重做日志文件組;想辦法提高檢查點或歸檔操作的效率;
有人未經(jīng)授權(quán)刪除了表空間檢查數(shù)據(jù)庫的安全問題,是否密碼太簡單;如有必要,撤消某些用戶的系統(tǒng)權(quán)限
出現(xiàn)壞塊檢查是否是硬件問題(如磁盤本生有壞塊),如果不是,檢查是那個數(shù)據(jù)庫對象出現(xiàn)了壞塊,對這個對象進(jìn)行重建
表空間不夠增加數(shù)據(jù)文件到相應(yīng)的表空間
出現(xiàn)ORA-600根據(jù)日志文件的內(nèi)容查看相應(yīng)的TRC文件,如果是Oracle的bug,要及時打上相應(yīng)的補(bǔ)丁
二、數(shù)據(jù)庫表空間使用情況監(jiān)控(字典管理表空間)
數(shù)據(jù)庫運(yùn)行了一段時間后,由于不斷的在表空間上創(chuàng)建和刪除對象,會在表空間上產(chǎn)生大量的碎片,DBA應(yīng)該及時了解表空間的碎片和可用空間情況,以決定是否要對碎片進(jìn)行整理或為表空間增加數(shù)據(jù)文件。
select tablespace_name,
count(*) chunks ,
max(bytes/1024/1024) max_chunk
from dba_free_space
group by tablespace_name;
上面的SQL列出了數(shù)據(jù)庫中每個表空間的空閑塊情況,如下所示:
TABLESPACE_NAME CHUNKS MAX_CHUNK
-------------------- ---------- ----------
INDX 1 57.9921875
RBS 3 490.992188
RMAN_TS 1 16.515625
SYSTEM 1 207.296875
TEMP 20 70.8046875
TOOLS 1 11.8359375
USERS 67 71.3671875
其中,CHUNKS列表示表空間中有多少可用的空閑塊(每個空閑塊是由一些連續(xù)的Oracle數(shù)據(jù)塊組成),如果這樣的空閑塊過多,比如平均到每個數(shù)據(jù)文件上超過了100個,那么該表空間的碎片狀況就比較嚴(yán)重了,可以嘗試用以下的SQL命令進(jìn)行表空間相鄰碎片的接合:
alter tablespace 表空間名 coalesce;
然后再執(zhí)行查看表空間碎片的SQL語句,看表空間的碎片有沒有減少。如果沒有效果,并且表空間的碎片已經(jīng)嚴(yán)重影響到了數(shù)據(jù)庫的運(yùn)行,則考慮對該表空間進(jìn)行重建。
MAX_CHUNK列的結(jié)果是表空間上最大的可用塊大小,如果該表空間上的對象所需分配的空間(NEXT值)大于可用塊的大小的話,就會提示ORA-1652、ORA-1653、ORA-1654的錯誤信息,DBA應(yīng)該及時對表空間的空間進(jìn)行擴(kuò)充,以避免這些錯誤發(fā)生。
對表空間的擴(kuò)充對表空間的數(shù)據(jù)文件大小進(jìn)行擴(kuò)展,或向表空間增加數(shù)據(jù)文件,具體操作見“存儲管理”部份。
三、查看數(shù)據(jù)庫的連接情況
DBA要定時對數(shù)據(jù)庫的連接情況進(jìn)行檢查,看與數(shù)據(jù)庫建立的會話數(shù)目是不是正常,如果建立了過多的連接,會消耗數(shù)據(jù)庫的資源。同時,對一些“掛死”的連接,可能會需要DBA手工進(jìn)行清理。
以下的SQL語句列出當(dāng)前數(shù)據(jù)庫建立的會話情況:
select sid,serial#,username,program,machine,status
from v$session;
輸出結(jié)果為:
SID SERIAL# USERNAME PROGRAM MACHINE STATUS 其中,
---- ------- ---------- ----------- --------------- --------
1 1 ORACLE.EXE WORK3 ACTIVE
2 1 ORACLE.EXE WORK3 ACTIVE
3 1 ORACLE.EXE WORK3 ACTIVE
4 1 ORACLE.EXE WORK3 ACTIVE
5 3 ORACLE.EXE WORK3 ACTIVE
6 1 ORACLE.EXE WORK3 ACTIVE
7 1 ORACLE.EXE WORK3 ACTIVE
8 27 SYS SQLPLUS.EXE WORKGROUP/WORK3 ACTIVE
11 5 DBSNMP dbsnmp.exe WORKGROUP/WORK3 INACTIVE
SID 會話(session)的ID號;
SERIAL# 會話的序列號,和SID一起用來唯一標(biāo)識一個會話;
USERNAME 建立該會話的用戶名;
PROGRAM 這個會話是用什么工具連接到數(shù)據(jù)庫的;
STATUS 當(dāng)前這個會話的狀態(tài),ACTIVE表示會話正在執(zhí)行某些任務(wù),INACTIVE表示當(dāng)前會話沒有執(zhí)行任何操作;
如果DBA要手工斷開某個會話,則執(zhí)行:
alter system kill session 'SID,SERIAL#';
注意,上例中SID為1到7(USERNAME列為空)的會話,是Oracle的后臺進(jìn)程,不要對這些會話進(jìn)行任何操作。
四、控制文件的備份
在數(shù)據(jù)庫結(jié)構(gòu)發(fā)生變化時,如增加了表空間,增加了數(shù)據(jù)文件或重做日志文件這些操作,都會造成Oracle數(shù)據(jù)庫控制文件的變化,DBA應(yīng)及進(jìn)行控制文件的備份,備份方法是:
執(zhí)行SQL語句:
alter database 或:
backup controlfile to '/home/backup/control.bak';
alter database 這樣,會在USER_DUMP_DEST(初始化參數(shù)文件中指定)目錄下生成創(chuàng)建控制文件的SQL命令。
backup controlfile to trace;
五、檢查數(shù)據(jù)庫文件的狀態(tài)
DBA要及時查看數(shù)據(jù)庫中數(shù)據(jù)文件的狀態(tài)(如被誤刪除),根據(jù)實際情況決定如何進(jìn)行處理,檢查數(shù)據(jù)文件的狀態(tài)的SQL如下:
select file_name,status
from dba_data_files;
如果數(shù)據(jù)文件的STATUS列不是AVAILABLE,那么就要采取相應(yīng)的措施,如對該數(shù)據(jù)文件進(jìn)行恢復(fù)操作,或重建該數(shù)據(jù)文件所在的表空間。
新聞熱點
疑難解答
圖片精選