0

我有一个客户,他有一个链接到 Oracle 8i 数据库的 SQL Server 2000 数据库。他们在 SQL Server 2000 数据库中有几十个视图,这些视图引用了 Oracle 数据库,通常使用简单的语法,例如:

SELECT *
FROM  SERVER..DB.TABLE

这些视图(以及引用它们的存储过程)已经运行了好几年,没有问题。突然,今天早上,其中一些(但不是全部)因以下错误而失败:

Server: Msg 7330, Level 16, State 2, Procedure SALES_ORDER_HEADERS, Line 7
Could not fetch a row from OLE DB provider 'MSDAORA'. 
[OLE/DB provider returned message: ORA-01854: julian date must be between 1 and 5373484]
OLE DB error trace [OLE/DB Provider 'MSDAORA' IRowset::GetNextRows returned 0x80040e07].

当我们使用上面的四部分语法(与视图定义的语法相同)选择数据时,查询成功且没有问题,并且 . 但是,我们无法根据该语法创建视图,我们无法编辑现有视图(在设计器中),并且我们无法弄清楚为什么直接查询链接表有效,但通过查询使用它却失败了。

我的公司没有构建系统,我们通常也不维护它 - 客户有一个内部开发团队在处理它,但他们要求我们的故障排除帮助,我们和他们一样难过,所以我想我会在这里问。

任何人都知道为什么我们会看到这种行为——更重要的是,如何纠正它?(升级不足;此时不是一个选项。)作为一种临时解决方法,我们发现 usingOPENQUERY确实起作用,但它当然很慢。如果可能的话,我们想要一个不涉及 的解决方案OPENQUERY

回应评论:意见中没有ORDER BY定义。存储过程中可能有,但我不确定。(我在发布问题前大约 20 分钟才第一次看到这个数据库。:))

4

2 回答 2

2

我认为数据发生了多年未发生的变化。几年前我发现了类似的东西,我正在开发一个关键的应用程序模块,测试,测试,测试很多用例,一切都很好,并且在生产的那一天引入了一种未经测试的模式!难以置信但真实!

因为对数据的更改是错误的,所以会发出某种TO_CHAR(xx, 'J')调用。例如,零或负数据。

因为很多电话都在下降,所以可能是所有人共有的基表/列。

行动:

  • 在 Oracle 中为会话激活跟踪(您可以为活动会话和错误号执行此操作)。
  • 寻找“公分母”表格/列,然后寻找奇怪的值。
于 2009-03-30T22:26:41.860 回答
0

您的观点中是否有“ORDER BY”,这可能是原因。

于 2009-03-30T18:43:30.803 回答