Ich möchte von SQL-Server 2008 aus auf Daten in einer Oracle 11g-Datenbank zugreifen
Ich habe einen Verbindungsserver eingerichtet und bei der Ausführung
select * from [Link_server_name]..Oracle_schema.Oracle_table
und Oracle_table enthält die Spalten Number und varchar2, alle funktionieren wie ausgenommen.
Wenn die Oracle_table jedoch eine CLOB-Spalte enthält, wird der folgende Fehler angezeigt:
Der OLE DB-Anbieter 'MSDAORA' für den Verbindungsserver 'L_V407SR8T' hat die Meldung 'Nicht spezifizierter Fehler' zurückgeben.
Der OLE DB-Anbieter 'MSDAORA' für den Verbindungsserver 'L_V407SR8T' hat die Meldung 'Oracle-Fehler aufgetreten, aber Fehlermeldung konnte nicht von Oracle abgerufen werden.' zurückgeben.
Der OLE DB-Anbieter 'MSDAORA' für den Verbindungsserver 'L_V407SR8T' hat die Meldung 'Datentyp wird nicht unterstützt.' zurückgeben.
Nachricht 7306, Ebene 16, Status 2, Zeile 1
Die "MCCAPP". "DOGGRUPPEN" - Tabelle vom OLE DB-Anbieter "MSDAORA" für den Verbindungsserver "L_V407SR8T" kann nicht gehört werden.
OPENQUERY verwenden
SELECT * FROM OPENQUERY([L_V407SR8T], 'Select CLOB_COLUMN from Oracle_table' )
Ich bekomme
Der OLE DB-Anbieter 'MSDAORA' für den Verbindungsserver 'L_V407SR8T' hat die Meldung 'Oracle-Fehler aufgetreten, aber Fehlermeldung konnte nicht von Oracle abgerufen werden.' zurückgeben. Der OLE DB-Anbieter 'MSDAORA' für den Verbindungsserver 'L_V407SR8T' hat die Meldung 'Datentyp wird nicht unterstützt.' zurückgeben.
Bitte entschuldigen Sie deutsche Fehlermeldungen.
Meine Frage: Gibt es eine Möglichkeit, CLOB-Spalten über verknüpfte Server zu lesen?
BEARBEITEN:
- Der SQL Server-Import- und Export-Assistent scheint auch von OLE DB abhängig zu sein und saugt an denselben Tabellen
- Ich frage mich, ob das Problem von den verwendeten Zeichensätzen abhängt, aber ich kann sie nicht ändern
- Als praktische Lösung verwende ich einige PowerShell-Skripte, um an die Daten zu gelangen, aber
quelle
Antworten:
Laden Sie einen Oracle 11-Datenbankclient herunter und installieren Sie ihn auf Ihrem SQL Server 2008-Computer.
Richten Sie einen Verbindungsserver mit einem Oracle OLE DB-Anbieter (OraOLEDB.Oracle) ein.
Stellen Sie sicher, dass "InProcess zulassen" in den Anbieteroptionen aktiviert ist.
Der Oracle 11 OLE DB-Client unterstützt CLOBs.
quelle
Ein Kommentar zu einer Antwort SO Frage Wie lese ich eine CLOB-Spalte in Oracle mit OleDb?
enthält einen Link zum alten Microsoft Support- Beitrag mit der folgenden Anweisung
Es wäre schön, weitere aktuelle Referenzen zu finden.
Ich habe einige Google-Recherchen durchgeführt und nur Problemumgehungen gefunden. Ich fürchte, der Datentyp wird immer noch nicht unterstützt.
Bearbeiten 02/05/2011
Ich verstehe wirklich nicht, warum Microsoft dieses Problem nicht beheben kann. Das folgende PowerShell-Skript verwendet OLE-DB, um eine Tabelle mit einer CLOB-Spalte aus einer Oracle-Datenbank zu lesen und die Daten mithilfe von BulkCopy in eine vorhandene ähnliche Tabelle auf SQL Server einzufügen. Dies ist eine sehr effiziente Methode.
Passen Sie die folgenden Verbindungszeichenfolgen, Abfragen und Tabellennamen an Ihre Installation an:
Der folgende Code kopiert die Oracle-Tabelle in eine SQL Server-Tabelle
Übrigens: Der Code basiert auf dem Codeplex-Projekt Really Mill Data Dictionary von Chad Millers
Derzeit ist die Verwendung von PowerShell die einzige Möglichkeit, Daten mit CLOBs von Oracle auf SQL Server zu kopieren, ohne C # oder Tools von Drittanbietern zu verwenden.
Ich konnte weder den Import / Export-Assistenten noch Verbindungsserver verwenden.
quelle
No new updates are planned for future releases of these components including their support against versions later than Oracle 8i.