Loading... <div class="tip share">请注意,本文编写于 1704 天前,最后修改于 1691 天前,其中某些信息可能已经过时。</div> 今天在发出全备份命令`rman>backup database` 时出现了以下错误 > Cause: You tried to copy or backup a file that was not closed cleanly, and the database was in NOARCHIVELOG mode. This is not allowed because when restored, the file will require redo application before it is usable, and redo is not currently being saved beyond the contents of the online redo logs. > Action: Take the tablespace offline clean or close the database and retry the copy or backup. 原因是数据库运行在非归档模式 我们知道Oracle中 重做日志文件被分为若干组,当一组重做日志被写满,ORACLE就开始写下一组,这叫做日志切换。切换是以循环的方式进行的,即当最后一组写满后又从第一 组开始写。所以如果只有重做日志,即oracle运行在非归档模式下,当遇到数据文件丢失或损坏时,oracle很难保证能够完全恢复数据库,因为可能所 需的重做记录因为因重做日志循环被覆盖掉了。但在归档方式下,归档日志进程会把切换后的重做日志文件复制到归档日志文件,我们可以把归档日志文件看成是重 做日志文件的备份,但归档日志文件是脱机的,即除了在进行复制时,ORACLE数据库在正常运行时是不会关注归档日志文件的。 所以我们应该把数据库改为归档模式。 ## 1.关闭数据库 ```sql SQL> shutdown immediate; ``` ## 2.启动数据库到mount状态 ```sql SQL> startup mount; ``` ## 3.启用归档模式 ```sql SQL> alter database archivelog; ``` ## 4.查看修改后的数据库备份和恢复策略及归档文件的位置 ```sql SQL> archive log list; ``` ## 5.修改相应的初始化参数 Oracle10g之前,你还需要修改初始化参数使数据库处于自动归档模式。 可用`SQL> show parameter log_archive_start;`查看 ```sql NAME TYPE VALUE ------------------------------------ ----------- -------------- log_archive_start boolean FALSE ``` ```sql SQL> alter system set log_archive_start=true scope=spfile; ``` 重启数据库此参数生效,此时数据库处于自动归档模式。 当然你也可以不做第5步,直接 ``` SQL>archive log start ``` 使数据库启用自动归档,但是重启后数据库仍然处于手工归档模式。 现在你可以用RMAN备份数据库了 ## 附: 1. 如果要从归档模式变为非归档模式,使用alter database noarchivelog 命令 2. 使用show parameter db_recovery_file_dest;查看备份文件的目录及其大小 ```sql NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_recovery_file_dest string C:\oracle\product\10.2.0/flash_recovery_area db_recovery_file_dest_size big integer 2G ``` 3. 使用show parameter log_archive_start;查看数据库是否出于自动归档模式 最后修改:2020 年 04 月 05 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏