Oracle 數(shù)據(jù)庫(kù)歸檔模式和非歸檔模式的區(qū)別以及設(shè)置

作者: 不剪發(fā)的Tony老師
畢業(yè)于北京航空航天大學(xué),十多年數(shù)據(jù)庫(kù)管理與開(kāi)發(fā)經(jīng)驗(yàn),目前在一家全球性的金融公司從事數(shù)據(jù)庫(kù)架構(gòu)設(shè)計(jì)。CSDN學(xué)院簽約講師以及GitChat專欄作者。csdn上的博客收藏于以下地址:https://tonydong.blog.csdn.net


文章目錄

        查看歸檔模式
        單實(shí)例
            Oracle 9i 之前
            Oracle 10g 以后
        RAC 集群
            Oracle 9i 之前
            Oracle 10g 以后

Oracle 在線重做日志(online redo log)記錄了數(shù)據(jù)庫(kù)的各種增刪改操作。數(shù)據(jù)庫(kù)至少擁有 2 個(gè)在線重做日志組,并且循環(huán)使用;日志組 1 寫(xiě)滿后切換到日志組 2,日志組 2 寫(xiě)滿后再切換到日志組 1,不停地重復(fù)這個(gè)過(guò)程。

切換日志組會(huì)覆蓋原來(lái)日志文件中的內(nèi)容,如果不對(duì)已經(jīng)寫(xiě)滿的日志文件進(jìn)行歸檔,重做日志記錄就會(huì)丟失;如果選擇歸檔日志模式,發(fā)生日志切換會(huì)對(duì)寫(xiě)滿的日志會(huì)進(jìn)行歸檔存儲(chǔ),意味著歷史重做日志記錄都會(huì)被保存。這兩種配置的主要優(yōu)缺點(diǎn)如下:

    非歸檔模式只能進(jìn)行冷備,只能還原到備份點(diǎn),之后的數(shù)據(jù)無(wú)法恢復(fù);一般在開(kāi)發(fā)或者測(cè)試環(huán)境使用;
    歸檔模式可以執(zhí)行熱備,同時(shí)支持增量備份,可以執(zhí)行時(shí)間點(diǎn)恢復(fù);歸檔日志文件需要占用額外的磁盤(pán)空間。

    ??對(duì)于生產(chǎn)數(shù)據(jù)庫(kù),必須要工作在歸檔模式。

接下來(lái)我們介紹如何為 Oracle 單實(shí)例和 RAC 集群環(huán)境設(shè)置數(shù)據(jù)庫(kù)的歸檔模式和非歸檔模式。
查看歸檔模式

首先,可以使用 ARCHIVE LOG LIST 命令查看數(shù)據(jù)庫(kù)當(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 意味著非歸檔模式。

另外,也可以通過(guò) v$database 系統(tǒng)視圖查看當(dāng)前的歸檔模式:

SQL> select name,log_mode from v$database;

NAME      LOG_MODE
--------- ------------
ORCL      NOARCHIVELOG


單實(shí)例
Oracle 9i 之前

在 Oracle 9i 單節(jié)點(diǎn)實(shí)例中,可以使用以下方法將數(shù)據(jù)庫(kù)設(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í)行一次完全備份,因?yàn)榉菤w檔日志模式下產(chǎn)生的備份日志對(duì)于歸檔模式不可用。

另一方面,我們可以使用以下方法將數(shù)據(jù)庫(kù)設(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 開(kāi)始,LOG_ARCHIVE_START 參數(shù)以及 ARCHIVE LOG START 命令已經(jīng)被廢棄(歸檔模式默認(rèn)啟用自動(dòng)歸檔),因此設(shè)置更為簡(jiǎn)單。以下操作將數(shù)據(jù)庫(kù)設(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í)行一次完全備份,因?yàn)榉菤w檔日志模式下產(chǎn)生的備份日志對(duì)于歸檔模式不可用。

同樣,我們可以使用以下方法將數(shù)據(jù)庫(kù)設(shè)置為非歸檔模式:

SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE NONARCHIVELOG;
ALTER DATABASE OPEN;


RAC 集群

Oracle RAC 集群環(huán)境中的歸檔模式和非歸檔模式的設(shè)置略有不同。ALTER DATABASE ARCHIVELOG 命令只能在數(shù)據(jù)庫(kù)以獨(dú)占模式 MOUNT 時(shí)執(zhí)行,這就意味著必須停止整個(gè)集群數(shù)據(jù)庫(kù),然后執(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;


由于需要以獨(dú)占模式裝載數(shù)據(jù)庫(kù),還必須設(shè)置以下參數(shù):

ALTER SYSTEM SET cluster_database=FALSE SCOPE=spfile;


然后使用 srvctl 停止整個(gè)集群數(shù)據(jù)庫(kù):

$ srvctl stop database -d db_name


集群停止之后,我們可以連接到其中一個(gè)節(jié)點(diǎn)執(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 被所有實(shí)例共享,以上操作只需要從一個(gè)節(jié)點(diǎn)執(zhí)行。

然后,再次從命令行啟動(dòng)集群數(shù)據(jù)庫(kù):

$ srvctl start database -d db_name


以上設(shè)置將多個(gè)實(shí)例的歸檔日志放在了同一個(gè)目錄中。歸檔格式中包含了線程(%t),可以防止實(shí)例之間的歸檔日志文件名沖突。如果需要為不同實(shí)例指定單獨(dú)的歸檔目錄,可以在 LOG_ARCHIVE_DEST_1 參數(shù)前加上實(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ù)庫(kù)設(shè)置為非歸檔模式,只需要在一個(gè)節(jié)點(diǎn)進(jìn)行操作:

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 開(kāi)始,LOG_ARCHIVE_START 參數(shù)以及 ARCHIVE LOG START 命令已經(jīng)被廢棄(歸檔模式默認(rèn)啟用自動(dòng)歸檔),因此設(shè)置更為簡(jiǎn)單。首先,設(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,由于需要以獨(dú)占模式裝載數(shù)據(jù)庫(kù),還必須設(shè)置以下參數(shù):

ALTER SYSTEM SET cluster_database=FALSE SCOPE=spfile;


Oracle 10gR2 以后的版本不再需要設(shè)置 cluster_database 參數(shù)。

然后從命令行停止整個(gè)集群數(shù)據(jù)庫(kù):

$ srvctl stop database -d db_name


集群停止之后,我們可以連接到其中一個(gè)節(jié)點(diǎn)執(zhí)行以下命令:

STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER SYSTEM SET cluster_database=TRUE SCOPE=spfile;
SHUTDOWN IMMEDIATE;


再次從命令行啟動(dòng)集群數(shù)據(jù)庫(kù):

$ srvctl start database -d db_name

同樣,我們可以使用以下方法將集群數(shù)據(jù)庫(kù)設(shè)置為非歸檔模式,只需要在一個(gè)節(jié)點(diǎn)進(jìn)行操作:

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ù)庫(kù)領(lǐng)域相關(guān)文章,歡迎點(diǎn)贊??、評(píng)論??、收藏??!