Frage

Ich habe einen Klienten, der eine SQL Server 2000-Datenbank zu einer Oracle 8i-Datenbank verknüpft hat. Sie haben Dutzende von Ansichten in der SQL Server 2000-Datenbank, die die Oracle-Datenbank verweisen, oft mit einfacher Syntax wie:

SELECT *
FROM  SERVER..DB.TABLE

Diese Ansichten (und die sprocs, die auf sie verweisen) sind seit Jahren ohne Probleme gearbeitet. Plötzlich heute Morgen, einige (aber nicht alle) von ihnen mit dem folgenden Fehler fehlschlagen:

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

Wenn wir Daten wählen Sie den vierteiligen Syntax oben mit (die gleiche Syntax wie die Ansicht definiert wurde), gelingt es den Abfragen ohne Problem und das. Allerdings können wir nicht einen Blick auf dieser Syntax erstellen, können wir die bestehenden Ansichten nicht bearbeiten (im Designer), und wir können nicht herausfinden, warum direkt die verknüpfte Tabelle funktioniert die Abfrage, aber es über eine Abfrage fehlschlägt.

Meine Firma bauen nicht das System, noch haben wir es in der Regel halten - der Kunde ein internes Entwicklerteam hat die auf es funktioniert, aber sie baten um unsere Hilfe zur Fehlerbehebung, und wir sind genauso ratlos, wie sie sind , also dachte ich, ich würde hier fragen.

Wer noch keine Ahnung, warum wir dieses Verhalten sehen würden - und was noch wichtiger ist, wie man es richtig? (Short die Modernisierung;. Keine Option an dieser Stelle) als eine vorübergehende Lösung, haben wir entdeckt, dass OPENQUERY Verwendung funktioniert, aber es ist natürlich Hund langsam. Wir würden eine Lösung wie die nicht OPENQUERY mit sich bringt, wenn möglich.

Als Reaktion auf die Kommentare: Es gibt keine ORDER BY in den Ansichten definiert. Es kann in dem sprocs sein, aber ich bin nicht sicher. (Ich sah nur diese Datenbank zum ersten Mal etwa 20 Minuten vor der Frage veröffentlichen. :))

War es hilfreich?

Lösung

Ich denke, eine Änderung auf Daten geschehen, dass auf Jahre nicht passiert ist. Ich fand vor etwas ähnliches Jahren war ich eine kritische Anwendungsmodul, Prüfung, Tests zu entwickeln, zu testen für viele Anwendungsfälle und alle in Ordnung, und der Tag, an Produktion ein nicht-geprüften Muster eingeführt wurde! Unglaublich, aber wahr!

Da diese Änderung auf Daten etwas nicht in Ordnung ist, zu einer Art TO_CHAR(xx, 'J') Anruf geben. Zum Beispiel Null oder negative Daten.

Da viele Anrufe fallen sein kann, ist eine Basistabelle / Spalte alle gemeinsam.

Aktionen:

  • Aktivieren verfolgen für die Sitzung in Oracle (Sie es für ein tun können aktive Sitzung und für eine Fehlernummer).
  • Suchen Sie nach „gemeinsamen Nenner“ Tabellen / Spalten und dann für seltsame Werte.

Andere Tipps

Gibt es "ORDER BY" in Ihren Ansichten, ist dies die Ursache sein könnte.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top