sfa-siard / SiardCmd

SIARD Suite - SiardCmd
Other
9 stars 5 forks source link

Ungültiger Spaltentyp: getBigDecimal not implemented for class oracle.jdbc.driver.T4CRowidAccessor #15

Open ghost opened 3 years ago

ghost commented 3 years ago

Guten Tag

Einer unserer Kontakte versucht einen Export aus einer Oracle-Datenbank mit folgendem Befehl

java -cp B:\siard_suite-2.1\lib\siardcmd.jar ch.admin.bar.siard2.cmd.SiardFromDb -o -j=jdbc:oracle:thin:@<Adresse> -u=***** -p=***** -s=B:\SIARD_Export\test.siard -e=B:\SIARD_Export\test.xml

Das schlägt nach 26'492 Records fehl mit der Fehlermeldung:

java.sql.SQLException: Ungültiger Spaltentyp getBigDecimal not implemented for class oracle.jdbc.driver.T4CRowidAccessor

Auf welcher Seite liegt grundsätzlich das Problem? Ist etwas in der Datenbank behebbar oder ist es ein Bug im SiardCmd?

Beste Grüsse Carlos Hartmann

HartwigThomas commented 3 years ago

Es sieht nach einem Problem im JDBC Driver von Oracle aus. Überraschend, dass es erst nach so vielen Records fehlschlägt. Ist es möglich, die Test-Datenbank für eine genauere Diagnose zur Verfügung zu stellen?

CarlosHartmann commented 3 years ago

Leider kann unser Kontakt aus Datenschutzgründen die Datenbank nicht zur Verfügung stellen. Unser Kontakt hat stattdessen den DB-Hersteller angefragt und folgende Antwort erhalten:

Wie ich der Fehlermeldung ansehen kann, tritt diese auf bei der Archivierung eines Volltext-INDEX (Objekt-Präfix in Oracle: {{DR$IN...}} ). Ist es überhaupt sinnvoll, Volltext-Indexe zu archivieren? Alle DB-Objekte mit Präfix {{IN}} oder {{DR$IN}} sollten meiner Ansicht nach bei einer Archivierung ausgeschlossen werden (aber vielleicht gibt es technische Gründe?).

Technische Detailinfos: Index-Definitionen: {code:sql} CREATE INDEX "IN_D34_HTML" ON "D34_DOKUDATEI" ("D34_HTML") INDEXTYPE IS "CTXSYS"."CONTEXT" PARAMETERS ('filter ctxsys.null_filter lexer XXX_IN_D34_HTML section group ctxsys.html_section_group'); {code}

...und implizit durch Oracle erstellt: {code:sql} CREATE INDEX "DR$IN_D34_HTML$X" ON "DR$IN_D34_HTML$I" ("TOKEN_TEXT", "TOKEN_TYPE", "TOKEN_FIRST", "TOKEN_LAST", "TOKEN_COUNT") {code}

Die Spalte {{D34_HTML}} in der Tabelle {{D34_DOKUDATEI}} ist vom Datentyp {{CLOB}}. Wir verwenden die Oracle-Erweiterung "Oracle Text" für Volltext-Indexe. Evtl. beherrscht SIARD den Umgang mit diesem Feature nicht?

CarlosHartmann commented 3 years ago

Könnte eventuell csv2siard eine Lösung sein?

HartwigThomas commented 3 years ago

Mich überzeugt die Erklärung nicht vollständig. Insbesondere kümmert sich SIARD nicht direkt um INDEX-Objekte. (Indirekt schon: Es werden Foreign Key Relationen gespeichert.) Der Index-Typ CTXSYS.CONTEXT PARAMETERS sieht verdächtig aus.

Generell ist SIARD durchaus geeignet, um Volltext-Archive mit vielen CLOBS zu speichern. Man kann die Volltexte sogar als separae externe Dateien archivieren.

Da die Fehlermeldung vom JDBC-Driver (von Oracle!) stammt, ist es denkbar, dass dieser mit der genannten Erweiterung (von Oracle!) nicht zu Rande kommt.

Wenn der Fehler mit ganz wenig unkritischen Daten reproduziert werden könnte, könnten wir ihn hier mit anderen Oracle-Drivers anschauen. Andernfalls kann man evtl. vor Ort die Datei lib\ojdbc6.jar gegen einen neueren JDBC-Driver für Oracle austauschen und schauen, ob der Fehler verschwindet.