Oracle bietet ein Produkt namens Oracle Database Mobile Server (früher Oracle Database Lite genannt), mit dem Sie zwischen einem SQLite und einem Oracle synchronisieren können Datenbank. Er bietet skalierbare bidirektionale Synchronisation, Schema-Mapping, Sicherheit usw. Der Mobile Server unterstützt synchrone und asynchrone Datensynchronisierung. Wenn dies mehr als ein einmaliger Export ist und Sie Ihre SQLite- und Oracle-Datenbanken synchron halten müssen, ist dies ein großartiges Werkzeug!
Haftungsausschluss: Ich bin einer der Produktmanager für Oracle Database Mobile Server, daher bin ich ein wenig voreingenommen. Der Mobile Server ist jedoch ein großartiges Werkzeug, um Ihre SQLite (oder Berkeley DB) und Oracle Datenbanken synchron zu halten.
Sie müssen die SQLite in eine Textdatei (nicht in das Format) konvertieren und dann Oracle verwenden, um die Datenbank aus dem Text zu laden (Quelle ist Ссылка ). Sie können den Befehl .dump
von der interaktiven SQLite-Shell verwenden, um in eine Textdatei zu speichern (siehe die Dokumentation für Syntax). .
SQL Loader ist ein Dienstprogramm, das eine Textdatei mit Trennzeichen liest und in eine Oracle-Datenbank importiert. Sie müssen herausfinden, wie jede Spalte aus Ihrer SQL-Datei mit der entsprechenden Datei in der Oracle-Datenbank übereinstimmt. Hier ist eine gute FAQ , die Ihnen den Einstieg erleichtern soll.
Wenn Sie ein Entwickler sind, könnten Sie eine Anwendung entwickeln, um die Synchronisierung durchzuführen. Sie würden
tun SELECT name FROM sqlite_master WHERE type='table'
Um die Tabellennamen zu erhalten, können Sie sie in Oracle neu erstellen (Sie können DROP TABLE tablename
zuerst in Oracle ausführen, um einen Konflikt zu vermeiden, vorausgesetzt, dass SQLite autorisierend ist) mit CREATE TABLE
-Befehlen. Das Abrufen der Spalten für jedes einzelne dauert
SELECT sql FROM sqlite_master WHERE type='table' and name='MyTable'
Und dann müssen Sie das Ergebnis analysieren:
%Vor% A StringBuilder
kann verwendet werden, um den Tabellennamen mit seinen Spalten zu sammeln, um den Befehl INSERT
zu erstellen. Um die Werte hinzuzufügen, wäre es nur eine Frage von SELECT * FROM MyTable
für jede der Tabellen während der Schleife durch die Tabellennamen, die Sie von der ursprünglichen Abfrage erhalten haben. Sie würden die Spalten der Zeilen der Datentabelle, die Sie zurückgegeben haben, iterieren und die Werte zu StringBuilder
hinzufügen:
INSERT INTO MyTable (
+ SpalteA, SpalteB usw. + ) VALUES (
datarow [0], datarow [1] usw. + )
.
Nicht genau so, aber Sie füllen die Daten aus, indem Sie den Spaltennamen und seine Daten anhängen, während Sie die Schleifen durchlaufen. Sie können die Spaltennamen abrufen, indem Sie s
in der obigen foreach
loop anhängen. Jeder Spaltenwert wird dann mithilfe einer foreach
-Schleife festgelegt, die Ihnen jedes object obj in drData.ItemArray
gibt. Wenn Sie nur String-Felder haben, ist es einfach, Sie fügen einfach obj.ToString()
zu Ihrem StringBuilder
für jeden Spaltenwert in Ihrer Abfrage hinzu, wie ich unten habe. Dann führen Sie die Abfrage aus, nachdem Sie alle Spaltenwerte für jede Zeile gesammelt haben. Sie verwenden für jede Zeile ein neues StringBuilder
- es muss vor jeder neuen Zeile auf INSERT INTO MyTable (
+ SpalteA, SpalteB usw. + ) VALUES (
zurückgesetzt werden, damit die neuen Spaltenwerte angefügt werden können.
Wenn Sie verschiedene Datentypen haben (zB DATE
, BLOB
, usw.), müssen Sie die Spaltentypen auf dem Weg bestimmen, in einer Liste oder in einem Array speichern und dann einen Zähler verwenden, um das zu bestimmen Index dieser Liste / Array-Slot und erhalten Sie den Typ, so dass Sie wissen, wie Sie Ihr Objekt in etwas Oracle übersetzen können - ob das einfach to_date()
zum Ergebnis hinzufügen, mit Formatierung, für ein Datum (seit SQLite speichert diese als Datumszeichenfolgen mit dem Format yyyy-MM-dd HH:mm:ss
) oder zu einem OracleParameter
für ein BLOB
hinzufügen und dieses an eine RunOracleCommand
-Funktion senden. (Ich ging unten nicht darauf ein.)
Wenn all dies zusammengefügt wird, ergibt sich folgendes:
%Vor% All dies setzt voraus, dass Sie eine Funktion RunOracleCommand()
void haben, die einen SQL-Befehl und eine GetSQLiteTable()
-Funktion ausführen kann, die eine DataTable von Ihrer SQLite-DB zurückgeben kann, indem Sie einen SQL-Befehl übergeben .
Beachten Sie, dass dieser Code nicht getestet wurde, da ich ihn direkt in diesem Post geschrieben habe, aber er basiert stark auf Code, den ich geschrieben habe, um Oracle in SQLite zu synchronisieren, was getestet wurde und funktioniert.