Domanda

Ho un cliente che ha un database di SQL Server 2000 collegato a un database Oracle 8i. Hanno decine di viste del database SQL Server 2000 che fanno riferimento al database Oracle, spesso con la sintassi semplice, come:

SELECT *
FROM  SERVER..DB.TABLE

Questi punti di vista (e le sprocs che li fanno riferimento) hanno lavorato per anni senza problema. Improvvisamente, questa mattina, alcuni (ma non tutti) di loro non riescono con il seguente errore:

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

Quando selezioniamo i dati utilizzando la sintassi quattro parti sopra (la stessa sintassi come la vista ha definito), le query avere successo senza di emissione e il. Tuttavia, non siamo in grado di creare una vista su quella sintassi, non possiamo modificare le viste esistenti (nel design), e non siamo in grado di capire perché l'interrogazione direttamente le opere tabella collegata, ma il suo utilizzo tramite una query fallisce.

La mia azienda non ha costruire il sistema, né in genere mantenere - il cliente ha un team di sviluppo interno che funziona su di esso, ma hanno chiesto il nostro aiuto la risoluzione dei problemi, e siamo altrettanto perplesso come sono , così ho pensato di chiedere qui.

Qualcuno ha qualche idea del perché ci piacerebbe vedere questo comportamento - e ancora più importante, come correggerlo? (Short di potenziamento;. Non è un'opzione a questo punto) Come soluzione temporanea, abbiamo scoperto che l'utilizzo di OPENQUERY fa la funzione, ma è di cane corso lento. Vorremmo una soluzione che non comporta OPENQUERY, se possibile.

In risposta ai commenti: Non c'è ORDER BY definito i punti di vista. Ci possono essere nelle sprocs, ma non ne sono certo. (Ho appena visto questo database per la prima volta circa 20 minuti prima di inviare la domanda. :))

È stato utile?

Soluzione

Credo che un cambiamento dei dati accaduto, che non è accaduto in anni. Ho trovato qualcosa di simile anni fa, stavo sviluppando una critica modulo applicativo, test, test, test per un sacco di casi d'uso e tutti bene, e il giorno sulla produzione è stato introdotto un modello di non-testato! Incredibile ma vero!

Perché questo cambiamento sui dati di qualcosa di sbagliato sta dando a qualche tipo di chiamata TO_CHAR(xx, 'J'). Ad esempio, zero o dati negativi.

Perché un sacco di chiamate sono caduta può essere è una tabella di base / colonna comune a tutti.

Azioni:

  • tracciare per la sessione in Oracle (è possibile farlo per un sessione attiva e per un numero di errore).
  • Cercare "comune denominatore" tabelle / colonne e poi per strani valori.

Altri suggerimenti

C'è "ORDER BY" in vostro punto di vista, questo potrebbe essere la causa.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top