ora-12154 、ora-02020 、ora-32001一连串的碰到

实践证明理论。

刚开始一个新项目,碰到了以前只是停留在理论上的问题,太兴奋了,因为在实践中学到的东西才是最深刻的。

环境:oracle 10.2.0.1.0

ora-12154:

前两天在数据库上创建了几个dblink,都能访问。因为业务需要,今天又建立的一个,呵呵,创建当然已经是胸有成竹,不料创建好了之后,使用时却出现了一个错误ora-12154  tns:无法解析指定的链接标示符。

刚出现这个错误的时候我就检查配置在本地的tns文件,发现新建这个dblink所连接的实例名和另一个相同,但是不在同一台机器上,并且服务名不一样,理论上不会出现问题,为了进一步确认,就把同名的那个给注释掉,结果还是不能使用。这个时候突然想起来自己犯了一个非常愚蠢的错误:我是在本机用pl/sql 链接远程数据库A,然后再A的数据库实例上创建dblink到另一台数据库实例B,我只是在我本机上配置了B的tns,而没有在A上面配置,所以不能使用,呵呵,赶紧配置了一下,结果是OK。但是在过程中编译的时候出现了下列错误

ora-02020:

建立好那个dblink之后,就在过程中使用了,在编译的时候出现了如下错误

ORA-02020: too many database links in use

Cause: The current session has exceeded the INIT.ORA open_links maximum.

看来是dblink超过了实例初始参数设置的边界。

执行如下语句:

show parameter open_links

发现 open_links 的值是 4  ,而我添加了最后一个dblink 后正好是5个,刚好过来设置的边界值。oracle  的建议是这样的:

Action: Increase the open_links limit, or free up some open links by committing or rolling back the transaction and canceling open cursors that reference remote databases.     于是就准备增大数据库的open_links的最大限制数。

alter system set open_links=5 scope=spfile;

这时出现了如下错误

ora-32001:

修改open_links时出现错误如下

ORA-32001: 已请求写入 SPFILE, 但是在启动时未指定 SPFILE

于是就用如下语句查看数据库是用pfile还是spfile启动,

show parameter spfile  这时在显示spfile 值的那一列是空值,说明是用pfile 启动。

资料上说如果要动态修改参数就要用spfile,于是就用如下语句建立spfile

create spfile from pfile;

然后关闭实例

shutdown immediate;

重启

startup

这时发出下列语句:show parameter spfile  ; 

spfile 值那一列有了相应的值,说明已经是用spfile。

用如下语句修改参数open_links

alter system set open_links=5 scope=spfile;

成功。

然后编译过程,成功。

后来又把open_links修改为8,提示“系统已修改”,但是发出show parameter open_links 时,显示还是5,又重启了一下,直接查看是8,

这说明了,有些参数是必须要重启实例的。但是修改的时候如果是pfile启动的数据库,修改也不让修改的。

你可能感兴趣的:(ora-12154 、ora-02020 、ora-32001一连串的碰到)