【问题标题】:Oracle: Activate DBLINK before transactionOracle:交易前激活 DBLINK
【发布时间】:2018-06-28 10:30:37
【问题描述】:

考虑两个系统:A(源系统)和 B(接收器系统) 我们有一个存储的 Oracle 过程来将一些详细信息从 A 上传到 B。我们有一个 DBLINK 来将数据从 A 插入到 B。 我们收到一个 DBLINK 错误

ORA-01012: 未登录 ORA-02063:A_B_DBLINKORA-06512 的前一行

据我了解,如果 DBLINK 处于非活动状态超过 30 分钟(如系统 B 中配置的那样),并且系统 A 尝试连接到 B,则会引发此错误。

为了解决这个问题,我们正在考虑如下处理:

UPLOAD PROCEDURE
begin
if A_B_DBLINK='Active' then
    enter procedure;
    upload data;
else
    //attempt to trigger DBLINK as active
    //calling UPLOAD PROCEDURE
end;

我需要帮助来实现这一点,我目前正在使用select * from dual@A_B_DBLINK; 来测试连接是否处于活动状态,但无法触发它处于活动状态(无法测试失败场景)。 请引导我前进。

谢谢

【问题讨论】:

  • 您在文档中找到关于关闭非活动数据库链接的任何信息吗?
  • 即使我使用了db链接,我也从未见过这个错误,所以我认为它不像在30分钟内不使用它那么简单。您如何使用数据库链接?

标签: sql oracle plsql dblink


【解决方案1】:
DECLARE
   v_my_value        NUMBER := NULL;
   v_dblink_status   VARCHAR2 (10) := 'INACTIVE';
BEGIN
   SELECT COUNT (1) INTO v_my_value FROM DUAL@A_B_DBLINK;

   v_dblink_status := 'ACTIVE';
EXCEPTION
   WHEN OTHERS
   THEN
      BEGIN
         v_dblink_status := 'INACTIVE';
      END;
END;

【讨论】:

  • 在这个 PL/SQL 块的末尾,无论如何您已经填充了变量 v_dblink_status。如果 DBLink 工作,你有 v_dblink_status = 'ACTIVE'。如果 DBLink 不起作用,则您有 v_dblink_status = 'INACTIVE'。
  • 如果 dblink 是 'INACTIVE',它会进入异常块还是不会在查询中返回任何内容。
  • 如果 SELECT 语句失败,你跳到 EXCEPTION 块,情况是“其他”(任何类型的错误):在这种情况下,你设置 v_dblink_status = 'INACTIVE'。
  • 如果 SELECT 语句成功,则设置 v_dblink_status = 'ACTIVE' 忽略 EXCEPTION 块。
  • 感谢将测试这种方法...不过,如果 v_dblink_status='INACTIVE',有什么方法可以触发外部系统 B 使其处于活动状态?
猜你喜欢
  • 2012-03-23
  • 2017-08-02
  • 1970-01-01
  • 2011-11-13
  • 1970-01-01
  • 2015-08-27
  • 1970-01-01
  • 1970-01-01
  • 2012-02-04
相关资源
最近更新 更多