如何解决 RMAN-06149:无法在 NOARCHIVELOG 模式下备份数据库
一、问题描述
尝试在开发环境中备份数据库。但因“RMAN-06149:无法在 NOARCHIVELOG 模式下备份数据库”而失败。
什么?数据库处于NOARCHIVELOG模式?哦,我忘了我是在开发环境中的。由于数据库是开发用的,不需要对数据进行高级别的保护,所以我特意把它设置为NOARCHIVELOG模式。
二、检查存档日志模式
Oracle 如何检查存档日志模式?有两种方法可以检查归档日志模式是否启用。
方法一:通过 SQL*Plus 命令1、要使用 SQL*Plus 特定的命令,您必须先登录到数据库。
2、通过archive log list检查归档日志信息
使用 SQL*Plus 命令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.;
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.对数据库进行简单查询,无论数据库是 MOUNT 还是 OPEN,都可以得到这样的结果。
归档日志模式;
LOG_MODE------------ARCHIVELOG1.2.;
LOG_MODE------------NOARCHIVELOG1.2.三、基本原理
如果我们处于ARCHIVELOG模式,那么我们可以打开READ WRITE备份数据库。也就是说,我们在数据库运行时备份数据库,并且每秒都在更改。它导致内部数据文件的备份不一致。尽管如此,备份中数据文件之间的间隙可以通过必要的归档日志来填补,从而使该备份成为一致的备份。所以我们不必担心。这是一个有效的备份。
由于我们处于NOARCHIVELOG模式,因此没有归档日志可以填补不一致的空白。因此,当您使用READ WRITE备份数据库时,不能保证一致的备份。因此,RMAN 拒绝这种不合理的备份。
四、解决方案
下面推荐几个常见的解决方案
1、切换到ARCHIVELOG模式,然后备份数据库您必须关闭数据库并启动才能挂载状态,然后发出:
;
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> startup open read only;
RMAN> backup database tag BEFORE-IMPORT-PRODUCTION-2022Q1;1.2.3.我已经尝试过这个解决方案。它按我的预期工作。缺点是您必须再次启动数据库才能将数据库恢复为READ WRITE。这意味着,您必须以这种方式弹回数据库两次,这对您的用户来说可能有点烦人。
;
RMAN> startup;1.2.由于开发数据库不需要任何归档日志以便于维护,因此我选择保持NOARCHIVELOG模式不变。在这里,我将演示如何实现此解决方案。首先,将数据库启动到MOUNT状态。请注意,所有操作都可以在 RMAN 命令提示符下完成。
;
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.执行数据库备份。
;
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 模式下备份数据库。接下来打开数据库
;
Statement processed1.2.如果此时您的数据库服务不能中断,您可以进入 BEGIN BACKUP 模式,以便将所有数据文件复制为数据库映像作为替代方案,这是与 RMAN 截然不同的备份策略。