萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> oracle教程 >> Oracle DBA數據庫日常維護完全手冊

Oracle DBA數據庫日常維護完全手冊

在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的後台進程,不要對這些會話進行任何操作。

  • 共2頁:
  • 上一頁
  • 1
  • 2
  • 下一頁
copyright © 萬盛學電腦網 all rights reserved