1.问题描述尝试在开发环境备份数据库。但失败并显示“RMAN-06149:无法在NOARCHIVELOG模式下备份数据库”。什么?数据库处于NOARCHIVELOG模式?哦,我忘了我在开发环境中。由于数据库用于开发,不需要高级别的数据保护,所以我特意设置为NOARCHIVELOG模式。二、查看Oracle的归档日志模式如何查看归档日志模式?有两种方法可以检查是否启用了归档日志模式。方法一:通过SQL*Plus命令1、要使用SQL*Plus特定命令,必须先登录数据库。C:\Users\>sqlplussys@orclcdbassysdba...Enterpassword:2.通过archiveloglist查看archivelog信息使用SQL*Plus命令archiveloglist可以检索一些redo和archivelogs的相关信息。归档日志模式SQL>archiveloglist;数据库日志模式ArchiveModeAutomaticarchivalEnabledArchivedestinationUSE_DB_RECOVERY_FILE_DESTOldestonlinelogsequence9023Currentlogsequence9025无日志日志模式SQL>archiveloglist;DatabaselogmodeNoArchiveModeAutomaticarchivalDisabledArchivedestinationUSE_DB_RECOVERY_FILE_DESTOldestonlinelogsequenceDurrentlogsequenceDurrentlog2序列9025方法二:根据SQL查询对数据库进行简单查询,不管数据库是MOUNT还是OPEN,都可以得到这样的结果。归档日志模式SQL>selectlog_modefromv$database;LOG_MODE------------ARCHIVELOG无归档日志模式SQL>selectlog_modefromv$database;LOG_MODE--------------NOARCHIVELOG三、基本原理如果我们处于ARCHIVELOG模式,那么我们就可以打开READWRITE备份数据库。也就是说,我们在数据库运行时备份它,它每秒都在变化。导致内部数据文件备份不一致。尽管如此,备份中数据文件之间的间隙可以用必要的归档日志来填充,以使备份保持一致。所以我们不用担心。这是一个有效的备份。由于我们处于NOARCHIVELOG模式,因此没有归档日志来填补不一致的空白。因此,当您使用READWRITE备份数据库时,无法保证备份的一致性。因此,RMAN拒绝这种不合理的备份。四、解决方案下面推荐一些常见的解决方案1、切换到ARCHIVELOG模式,然后备份数据库。你必须关闭数据库并启动它以挂载状态,然后发出:SQL>shutdownimmediate;SQL>启动挂载;SQL>alterdatabasearchivelog;SQL>alterdatabaseopen;然后您可以运行任何您想要的RMAN脚本。不再有RMAN-06149:无法在NOARCHIVELOG模式下备份数据库,因为它已切换到ARCHIVELOG模式。2.NOARCHIVELOG模式下备份的方法但是如果你不想改变NOARCHIVELOG模式,请继续阅读下面的两种方法。(1)以READONLY方式备份数据库必须以只读方式启动数据库服务器,然后再进行备份。RMAN>立即关闭;RMAN>以只读方式打开;RMAN>备份数据库标签'BEFORE-IMPORT-PRODUCTION-2022Q1';我已经尝试过这个解决方案。它按我的预期工作。缺点是必须重新启动数据库才能将数据库恢复为READWRITE。这意味着,您必须以这种方式弹出数据库两次,这对您的用户来说可能有点烦人。RMAN>立即关闭;RMAN>启动;(2)备份MOUNT状态的数据库由于开发数据库不需要任何归档日志,方便维护,所以我选择保持NOARCHIVELOG模式不变。在这里,我将演示如何实施此解决方案。首先,启动数据库到MOUNT状态。请注意,所有操作都可以在RMAN命令提示符下完成。RMAN>shutdownimmediate;databasecloseddatabasedismountedOracleinstanceshutdownRMAN>startupmount;connectedtotargetdatabase(notstarted)OracleinstancestarteddatabasemountedTotalSystemGlobalArea20199768064bytesFixedSize3721224bytesVariableSize10133440504bytes数据库缓冲区9999220736字节重做缓冲区63385600字节执行操作。RMAN>backupdatabasetag'BEFORE-IMPORT-PRODUCTION-2022Q1';Startingbackupat18-APR-18allocatedchannel:ORA_DISK_1channelORA_DISK_1:SID=701devicetype=DISKchannelORA_DISK_1:startingfulldatafilebackupsetchannelORA_DISK_1:指定数据文件在backupsetinputdatafilefilenumber=00003name=/oradata/ORCL/undotbs01.dbfinputdatafilefilenumber=00002name=/oradata/ORCL/sysaux01??.dbfinputdatafilefilenumber=00001name=/oradata/ORCL/system01.dbfinputdatafilefilenumber=00004name=/oradata/ORCL/users01.dbfchannelORA_DISK_1:startingpiece1at18-APR-18...RMAN>listbackupofdatabasesummary;ListofBackups===============KeyTYLVSDeviceTypeCompletionTime#Pieces#CopiesCompressedTag--------------------------------------------------------------------...87BFADISK18-APR-1811NOBEFORE-IMPORT-PRODUCTION-2022Q1好的!不再有RMAN-06149:无法在NOARCHIVELOG模式下备份数据库。接下来打开数据库RMAN>alterdatabaseopen;Statementprocessed3.热备份模式如果此时你的数据库服务不能被中断,你可以进入BEGINBACKUP模式将所有数据文件复制为一个数据库映像作为备选,这与RMAN的Distinctive备份策略相同。
