學習oracle11g歸檔日誌,看這一篇就夠了


今天項目遇到一個問題,流水錶會每天清除5天前數據,因爲數據量過大,產生大量delete操作,而每次數據庫操作都會記入歸檔日誌,導致存儲空間不足。那麼什麼是歸檔日誌呢?下面就此問題就行講解。

一、常用日誌查詢語句

select * from v$flash_recovery_area_usage; --查看空間佔用率,如果 ARCHIVED LOG 超過90%,Oracle隨時有宕機的危險
 
select * from v$recovery_file_dest; --查看歸檔日誌大小及使用情況
 
select group#, bytes, status from v$log; --查看現有日誌
 
select sequence#,first_time from v$loghist;--列出所有歸檔redo日誌文件的順序和產生的時間
 
select * from v$archived_log;  --查看v$archive_log
 
select count(*) from v$archived_log where archived='YES' and deleted='NO'; --查看所有歸檔,未刪除的歸檔日誌

二、歸檔日誌管理

1.Oracle日誌分類

分三大類: Alert log files–警報日誌,Trace files–跟蹤日誌(用戶和進程)和 redo log 重做日誌(記錄數據庫的更改)。

重做日誌分爲在線重做日誌和歸檔重做日誌。
online Redo log files–在線重做日誌,又稱聯機重做日誌,指Oracle以SQL腳本的形式實時記錄數據庫的數據更新,換句話說,實時保存已執行的SQL腳本到在線日誌文件中(按特定的格式)。
Archive Redo log files–歸檔重做日誌,簡稱歸檔日誌,指當條件滿足時,Oracle將在線重做日誌以文件形式保存到硬盤(持久化)。

重做日誌的簡單原理:在數據更新操作commit前,將更改的SQL腳本寫入重做日誌。主要用於數據庫的增量備份和增量恢復。

重做日誌直接對應於硬盤的重做日誌文件(有在線和歸檔二種),重做日誌文件以組(Group)的形式組織,一個重做日誌組包含一個或者多個日誌文件。

2.關於在線重做日誌(online redo log)

在線重做日誌的原理:

對於在線重做日誌,Oracle 11g默認對於每個數據庫實例,建立3個在線日誌組,每組一個日誌文件,文件名稱爲REDO01.LOG,REDO02.LOG和REDO03.LOG。(用戶可以通過視圖操作添加/修改/刪除日誌組和日誌文件來自定義在線重做日誌)

每組內的日誌文件的內容完全相同,且保存在不同的位置,用於磁盤日誌鏡像,以做多次備份提高安全性。默認情況這3組通常只有一組處於活動狀態,不斷地同步寫入已操作的腳本,當日志文件寫滿時(達到指定的空間配額),如果當前數據庫處於歸檔模式,則將在線日誌歸檔到硬盤,成爲歸檔日誌;若當前數據庫處於非歸檔模式,則不進行歸檔操作,而當前在線日誌的內容會被下一次重新寫入覆蓋而無法保存。因此,通常數據庫在運行時,是處於歸檔模式下的,以保存數據更新的日誌。

當前歸檔日誌組寫滿後,Oracle會切換到下一日誌組,繼續寫入,就這樣循環切換;當處於歸檔模式下,如果切換至原已寫滿的日誌組,若該日誌組歸檔完畢則覆蓋寫入,若沒有則只能使用日誌緩衝區,等待歸檔完畢之後才能覆蓋寫入。當然,處於非歸檔模式下是直接覆蓋寫入的。

Oracle提供了2個視圖用於維護在線重做日誌:V$LOG 和 V$LOGFILE,我們可以通過這兩個視圖查看和修改在線日誌。

關於V$LOG視圖的詳細屬性字段可Oracle 11g的官方文檔:http://download.oracle.com/docs/cd/B28359_01/server.111/b28320/dynviews_2029.htm

關於V$LOGFILE視圖的詳細屬性字段可Oracle 11g的官方文檔:
http://download.oracle.com/docs/cd/B28359_01/server.111/b28320/dynviews_2031.htm

3.關於歸檔重做日誌(Archive redo log)

其實,所謂的歸檔,就是指將在線日誌進行歸檔、持久化到成固定的文件到硬盤,便於以後的恢復和查詢。 當然,前提條件是數據庫要處於歸檔模式。

Oracle 11g 默認是爲歸檔日誌設定2個歸檔位置,這2個歸檔位置的的歸檔日誌的內容完全一致,但文件名不同。

Oracle數據庫開歸檔之後,oracle 系統默認的歸檔空間爲2G,由於日誌過多,空間寫滿,數據庫的redo文件不能歸檔,而出現oracle數據庫掛起的問題。oem打開oracle 10g 數據庫操作界面,會顯示如下錯誤信息: 由於輸出設備已滿或不可用, 歸檔程序無法歸檔重做日誌。 數據庫無法使用。

4.增大歸檔日誌空間

方法一:修改閃回區大小

查看db_recovery

SQL> show parameter db_recovery
NAME                                   TYPE               VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest                 string       G:\Oracle\product\10.2.0\flash _recovery_area
db_recovery_file_dest_size           big integer   2G
 
通過以下方法調整系統的回閃恢復區大小:
 
首先是關閉數據庫:以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;

方法二:重定向歸檔日誌的位置

生產環境建議將歸檔目錄和oracle產品的安裝目錄分開,修改log_archive_dest_1參數指向定義的歸檔位置(該參數可以不關閉實例進行修改)

SQL> alter system set log_archive_dest_1='location=/oralog/NC65/archivelog' scope=spfile;

5.歸檔日誌CRUD操作管理

  1. 查看歸檔日誌
 
[oracle@dbserver archivelog]$ rman target /
 
RMAN> list archivelog all; --查詢全部的歸檔日誌,包括(在線和過期歸檔)
 
RMAN> list expired archivelog all; --查詢全部的過期歸檔,(在rman的歸檔過期設置時間到期時歸檔會變爲過期狀態,或者物理rm刪除歸檔日誌,交叉檢測 crosscheck archivelog all後,rm 掉的那部分歸檔也變爲過期狀態)
  1. 刪除歸檔日誌
方式一:
--檢查控制文件和實際物理文件的差別
RMAN> crosscheck archivelog all;
--刪除當前時間之間的所有歸檔日誌 慎用!!!
RMAN>delete archivelog all completed before 'sysdate';  
 
--刪除從7天前到現在的全部日誌,慎用!!!
RMAN> delete archivelog from time 'sysdate-7';
 
--以上操作仍然會在RMAN裏留下未管理的歸檔文件,可使用以下命令刪除
delete expired archivelog all;
 
方式二:
如果誤刪了歸檔的物理文件(也就是控制文件中有,但是實際物理上不存在的歸檔)
--檢查控制文件和實際物理文件的差別
RMAN> crosscheck archivelog all;
 
RMAN> delete expired archivelog all;
  1. 其他操作
4、退出RMAN
 
RMAN> exit
其他RMAN操作
 show all --查看所有的rman策略.
如何確認歸檔日誌是否過期,rman有一個保留策略,可以定義多少天之前的日誌算爲過期;
 
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 14 DAYS;
 
--以下步驟可不做
 
5、清空v$archived_log,刪除的歸檔日誌,在該視圖中仍然保存着對應的部分數據信息
 
SQL> execute sys.dbms_backup_restore.resetCfileSection(11);
6、查看v$archive_log
 
SQL>select * from v$archived_log;
7、生成新的日誌文件
 
SQL>alter system switch logfile;

總結:在生產環境中可以根據客戶需求,制定對應的歸檔日誌保留策略,很多 時候在使用rman全備之後,會備份歸檔,可以在全備腳本後面添加刪除歸檔日誌的命令,因爲在全備後,歸檔也會一併備份到對應的備份片中,可以通過備份還原之。總之是否刪除或者怎麼刪除這個都要根據實際情況來。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章