0

Oracle 8i データベースにリンクされた SQL Server 2000 データベースを持っているクライアントがいます。SQL Server 2000 データベースには、Oracle データベースを参照する多数のビューがあり、多くの場合、次のような単純な構文を使用しています。

SELECT *
FROM  SERVER..DB.TABLE

これらのビュー (およびそれらを参照する sproc) は、YEARS の間問題なく動作しました。突然、今朝、それらの一部 (すべてではない) が次のエラーで失敗しています。

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].

上記の 4 部構成の構文 (ビューで定義されているのと同じ構文) を使用してデータを選択すると、クエリは問題なく成功し、. ただし、その構文でビューを作成することはできず、(デザイナーで) 既存のビューを編集することはできません。また、リンクされたテーブルを直接クエリすると機能するのに、クエリを介してそれを使用すると失敗する理由を理解できません。

私の会社はシステムを構築しませんでしたし、私たちは通常それを維持していません.クライアントはそれに取り組んでいる社内の開発チームを持っていますが、彼らは私たちのトラブルシューティングの助けを求めました.ここで質問しようと思いました。

なぜこの動作が見られるのか、そしてさらに重要なことに、それを修正する方法を知っている人はいますか? (アップグレードには至りません。現時点ではオプションではありません。) 一時的な回避策として、 usingOPENQUERYが機能することを発見しましたが、もちろん非常に遅いです。OPENQUERY可能であれば、関係のない解決策を希望します。

コメントへの対応:ORDER BYビューには定義されていません。sprocs にあるかもしれませんが、確かではありません。(質問を投稿する約 20 分前に、このデータベースを初めて見ました。:))

4

2 に答える 2

2

何年も起こらなかったデータの変化が起こったと思います。何年も前に似たようなものを見つけました。重要なアプリケーション モジュールを開発し、テスト、テスト、多くのユース ケースのテストを行っていましたが、本番環境でテストされていないパターンが導入されました。信じられないけど本当!

そのデータの変更により、何らかの問題が何らかのTO_CHAR(xx, 'J')呼び出しに与えられているためです。たとえば、ゼロまたは負のデータです。

多くの呼び出しが落ちているため、すべてに共通のベース テーブル/列である可能性があります。

行動:

  • Oracle でセッションのトレースをアクティブ化します (アクティブなセッションとエラー番号に対して実行できます)。
  • 「共通分母」のテーブル/列を探してから、奇妙な値を探します。
于 2009-03-30T22:26:41.860 に答える
0

あなたの見解に「ORDERBY」がありますか、これが原因である可能性があります。

于 2009-03-30T18:43:30.803 に答える