Oracle 數(shù)據(jù)庫歸檔模式和非歸檔模式的區(qū)別以及設(shè)置
作者: 不剪發(fā)的Tony老師
畢業(yè)于北京航空航天大學(xué),十多年數(shù)據(jù)庫管理與開發(fā)經(jīng)驗,目前在一家全球性的金融公司從事數(shù)據(jù)庫架構(gòu)設(shè)計。CSDN學(xué)院簽約講師以及GitChat專欄作者。csdn上的博客收藏于以下地址:https://tonydong.blog.csdn.net
文章目錄
查看歸檔模式
單實例
Oracle 9i 之前
Oracle 10g 以后
RAC 集群
Oracle 9i 之前
Oracle 10g 以后
Oracle 在線重做日志(online redo log)記錄了數(shù)據(jù)庫的各種增刪改操作。數(shù)據(jù)庫至少擁有 2 個在線重做日志組,并且循環(huán)使用;日志組 1 寫滿后切換到日志組 2,日志組 2 寫滿后再切換到日志組 1,不停地重復(fù)這個過程。
切換日志組會覆蓋原來日志文件中的內(nèi)容,如果不對已經(jīng)寫滿的日志文件進行歸檔,重做日志記錄就會丟失;如果選擇歸檔日志模式,發(fā)生日志切換會對寫滿的日志會進行歸檔存儲,意味著歷史重做日志記錄都會被保存。這兩種配置的主要優(yōu)缺點如下:
非歸檔模式只能進行冷備,只能還原到備份點,之后的數(shù)據(jù)無法恢復(fù);一般在開發(fā)或者測試環(huán)境使用;
歸檔模式可以執(zhí)行熱備,同時支持增量備份,可以執(zhí)行時間點恢復(fù);歸檔日志文件需要占用額外的磁盤空間。
??對于生產(chǎn)數(shù)據(jù)庫,必須要工作在歸檔模式。
接下來我們介紹如何為 Oracle 單實例和 RAC 集群環(huán)境設(shè)置數(shù)據(jù)庫的歸檔模式和非歸檔模式。
查看歸檔模式
首先,可以使用 ARCHIVE LOG LIST 命令查看數(shù)據(jù)庫當(dāng)前歸檔模式:
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 系統(tǒng)視圖查看當(dāng)前的歸檔模式:
SQL> select name,log_mode from v$database;
NAME LOG_MODE
--------- ------------
ORCL NOARCHIVELOG
單實例
Oracle 9i 之前
在 Oracle 9i 單節(jié)點實例中,可以使用以下方法將數(shù)據(jù)庫設(shè)置為歸檔日志模式:
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,也可以設(shè)置自己的歸檔目錄和日志文件名的格式。
??切換為歸檔日志模式之后一定要執(zhí)行一次完全備份,因為非歸檔日志模式下產(chǎn)生的備份日志對于歸檔模式不可用。
另一方面,我們可以使用以下方法將數(shù)據(jù)庫設(shè)置為非歸檔模式:
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 參數(shù)以及 ARCHIVE LOG START 命令已經(jīng)被廢棄(歸檔模式默認啟用自動歸檔),因此設(shè)置更為簡單。以下操作將數(shù)據(jù)庫設(shè)置為歸檔模式:
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,也可以設(shè)置自己的歸檔目錄和日志文件名的格式。
??切換為歸檔日志模式之后一定要執(zhí)行一次完全備份,因為非歸檔日志模式下產(chǎn)生的備份日志對于歸檔模式不可用。
同樣,我們可以使用以下方法將數(shù)據(jù)庫設(shè)置為非歸檔模式:
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE NONARCHIVELOG;
ALTER DATABASE OPEN;
RAC 集群
Oracle RAC 集群環(huán)境中的歸檔模式和非歸檔模式的設(shè)置略有不同。ALTER DATABASE ARCHIVELOG 命令只能在數(shù)據(jù)庫以獨占模式 MOUNT 時執(zhí)行,這就意味著必須停止整個集群數(shù)據(jù)庫,然后執(zhí)行操作。
Oracle 9i 之前
首先,設(shè)置相關(guān)的歸檔參數(shù):
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;
由于需要以獨占模式裝載數(shù)據(jù)庫,還必須設(shè)置以下參數(shù):
ALTER SYSTEM SET cluster_database=FALSE SCOPE=spfile;
然后使用 srvctl 停止整個集群數(shù)據(jù)庫:
$ srvctl stop database -d db_name
集群停止之后,我們可以連接到其中一個節(jié)點執(zhí)行以下命令:
STARTUP MOUNT;
ARCHIVE LOG START;
ALTER DATABASE ARCHIVELOG;
ALTER SYSTEM SET cluster_database=TRUE SCOPE=spfile;
SHUTDOWN IMMEDIATE;
注意,參數(shù) CLUSTER_DATABASE 被重新設(shè)置為 TRUE。由于數(shù)據(jù)文件和 SPFILE 被所有實例共享,以上操作只需要從一個節(jié)點執(zhí)行。
然后,再次從命令行啟動集群數(shù)據(jù)庫:
$ srvctl start database -d db_name
以上設(shè)置將多個實例的歸檔日志放在了同一個目錄中。歸檔格式中包含了線程(%t),可以防止實例之間的歸檔日志文件名沖突。如果需要為不同實例指定單獨的歸檔目錄,可以在 LOG_ARCHIVE_DEST_1 參數(shù)前加上實例 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;
同樣,我們可以使用以下方法將集群數(shù)據(jù)庫設(shè)置為非歸檔模式,只需要在一個節(jié)點進行操作:
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 參數(shù)以及 ARCHIVE LOG START 命令已經(jīng)被廢棄(歸檔模式默認啟用自動歸檔),因此設(shè)置更為簡單。首先,設(shè)置相關(guān)的歸檔參數(shù):
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,由于需要以獨占模式裝載數(shù)據(jù)庫,還必須設(shè)置以下參數(shù):
ALTER SYSTEM SET cluster_database=FALSE SCOPE=spfile;
Oracle 10gR2 以后的版本不再需要設(shè)置 cluster_database 參數(shù)。
然后從命令行停止整個集群數(shù)據(jù)庫:
$ srvctl stop database -d db_name
集群停止之后,我們可以連接到其中一個節(jié)點執(zhí)行以下命令:
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER SYSTEM SET cluster_database=TRUE SCOPE=spfile;
SHUTDOWN IMMEDIATE;
再次從命令行啟動集群數(shù)據(jù)庫:
$ srvctl start database -d db_name
同樣,我們可以使用以下方法將集群數(shù)據(jù)庫設(shè)置為非歸檔模式,只需要在一個節(jié)點進行操作:
ALTER SYSTEM SET cluster_database=FALSE SCOPE=spfile;
Oracle 10gR2 以后的版本不再需要設(shè)置 cluster_database 參數(shù)。
$ 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
定期更新數(shù)據(jù)庫領(lǐng)域相關(guān)文章,歡迎點贊??、評論??、收藏??!