今天在发出全备份命令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> shutdown immediate;

2.启动数据库到mount状态

SQL> startup mount;

3.启用归档模式

SQL> alter database archivelog;

4.查看修改后的数据库备份和恢复策略及归档文件的位置

SQL> archive log list;

5.修改相应的初始化参数

Oracle10g之前,你还需要修改初始化参数使数据库处于自动归档模式。
可用SQL> show parameter log_archive_start;查看

NAME                 TYPE    VALUE

------------------------------------ ----------- --------------

log_archive_start          boolean   FALSE
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;查看备份文件的目录及其大小
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
  1. 使用show parameter log_archive_start;查看数据库是否出于自动归档模式
最后修改:2020 年 04 月 05 日
如果觉得我的文章对你有用,请随意赞赏