如何檢查oracle的歸檔日志及空間占用率,清除歸檔日志


 

如何解決“歸檔日志已滿問題”

問題描述:

所用數據庫為 Oracle 10g ,模式為歸檔模式,oracle 系統默認的歸檔空間為2G,由於日志過多,空間寫滿,數據庫的redo文件不能歸檔,而出現oracle數據庫掛起的問題。

oem打開oracle 10g 數據庫操作界面,會顯示如下錯誤信息:

     “ 由於輸出設備已滿或不可用, 歸檔程序無法歸檔重做日志。”

數據庫無法使用

現將解決辦法稍作總結:

方法一:增大歸檔日志空間的大小

可以通過下面的方法來調整系統的回閃恢復區大小:
首先是關閉數據庫:以SYS身份鏈接到oracle,執行>shutdown immediate;
啟動數據庫到mount狀態:>startup mount
查看回閃恢復區的大小和存放目標:>show parameter db_recovery_file_dest
修改回閃恢復區的大小>alter system set db_recovery_file_dest_size = 4G(缺省是2G,可以根據實際情況調整大小)
最后打開數據庫:>alter database open;

  OK , 問題解決。數據庫恢復使用。

方法二 :進入oracle清空日志信息,把空間釋放出來

啟動數據庫到mount狀態:

 >sqlplus “/as sysdba”

>startup mount

新起一個終端,用rman進入把歸檔日志刪除

命令>rman target/  (只安裝了一個oracle10g數據庫)

命令>crosscheck archivelog all;  (列出歸檔日志信息)

命令>delete expired archivelog all;  (將上述列出的歸檔日志刪除)

命令>exit;

此時最好將數據庫重新備份一下

把數據庫的mount狀態更改為open狀態

>alter database open;

OK.問題解決,數據庫可以使用。

 

誤區:

   在系統清空歸檔目錄的日志信息(即物理刪除歸檔日志,或將歸檔日志轉移至別處)不可取,OS雖然刪除了,但oracle系統識別不出來已經清空日志,只能進入oracle清空日志信息,把空間釋放出來,(方法二);或者是把歸檔空間設置更大(方法一)。

   建議將兩種方法結合使用,減少工作量,也避免數據庫頻繁掛起。同時定時進行數據庫完全備份或其他重要數據備份

 

---------------------------------------------------------------------

select * from v$flash_recovery_area_usage; --查看空間占用率

 select * from v$recovery_file_dest;  --查看歸檔日志的存放地址;

使用rman清空歸檔日志

     crosscheck archivelog all;  --查看可以所有的歸檔文件

     delete expired archivelog all; --清空過期的歸檔文件

 如何確認歸檔日志是否過期,rman有一個保留策略,可以定義多少天之前的日志算為過期;

      
   CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 14 DAYS;

 

   讓恢復窗口成為14天大小。
  show all --查看所有的rman策略.

select count(*) from v$archived_log where archived='YES' and deleted='NO'; --查看所有歸檔,未刪除的歸檔日志  

 

 

------------------------檢查方法-----------

大多數人會去先檢查放歸檔的目錄的磁盤空間是否滿了,通過該歸檔目錄空余情況來判斷歸檔空間是否滿了,但我覺得這個方法不一定代表實際情況,你看到的可能是一個表面現象。

  默認情況下我們在dbca建庫時,會把歸檔放在$ORACLE_HOME/ flash_recovery_area 下,並且oracle默認給FRA配置的大為2g

  這里需要足以兩個參數:

  db_recovery_file_dest string /oracle/flash_recovery_area

  db_recovery_file_dest_size big integer 2G

  這里總結一句,如果db_recovery_file_dest 下的存放的歸檔大小達到db_recovery_file_dest_size 即使該目錄下仍然有磁盤空間剩余,oracle也不會去寫。

  這里我建議按照如下步驟去確定:歸檔空間是否滿了?

  1.首先從系統層面確定歸檔目錄存放的磁盤空間情況:

  [oracle@localhost bdump]$ df -h

  Filesystem Size Used Avail Use% Mounted on

  /dev/mapper/VolGroup00-LogVol00 26G 12G 14G 46% /

  /dev/sda2 19G 16G 2.8G 85% /oracle

  /dev/sda1 99M 24M 71M 25% /boot

  tmpfs 978M 508M 470M 52% /dev/shm

  2. 確定歸檔存放目錄,歸檔存放目錄大小

  SQL> archive log list;

  Database log mode Archive Mode

  Automatic archival Enabled

  Archive destination USE_DB_RECOVERY_FILE_DEST -------這里默認使用的是DB_RECOVERY_FILE_DEST

  Oldest online log sequence 17

  Next log sequence to archive 20

  Current log sequence 20

  ----也可以按照以下方式查詢歸檔放置的地方

  SQL> show parameter db_

  NAME TYPE VALUE

  ------------------------------------ ----------- ------------------------------

  db_keep_cache_size big integer 0

  db_name string lixora

  db_recovery_file_dest string /oracle/flash_recovery_area

  db_recovery_file_dest_size big integer 2G

  db_recycle_cache_size big integer 0

  db_unique_name string lixora

  -----這里可以看到閃回恢復區里的空間使用情況:

  SQL> select * From v$flash_recovery_area_usage;    ---------這里可以看到閃回恢復區里的空間占有率情況:

  FILE_TYPE            PERCENT_SPACE_USED     PERCENT_SPACE_RECLAIMABLE       NUMBER_OF_FILES

  -----文件類型-------  ---百分比空間 ---------------        -----可收回百分比--------------------               ---------文件編號------

  CONTROLFILE             0                                                    0                                                                 0

  ONLINELOG               4.88                                                 0                                                                  1

  ARCHIVELOG            76.05                                                0                                                                 47

  BACKUPPIECE          3.1                                                  0                                                                   3

  IMAGECOPY               0                                                    0                                                                   0

  FLASHBACKLOG       0                                                    0                                                                    0

  6 rows selected.

  ------注意這一步才是真正查看歸檔空間的實際使用情況:

  SQL> select * from v$recovery_file_dest; ------注意這一步才是真正查看歸檔空間的實際使用情況:

  NAME SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES

  ----------- ---------- ----------------- ---- --------------- -------------------

  /oracle/flash_recovery_area 2147483648 1804771840 0 51

  但是還是在系統層面去查看磁盤空間。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM