oracle过程中的dbms_session.close_database_link

hts6caw3  于 2023-06-29  发布在  Oracle
关注(0)|答案(2)|浏览(177)

我有许多程序,我使用相同的数据库链接,这个程序可以在不同的时间执行,或者根据调度程序作业的不同,一些程序同时运行。本程序用于从远程数据库获取数据并将数据插入本地数据库。因为我不想在执行每个过程之后都打开数据库连接,因为它会在数据库连接上产生负载,这可能会影响查询成本和查询执行时间。这就是为什么我使用dbms_session在每个过程结束时关闭数据库链接的原因。DBMS_SESSION.CLOSE_DATABASE_LINK但我不知道这是否会导致任何问题,而获取数据的一些过程,在同一时间执行。当dbms会话关闭一些过程的数据库链接连接时,同时如果任何过程试图访问数据库链接,它可能无法获取数据或导致任何错误。使用DBMS_SESSION.CLOSE_DATABASE_LINK时会出现这种情况吗?

ldxq2e6h

ldxq2e6h1#

以下是可以关闭链接的方法:
A.只有打开数据库链接的会话才能关闭它。数据库链接在会话关闭时关闭... select * from dba_DB_LINKS将显示创建的数据库链接V$DBLINK将列出会话中所有打开/活动的数据库链接。
有关dblink已打开多长时间的指示,请运行:

select t.addr, s.sid, s.username, s.machine, s.status,
      (sysdate - to_date(t.start_time, 'MM/DD/YY HH24:MI:SS')) * 24 as hours_active
    from v$transaction t, v$session s
    where t.addr = s.taddr;

如何知道一个事务是本地的还是分布式的?
检查v$global_transaction
B.使用ALTER SESSION或显式使用命令:

alter session close database link <name>;

或使用以下软件包:

dbms_session.close_database_link(<name>);

C.也可以设置idle_time limit给连接dblink的用户。在dblink的服务器端(dblink的目标)问题:

create profile pidle limit idle_time 5; -- 5 minutes 
    alter user test profile pidle; -- user under which connects dblink 
    alter system set resource_limit=true; -- must be set to work idle_time limit 
    (or add resource_limit=true to init.ora or both)
abithluo

abithluo2#

只是想知道如果我们使用“dbms_session.close_database_link()”方法,在未来的数据库连接是否会工作(未来的数据库连接是否会建立新的连接源到目的地)?

相关问题