1. 程式人生 > 其它 >如何解決 RMAN-06149:無法在 NOARCHIVELOG 模式下備份資料庫

如何解決 RMAN-06149:無法在 NOARCHIVELOG 模式下備份資料庫

一、問題描述

嘗試在開發環境中備份資料庫。但因“RMAN-06149:無法在 NOARCHIVELOG 模式下備份資料庫”而失敗。

RMAN> backup database tag 'BEFORE-IMPORT-PRODUCTION-2022Q1';
Starting backup at 18-APR-22 using target database control file instead of recovery catalogallocated channel: ORA_DISK_1channel ORA_DISK_1: SID=352 device type=DISKRMAN-00571: ===========================================================RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============RMAN-00571: ===========================================================RMAN-03002: failure of backup command at 04/18/2022 11:08:26RMAN-06149: cannot BACKUP DATABASE in NOARCHIVELOG mode

什麼?資料庫處於NOARCHIVELOG模式?哦,我忘了我是在開發環境中的。由於資料庫是開發用的,不需要對資料進行高級別的保護,所以我特意把它設定為NOARCHIVELOG模式。

 

二、檢查存檔日誌模式

Oracle 如何檢查存檔日誌模式?有兩種方法可以檢查歸檔日誌模式是否啟用。

方法一:通過 SQL*Plus 命令

1、要使用 SQL*Plus 特定的命令,您必須先登入到資料庫。

C:\Users\>sqlplus sys@orclcdb as sysdba...Enter 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 ModeAutomatic archival       DisabledArchive destination      USE_DB_RECOVERY_FILE_DESTOldest online log sequence   9023Current 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 拒絕這種不合理的備份。

四、解決方案

下面推薦幾個常見的解決方案

4.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模式。

4.2 在NOARCHIVELOG模式備份的方法

但是如果你不想改變NOARCHIVELOG模式,請繼續閱讀以下兩種方式。

4.2.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;

4.2.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

4.3 熱備份模式

如果此時您的資料庫服務不能中斷,您可以進入 BEGIN BACKUP 模式,以便將所有資料檔案複製為資料庫映像作為替代方案,這是與 RMAN 截然不同的備份策略。