Oracle经验分享-常用报错及解决办法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
问题一、监听器未能启动专用的服务器进程
今天通信频道,在更新代码后,出现WEB或PLSQL客户端连接数据库连接不上。
重启下数据库和TOMCA T后正常一段后又出现此故障。
监听器日志后面都提示:08-1月 -2010 14:10:59 *
(CONNECT_DATA=(SID=vnet)(CID=(PROGRAM=)(HOST=__jdbc__)(USER=))) *
(ADDRESS=(PROTOCOL=tcp)(HOST=某IP)(PORT=3947)) * establish * fjroom * 12500 TNS-12500: TNS:监听器未能启动专用的服务器进程
TNS-12560: TNS: 协议适配器错误
TNS-00530: 协议适配器错误
PLSQL客户端连接的时候提示:
监听器未能启动专用的服务器进程
原因:
ORACLE数据库所在服务器的防火墙被启动,之前是关着(不知被谁启起来的)。
而且防火墙仅开放1521端口。
分析:
服务器A安装有:ORACLE数据库和运行WEB程序(连接本台数据库)。
同样的WEB 程序在服务器B运行并连接服务器A的数据库。
问题出现在12月31号,应该是防火墙被启起来时候。
由于防火墙只开放1521监听器端口。
由于ORACLE用到不止一个端口(还有一个随机端口),所有服务器B程序虽然可以监听到ORACLE可就是获取不上数据库的连接!(之前,我查看ORACLE监听日志有从服务器B过来的记录,我错以为服务器B有连接上数据库。
另外,服务器B程序访问少,所以我没去在意他是否连接程序)这样服务器B程序可以监听到但获取不到数据库连接,故导致死循环:监听->获取不到连接->再监听->获取不到连接。
在监听日志有大量这样连接记录:
08-1月 -2010 12:14:02 *
(CONNECT_DATA=(SID=vnet)(CID=(PROGRAM=)(HOST=__jdbc__)(USER=))) *
(ADDRESS=(PROTOCOL=tcp)(HOST=某IP)(PORT=4280)) * establish * fjroom * 0 时间过去几个小时候后,便会出现上面所说的故障。
疑问:
如何配置防火墙?不想去改ORACLE数据库相关配置。
或者服务器如何把自己的端口全部开放给另外一台服务器。
问题二、请问oracle数据库的日志文件会一直增大吗?如果一直增大肯定不合理,他是什么机制呢?
1、Oracle 数据库默认情况下,在安装的时候,会有三个重做日志文件。
2、当第一个重做日志文件达到一定容量时,就会停止写入,而会转向第二个日志文件。
3、第二个也满时,就会转向第三个,当第三个满时,就会往第一个日志文件中写入。
4、在往这原来的纪录中写入重做日志文件的时候,是否需要对原有的纪录进行备份则是根据用户需求的不同,存在两种处理模式。
一种是不需要数据库进行自动备份,这种模式就叫做非归档模式;
一种是在重做日志改写原有的重做日志文件以前,数据库会自动对原有的日志文件进行备份的话,这种操作模式就叫做归档模式。
5、所以你说的数据文件会一直增大的原因是归档模式,只要设置成非归档模式日志文件就不会一直增大。
问题三、ora-01034:oracle not available
当遇到ORACLE出现下面提示时:
ora-01034:oracle not available
ora-27101:shared mermory realm does not exist
可以这样解决;
方法1:
1.输入:connect/as sysdba
2.输入:startup 重起计算机就OK了
方法2:
在命令行中输入
C:\>svrmgrl
Oracle Server Manager Release 3.1.7.0.0 - Production
Copyright (c) 2000, Oracle Corporation. All Rights Reserved.
Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production
With the Partitioning option
JServer Release 8.1.7.0.0 - Production
SVRMGR> connect internal/oracle
连接成功。
SVRMGR> startup
startup后再连接数据库应该没有问题了。
问题四、TNS-12514: TNS:listener does not currently know of
但是当我的xp重启过一次以后,sqlplus 或者 plsql连接时总是报“ORA-12541: TNS:no listener”。
上网之后别人提到了
E:\oracle\product\10.1.0\Db_1\network\admin\listener.ora,这个是listener的配置文件,反复对照检查后发现我确实在此配置文件中缺乏对我的SID的描述(可能是oracle 的重装就会导致此问题)。
添加配置后的文件内容如下,其中红色部分为新增内容:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = E:\oracle\product\10.1.0\Db_1)
(PROGRAM = extproc)
)
(SID_DESC =
(SID_NAME = gdkb)
(ORACLE_HOME = E:\oracle\product\10.1.0\Db_1s)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) )
)
)
然后用lsnrctl stop/start重启TNSLSNR.exe。
注意该TNSLSNR是oracle运行必备的程序,必须一定能保证它在win进程管理器中能看到或者在“服务”中能看到它处于启动状态才行。
再用sqlplus连接数据库,no listener到是不报了,现在开始报:
TNS-12514: TNS:listener does not currently know of service requested in connect descriptor。
继续上网google资料,结果什么lsnctrl status,sc指令啊,alter system regisiter啊等全部招乎上去之后,还是一点效果没有。
连
E:\oracle\product\10.1.0\Db_1\network\log\listener.log都看过了,还是找不到头绪。
晚上12点了头都晕了,睡觉,明天再搞。
第二天一觉醒来,感觉头脑清醒多了。
继续google,发现大部分人说listener.ora配置错误导致listener找不到你要请求的sid。
这有两种可能,一种是client 端的tnsnames.ora中配置了错误的SID,一种是server端的listener.ora中配置错了SID。
经过仔细检查,我才发现困扰了我一个晚上的问题原来是由笔误造成的!参见上面发的listener.ora中的内容,我把sid写成了gdkb,而实际上应该是gkdb,字母交换了一下顺序结果弄得很难发现,郁闷。
修改文件,lsnrctrl stop,lsnctrl start。
用sqlplus连接,这次一切OK了!
问题五、ORA-12154: TNS:could not resolve the connect identifier specified @time:2010-1-15
可能之前改了什么东西,今天sqlplus突然连接不上本地oracle,可是程序可以连接。
网上有人说可能是环境变量问题。
可是之前我没改过,应该是tnsnames.ora等配置信息问题。
通过查找,终于在tnsnames.ora发现问题了。
原来我上次在添加连接信息的时候,多复制一个本地信息且把连接主机写成“127.0.0.1”。
删除多余的连接信息即可!。