ORA-00257:archiver error解决办法
出现ORA-00257错误(空间不足错误),通过查找资料,绝大部分说这是由于归档日志太多,占用了全部的硬盘剩余空间导致的,通过简单删除日志或加大存储空间就能够解决。
一、更改归档模式、目录、日志大小
1 查看归档日志
1.1 查看参数db_recovery_file_dest
1.1.1 “db_recovery_file_dest”是用于定义存储归档日志的目录。通过show parameter命令,显示参数的值为(默认为)fast_recovery_area。示例如下:
1.数据库启动 MOUNT 状态
$sqlplus / as sysdba
sql>shutdown immeiate --如果卡住,则试 shutdown abort
sqL>startup mount --数据库启动 MOUNT 状态
SQL> show parameter db_reco;
NAME TYPE
------------------------------------ ----------------------
VALUE
------------------------------
db_recovery_file_dest string
E:\Oracle\flash_recovery_area
db_recovery_file_dest_size big integer
6G
1.1.2 查看v$recovery_file_dest视图,可得知fast_recovery_area的空间限制、已使用的空间、文件数等。
SQL> select * from v$recovery_file_dest;
NAME
--------------------------------------------------------------------------------
SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES
----------- ---------- ----------------- ---------------
E:\Oracle\flash_recovery_area
6442450944 4083002880 0 127
2 更改归档日志目录
语法:alter system set 参数=值 scope=spfile;(设置成比较大的空间的目录,我这里是没有更改目录位置)
示例:
SQL> alter system set db_recovery_file_dest=’/home/oracle/flash_recovery_area’ scope=spfile;
System altered.
3 更改归档日志大小(自行选择是否增加空间)
3.1查看flash recovery area的使用情况
SQL> select * from V$FLASH_RECOVERY_AREA_USAGE;
FILE_TYPE PERCENT_SPACE_USED
---------------------------------------- ------------------
PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES
------------------------- ---------------
CONTROL FILE 0
0 0
REDO LOG 0
0 0
ARCHIVED LOG 99.54
0 127
FILE_TYPE PERCENT_SPACE_USED
---------------------------------------- ------------------
PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES
------------------------- ---------------
BACKUP PIECE 0
0 0
IMAGE COPY 0
0 0
FLASHBACK LOG 0
0 0
FILE_TYPE PERCENT_SPACE_USED
---------------------------------------- ------------------
PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES
------------------------- ---------------
FOREIGN ARCHIVED LOG 0
0 0
已选择7行。
3.2 查看参数’db_recovery_file_dest_size’值
SQL> show parameter recover;
NAME TYPE
------------------------------------ ----------------------
VALUE
------------------------------
db_recovery_file_dest string
E:\Oracle\flash_recovery_area
db_recovery_file_dest_size big integer
3912M
recovery_parallelism integer
0
SQL> alter system set db_recovery_file_dest_size=6144M scope=spfile;
系统已更改。
3.3 查看归档日志大小
SQL> show parameter db_reco;
NAME TYPE
------------------------------------ ----------------------
VALUE
------------------------------
db_recovery_file_dest string
E:\Oracle\flash_recovery_area
db_recovery_file_dest_size big integer
6G
SQL>
4 rman使用
删除归档日志处理步骤:
一、物理删除
oracle安装目录下找到flash_recovery_area 我这里要删的是orcl库
flash_recovery_area\orcl\ARCHIVELOG 删除指定日期注意: 在删除归档日志后,必须用RMAN维护控制文件,否则空间显示仍然不释放
二、rman删除
1. rman连接
E:\Oracle\flash_recovery_area\orcl\ARCHIVELOG>rman
恢复管理器: Release 11.2.0.1.0 - Production on 星期五 3月 24 11:41:22 2023
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
RMAN> connect target /
2.进入 RMAN,清掉 7 天前的归档日志
#务必先执行(只要删除过achivelog目录下文件。都得执行下)
rman>crosscheck archivelog all;
#清除过期归档日志:
rman>delete noprompt expired archivelog all;
rman>delete noprompt obsolete until time 'sysdate-7' ;
2.1其他根据时间删除归档日志:
rman>delete noprompt obsolete until time 'sysdate-7' ;
rman>delete archivelog all completed before 'sysdate - 7' ;
rman>delete noprompt force archivelog until time 'sysdate-1/4';
再次查询,发现使用率正常,已经降到0,
SQL> select * from V$FLASH_RECOVERY_AREA_USAGE;
3 别忘记打开数据库
sql>alter database open
如果想把删除的归档先做备份,然后再进行删除,则用以下这种方法,不过清理时间可能会较长,如与所示:
单独备份归档日志,并进行清理的脚本:
rman>backup archivelog all format '/backup/dbL0arc_%d_%s_%p_%c.arc' tag 'dbL0' filesperset 10
delete all input; --/backup/这个目录要改为现场以前归档文件备份存放的目录名称
建议用单独的归档目录存 Oracle 数据库的归档,例如
将归档路径调成一个不设预定大小的路径,如: ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=/u02/archivelog';
==============================================
额外:
Oracle 数据库关闭归档方法:
1.以 SYS 用户登录数据库到 SQL>下,其中 C:\:为 Windows 操作系统,#:为非 Windows 操作
系统
C:\>或#下执行:sqlplus / as sysdba
2.数据库进入到 mount 状态
sql>startup mount
3.关闭归档
sql>alter database noarchivelog;
4.打开数据库
sql>alter database open;