排查步骤
1.查看系统磁盘空间是否足够,磁盘空间不够,归档日志写不了也是会提示
2.检查一下orcle归档日志的存放位置
通过 archive log list 查看。
oracle默认的归档路径是 USE_DB_RECOVERY_FILE_DEST(上面是更改过的)
具体归档文件位置 /u01/app/oracle/fast_recovery_area
SQL> show parameter db_recovery_file_dest
由于 flash_recovery_area 默认只有30G(各个数据库基本不修改)。
如果默认归档日志也写到里面,很容易写满,就会有ORA-00257的问题
解决步骤
-
清空所有归档日志(磁盘空间充分,最好只是移动归档日志的路径)
-
重启数据库(需要断开所有的数据库链接,比如应用,关闭失败可使用 shutdown abort 进行关闭。详细参考Oracle中shutdown和startup命令详解)
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database open; -
如果归档日志还是默认位置,需要更改归档日志目录地址
SQL> alter system set log_archive_dest_1=‘location=/u01/archivelogs’;
Oracle 开启归档日志步骤:
1.开启归档日志的SQL(一定要设置归档日志的路径,避免归档日志写满的问题)
SQL> archive log list
查看数据库是否开启了归档模式,如果没有开启,操作如下
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database archivelog;
SQL> alter database open;
SQL> alter system set log_archive_dest_1=‘location=/u01/archivelogs’;
SQL> archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /u01/archivelogs
Oldest online log sequence 9063
Next log sequence to archive 9065
Current log sequence 9065
2.做好清理归档日志的定时任务
脚本:arch_del.sh
内容如下:
#!/bin/sh
/usr/bin/find /u01/archivelogs -mtime +7 -name "*.*" -exec rm -rf {} \;
定时任务: