在實際應用中,我們需要實現對數據的備份,其實現方式主要有冷備份和熱備份兩種。現在我們主要討論熱備份的具體操作。熱備份也稱為聯機備份,在數據庫的存檔模式下進行備份。oracel數據庫默認存檔模式為關閉狀態,要實現數據的熱備份,需要改變數據庫的存檔模式,將其打開。並且需要注意的是數據庫的存檔模式的操作需要在MOUNT實例中進行,且數據庫不能處於OPEN狀態。
另外一實操篇:https://www.cnblogs.com/itcui/p/15528423.html
1 歸檔模式及歸檔日志基本概念:
1.1 為什么要給Oracle做歸檔操作:
Oracle數據庫有聯機重做日志,這個日志是記錄對數據庫所做的修改,比如插入,刪除,更新數據等,對這些操作都會記錄在聯機重做日志里。
當ORACLE數據庫運行在ARCHIVELOG(歸檔模式)模式時,所有的事務重做日志都將保存.這意味着對數據庫進行的所有事務都留有一個備份,盡管重做日志以循環方式工作,但在一個重做日志被覆蓋前均將為其建立一個副本.在重做日志文件復制完成之前,ORACLE數據庫將停止一切新的操作,在舊的事務記錄完成之前ORACLE不對其進行覆蓋.有了所有事務的副本,數據庫就可以從所有類型的失敗中恢復,包括用戶錯誤或磁盤崩潰.這是一種最安全的數據庫工作方式。在實際開發中,歸檔模式是符合開發的,歸檔模式可以提高Oracle數據庫的可恢復性,生產數據庫都應該運行在此模式下,數據庫使用歸檔方式運行時才可以進行災難性恢復。
1.2 歸檔日志模式和非歸檔日志模式的區別:
非歸檔模式只能做冷備份,並且恢復時只能做完全備份.最近一次完全備份到系統出錯期間的數據不能恢復.
1.3 什么是歸檔日志:
歸檔日志(Archive Log)是非活動的重做日志備份.通過使用歸檔日志,可以保留所有重做歷史記錄,當數據庫處於ARCHIVELOG模式並進行日志切換式,后台進程ARCH會將重做日志的內容保存到歸檔日志中.當數據庫出現介質失敗時,使用數據文件備份,歸檔日志和重做日志可以完全恢復數據庫。
2 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已經修改為歸檔模式了
3 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 歸檔日志的查看及刪除:
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工具
- 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 刪除歸檔日志
- 先查看歸檔日志狀態:
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)
開始 => 所有程序 => 附件 => 系統工具 => 任務計划
新建個任務計划了,然后根據要求配置下即可。
一般情況計划任務可設置一周執行一次,沒有必要設置每天都執行。