oracle保存执行日志文件,oracle 重做日志文件无法自动创建保存问题Thread 1 cannot allocate new log, sequence 233678...

Mon Nov 26 09:10:16 2018Thread1 cannot allocate new log, sequence 233678

Checkpoint notcompleteCurrent log# 1 seq# 233677 mem# 0: D:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO01.LOGThread1 advanced to log sequence 233678(LGWR switch)Current log# 2 seq# 233678 mem# 0: D:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO02.LOG

最近项目的c++程序老是自动停止工作,检查c++日志找到了ORA-03113: 通信通道的文件结尾, 这种错误都是指的oracle的归档日志满了才会报这样的错,

可项目的oracle数据库的归档功能都是关闭的,初步排除归档日志的问题

再次查找资料,找到了oracle运行的日志文件(oracle运行的日志,错误啥的都在这),路径如下:D:\app\Administrator\diag\rdbms\orcl\orcl\trace\alert_orcl.log

打开log搜索error就发现了Thread 1 cannot allocate new log这样的错误,查找资料后,这样的错误是oracle的重做日志文件无法正确切换保存的问题。

根据网上的介绍,多数解决方法为新增几个重做日志文件就可以了

先查询一下oracle的重做日志文件:

select group#,sequence#,bytes,members,status from v$log;

select * from v$logfile;

select * from v$log;

发现有三个重做日志文件,RED001,RED002,RED003状态一个为current,两个为active,没有inactive,也就是说都在使用,没有空闲的,

就考虑是不是重做日志文件太少了

于是以 sqlplus /nolog登陆,conn  /  as sysdba登陆后,执行了如下命令:

--增加一个名字为RED004.LOG的log文件

alter database addlogfile

('D:\app\Administrator\oradata\orcl\RED004.LOG') size 50M;--执行一下手动切换日志文件命令

alter system switch logfile;

我按照顺序增加了2个(重做日志文件必须按照顺序增加),也就是说我的重做日志文件为RED001,RED002,RED003,RED004,RED005一共有5个

重做日志路径在D:\app\Administrator\oradata\orcl文件夹下,数据库的dbf也在这

再次执行select * from v$log;  状态如下,有了2个空闲的inactive

5a69a85b462d86f94aa8ccef7916c7f0.png

再次检查alert_orcl.log日志,没有文章开始的错误了,说明重做日志文件已经正常保存了(下面黑色字体表示重做日志文件已经正常了)

Mon Nov 26 17:02:20 2018

Thread 1 advanced to log sequence 233879 (LGWR switch)

Current log# 3 seq# 233879 mem# 0: D:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO03.LOG

注:新加重做日志文件,不需要停止数据库,直接sqlplus / nolog  conn /  as sysydba   操作即可

在解决过程中发现alert_orcl.log 太大了我这有240M,打开很慢,

于是直接重命名这个文件,重新建了一个空的,过了一会日志文件就输出到那个空的log里面了,如下图

3f15f93758bf240f8cd262462a8623a8.png

接上次的问题,oracle重做日志调好了之后,还是会提示通信通道文件末尾错误,有说是服务器防火墙的设置,关闭了数据连接导致这样的问题,于是把防火墙关闭

但仍然出现这样的情况

再找资料说:把D:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN\sqlnet.ora 里面加一个sqlnet.expire_time=30 目的是设置一个时间

可以用于检测、标记僵死而没有断开会session,再由PMON进行清理,释放资源。开启DCD(DCD: Dead Connection Detection),只需要在服务端的sqlnet.ora文件中添加SQLNET.EXPIRE_TIME参数,单位为分钟。

如果时间达到这个值,server端就是发出一个”probe” packet 给客户端,如要客户断是正常的,这个packet就被忽略,timer重新计时;如果客户端异常中断,则server端就会收到一个消息,用以释放连接。

DCD还可以用于防止防火墙的timeout当client和server在timeout时间内没有数据传输的时候,会话就会被防火墙断开。而设置SQLNET.EXPIRE_TIME参数,使其小于防火墙的timeout时间,就可以避免这一情况的发生。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值