早上登录oracle数据库发现无法连接,tns错误。
一直在监听说找原因,删了然后新建,还是一直报错
不支持的服务。
C:\Users\Administrator>lsnrctl
LSNRCTL for 64-bit Windows: Version 11.2.0.1.0 - Production on 03-3月 -2015 15:22:50
Copyright (c) 1991, 2010, Oracle. All rights reserved.
欢迎来到LSNRCTL, 请键入"help"以获得信息。
LSNRCTL> status
正在连接到 (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
LISTENER 的 STATUS
------------------------
别名 LISTENER
版本 TNSLSNR for 32-bit Windows: Version 11.2.0.1.0 - Production
启动日期 03-3月 -2015 13:41:37
正常运行时间 0 天 1 小时 41 分 20 秒
跟踪级别 off
安全性 ON: Local OS Authentication
SNMP OFF
监听程序日志文件 d:\oracle\product\11.2.0\client_1\log\diag\tnslsnr\WIN-6GJ468PT63I\listener\alert\log.xml
监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=WIN-6GJ468PT63I)(PORT=1521)))
监听程序不支持服务
命令执行成功
LSNRCTL>
LSNRCTL>
进入数据库发现自动挂起,查找日志。
C:\Users\Administrator>sqlplus / as sysdba
SQL>startup mount;
SQL> show parameter dump
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
background_core_dump string partial
background_dump_dest string d:\oracle\diag\rdbms\wmtest\wm
test\trace
core_dump_dest string d:\oracle\diag\rdbms\wmtest\wm
test\cdump
max_dump_file_size string unlimited
shadow_core_dump string none
user_dump_dest string d:\oracle\diag\rdbms\wmtest\wm
test\trace
发现下面的错误。RECOVERY满。
***********************************************************************
You have following choices to free up space from recovery area:1. Consider changing RMAN RETENTION POLICY. If you are using Data Guard,
then consider changing RMAN ARCHIVELOG DELETION POLICY.
2. Back up files to tertiary device such as tape using RMAN
BACKUP RECOVERY AREA command.
3. Add disk space and increase db_recovery_file_dest_size parameter to
reflect the new space.
4. Delete unnecessary files using RMAN DELETE command. If an operating
system command was used to delete files, then use RMAN CROSSCHECK and
DELETE EXPIRED commands.
************************************************************************
Errors in file d:\oracle\diag\rdbms\wmtest\wmtest\trace\wmtest_arc2_1468.trc:
ORA-19809: 超出了恢复文件数的限制
ORA-19804: 无法回收 48290816 字节磁盘空间 (从 10485760000 限制中)
ARC2: Error 19809 Creating archive log file to 'D:\ORACLE\FLASH_RECOVERY_AREA\WMTEST\ARCHIVELOG\2015_03_03\O1_MF_1_289_%U_.ARC'
ARCH: Archival stopped, error occurred. Will continue retrying
Errors in file d:\oracle\diag\rdbms\wmtest\wmtest\trace\wmtest_arc1_2016.trc:
ORA-16038: 日志 2 sequence# 290 无法归档
ORA-19809: 超出了恢复文件数的限制
ORA-00312: 联机日志 2 线程 1: 'D:\ORACLE\ORADATA\WMTEST\ONLINELOG\O1_MF_2_B7F31RQJ_.LOG'
ORA-00312: 联机日志 2 线程 1: 'D:\ORACLE\FLASH_RECOVERY_AREA\WMTEST\ONLINELOG\O1_MF_2_B7F31WY4_.LOG'
Errors in file d:\oracle\diag\rdbms\wmtest\wmtest\trace\wmtest_ora_3632.trc:
ORA-19815: 警告: db_recovery_file_dest_size 字节 (共 10485760000 字节) 已使用 100.00%, 尚有 0 字节可用。
SQL> show parameter recovery
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest string D:\oracle\flash_recovery_area
db_recovery_file_dest_size big integer 12000M
recovery_parallelism integer 0
SQL> alter system db_recovery_file_dest_size=1300M;
alter system db_recovery_file_dest_size=1300M
*
第 1 行出现错误:
ORA-02065: 非法的 ALTER SYSTEM 选项
SQL> alter system set db_recovery_file_dest_size=1300M;
系统已更改。
SQL>alter database open;
下午又出现问题了,检查发现软件哥们启用的 归档,但是没有做过备份,没有删除过归档,没设置过过期时间。
这里已经把所有的db_recovery_file_dest的容量都占完了。
解决方法:删除多余的归档文件。然后设置较大的db_recovery_file_dest_size。
删除多余的归档文件
打开RMAN
rman target /
RMAN>crosscheck archivelog all; -- 运行这个命令可以把无效的expired的archivelog标出来。
RMAN>delete expired archivelog all; -- 直接全部删除过期的归档日志。
RMAN>delete noprompt archivelog until time "sysdate -3"; -- 也可以直接用一个指定的日期来删除。
重新打开数据库:
SQL> alter database open;
Database altered.
action
================================================================================================
参考文章
SQL> startup
ORACLE instance started.
Total System Global Area 263049216 bytes
Fixed Size 2212448 bytes
Variable Size 234884512 bytes
Database Buffers 20971520 bytes
Redo Buffers 4980736 bytes
Database mounted.
ORA-03113: 通信通道的文件结尾
进程 ID: 5801
会话 ID: 1 序列号: 5
[oracle@web trace]$ tail -f alert_orcl.log
ORA-19809: 超出了恢复文件数的限制
ORA-19804: 无法回收 44062720 字节磁盘空间 (从 4070572032 限制中)
ARCH: Error 19809 Creating archive log file to '/opt/oracle/flash_recovery_area/ORCL/archivelog/2011_11_04/o1_mf_1_482_%u_.arc'
Errors in file /opt/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_6141.trc:
ORA-16038: 日志 2 sequence# 482 无法归档
ORA-19809: 超出了恢复文件数的限制
ORA-00312: 联机日志 2 线程 1: '/opt/oracle/oradata/orcl/redo02.log'
USER (ospid: 6141): terminating the instance due to error 16038
Fri Nov 04 15:28:21 2011
Instance terminated by USER, pid = 6141
Fri Nov 04 15:30:35 2011
通过这里的错误信息,可以看到是归档归档不了了,马上查看归档的路径
SQL> archive log list;
数据库日志模式 存档模式
自动存档 启用
存档终点 USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列 23
下一个存档日志序列 25
当前日志序列 25
用的是DB_RECOVERY_FILE_DEST的路径了。估计又是以前遇到过的错误的。
Oracle官方的有关19809的信息
ORA-19809: limit exceeded for recovery files
Cause: The limit for recovery files specified by the DB_RECOVERY_FILE_DEST_SIZE was exceeded.
Action: The error is accompanied by 19804. See message 19804 for further details.
ORA-19804: cannot reclaim string bytes disk space from string limit
Cause: Oracle cannot reclaim disk space of specified bytes from the DB_RECOVERY_FILE_DEST_SIZE limit.
Action: There are five possible solutions:
1) Take frequent backup of recovery area using RMAN.
2) Consider changing RMAN retention policy.
3) Consider changing RMAN archivelog deletion policy.
4) Add disk space and increase DB_RECOVERY_FILE_DEST_SIZE.
5) Delete files from recovery area using RMAN.
基本上的原因是,db_recovery_file_desc有size限制,默认是2G,如果用户没有设置过的话,应该就是这里的归档的文件超过了这个大小,而导致归档失败了,
先查看一下情况吧
SQL> archive log list;
数据库日志模式 存档模式
自动存档 启用
存档终点 USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列 23
下一个存档日志序列 25
当前日志序列 25
SQL> select * from v$recovery_file_dest;
NAME
--------------------------------------------------------------------------------
SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES
----------- ---------- ----------------- ---------------
/opt/oracle/flash_recovery_area
4070572032 4068022784 0 100
这里已经把所有的db_recovery_file_dest的容量都占完了。
解决方法:删除多余的归档文件。然后设置较大的db_recovery_file_dest_size。
删除多余的归档文件
打开RMAN
rman target /
RMAN>crosscheck archivelog all; -- 运行这个命令可以把无效的expired的archivelog标出来。
RMAN>delete expired archivelog all; -- 直接全部删除过期的归档日志。
RMAN>delete noprompt archivelog until time "sysdate -3"; -- 也可以直接用一个指定的日期来删除。
重新打开数据库:
SQL> alter database open;
Database altered.
action
指定retention的策略,使得archivelog不至于这样增加
RMAN>configure retention policy to recovery window of 7 days;
RMAN>configure retention policy to redundancy 3;
SQL>alter system db_recovery_file_dest_size=4G scope=both;
把archivelog_dest指定到没有限制的地方
SQL>alter system log_archive_dest='/home/oracle';
查看修改ORACLE10G归档日志空间的限制
在ORACLE10G中,默认的归档路径为$ORACLE_BASE/flash_recovery_area。对于这个路径,ORACLE有一个限制,就是默认只能有2G的空间给归档日志使用,可以使用下面两个SQL语句去查看它的限制:
1. select * from v$recovery_file_dest;
2. show parameter db_recovery_file_dest(这个更友好直观一些)
当归档日志数量大于2G时,那么就会由于没有更多的空间去容纳更多的归档日志会报无法继续归档的错误。
如:“RA-19809: limit exceeded for recovery files
ORA-19804: cannot reclaim 10017792 bytes disk space from 2147483648 limit
ARC0: Error 19809 Creating archive log file to '/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2007_04_30/o1_mf_1_220_0_.arc' ”这时我们可以修改它的默认限制,比如说将它增加到5G或更多,也可以将归档路径重新置到别的路径,就不会有这个限制了。
更改限制语句如下:
alter system set db_recovery_file_dest_size=5368709102 (这里为5G 5x1024x1024x1024=5G)
alter system set db_recovery_file_dest_size=10737418240