C/C++教程

如何解决 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模式。

image-20220524224004799

 

二、检查存档日志模式

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
------- -- -- - ----------- --------------- ------- ------- ---------- ---
...
     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 截然不同的备份策略。

这篇关于如何解决 RMAN-06149:无法在 NOARCHIVELOG 模式下备份数据库的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!