oracle无法连接:shared memory realm does not exist

oracle各服务运行正常。

各服务重启后,情况不变。

重启服务器再重启oracle服务后,情况不变。

查资料,此错误可能是oracle异常关闭引起的。该服务器近期曾经异常关机过。

查看服务器情况,c盘空间已满,怀疑可能也是原因之一。清理c盘后情况不变。

运行:

sqlplus /nolog
connect / as sysdba
startup

报错

ORA-00119: invalid specification for system parameter LOCAL_LISTENER
ORA-00132: syntax error or unresolved network name ‘LISTENER_ORCL’

按照第二行的错误查询资料,查得:http://blog.csdn.net/lpftobetheone/article/details/11099785

按照此文章的过程解决。

用sqlplus /nolog登录sqlplus,再执行connect  / as sysdba,连接到空闲进程。

在以下路径找到spfileorcl.ora(与文章中不同):

…\product\11.2.0\dbhome_1\database

执行

create pfile from spfile=’…\product\11.2.0\dbhome_1\database\spfileorcl.ora’;

在同样路径下生成了initorcl.ora。用文本编辑器打开,修改*.local_listener=一行。

按照文章中的说明进行修改,不清楚hostname是什么,在tnsname.ora中查找。经过文件搜索,该文件的路径为:

…\product\11.2.0\dbhome_1\NETWORK\ADMIN

找到:

ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = Dev)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)

将initorcl.ora中的内容修改为:

*.local_listener='(ADDRESS_LIST=(Address= (Protocol=tcp) (Host = DEV )(Port=1521)))’

保存退出,用这个pfile创建spfile:

SQL> create spfile from pfile=”…\product\11.2.0\dbhome_1\database\initorcl.ora’;

执行startup,启动成功。

至此,问题解决。

Oracle tnslistener无法启动的问题

被oracle折腾得头疼,就在自己的虚拟机上配了一个,专门运行oracle,其它的什么都不干,一直运行得挺好。

换了新路由器之后,没有找到固定ip的功能,于是每天过来改一遍listener。今天突发奇想把所有临近域的ip都给设置进去了,然后windows突发更新,一遍一遍的重启,重启都结束之后listener就启动不起来了……

骂了半天微软,上网查了一下,原因其实是:listener的配置必须要跟本机网络的ip一致。因此,localhost可以,vm的虚拟网卡地址可以,映射到局域网的ip也可以,其它的就不行了。

Oracle序列环境下Mybatis insert失败时id依然有值

为了在insert之后model类能获取到oracle自动生成的序列值,一般都是这样的配置方法:

[xml]

<selectKey keyProperty="id" order="BEFORE" resultType="java.lang.Long">
SELECT XXX_SEQ.NEXTVAL FROM DUAL
</selectKey>

[/xml]

读取序列nextval的执行顺序在insert之前,所以神奇的事情发生了:insert失败,但model类的主键有值,在数据库中居然还查不到这个id!
这个故事告诉我们:一定要做好异常处理。