Oracle歸檔模式及歸檔日志的操作


在實際應用中,我們需要實現對數據的備份,其實現方式主要有冷備份和熱備份兩種。現在我們主要討論熱備份的具體操作。熱備份也稱為聯機備份,在數據庫的存檔模式下進行備份。oracel數據庫默認存檔模式為關閉狀態,要實現數據的熱備份,需要改變數據庫的存檔模式,將其打開。並且需要注意的是數據庫的存檔模式的操作需要在MOUNT實例中進行,且數據庫不能處於OPEN狀態。
另外一實操篇:https://www.cnblogs.com/itcui/p/15528423.html

歸檔模式及歸檔日志基本概念:

1.1 為什么要給Oracle做歸檔操作

Oracle數據庫有聯機重做日志,這個日志是記錄對數據庫所做的修改,比如插入,刪除,更新數據等,對這些操作都會記錄在聯機重做日志里。

當ORACLE數據庫運行在ARCHIVELOG(歸檔模式)模式時,所有的事務重做日志都將保存.這意味着對數據庫進行的所有事務都留有一個備份,盡管重做日志以循環方式工作,但在一個重做日志被覆蓋前均將為其建立一個副本.在重做日志文件復制完成之前,ORACLE數據庫將停止一切新的操作,在舊的事務記錄完成之前ORACLE不對其進行覆蓋.有了所有事務的副本,數據庫就可以從所有類型的失敗中恢復,包括用戶錯誤或磁盤崩潰.這是一種最安全的數據庫工作方式。在實際開發中,歸檔模式是符合開發的,歸檔模式可以提高Oracle數據庫的可恢復性,生產數據庫都應該運行在此模式下,數據庫使用歸檔方式運行時才可以進行災難性恢復。

1.2 歸檔日志模式和非歸檔日志模式的區別:

非歸檔模式只能做冷備份,並且恢復時只能做完全備份.最近一次完全備份到系統出錯期間的數據不能恢復.

歸檔模式可以做熱備份,並且可以做增量備份,可以做部分恢復.

1.3 什么是歸檔日志

歸檔日志(Archive Log)是非活動的重做日志備份.通過使用歸檔日志,可以保留所有重做歷史記錄,當數據庫處於ARCHIVELOG模式並進行日志切換式,后台進程ARCH會將重做日志的內容保存到歸檔日志中.當數據庫出現介質失敗時,使用數據文件備份,歸檔日志和重做日志可以完全恢復數據庫。

Linux系統開啟歸檔模式

使用ssh登錄到Linux系統:

2.1 切換到oracle用戶,然后使用sqlplus /nolog登錄到oracle數據上:

su -oracle

sqlplus /nolog

 

 

2.2 使用oracle系統管理員sysdba登錄到數據庫:

conn /as sysdba

 

 

2.3 查看當前oracle的模式:

select log_mode from v$database;

如果當前模式為NOARCHIVELOG,就說明沒有開啟歸檔模式

 

 

2.4 關閉數據庫,啟動到mount狀態:

shutdown immediate;

startup mount;

 

 

2.5 修改數據庫為歸檔模式

alter database archivelog; (此處的分號不可以省略)

(如果是歸檔模式改為非歸檔,則執行: alter database noarchivelog;)

 

 

2.6 啟動數據庫:

alter database open;

2.7 再次驗證:

執行select log_mode from v$database;

可查看到oracle已經修改為歸檔模式了

 

 

Windows開啟歸檔模式

3.1 打開sqlplus工具:

sqlplus工具路徑:F:\Oracle\product\11.2.0\dbhome_1\BIN中的sqlplus.exe

雙擊打開即可。(或者cmd到)

 

3.2 登錄到Oracle數據庫:

第一種方式:輸入conn /as sysdba回車后提示需要輸入口令,此時不必輸入口令直接回車即可。

 

 

 

第二種方式:輸入/as sysdba即可

 

 

3.3 查看當前oracle的模式:

select log_mode from v$database;(此處的分號不可省略)

如果當前模式為NOARCHIVELOG,就說明沒有開啟歸檔模式

 

 

3.4 關閉數據庫,啟動到mount狀態:

shutdown immediate

startup mount

 

 

3.5 修改數據庫為歸檔模式

alter database archivelog;(此處的分號不可以省略,如果不加分號會提示“2”,並不會執行數據庫修改)

(如果是歸檔模式改為非歸檔,則執行: alter database noarchivelog;)

 

 

3.6 啟動數據庫:

alter database open;(此處的分號不可以省略,如果不加分號會提示“2”,並不會執行數據庫修改)

 

 

3.7 再次驗證:

執行select log_mode from v$database;

可查看到oracle已經修改為歸檔模式了

 

 

 

歸檔日志的查看及刪除:

4.1 歸檔日志的查詢及日志空間增加:

4.1.1 歸檔日志的查詢

SQLPlus執行conn /as sysdba去查看,也可以只直接在PLSQL中查詢:

執行:

select * from v$flash_recovery_area_usage;

 

ARCHIVED LOG行的percent_space_used 表示歸檔日志占用空間的百分比:

如果 ARCHIVED LOG 超過90% oracle隨時有宕機的危險。

 

4.1.2  增大歸檔日志空間

該操作需要在SQLPlus中進行:

alter system set db_recovery_file_dest_size=20G;

 

4.2 刪除歸檔日志釋放磁盤空間

刪除歸檔日志需要進入RMAN工具才可操作,RMAN 是Oracle數據庫軟件自帶的備份恢復工具,一種是類似於DOS,通過鍵盤操作的 命令行方式。

4.2.1 .進入RMAN工具

  1. CMD輸入RMAN,如果進不去,提示不是內部或外部命令,則進入數據庫bin目錄再執行RMAN,如下圖

   2.進入RMAN連接數據的兩種方法:

(1)可以按照第一點CMD進去先啟動RMAN,然后再通過CONNECT命令來連接目標數據庫

 

(2)先指定要連接的目標數據庫的實例名“SET ORACLE_ID=實例名”。如果本地庫只有一個實例並已經設置了ORACLE_SID環境變量,則不需要再指定ORACLE_SID。RMAN會自動連接到默認實例。如圖,再執行RMAN TARGET/

 

 

   3.需要注意,Linux/UNIX 環境下設置操作系統環境變量應使用export命令,另外ORACLE_SID必須為大寫。例如:

 

 

 

4.2.2 刪除歸檔日志

  1. 先查看歸檔日志狀態:

RMAN>list archivelog all;

  2.手工刪除歸檔日志文件(刪除7天前的所有歸檔日志)

RMAN>DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';

說明:
 SYSDATA-7,表明當前的系統時間7天前,before關鍵字表示在7天前的歸檔日志,如果使用了閃回功能,也會刪除閃回的數據。 
同樣道理,也可以刪除從7天前到現在的全部日志,不過這個命令要考慮清楚,做完這個刪除,最好馬上進行全備份數據庫。

  3.退出rman

RMAN> exit

 

4.3 Windows定時刪除歸檔日志

4.3.1 創建一個刪除歸檔日志的腳本(delete_arch.txt):

connect target  /

run{

    crosscheck archivelog all;

    DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';

    delete expired archivelog all;

}

注:如果數據庫為單實例數據庫直接用“connect target /”連接數據庫,如果數據為多實例數據庫,需指定特定實例及用戶:connect target sys/oracle@hrst即腳本格式為:

connect target  sys/oracle@hrst

run{

    crosscheck archivelog all;

    DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';

    delete expired archivelog all;

}

其中DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7'; //刪除七天前的歸檔日志

4.3.2 創建批處理任務(delete_archive.bat)

rman cmdfile=C:\Users\Tanr\Desktop\定期刪除歸檔日志\delete_arch.txt

當由於電腦系統問題,必須要在Oracle的bin目錄才能執行RMAN時,可以這種寫法:

F:

cd ..\

cd F:\Oracle\product\11.2.0\dbhome_1\BIN

rman cmdfile=C:\Users\Tanr\Desktop\定期刪除歸檔日志\delete_arch.txt

4.3.3 創建一個windows任務定時調用批處理任務(delete_archive.bat)

開始 => 所有程序 => 附件 => 系統工具 => 任務計划

新建個任務計划了,然后根據要求配置下即可。

一般情況計划任務可設置一周執行一次,沒有必要設置每天都執行。

 


免責聲明!

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



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