这阵子真的很忙,一个项目组正在使用Oracle开发一个系统,由于新的服务器还在路上,所以只能用一台差不多过时的PC担任DB Server(Windows XP Professional SP3),这样出现了一系列的问题,这里捡两个说一下。
首先,在Oracle运行一段时间之后,忽然不能启动,出现:ORA-01034 – Oracle not available 和 ORA-27101 – shared memory realm does not exist ,很显然,这是Oracle实例没有启动。为什么出现这个情况呢?环境和Oracle的设置一直没有变过,用 sqlplus / as sysdba 登陆的时候,出现 ORA-28056: Writing audit records to Windows Event Log failed 的错误,Windows的应用日志满了? 无语,这才多大点事啊!解决方法有二:
- 清空Windows的应用程序日志,然后使用 sqlplus / as sysdba ; startup 启动服务,最简便和快捷的方法。
- 因为出现这个情况的时候,你的audit 是默认打开的,在这里设置一下就行,(你可以通过 show parameter audit_trail 在Oracle命令行下查看)在Windows下,用 set audit_trail=DB或者是NONE即可以解决,关于audit_trail的问题,可以找找资料,他是Oracle中的一个审计参数。
其次,由于这台机器的内存和CPU都很有限,很容易造成CPU或者是内存占用过高产生资源不够,这样的话,OracleService服务会自动停止。往往在XP下,cmd窗口的缓存占用很大,而且不会自动丢弃副本,这样控制台管理程序会出来维持正常运行,如果CMD程序过多的话(Oracle运行的时候,会启动很多的CMD程序),MS的控制台管理程序(csrss.exe)会占用很高的CPU(20%-50%),如此一来,机器不死才怪了!这个的临时解决办法就是,设置丢弃CMD的副本!具体操作:控制台窗口属性,里面有个命令纪录,钩选丢弃旧的副本,自行设置适合自己的缓冲区大小和数量,然后重启机器。这时csrss.exe就很少看见了,机器也回归了正常。