Oracle 在線重做日誌(online redo log)記錄了數據庫的各種增刪改操作。數據庫至少擁有 2 個在線重做日誌組,並且循環使用;日誌組 1 寫滿後切換到日誌組 2,日誌組 2 寫滿後再切換到日誌組 1,不停地重複這個過程。
切換日誌組會覆蓋原來日誌文件中的內容,如果不對已經寫滿的日誌文件進行歸檔,重做日誌記錄就會丟失;如果選擇歸檔日誌模式,發生日誌切換會對寫滿的日誌會進行歸檔存儲,意味着歷史重做日誌記錄都會被保存。這兩種配置的主要優缺點如下:
- 非歸檔模式只能進行冷備,只能還原到備份點,之後的數據無法恢復;一般在開發或者測試環境使用;
- 歸檔模式可以執行熱備,同時支持增量備份,可以執行時間點恢復;歸檔日誌文件需要佔用額外的磁盤空間。
⚠️對於生產數據庫,必須要工作在歸檔模式。
接下來我們介紹如何爲 Oracle 單實例和 RAC 集羣環境設置數據庫的歸檔模式和非歸檔模式。
查看歸檔模式
首先,可以使用 ARCHIVE LOG LIST 命令查看數據庫當前歸檔模式:
SQL> ARCHIVE LOG LIST;
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination /u01/app/oracle/product/12.2.0/dbhome_1/dbs/arch
Oldest online log sequence 285
Current log sequence 287
No Archive Mode 意味着非歸檔模式。
另外,也可以通過 v$database 系統視圖查看當前的歸檔模式:
SQL> select name,log_mode from v$database;
NAME LOG_MODE
--------- ------------
ORCL NOARCHIVELOG
單實例
Oracle 9i 之前
在 Oracle 9i 單節點實例中,可以使用以下方法將數據庫設置爲歸檔日誌模式:
ALTER SYSTEM SET log_archive_start=TRUE SCOPE=spfile;
ALTER SYSTEM SET log_archive_dest_1='location=/u01/oradata/SID/archive/' SCOPE=spfile;
ALTER SYSTEM SET log_archive_format='arch_%t_%s.arc' SCOPE=spfile;
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ARCHIVE LOG START;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;
記得替換歸檔目錄中的 SID,也可以設置自己的歸檔目錄和日誌文件名的格式。
⚠️切換爲歸檔日誌模式之後一定要執行一次完全備份,因爲非歸檔日誌模式下產生的備份日誌對於歸檔模式不可用。
另一方面,我們可以使用以下方法將數據庫設置爲非歸檔模式:
ALTER SYSTEM SET log_archive_start=FALSE SCOPE=spfile;
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ARCHIVE LOG STOP;
ALTER DATABASE NONARCHIVELOG;
ALTER DATABASE OPEN;
Oracle 10g 以後
從 Oracle 10g 開始,LOG_ARCHIVE_START 參數以及 ARCHIVE LOG START 命令已經被廢棄(歸檔模式默認啓用自動歸檔),因此設置更爲簡單。以下操作將數據庫設置爲歸檔模式:
ALTER SYSTEM SET log_archive_dest_1='location=/u01/oradata/SID/archive/' SCOPE=spfile;
ALTER SYSTEM SET log_archive_format='arch_%t_%s_%r.arc' SCOPE=spfile;
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;
記得替換歸檔目錄中的 SID,也可以設置自己的歸檔目錄和日誌文件名的格式。
⚠️切換爲歸檔日誌模式之後一定要執行一次完全備份,因爲非歸檔日誌模式下產生的備份日誌對於歸檔模式不可用。
同樣,我們可以使用以下方法將數據庫設置爲非歸檔模式:
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE NONARCHIVELOG;
ALTER DATABASE OPEN;
RAC 集羣
Oracle RAC 集羣環境中的歸檔模式和非歸檔模式的設置略有不同。ALTER DATABASE ARCHIVELOG 命令只能在數據庫以獨佔模式 MOUNT 時執行,這就意味着必須停止整個集羣數據庫,然後執行操作。
Oracle 9i 之前
首先,設置相關的歸檔參數:
ALTER SYSTEM SET log_archive_start=TRUE SCOPE=spfile;
ALTER SYSTEM SET log_archive_dest_1='location=/u01/oradata/db_name/archive/' SCOPE=spfile;
ALTER SYSTEM SET log_archive_format='arch_%t_%s.arc' SCOPE=spfile;
由於需要以獨佔模式裝載數據庫,還必須設置以下參數:
ALTER SYSTEM SET cluster_database=FALSE SCOPE=spfile;
然後使用 srvctl 停止整個集羣數據庫:
$ srvctl stop database -d db_name
集羣停止之後,我們可以連接到其中一個節點執行以下命令:
STARTUP MOUNT;
ARCHIVE LOG START;
ALTER DATABASE ARCHIVELOG;
ALTER SYSTEM SET cluster_database=TRUE SCOPE=spfile;
SHUTDOWN IMMEDIATE;
注意,參數 CLUSTER_DATABASE 被重新設置爲 TRUE。由於數據文件和 SPFILE 被所有實例共享,以上操作只需要從一個節點執行。
然後,再次從命令行啓動集羣數據庫:
$ srvctl start database -d db_name
以上設置將多個實例的歸檔日誌放在了同一個目錄中。歸檔格式中包含了線程(%t),可以防止實例之間的歸檔日誌文件名衝突。如果需要爲不同實例指定單獨的歸檔目錄,可以在 LOG_ARCHIVE_DEST_1 參數前加上實例 SID 前綴:
ALTER SYSTEM SET SID1.log_archive_dest_1='location=/u01/oradata/db_name/archive/' SCOPE=spfile;
ALTER SYSTEM SET SID2.log_archive_dest_1='location=/u01/oradata/db_name/archive/' SCOPE=spfile;
同樣,我們可以使用以下方法將集羣數據庫設置爲非歸檔模式,只需要在一個節點進行操作:
ALTER SYSTEM SET cluster_database=FALSE SCOPE=spfile;
$ srvctl stop database -d db_name
STARTUP MOUNT;
ARCHIVE LOG STOP;
ALTER DATABASE NONARCHIVELOG;
ALTER SYSTEM SET cluster_database=TRUE SCOPE=spfile;
SHUTDOWN IMMEDIATE;
$ srvctl start database -d db_name
Oracle 10g 以後
從 Oracle 10g 開始,LOG_ARCHIVE_START 參數以及 ARCHIVE LOG START 命令已經被廢棄(歸檔模式默認啓用自動歸檔),因此設置更爲簡單。首先,設置相關的歸檔參數:
ALTER SYSTEM SET log_archive_dest_1='location=/u01/oradata/db_name/archive/' SCOPE=spfile;
ALTER SYSTEM SET log_archive_format='arch_%t_%s_%r.arc' SCOPE=spfile;
如果是 Oracle 10gR1,由於需要以獨佔模式裝載數據庫,還必須設置以下參數:
ALTER SYSTEM SET cluster_database=FALSE SCOPE=spfile;
Oracle 10gR2 以後的版本不再需要設置 cluster_database 參數。
然後從命令行停止整個集羣數據庫:
$ srvctl stop database -d db_name
集羣停止之後,我們可以連接到其中一個節點執行以下命令:
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER SYSTEM SET cluster_database=TRUE SCOPE=spfile;
SHUTDOWN IMMEDIATE;
再次從命令行啓動集羣數據庫:
$ srvctl start database -d db_name
同樣,我們可以使用以下方法將集羣數據庫設置爲非歸檔模式,只需要在一個節點進行操作:
ALTER SYSTEM SET cluster_database=FALSE SCOPE=spfile;
Oracle 10gR2 以後的版本不再需要設置 cluster_database 參數。
$ srvctl stop database -d db_name
STARTUP MOUNT;
ALTER DATABASE NONARCHIVELOG;
ALTER SYSTEM SET cluster_database=TRUE SCOPE=spfile;
SHUTDOWN IMMEDIATE;
$ srvctl start database -d db_name
定期更新數據庫領域相關文章,歡迎點贊👍、評論📝、收藏❤️!