根据http://blog.csdn.net/u011364306/article/details/49276717的博客整理
解决 设置数据库为归档模式时没有设置log_archive_dest_1参数,导致
Oracle错误——ORA-03113:通信通道的文件结尾 即闪回区空间满了
首先,在linux系统中,如何一个文件被进程所占用,这个时候即使将文件移走或删除,空间其实仍然是被占用的。遇到上述情况空间未释放可能有这方面的原因,将相关的程序杀掉即可,但是这可能会影响Oracle的运行。这时我们通过更改归档日志的路径大小来解决这种问题。
windows版本的话,如果是默认安装后没有设置环境变量。当oarcle实例停止后,由于没有oracle_sid 会导致用sqlplus连接时出现错误,无效监听ora-1524错误。此时要么设置环境变量要么通过服务启动实例,即使启动失败,这样就可以用sqlplus连接了。
Oracle11g版本,ORACLE默认的日志归档路径为闪回恢复区($ORACLE_BASE/fast_recovery_area)。对于这个路径,Oracle有一个限制,就是默认只有4G的空间,而且不只是归档日志的默认路径,也是备份文件和闪回日志的默认地址,这样的话归档日志锁使用的空间就达不到4G,在没有设置好这个路径大小的情况下,很多系统都遇到过归档日志满而无法归档导致数据库夯住的问题。
Oracle出现错误,一般去错误日志里去找问题根源:在e:\app\kang\diag\rdbms\oracle\oracle\trace\文件夹下找文件,打开显示错误日志:
- Trace filee:\app\kang\diag\rdbms\oracle\oracle\trace\oracle_ora_6320.trc
- Oracle Database 11gEnterprise Edition Release 11.2.0.1.0 - 64bit Production
- With thePartitioning, OLAP, Data Mining and Real Application Testing options
- Windows NT VersionV6.1 Service Pack 1
- CPU : 4 - type 8664, 2 PhysicalCores
- Process Affinity : 0x0x0000000000000000
- Memory (Avail/Total):Ph:2805M/6087M, Ph+PgF:6761M/12173M
- Instance name: oracle
- Redo thread mountedby this instance: 1
- Oracle processnumber: 19
- Windows thread id:6320, image: ORACLE.EXE (SHAD)
-
-
- *** 2014-08-1608:18:55.461
- *** SESSIONID:(191.3) 2014-08-16 08:18:55.461
- *** CLIENT ID:()2014-08-16 08:18:55.461
- *** SERVICE NAME:()2014-08-16 08:18:55.461
- *** MODULENAME:(sqlplus.exe) 2014-08-16 08:18:55.461
- *** ACTION NAME:()2014-08-16 08:18:55.461
-
- ORA-19815: 警告:db_recovery_file_dest_size 字节 (共 4102029312 字节) 已使用 100.00%, 尚有 0 字节可用。
- ************************************************************************
- You have followingchoices to free up space from recovery area:
- 1. Consider changingRMAN RETENTION POLICY. If you are using Data Guard,
- then consider changing RMAN ARCHIVELOGDELETION POLICY.
- 2. Back up files totertiary device such as tape using RMAN
- BACKUP RECOVERY AREA command.
- 3. Add disk space andincrease db_recovery_file_dest_size parameter to
- reflect the new space.
- 4. Delete unnecessaryfiles using RMAN DELETE command. If an operating
- system command was used to delete files,then use RMAN CROSSCHECK and
- DELETE EXPIRED commands.
- ************************************************************************
- ORA-19809:超出了恢复文件数的限制
- ORA-19804: 无法回收33961984 字节磁盘空间 (从 4102029312 限制中)
- *** 2014-08-1608:18:55.502 4132 krsh.c
- ARCH: Error 19809Creating archive log file to'E:\APP\KANG\FLASH_RECOVERY_AREA\ORACLE\ARCHIVELOG\2014_08_16\O1_MF_1_159_%U_.ARC'
- *** 2014-08-1608:18:55.502 2747 krsi.c
- krsi_dst_fail: dest:1err:19809 force:0 blast:1
- DDE: Problem Key 'ORA312' was flood controlled (0x1) (no incident)
- ORA-00312: 联机日志 3 线程1: 'E:\APP\KANG\ORADATA\ORACLE\REDO03.LOG'
- ORA-16038: 日志 3sequence# 159 无法归档
- ORA-19809:超出了恢复文件数的限制
- ORA-00312: 联机日志 3 线程1: 'E:\APP\KANG\ORADATA\ORACLE\REDO03.LOG'
-
- *** 2014-08-1608:18:55.565
- USER (ospid: 6320):terminating the instance due to error 16038
1.查看归档日志路径
- SQL> archive log list
- Database log mode Archive Mode
- Automatic archival Enabled
- Archive destination USE_DB_RECOVERY_FILE_DEST
- Oldest online log sequence 4
- Next log sequence to archive 6
- Current log sequence 6
这里可以看到Archive destination的值为USE_DB_RECOVERY_FILE_DEST,可以理解为USE(使用)DB_RECOVERY_FILE_DEST这个路径
2.查看DB_RECOVERY_FILE_DEST路径
- SQL> show parameter db_recovery
-
- NAME TYPE VALUE
-
- db_recovery_file_dest string /u01/oracle/fast_recovery_area
- db_recovery_file_dest_size big integer 4G
由上可以很清楚的看到DB_RECOVERY_FILE_DEST路径参数的值默认为/u01/oracle/fast_recovery_area,并且Oracle设置的大小为4G。
查看闪回区使用情况
SQL> select * from v$recovery_file_dest;
NAME SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES
---------------------------------- ---------- ----------------- --------------- ---------------
/opt/oracle/app/fast_recovery_area 4322230272 0 0 0
默认情况下,归档日志会存放到闪回恢复区($ORACLE_BASE/fast_recovery_area)内,如果闪回恢复区已经使用到4G,归档日志就有可能无法继续归档,数据库夯住。
1)解决方法一
通常的解决方法是增大闪回恢复区,可以用以下SQL实现。
-
- SQL> alter system set db_recovery_file_dest_size=10G scope=both;
-
- System altered.
-
-
- SQL> show parameter db_recovery
-
- NAME TYPE VALUE
-
- db_recovery_file_dest string /u01/oracle/fast_recovery_area
- db_recovery_file_dest_size big integer 10G
scope选项spfile保存到spfile里面需要重启生效,both表示立即生效并保存到spfile文件,如果不保存到spfile里面下次重启数据库
要重新设置。
2)解决方法二
修改归档日志的路径,将归档日志放到其他不受限制的路径下来解决这个问题,可通过下面的SQL来修改归档日志的存放路径。
-
- SQL> alter system set log_archive_dest_1='location=/u01/oracle/archive' scope=both;
-
- System altered.
这里特别要注意location参数,并且指定的目录要存在并且有Oracle的权限
立即生效,查看归档路径是否修改成功
-
-
- SQL> archive log list
- Database log mode Archive Mode
- Automatic archival Enabled
- Archive destination /u01/oracle/archive
- Oldest online log sequence 4
- Next log sequence to archive 6
- Current log sequence 6
可以通过切换日志,查看归档路径下是否有归档日志产生来验证归档路径设置是否正确,可以通过下面的命令切换日志
- SQL> alter system switch logfile;
-
- System altered.
-
- SQL> exit
- Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
- With the Partitioning, OLAP, Data Mining and Real Application Testing options
-
- [oracle@cancer oracle]$ ll /u01/oracle/archive/
- total 36540
- -rw-r
归档格式:
- SQL> show parameter log_archive_format
-
- NAME TYPE VALUE
-
- log_archive_format string %t_%s_%r.dbf