实践证明理论。
刚开始一个新项目,碰到了以前只是停留在理论上的问题,太兴奋了,因为在实践中学到的东西才是最深刻的。
环境: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启动的数据库,修改也不让修改的。