如何解決 RMAN-06149:無(wú)法在 NOARCHIVELOG 模式下備份數(shù)據(jù)庫(kù)
一、問(wèn)題描述
嘗試在開(kāi)發(fā)環(huán)境中備份數(shù)據(jù)庫(kù)。但因“RMAN-06149:無(wú)法在 NOARCHIVELOG 模式下備份數(shù)據(jù)庫(kù)”而失敗。
什么?數(shù)據(jù)庫(kù)處于NOARCHIVELOG模式?哦,我忘了我是在開(kāi)發(fā)環(huán)境中的。由于數(shù)據(jù)庫(kù)是開(kāi)發(fā)用的,不需要對(duì)數(shù)據(jù)進(jìn)行高級(jí)別的保護(hù),所以我特意把它設(shè)置為NOARCHIVELOG模式。
二、檢查存檔日志模式
Oracle 如何檢查存檔日志模式?有兩種方法可以檢查歸檔日志模式是否啟用。
方法一:通過(guò) SQL*Plus 命令
1、要使用 SQL*Plus 特定的命令,您必須先登錄到數(shù)據(jù)庫(kù)。
C:\Users\>sqlplus sys@orclcdb as sysdbaEnter password:
2、通過(guò)archive log list檢查歸檔日志信息
使用 SQL*Plus 命令archive log list來(lái)檢索有關(guān)重做和歸檔日志的一些相關(guān)信息。
歸檔日志模式
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 9023
Current log sequence 9025
無(wú)存檔日志模式
SQL> archive log list;
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 9023
Current log sequence 9025
方法二:按 SQL 查詢(xún)
對(duì)數(shù)據(jù)庫(kù)進(jìn)行簡(jiǎn)單查詢(xún),無(wú)論數(shù)據(jù)庫(kù)是 MOUNT 還是 OPEN,都可以得到這樣的結(jié)果。
歸檔日志模式
SQL> select log_mode from v$database;
LOG_MODE------------ARCHIVELOG
無(wú)存檔日志模式
SQL> select log_mode from v$database;
LOG_MODE------------NOARCHIVELOG
三、基本原理
如果我們處于ARCHIVELOG模式,那么我們可以打開(kāi)READ WRITE備份數(shù)據(jù)庫(kù)。也就是說(shuō),我們?cè)跀?shù)據(jù)庫(kù)運(yùn)行時(shí)備份數(shù)據(jù)庫(kù),并且每秒都在更改。它導(dǎo)致內(nèi)部數(shù)據(jù)文件的備份不一致。盡管如此,備份中數(shù)據(jù)文件之間的間隙可以通過(guò)必要的歸檔日志來(lái)填補(bǔ),從而使該備份成為一致的備份。所以我們不必?fù)?dān)心。這是一個(gè)有效的備份。
由于我們處于NOARCHIVELOG模式,因此沒(méi)有歸檔日志可以填補(bǔ)不一致的空白。因此,當(dāng)您使用READ WRITE備份數(shù)據(jù)庫(kù)時(shí),不能保證一致的備份。因此,RMAN 拒絕這種不合理的備份。
四、解決方案
下面推薦幾個(gè)常見(jiàn)的解決方案
1、切換到ARCHIVELOG模式,然后備份數(shù)據(jù)庫(kù)
您必須關(guān)閉數(shù)據(jù)庫(kù)并啟動(dòng)才能掛載狀態(tài),然后發(fā)出:
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database archivelog;
SQL> alter database open;
然后,您可以運(yùn)行任何您想要的 RMAN 腳本。不再有RMAN-06149: cannot BACKUP DATABASE in NOARCHIVELOG mode,因?yàn)樗亚袚Q到ARCHIVELOG模式。
2、在NOARCHIVELOG模式備份的方法
但是如果你不想改變NOARCHIVELOG模式,請(qǐng)繼續(xù)閱讀以下兩種方式。
(1)使用 READ ONLY 備份數(shù)據(jù)庫(kù)
您必須將數(shù)據(jù)庫(kù)服務(wù)器啟動(dòng)為只讀,然后執(zhí)行備份。
RMAN> shutdown immediate;
RMAN> startup open read only;
RMAN> backup database tag 'BEFORE-IMPORT-PRODUCTION-2022Q1';
我已經(jīng)嘗試過(guò)這個(gè)解決方案。它按我的預(yù)期工作。缺點(diǎn)是您必須再次啟動(dòng)數(shù)據(jù)庫(kù)才能將數(shù)據(jù)庫(kù)恢復(fù)為READ WRITE。這意味著,您必須以這種方式彈回?cái)?shù)據(jù)庫(kù)兩次,這對(duì)您的用戶來(lái)說(shuō)可能有點(diǎn)煩人。
RMAN> shutdown immediate;
RMAN> startup;
(2)備份具有 MOUNT 狀態(tài)的數(shù)據(jù)庫(kù)
由于開(kāi)發(fā)數(shù)據(jù)庫(kù)不需要任何歸檔日志以便于維護(hù),因此我選擇保持NOARCHIVELOG模式不變。在這里,我將演示如何實(shí)現(xiàn)此解決方案。首先,將數(shù)據(jù)庫(kù)啟動(dòng)到MOUNT狀態(tài)。請(qǐng)注意,所有操作都可以在 RMAN 命令提示符下完成。
RMAN> shutdown immediate;
database closed
database dismounted
Oracle instance shut down
RMAN> startup mount;
connected to target database (not started)
Oracle instance started
database mounted
Total System Global Area 20199768064 bytes
Fixed Size 3721224 bytes
Variable Size 10133440504 bytes
Database Buffers 9999220736 bytes
Redo Buffers 63385600 bytes
執(zhí)行數(shù)據(jù)庫(kù)備份。
RMAN> backup database tag 'BEFORE-IMPORT-PRODUCTION-2022Q1';
Starting backup at 18-APR-18
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=701 device type=DISK
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00003 name=/oradata/ORCL/undotbs01.dbf
input datafile file number=00002 name=/oradata/ORCL/sysaux01.dbf
input datafile file number=00001 name=/oradata/ORCL/system01.dbf
input datafile file number=00004 name=/oradata/ORCL/users01.dbf
channel ORA_DISK_1: starting piece 1 at 18-APR-18
RMAN> list backup of database summary;
List of Backups
===============
Key TY LV S Device Type Completion Time #Pieces #Copies Compressed Tag
------- -- -- - ----------- --------------- ------- ------- ---------- ---
87 B F A DISK 18-APR-18 1 1 NO BEFORE-IMPORT-PRODUCTION-2022Q1
好的!不再有RMAN-06149:無(wú)法在 NOARCHIVELOG 模式下備份數(shù)據(jù)庫(kù)。接下來(lái)打開(kāi)數(shù)據(jù)庫(kù)
RMAN> alter database open;
Statement processed
3、熱備份模式
如果此時(shí)您的數(shù)據(jù)庫(kù)服務(wù)不能中斷,您可以進(jìn)入 BEGIN BACKUP 模式,以便將所有數(shù)據(jù)文件復(fù)制為數(shù)據(jù)庫(kù)映像作為替代方案,這是與 RMAN 截然不同的備份策略。