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