Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Zugriff auf eine MSSQL Datenbank von Oracle über ODBC

Dieses Thema im Forum "Oracle" wurde erstellt von Steve6, 28 April 2020.

  1. Steve6

    Steve6 Aktiver Benutzer

    Hallo Profis,

    ich habe ein Problem mit einem Datenbankzugriff über ODBC. Ich habe eine Oracle 11 Datenbank, zudem eine MSSQL-Datenbank(2017). Beide Datenbanken laufen jeweils auf einem 64bit Windows-Server. Die Oracle-Datenbank habe ich im Vollzugriff. Auf die MSSQL-Datenbank nur lesend Zugriff. Ich kann dort also auch keine VIEWS schreiben.
    Ich möchte nun von der Oracle-Datenbank auf die MSSQL Daten zugreifen. Das habe ich über ODBC gelöst.

    Das funktioniert auch alles gut. Bis auf die unsäglichen varchar(max)/nvarchar(max) Werte. Diese kommen nicht rüber. Ich habe einige ODBC-Treiber getestet. Immer wieder kommt die Meldung "ORA-28500: Verbindung von Oracle zu Fremdsystem gab diese Nachricht zurück: [Microsoft][ODBC Driver 13 for SQL Server]Die Zeichenfolgedaten wurden rechts abgeschnitten {01004}"

    Ich weiß, dass Oracle bzw. die ODBC-Verbindung das varchar(max)/nvarchar(max)-Feldern nicht verstehen/übersetzen kann. Ich finde aber keine Lösung zu dem Problem. Google habe ich schon mehrfach versucht. Ohne Erfolg.

    Hat hier jemand noch eine Idee?
     
  2. Steve6

    Steve6 Aktiver Benutzer

    Hier noch weitere Infos:

    inisqlora.ora
    HS_FDS_CONNECT_INFO = sqltoora
    HS_FDS_TRACE_LEVEL = OFF

    tnsnames.ora
    sqltoora =
    (DESCRIPTION=
    (ADDRESS=(PROTOCOL=TCP)(HOST= Server)(PORT=1521))
    (CONNECT_DATA= (SID=sqltoora))
    (HS=OK)
    )

    listener.ora
    (SID_DESC=
    (SID_NAME = sqltoora)
    (ORACLE_HOME = D:\app\oracle\product\11.2.0\dbhome_1)
    (PROGRAM = dg4odbc)
    )



     
  3. dabadepdu

    dabadepdu Datenbank-Guru

    Auch selten: eine Fehlermeldung ohne auslösende Aktion.

    Welche Operationen führst Du aus, die diesen Fehler liefern? Reines Select, Insert into select.,.. ? Anhand der Beschreibung jedenfalls ausschließlich lesend von MSSQL? Bitte ein konkretes Beispiel, exakte Tabellendefinitionen dazu als DDL.

    Wieso Oralce 11 wenn Du es selbst in der Hand hast? Das ist so alt, das es vielleicht nicht mal so einfach auf seine eigene aktuelle Schwester zugreifen kann.

    Notfalls versuchen, eine andere DB dazwischen zu schalten Oracle< Postgres < MSSQL.
     
  4. Steve6

    Steve6 Aktiver Benutzer

    Hallo!
    Ja, da ist was dran. ;)
    Also es ist ein einfacher Select-Befehl:

    SELECT

    "FELD4" AS FELD4

    FROM dbo.VIEW1@MSSQLLINK;

    Feld4 ist so ein nvarchar(max)-Feld. Alle anderen Felder kann ich problemlos auslesen.
     
  5. dabadepdu

    dabadepdu Datenbank-Guru

    Die Fehlermeldung deutet auf einProblem bei der Verarbeitung von Multibyte Zeichenketten hin. Eine nvarchar(max) ist mit mehr Daten befüllt, als Oracle es erwartet und es wird abgeschnitten.
    Am nettesten wäre vermutlich, seitens MSSQL ein View zu erstellen, der die Spalten entsprechend beschneidet und mit Klarzahl liefert.
    Ansonsten selbiges seitens Oracle versuchen, also Abfrage der Spalte nicht direkt, sondern mit Funktionen, die geieignete Parameter bieten. Einfach mal Substr probieren oder substrb oder substc mit größt möglichen Längen.
    Außerdem ist darauf zu achten, dass Oracle bei eigenen Spalten-Definitionen und bei Funktionen in den Größenangaben ziwschen byte und char unterscheidet, z.B. SUBSTRB, das verarbeitet alle Größenangaben in Byte, unabhängig von Anzahl bzw. BYtebedarf einzelner Zeichen, umgekehrt SUBSTRC. Spannend ist dann bei Char, welcher Auffassung Oracle über seinen Standardzeichensatz ist und die Bytes pro Char.
    Herausfinden: Tritt der Fehler immer beim Spaltentyp auf oder nur, wenn auch eine bestimmte Mindestlänge Content drin ist.
    Experiment: ein Oracle DB mit einem "fetten" Multibyte Zeichensatz anlegen und ausprobieren.
    Oder halt mal aktuelles Oracle probieren.
     
    Walter gefällt das.
  6. Steve6

    Steve6 Aktiver Benutzer

    Hallo,
    leider brachte SUBSTR in keiner der Möglichkeiten eine Besserung. Der Fehler wird immer noch ausgegeben. Sobald ich, wie in diesem Fall das Feld "FELD4" abfrage, wird mir der Fehler um die Ohren gehauen. Eine View in der MSSQL wäre sicher einfacher. Aber da komme ich so nicht ran.

    In einigen Beträgen habe ich gelesen, dass der ODBC-Treiber das Problem ist. Ich habe aber schon einige getestet.
    SQL Server, ODBC Driver 13 for SQL Server, SQL Server Native Client 11.0, ODBC Driver 11 for SQL Server.
     
  7. akretschmer

    akretschmer Datenbank-Guru

    die Idee aus #3 von @dabadepdu mit dem PostgreSQL dazwischen schon probiert? Die fdw-Treiber von PG sind (zum Teil) recht gut.
     
  8. dabadepdu

    dabadepdu Datenbank-Guru

    Mit ODBC Treibern kenne ich mich nicht aus und meine Lust, Freizeitexperimente für kommerzielle Systeme zu machen, hält sich in Grenzen.
    Versuch es mit Postgres wie akretschmer meinte. Da bekommst Du eine heterogene Datenbankschnittstelle geschenkt.
    Die Verträglichkeit zwischen Oracle und PG könnte ich mir dann deutlich höher vorstellen, als Oracle gegen MSSQL. Also erstmal prüfen, kann PG fdw nvarchar(max) von MSSQL.
     
  9. dabadepdu

    dabadepdu Datenbank-Guru

    Welche "Möglichkeiten" hast Du konkret probiert?
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden