如何检查数据库链接在Oracle中是否有效?

Kha*_*led 5 architecture oracle dblink

我有一个主数据库,总部只有设置数据,不同分支有几个数据库.我为每个分支服务器创建了一个数据库链接.

在某些情况下,我想查询所有有效的链接(因为一些链接可能由于连接问题或其他任何原因无效),所以我的问题是如何检查数据库链接是否有效而不会出现连接超时问题.是否有一个SQL语句让oracle主服务器执行检查并仅返回有效的数据库链接?

小智 7

您可以通过执行以下命令验证db链接

select * from dual@my_db_link;
Run Code Online (Sandbox Code Playgroud)

要创建验证db链接的函数,请执行以下操作:

function is_link_active(
  p_link_name varchar2
) return number is
  v_query_link varchar2(100) := 'select count(*) alive from dual@'||p_link_name;
  type db_link_cur is REF CURSOR;
  cur db_link_cur;
  v_status number;
begin
  open cur FOR v_query_link; 
  loop
    fetch cur INTO v_status; 
    exit when cur%notfound;
    dbms_output.put_line('v_status='||v_status);
    return v_status;
  end loop;
  close cur;
exception when others then
  close cur;
  return 0; 
end is_link_active;
Run Code Online (Sandbox Code Playgroud)

最后,您可以创建表my_db_links(id,name,status(0,1))并更新它:

update 
  my_db_links mdl
set
  mdl.status = is_link_active(mdl.name);
Run Code Online (Sandbox Code Playgroud)


vc *_* 74 2

我不确定您是否可以创建查询来检查实时数据库链接。您可以做的一件事是创建一个由后台进程更新的表,其中包含数据库链接列表,并为每个链接提供“上次活着的时间”时间戳