我们每隔两天将数据库进行一次全备份,备份时将oracle服务停掉,备份结束再启动,用的命令是:
net stop 和net start命令。最近出现服务一直处于启动中的状态。需要手工将服务重启。这里我想解释一下为什么要在备份时将服务停掉,而不是只关闭数据库。
我们的数据库为24*7数据库, 操作系统是win2003 server,oracle为817版。
在使用时常常会隔几天tns就报错,报错信息为:
ora-12500
ora-12540
ora-12560
ora-00530
报错时有的客户端能连上,有的不行。
在网上有很多文章讨论这个问题,认为是oracle内存耗尽的原因,但实际上服务器物理内存为4G,2003server的操作系统,而且我们的客户端数目还没有超过250(设置的最大客户数为300),所以这个问题一直没有解决。每一次tns报错都需要重启oracle服务。所以我们采用了治标不治本的办法,在每天的数据库全备份时将oracle服务停掉,备份结束再启动,结果发现隔一段时间就会出现服务一直处于启动中的状态。又将数据库全备份改为两天一备份。持续了大约有两个月时间正常工作,最近oracle服务又不能正常启动了。请教高人这是什么原因。
如果能能解决tns报错的这个问题最好。。
非常感谢。

解决方案 »

  1.   

    推测应该是内存资源耗尽
    你可执行:
    select count(1) form v$session;
    select count(1) from v$session where status = 'INACTIVE';如果上述值较高,则有可能是客户端的程序没有关闭链接,导致很多进程闲置浪费,没有释放资源。
    可让开发人员检查客户端代码中访问数据库的部分是否有大量方法最后没有关闭数据库链接另外说一下:虽然你的内存有4G,但Oracle能用的只有2G(当然,你做过修改越过此限制除外),
    查看你的SGA用了多少G, 比如1.5G,
    在独占模式下,每一个session将单独分配2M左右的内存,300个Session需要600M,显然,内存已经不够用了(1.5+0.6>2)。