今天刚打开数据库,就down了,提示ora00257
archiver   error.   Connect   internal   only,   until   freed.
上次就是出现这个问题,由于比较忙,就把归档关闭了,今天必须问清!!!请朋友们多多帮忙~~~~~~出现这个问题,我sqlplus /nolog connect / as sysdba
SQL> select * from v$log;
发现ARC状态为NO~~
最后查了一下说是:表示系统没法自动做归档。
问题一:为什么会出现这个问题??导致这个问题的可能原因是什么?
然后我
SQL> select * from v$flash_recovery_area_usage;
ARCHIVELOG 80 0 40发现ARCHIVELOG已经用了80%  (这样FLASH_RECOVERY_AREA空间的空间已经被完全占据了。)
问题二(这个里面存的是什么文件?为什么会出现这个问题??导致这个问题的可能原因是什么?)
在网上找了很多资料,解决办法:1,增加FLASH_RECOVERY_AREA空间
2、删除一些归档日志
最后我删除了一些。解决了这个问题问题三:
我用什么好的方案能保证以后这样的问题不在出现?前提不是删除日志,最好备份起来~~具体需要怎么操作??

解决方案 »

  1.   

    用EM设定一个backup job来备份,记得选上“Delete all archived logs from disk after they are successfully backed up”
      

  2.   


    ORA-00257: archiver error. Connect internal only, until freed. 
    Cause: The archiver process received an error while trying to archive a redo log. If the problem is not resolved soon, the database will stop executing transactions. The most likely cause of this message is the destination device is out of space to store the redo log file.
     
    Action: Check archiver trace file for a detailed description of the problem. Also verify that the device specified in the initialization parameter ARCHIVE_LOG_DEST is set up properly for archiving.
     当数据库采用归档麽时候,在redo online log 切换的时候,就会把这些log文件归档到归档目录,这个在ARCHIVE_LOG_DEST 里设置,启用归档后,就要定期检查归档目录使用情况,因为归档目录满了,数据库就出现异常了。此类问题的处理方法见下面的blog,写的很清楚Flash Recovery Area空间不足导致数据库不能打开或hang住
    http://blog.csdn.net/tianlesoftware/archive/2009/10/14/4668991.aspx
    2.在来讲下归档文件有什么作用归档日志里记录的是用户的操作,Rman备份就需要这些归档文件。 可以从这些归档文件中知道用户都做了哪些操作,就可以对数据库进行恢复。这个归档文件是不能随便删的,因为少了,就不能做完全恢复了。 只能做不完全恢复,所谓的不完全恢复就是归档文件有丢失,也就意味这数据丢失。 这当然是不希望看到的。我们备份的目的就是保证数据不丢失。3. 数据库启动归归档模式后,要定期的检查归档目录使用情况。 可以增大的空间。 这个上面的blog里写得很清楚。还有定期的进行RMAN备份,因为备份之后就可以删除过期的归档日志,这样就能额节省空间。
      

  3.   

    附上一些RMAN 备份的信息RMAN 备份与恢复 实例
    http://blog.csdn.net/tianlesoftware/archive/2009/10/20/4699320.aspx补充一点,在没有备份的情况下删除归档文件是危险的行为,只有备份之后才能删除过期的文件。楼主已经删了归档文件,RMAN备份肯定会出现问题,不过可以这样做:Rman 归档文件丢失导致不能备份的,在备份前先执行以下两条命令
    crosscheck archivelog all;
    delete expired archivelog all;这样即使备份成功了,还原后也是有数据丢失的.
      

  4.   


    如果楼主的数据库不是非常重要,或者说允许少量数据丢失的情况下,也可以采用逻辑备份,EXP/IMP,EXPDP/IMPDP,这样就可以用非归档模式启动数据库,这样就不会出现无法归档的问题了。 因为都不会产生归档文件了。 此时产生的redo log 文件在切换后在在下次使用时被覆盖掉.
      

  5.   

    楼主改一下归档路径就行,不改的话默认位置就是flashback的位置,所以会出现你说的问题
    alter system set log_archive_dest_1='location=新的位置';
    之后管理归档文件就方便多了.
      

  6.   

    楼主也可以查询一下SQL> select flashback_on from v$database;如果是YES......那么该目录下还存储着闪回文件
    总之,建议归档路径不要使用默认的闪回路径.管理起来很麻烦
      

  7.   

    alter database flashback off;
    就不会出现这个问题了.
      

  8.   

    有多个解决方法
    1.增加db_recovery_file_dest_size的值。2. 默认归档也存在这个目录下
    使用RMAN把无效的arc移除3. 把log_archive_dest设置到别的地方。
      

  9.   

    一下,我也遇到过这样的问题,我的解决就是把数据库的归档修改成了noarchive。
      

  10.   

    这个错误代码非常清晰,就是你的archive log destination磁盘空间满了。磁盘存储规划、监控、管理是dba最基本的工作。无论在unix还是windows平台下,oracle dba都应该设置自动执行的监控程序检查oracle文件目录(数据文件、dump文件、archive log文件)磁盘空间的使用率,当使用率超过一定警戒线,自动通知dba进行管理,或者备份到其它设备,或者增加存储空间。尤其是archive log目录。对于数据安全性高的应用,archive log是很重要的。archive log目录规划的几个注意点,
    、如果有条件的话,archive log目录应该放在独立的磁盘或者卷上,这对数据安全性和性能都有重要的影响。
    、archive log目录下的文件应该定时转存到其它设备,比如每天备份到磁带然后清空。
    、archive log目录的空间应该至少存放两次转存之间数据库产生的log。
      

  11.   

    增加db_recovery_file_dest_size的值,这样肯定可以
      

  12.   


    用系统的物理铲除,不能解决,数据字典里的信息没有改变,要清除掉,必须用RMAN的方式来清理。
      

  13.   

    我是在rman方式下删除的,并且想用crosscheck archivelog all; 
    delete expired archivelog all; 
    删除一些过期的,但是提示没有~~~
    不知道这样操作以后,对备份有什么影响吗??
      

  14.   

    这个要先执行crosscheck archivelog all;
    然后delete expired archivelog all对删除过期的archivelog ,不过这只是临时方法,终极方法要把archive_dest转到别的地方去
      

  15.   

    arch_dest是参数,修改参数就可以叻。这些是归档,对数据是没有影响的。