gpt4 book ai didi

oracle - 应用程序失去数据库连接

转载 作者:行者123 更新时间:2023-12-02 09:40:40 25 4
gpt4 key购买 nike

我遇到了一个奇怪的问题,旧的 Delphi 应用程序丢失了数据库连接。实际上,我认为它失去了其他东西,然后导致连接断开或无法使用。该应用程序是用 Delphi 6 编写的,并使用 Direct Oracle Access 组件 (v4.0.7.1) 连接到 Oracle 9i 数据库。该应用程序作为服务运行,并使用 TOracleQuery 对象 (qryAlarmList) 定期查询数据库。执行此操作所调用的方法如下所示:

procedure TdmMain.RefreshAlarmList;
begin
try
qryAlarmList.Execute;
except
on E: Exception do
begin
FStatus := ssError;
EventLog.LogError(-1, 'TdmMain.RefreshAlarmList', 'Message: ' + E.Message);
end;
end;
end;

它多年来一直运行良好,直到几个 Perl 脚本被添加到这台机器上。这些脚本每 15 分钟运行一次,并查找要导入数据库的数据文件,然后进行一些计算以及对数据库的大量读/写操作。由于某种原因,当它们处理大量数据,然后 Delphi 应用程序尝试查询数据库时,Delphi 应用程序会在上面的代码 list 中的“qryAlarmList.Execute”行引发异常。异常(exception)总是:

Access violation at address 00000000. read of address 00000000

Perl 脚本正在执行的操作是如何导致这种情况的?这台机器上还有其他 Perl 脚本使用相同的模块和方法调用加载数据,我们没有遇到问题。更奇怪的是,另外两个应用程序也会在 Perl 东西运行的同时突然失去与数据库对话的能力。这两个应用程序都没有在这台机器上运行,但都是 Delphi 6 应用程序,它们使用相同的 DOA 组件连接到相同的数据库。我们有其他应用程序连接到同一数据库,用 Java 或 C# 编写,它们似乎没有任何问题。

我尝试在调用“.Execute”方法之前添加代码:

  • 检查 session 的连接(session.CheckConnection(true);总是返回“ccOK”)。

  • 查看我是否可以访问以下字段qryAlarmList 对象以查看是否也许它已经变成空了;可以访问它很好。

  • 检查qryAlarmList的状态;总是说它是 qsIdle。

有人有什么可以尝试的建议吗?这让我抓狂!

戴夫

最佳答案

如果其他计算机上的其他应用程序也失去了与数据库的连接,我会在数据库端进行调查并查看那里(提取性能统计信息、日志等)。
也许 Perl 脚本导致数据库服务器上的某些资源堵塞,从而阻止其他尝试访问。
这可能与 D6 应用程序的连接方式有关,从而使其他 C#、java...能够工作?

我的理由是,我只将数据库视为 MachineA/D6 失去连接和 MachineB/D6 失去连接的公共(public)链接...

希望对你有帮助

关于oracle - 应用程序失去数据库连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3025518/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com