Oracle DBA日常管理

Oracle數據庫日常維護

在Oracle數據庫運行期間,DBA應該對數據庫的運行日誌及表空間的使用情況進行監控,及早發現數據庫中存在的問題。

一、 Oracle警告日誌文件監控
Oracle在運行過程中,會在警告日誌文件(alert_SID.log)中記錄數據庫的一些運行情況:
 數據庫的啓動、關閉,啓動時的非缺省參數;
 數據庫的重做日誌切換情況,記錄每次切換的時間,及如果因爲檢查點(checkpoint)操作沒有執行完成造成不能切換,會記錄不能切換的原因;
 對數據庫進行的某些操作,如創建或刪除表空間、增加數據文件;
 數據庫發生的錯誤,如表空間不夠、出現壞塊、數據庫內部錯誤(ORA-600)

DBA應該定期檢查日誌文件,根據日誌中發現的問題及時進行處理
問題 處理
啓動參數不對 檢查初始化參數文件
因爲檢查點操作或歸檔操作沒有完成造成重做日誌不能切換 如果經常發生這樣的情況,可以考慮增加重做日誌文件組;想辦法提高檢查點或歸檔操作的效率;
有人未經授權刪除了表空間 檢查數據庫的安全問題,是否密碼太簡單;如有必要,撤消某些用戶的系統權限
出現壞塊 檢查是否是硬件問題(如磁盤本生有壞塊),如果不是,檢查是那個數據庫對象出現了壞塊,對這個對象進行重建
表空間不夠 增加數據文件到相應的表空間
出現ORA-600 根據日誌文件的內容查看相應的TRC文件,如果是Oracle的bug,要及時打上相應的補丁

二、 數據庫表空間使用情況監控(字典管理表空間)
數據庫運行了一段時間後,由於不斷的在表空間上創建和刪除對象,會在表空間上產生大量的碎片,DBA應該及時瞭解表空間的碎片和可用空間情況,以決定是否要對碎片進行整理或爲表空間增加數據文件。

select tablespace_name,
count(*) chunks ,
max(bytes/1024/1024) max_chunk
from dba_free_space
group by tablespace_name;

上面的SQL列出了數據庫中每個表空間的空閒塊情況,如下所示:
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列表示表空間中有多少可用的空閒塊(每個空閒塊是由一些連續的Oracle數據塊組成),如果這樣的空閒塊過多,比如平均到每個數據文件上超過了100個,那麼該表空間的碎片狀況就比較嚴重了,可以嘗試用以下的SQL命令進行表空間相鄰碎片的接合:

alter tablespace 表空間名 coalesce;

然後再執行查看錶空間碎片的SQL語句,看錶空間的碎片有沒有減少。如果沒有效果,並且表空間的碎片已經嚴重影響到了數據庫的運行,則考慮對該表空間進行重建。
MAX_CHUNK列的結果是表空間上最大的可用塊大小,如果該表空間上的對象所需分配的空間(NEXT值)大於可用塊的大小的話,就會提示ORA-1652、ORA-1653、ORA-1654的錯誤信息,DBA應該及時對錶空間的空間進行擴充,以避免這些錯誤發生。
對錶空間的擴充對錶空間的數據文件大小進行擴展,或向表空間增加數據文件,具體操作見“存儲管理”部份。

三、 查看數據庫的連接情況
DBA要定時對數據庫的連接情況進行檢查,看與數據庫建立的會話數目是不是正常,如果建立了過多的連接,會消耗數據庫的資源。同時,對一些“掛死”的連接,可能會需要DBA手工進行清理。
以下的SQL語句列出當前數據庫建立的會話情況:
select sid,serial#,username,program,machine,status
from v$session;
輸出結果爲:
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一起用來唯一標識一個會話;
USERNAME 建立該會話的用戶名;
PROGRAM 這個會話是用什麼工具連接到數據庫的;
STATUS 當前這個會話的狀態,ACTIVE表示會話正在執行某些任務,INACTIVE表示當前會話沒有執行任何操作;

如果DBA要手工斷開某個會話,則執行:
alter system kill session 'SID,SERIAL#';

注意,上例中SID爲1到7(USERNAME列爲空)的會話,是Oracle的後臺進程,不要對這些會話進行任何操作。

四、 控制文件的備份
在數據庫結構發生變化時,如增加了表空間,增加了數據文件或重做日誌文件這些操作,都會造成Oracle數據庫控制文件的變化,DBA應及進行控制文件的備份,備份方法是:
執行SQL語句:
alter database
backup controlfile to '/home/backup/control.bak';

或:
alter database
backup controlfile to trace;
這樣,會在USER_DUMP_DEST(初始化參數文件中指定)目錄下生成創建控制文件的SQL命令。

五、 檢查數據庫文件的狀態
DBA要及時查看數據庫中數據文件的狀態(如被誤刪除),根據實際情況決定如何進行處理,檢查數據文件的狀態的SQL如下:
select file_name,status
from dba_data_files;
如果數據文件的STATUS列不是AVAILABLE,那麼就要採取相應的措施,如對該數據文件進行恢復操作,或重建該數據文件所在的表空間。

六、 檢查數據庫定時作業的完成情況
如果數據庫使用了Oracle的JOB來完成一些定時作業,要對這些JOB的運行情況進行檢查:
select job,log_user,last_date,failures
from dba_jobs;
如果FAILURES列是一個大於0的數的話,說明JOB運行失敗,要進一步的檢查。

七、 數據庫壞塊的處理
當Oracle數據庫出現壞塊時,Oracle會在警告日誌文件(alert_SID.log)中記錄壞塊的信息:
ORA-01578: ORACLE data block corrupted (file # 7, block # <BLOCK>)
ORA-01110: data file <AFN>: '/oracle1/oradata/V920/oradata/V816/users01.dbf'

其中,<AFN>代表壞塊所在數據文件的絕對文件號,<BLOCK>代表壞塊是數據文件上的第幾個數據塊
出現這種情況時,應該首先檢查是否是硬件及操作系統上的故障導致Oracle數據庫出現壞塊。在排除了數據庫以外的原因後,再對發生壞塊的數據庫對象進行處理。
1. 確定發生壞塊的數據庫對象
SELECT tablespace_name,
segment_type,
owner,
segment_name
FROM dba_extents
WHERE file_id = <AFN>
AND <BLOCK> between block_id AND block_id+blocks-1;
2. 決定修復方法
如果發生壞塊的對象是一個索引,那麼可以直接把索引DROP掉後,再根據表裏的記錄進行重建;
如果發生壞塊的表的記錄可以根據其它表的記錄生成的話,那麼可以直接把這個表DROP掉後重建;
如果有數據庫的備份,則恢復數據庫的方法來進行修復;
如果表裏的記錄沒有其它辦法恢復,那麼壞塊上的記錄就丟失了,只能把表中其它數據塊上的記錄取出來,然後對這個表進行重建。
3. 用Oracle提供的DBMS_REPAIR包標記出壞塊
exec DBMS_REPAIR.SKIP_CORRUPT_BLOCKS('<schema>','<tablename>');
4. 使用Create table as select命令將表中其它塊上的記錄保存到另一張表上
create table corrupt_table_bak
as
select * from corrupt_table;
5. 用DROP TABLE命令刪除有壞塊的表
drop table corrupt_table;
6. 用alter table rename命令恢復原來的表
alter table corrupt_table_bak
rename to corrupt_table;
7. 如果表上存在索引,則要重建表上的索引

八、 操作系統相關維護
DBA要注意對操作系統的監控:
&#61548; 文件系統的空間使用情況(df -k),必要時對Oracle的警告日誌及TRC文件進行清理
&#61548; 如果Oracle提供網絡服務,檢查網絡連接是否正常
&#61548; 檢查操作系統的資源使用情況是否正常
&#61548; 檢查數據庫服務器有沒有硬件故障,如磁盤、內存報錯
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章