如何解决 RMAN-06149:无法在 NOARCHIVELOG 模式下备份数据库

一、问题描述

尝试在开发环境中备份数据库。但因“RMAN-06149:无法在 NOARCHIVELOG 模式下备份数据库”而失败。

什么?数据库处于NOARCHIVELOG模式?哦,我忘了我是在开发环境中的。由于数据库是开发用的,不需要对数据进行高级别的保护,所以我特意把它设置为NOARCHIVELOG模式。

二、检查存档日志模式

Oracle 如何检查存档日志模式?有两种方法可以检查归档日志模式是否启用。

方法一:通过 SQL*Plus 命令

1、要使用 SQL*Plus 特定的命令,您必须先登录到数据库。

复制C:\Users\>sqlplus sys@orclcdb as sysdba...Enter password:1.

2、通过archive log list检查归档日志信息

使用 SQL*Plus 命令archive log list来检索有关重做和归档日志的一些相关信息。

归档日志模式
复制SQL> archive log list

;

Database log mode Archive ModeAutomatic archival EnabledArchive destination USE_DB_RECOVERY_FILE_DESTOldest online log sequence 9023Current log sequence 90251.2.3.4.5.6.
无存档日志模式
复制SQL> archive log list

;

Database log mode No Archive ModeAutomatic archival DisabledArchive destination USE_DB_RECOVERY_FILE_DESTOldest online log sequence 9023Current log sequence 90251.2.3.4.5.6.
方法二:按 SQL 查询

对数据库进行简单查询,无论数据库是 MOUNT 还是 OPEN,都可以得到这样的结果。

归档日志模式
复制SQL> select log_mode from v$database

;

LOG_MODE------------ARCHIVELOG1.2.
无存档日志模式
复制SQL> select log_mode from v$database

;

LOG_MODE------------NOARCHIVELOG1.2.

三、基本原理

如果我们处于ARCHIVELOG模式,那么我们可以打开READ WRITE备份数据库。也就是说,我们在数据库运行时备份数据库,并且每秒都在更改。它导致内部数据文件的备份不一致。尽管如此,备份中数据文件之间的间隙可以通过必要的归档日志来填补,从而使该备份成为一致的备份。所以我们不必担心。这是一个有效的备份。

由于我们处于NOARCHIVELOG模式,因此没有归档日志可以填补不一致的空白。因此,当您使用READ WRITE备份数据库时,不能保证一致的备份。因此,RMAN 拒绝这种不合理的备份。

四、解决方案

下面推荐几个常见的解决方案

1、切换到ARCHIVELOG模式,然后备份数据库

您必须关闭数据库并启动才能挂载状态,然后发出:

复制SQL> shutdown immediate

;

SQL> startup mount

;

SQL> alter database archivelog

;

SQL> alter database open;1.2.3.4.

然后,您可以运行任何您想要的 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;1.2.3.

我已经尝试过这个解决方案。它按我的预期工作。缺点是您必须再次启动数据库才能将数据库恢复为READ WRITE。这意味着,您必须以这种方式弹回数据库两次,这对您的用户来说可能有点烦人。

复制RMAN> shutdown immediate

;

RMAN> startup;1.2.
(2)备份具有 MOUNT 状态的数据库

由于开发数据库不需要任何归档日志以便于维护,因此我选择保持NOARCHIVELOG模式不变。在这里,我将演示如何实现此解决方案。首先,将数据库启动到MOUNT状态。请注意,所有操作都可以在 RMAN 命令提示符下完成。

复制RMAN> shutdown immediate

;

database closeddatabase dismountedOracle instance shut downRMAN> startup mount

;

connected to target database (not started

)

Oracle instance starteddatabase mountedTotal System Global Area 20199768064 bytesFixed Size 3721224 bytesVariable Size 10133440504 bytesDatabase Buffers 9999220736 bytesRedo Buffers 63385600 bytes1.2.3.4.5.6.7.8.9.10.11.12.13.

执行数据库备份。

复制RMAN> backup database tag BEFORE-IMPORT-PRODUCTION-2022Q1

;

Starting backup at 18-APR-18allocated channel: ORA_DISK_1channel ORA_DISK_1: SID=701 device type=DISKchannel ORA_DISK_1: starting full datafile backup setchannel ORA_DISK_1: specifying datafile(s) in backup setinput datafile file number=00003 name=/oradata/ORCL/undotbs01.dbfinput datafile file number=00002 name=/oradata/ORCL/sysaux01.dbfinput datafile file number=00001 name=/oradata/ORCL/system01.dbfinput datafile file number=00004 name=/oradata/ORCL/users01.dbfchannel 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-2022Q11.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.

好的!不再有RMAN-06149:无法在 NOARCHIVELOG 模式下备份数据库。接下来打开数据库

复制RMAN> alter database open

;

Statement processed1.2.
3、热备份模式

如果此时您的数据库服务不能中断,您可以进入 BEGIN BACKUP 模式,以便将所有数据文件复制为数据库映像作为替代方案,这是与 RMAN 截然不同的备份策略。

阅读剩余
THE END