一、什麼是oracle歸檔模式?
oracle數據庫可以運行在歸檔模式(ARCHIVELOG)和非歸檔模式(NOARCHIVELOG)下。
在非歸檔模式下,每次聯機重做日誌文件已滿併發生日誌切換是,都要覆蓋原來聯機重做日誌文件。
在歸檔模式下,必須將已滿的聯機重做日誌文件進行歸檔才能被覆蓋。這樣DBA可以使用數據庫物理備份和歸檔的聯機重做日誌文件恢復數據庫,而不會丟失任何已經提交的數據。
二、oracle歸檔模式的好處
數據庫使用歸檔方式運行時纔可以進行災難性恢復。 歸檔日誌模式和非歸檔日誌模式的區別非歸檔模式只能做冷備份,並且恢復時只能做完全備份.最近一次完全備份到系統出錯期間的數據不能恢復. 歸檔模式可以做熱備份,並且可以做增量備份,可以做部分恢復。
三、配置數據庫的歸檔模式
1、查看數據庫的歸檔模式
SQL> archive log list;
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination /home/oracle/flash_recovery_area/ORCL/archivelog/
Oldest online log sequence 293
Current log sequence 295
以上信息得知:
Adatabase log mode表示數據庫處於非歸檔模式下
Automatic archival 表示自動歸檔功能被禁用
Archive destination表示啓用歸檔模式時歸檔日誌保存的路徑
Oldest online log sequence表示最早的重做日誌序列號
Current log sequence 表示當前日誌序列號
295號日誌的歸檔文件第一個備份的名稱默認爲1_295_831914581.dbf
2、關閉數據庫,然後轉載數據庫
注意只有在數據庫處於mount狀態下才能修改日誌操作模式,關閉數據庫是不能使用shutdown abort命令。
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
Total System Global Area 1590267904 bytes
Fixed Size 1336792 bytes
Variable Size 1224739368 bytes
Database Buffers 352321536 bytes
Redo Buffers 11870208 bytes
Database mounted.
3、修改歸檔模式
SQL> alter database archivelog;
Database altered.
4、修改相應初始化參數使數據庫處於自動歸檔模式(10g以前需要)
要在實例啓動前啓用自動歸檔功能,需要將初始化參數LOG_ARCHIVE_START 的值改爲TRUE。步驟如下:
(1)以管理員身份登錄數據庫
sqlplus / as sysdba
(2)修改服務器端初始化參數
alter system set log_archive_start=true scope=spfile;
(3)重新啓動數據庫,是參數生效
shutdown
startup
注意:重oracle10g開始log_archive_start參數已經被廢除
5、打開數據庫並查看歸檔模式
SQL> alter database open;
Database altered.
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /home/oracle/flash_recovery_area/ORCL/archivelog/
Oldest online log sequence 293
Next log sequence to archive 295
Current log sequence 295
四、配置數據庫從歸檔模式變成非歸檔模式
1、同樣要關閉數據庫,然後轉載數據庫
2、alter database noarchivelog
如果出現如下錯誤(ORA-38774)
SQL> alter database noarchivelog ;
alter database noarchivelog
*
ERROR at line 1:
ORA-38774: cannot disable media recovery - flashback database is enabled
需要先關閉flashback再運行alter database noarchivelog命令
SQL> alter database flashback off;
Database altered.
SQL> alter database noarchivelog;
Database altered.
3、打開數據庫。