Frage

Wir müssen einige Tabellen aus einer Informix SE-Datenbank abrufen, Tabellen auf Oracle 10g kürzen und sie dann mit den Informix-Daten füllen.

Funktioniert ein Massenimport?Kommt es zu Konflikten zwischen Datentypen?

Ich möchte eine einfache ausführbare Java-Datei verwenden, die wir täglich planen können.Kann ein Java-Programm den Massenimport aufrufen?Gibt es ein Beispiel, das Sie nennen können?Danke.

War es hilfreich?

Lösung

Interessantes Szenario!

Es gibt mehrere Probleme, über die Sie sich Sorgen machen müssen:

  • In welchem ​​Format werden die Daten beim Massenimport von Oracle erwartet?
  • Was ist das richtige Format für die Werte DATE und DATETIME?

Pragmatisch (und basierend auf Erfahrungen mit Informix statt Oracle) würde ich, anstatt die Tabellen vor dem Massenladen abzuschneiden, die Daten in neu erstellte Tabellen massenhaft laden (ein relativ zeitaufwändiger Prozess) und dann dafür sorgen, dass die alten Tabellen durch die ersetzt werden neu.Je nachdem, was am schnellsten funktioniert, würde ich entweder eine Abfolge von Vorgängen ausführen:

  • Benennen Sie die alte Tabelle in Junk-Tabelle um
  • Benennen Sie die neue Tabelle in die alte Tabelle um

gefolgt von einer Folge von „Junk-Tabelle löschen“-Operationen, oder ich würde Folgendes tun:

  • Alten Tisch wegwerfen
  • Benennen Sie die neue Tabelle in die alte Tabelle um

Wenn die Vorgänge auf diese Weise ausgeführt werden, wird die „Ausfallzeit“ für die Tabellen im Vergleich zu „Tabelle abschneiden“ gefolgt von „Tabelle laden“ minimiert.

Oracle ist wie SE – seine DDL-Anweisungen sind nicht transaktional (im Gegensatz zu IDS, wo Sie eine Transaktion haben können, die eine Tabelle löscht, eine neue erstellt und dann den gesamten Satz von Vorgängen zurücksetzt).

Wie exportiere ich die Daten?

Dies hängt davon ab, wie flexibel die Oracle-Loader sind.Wenn sie sich an die Standardausgabeformate von Informix anpassen können (z. B. das UNLOAD-Format), sind die Entladevorgänge trivial.Möglicherweise müssen Sie die Umgebungsvariable DBDATE festlegen, um sicherzustellen, dass Datumswerte von Oracle erkannt werden.Ich könnte glauben, dass 'DBDATE="Y4MD-"' wird wahrscheinlich akzeptiert;Das ist die SQL-Standardnotation 2009-12-02 für 2nd Dezember 2009.

Das standardmäßige UNLOAD-Format lässt sich wie folgt zusammenfassen: „Durch Pipes getrennte Felder mit Backslash als Escapezeichen für eingebettete Zeilenumbrüche, Backslash und Pipe-Symbole“:

abc|123|2009-12-02|a\|b\\c\
d||

Dies ist ein Datensatz mit einer Zeichenfolge, einer Zahl, einem Datum und einer weiteren Zeichenfolge (die „a“, „|“, „b“, „\“, „c“, „Newline“ und „d“ enthält) und eine Null Feld.Nachgestellte Leerzeichen werden aus Zeichenfolgen entfernt;Ein leeres, aber nicht leeres Zeichenfeld enthält in der Entladedatei ein einzelnes Leerzeichen.

Wenn Oracle dies nicht ohne weiteres bewältigen kann, überlegen Sie, ob Perl + DBI + DBD::Informix + DBD::Oracle ein zu verwendendes Toolset sein könnte – dies ermöglicht Ihnen die Verbindung sowohl mit der Oracle- als auch mit der Informix (SE)-Datenbank und die Daten zwischen ihnen übertragen.

Alternativ müssen Sie nach alternativen Entladern für SE suchen.Ein Programm, das es wert sein könnte, untersucht zu werden, es sei denn, Sie verwenden Windows SQLCMD (faire Warnung:Voreingenommenheit des Autors schleicht sich ein).Es verfügt über einen ziemlich leistungsstarken Satz an Ausgabeformatierungsoptionen und kann wahrscheinlich ein Textformat erstellen, das Oracle für akzeptabel halten würde (z. B. CSV).

Ein letzter Ausweg wäre, ein Tool INSERT-Anweisungen für die ausgewählten Daten generieren zu lassen.Ich denke, das könnte als Ergänzung zu SQLCMD nützlich sein, aber es ist noch nicht da.Sie müssten also Folgendes verwenden:

SELECT 'INSERT INTO Target(Col1, Col2) VALUES (' ||
       Col1 || ', ''' || Col2 || ''');'
  FROM Source

Dadurch wird eine einfache INSERT-Anweisung generiert.Der Haken dabei ist, dass es nicht robust ist, wenn Col2 (eine Zeichenfolge) selbst Anführungszeichen enthält (und Zeilenumbrüche können auch auf der Empfängerseite Probleme verursachen).Sie müssten abwägen, ob dies akzeptabel ist.

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