" ORA-24777:不允许使用不可迁移的数据库链接"从Windows服务调用Oracle存储过程时

时间:2017-04-04 19:41:38

标签: c# oracle stored-procedures oracle11g odp.net

我正在创建一个Windows服务,它将定期调用Oracle数据库上的一组存储过程。使用SQL Developer直接调用时,这些存储过程都可以正常工作。此外,这些存储过程在通过控制台应用程序调用时都可以工作。但是,使用Windows服务调用这些存储过程时,任何具有数据库链接(到SQL Server)的存储过程都会失败。

为了解决问题,我做了以下事情......

  • Console App和Windows Service使用相同的Oracle托管数据参考/版本
  • Console App和Windows Service使用完全相同的连接字符串和app.config设置
  • Console App和Windows Service使用完全相同的类来执行存储过程
  • 使用以下数据库链接简化存储过程:

    create or replace 
    PROCEDURE DATALINKTEST AS 
    BEGIN
    
        DECLARE lv_latest_FileLoadId INT;
    
        BEGIN
            SELECT MAX(c."FileLoadId")
            INTO lv_latest_FileLoadId
            FROM table@databaselink c
            WHERE c."account_code" = 'account123';
        END;
    
    END DATALINKTEST;
    

即使上面的存储过程也会生成一个" ORA-24777:不允许使用不可迁移的数据库链接"从Windows服务调用时。但是,当从控制台应用程序调用或直接通过SQL Developer调用时,它可以正常工作。

我有一种感觉,问题出在Oracle正在为Windows服务进行会话的类型上。当我在v $ session表上执行select时,我注意到Service会话有一个空SQL_ADDRESS和SQL_ID,而Console App和SQL Developer有一个SQL_ADDRESS和SQL_ID

提前致谢, 加布B

0 个答案:

没有答案