如何解決 RMAN-06149:無法在 NOARCHIVELOG 模式下備份數(shù)據(jù)庫
一、問題描述
嘗試在開發(fā)環(huán)境中備份數(shù)據(jù)庫。但因“RMAN-06149:無法在 NOARCHIVELOG 模式下備份數(shù)據(jù)庫”而失敗。
什么?數(shù)據(jù)庫處于NOARCHIVELOG模式?哦,我忘了我是在開發(fā)環(huán)境中的。由于數(shù)據(jù)庫是開發(fā)用的,不需要對數(shù)據(jù)進行高級別的保護,所以我特意把它設置為NOARCHIVELOG模式。
二、檢查存檔日志模式
Oracle 如何檢查存檔日志模式?有兩種方法可以檢查歸檔日志模式是否啟用。
方法一:通過 SQL*Plus 命令
1、要使用 SQL*Plus 特定的命令,您必須先登錄到數(shù)據(jù)庫。
C:\Users\>sqlplus sys@orclcdb as sysdbaEnter password:
2、通過archive log list檢查歸檔日志信息
使用 SQL*Plus 命令archive log list來檢索有關重做和歸檔日志的一些相關信息。
歸檔日志模式
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
無存檔日志模式
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 查詢
對數(shù)據(jù)庫進行簡單查詢,無論數(shù)據(jù)庫是 MOUNT 還是 OPEN,都可以得到這樣的結果。
歸檔日志模式
SQL> select log_mode from v$database;
LOG_MODE------------ARCHIVELOG
無存檔日志模式
SQL> select log_mode from v$database;
LOG_MODE------------NOARCHIVELOG
三、基本原理
如果我們處于ARCHIVELOG模式,那么我們可以打開READ WRITE備份數(shù)據(jù)庫。也就是說,我們在數(shù)據(jù)庫運行時備份數(shù)據(jù)庫,并且每秒都在更改。它導致內(nèi)部數(shù)據(jù)文件的備份不一致。盡管如此,備份中數(shù)據(jù)文件之間的間隙可以通過必要的歸檔日志來填補,從而使該備份成為一致的備份。所以我們不必擔心。這是一個有效的備份。
由于我們處于NOARCHIVELOG模式,因此沒有歸檔日志可以填補不一致的空白。因此,當您使用READ WRITE備份數(shù)據(jù)庫時,不能保證一致的備份。因此,RMAN 拒絕這種不合理的備份。
四、解決方案
下面推薦幾個常見的解決方案
1、切換到ARCHIVELOG模式,然后備份數(shù)據(jù)庫
您必須關閉數(shù)據(jù)庫并啟動才能掛載狀態(tài),然后發(fā)出:
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database archivelog;
SQL> alter database open;
然后,您可以運行任何您想要的 RMAN 腳本。不再有RMAN-06149: cannot BACKUP DATABASE in NOARCHIVELOG mode,因為它已切換到ARCHIVELOG模式。
2、在NOARCHIVELOG模式備份的方法
但是如果你不想改變NOARCHIVELOG模式,請繼續(xù)閱讀以下兩種方式。
(1)使用 READ ONLY 備份數(shù)據(jù)庫
您必須將數(shù)據(jù)庫服務器啟動為只讀,然后執(zhí)行備份。
RMAN> shutdown immediate;
RMAN> startup open read only;
RMAN> backup database tag 'BEFORE-IMPORT-PRODUCTION-2022Q1';
我已經(jīng)嘗試過這個解決方案。它按我的預期工作。缺點是您必須再次啟動數(shù)據(jù)庫才能將數(shù)據(jù)庫恢復為READ WRITE。這意味著,您必須以這種方式彈回數(shù)據(jù)庫兩次,這對您的用戶來說可能有點煩人。
RMAN> shutdown immediate;
RMAN> startup;
(2)備份具有 MOUNT 狀態(tài)的數(shù)據(jù)庫
由于開發(fā)數(shù)據(jù)庫不需要任何歸檔日志以便于維護,因此我選擇保持NOARCHIVELOG模式不變。在這里,我將演示如何實現(xiàn)此解決方案。首先,將數(shù)據(jù)庫啟動到MOUNT狀態(tài)。請注意,所有操作都可以在 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ù)庫備份。
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:無法在 NOARCHIVELOG 模式下備份數(shù)據(jù)庫。接下來打開數(shù)據(jù)庫
RMAN> alter database open;
Statement processed
3、熱備份模式
如果此時您的數(shù)據(jù)庫服務不能中斷,您可以進入 BEGIN BACKUP 模式,以便將所有數(shù)據(jù)文件復制為數(shù)據(jù)庫映像作為替代方案,這是與 RMAN 截然不同的備份策略。