惯性思维总是 令我们离大师们 有着一定的距离,这种差距 在知识广袤的领域尤其明显。
Oracle领域被称为Oracle的世界,当之无愧;一丁点的想当然就让我们偏离于事实。
以dblink的表现为例,我一直认为dblink的远程连接session仅在操作(select,dml)发生时短期存在,在操作完成后依据一定条件保留或退出。
而事实并非如此,随便使用一个远程查询语句如下:
SQL> select * from help@LZ; --LZ 为dblink名
在远程数据库端观察session,可以发现:
select sid,username,machine,program,module from v$session where module='ORACLE.EXE'
|
SID |
USERNAME |
MACHINE |
PROGRAM |
MODULE |
1 |
526 |
SYSTEM |
WIN_DESK1 |
ORACLE.EXE |
ORACLE.EXE |
且该远程会话一直保留直到原会话退出为止,无论是成功退出还是程序失败。
若希望在原会话中关掉已打开的远程会话,则需要使用一下命令:
Alter session close database link DBLINKNAME;
这里要注意,需要先执行commit后以上关闭远程session SQL方会成功,即便是Select操作也是如此;
若没有执行commit,会出现:
ORA-02080: 数据库链接正在使用中