Heim > Artikel > Backend-Entwicklung > Was Sie bei der Migration von Daten von MySQL nach Oracle beachten sollten
Hinweise zur Datenmigration von MySQL nach Oracle
Verarbeitung automatisch wachsender Datentypen
MYSQL verfügt über einen automatisch wachsenden Datentyp, wenn Sie Datensätze einfügen . Datenwerte automatisch abrufen. ORACLE verfügt nicht über einen automatisch erhöhenden Datentyp. Beim Einfügen eines Datensatzes muss diesem Feld der nächste Wert der Sequenznummer zugewiesen werden.
CREATE SEQUENCE Der Name der Sequenznummer (vorzugsweise die Seriennummer des Tabellennamens)
ERHÖHUNG UM 1, START MIT 1 MAXVALUE 99999 CYCLE NOCACHE;
INSERT-Anweisung fügt dies ein Feld Der Wert ist: der Name der Seriennummer.NEXTVAL
2. Verarbeitung von einfachen Anführungszeichen
Doppelte Anführungszeichen können zum Umschließen einer Zeichenfolge in MYSQL verwendet werden, es können jedoch nur einfache Anführungszeichen verwendet werden um einen String in ORACLE einzubinden. Bevor Sie eine Zeichenfolge einfügen oder ändern, müssen Sie einfache Anführungszeichen ersetzen: Ersetzen Sie alle Vorkommen eines einfachen Anführungszeichens durch zwei einfache Anführungszeichen. Natürlich müssen Sie dieses Problem nicht berücksichtigen, wenn Sie das Tool „Mysql in Oracle konvertieren“ verwenden
3. Verarbeitung langer Zeichenfolgen
In ORACLE ist die maximal ausführbare Zeichenfolgenlänge während INSERT und UPDATE ist kleiner oder gleich 4000 Einzelbytes. Wenn Sie eine längere Zeichenfolge einfügen möchten, sollten Sie die Verwendung des CLOB-Typs für das Feld in Betracht ziehen und die Methode aus dem DBMS_LOB-Paket ausleihen, das mit ORACLE geliefert wird. Vor dem Einfügen geänderter Datensätze müssen Feldwerte, die nicht leer sein dürfen, und Feldwerte, die die Länge überschreiten, eine Warnung ausgeben und zum letzten Vorgang zurückkehren.
4. Die Verarbeitung von SQL-Anweisungen zum Umblättern von Seiten ist relativ einfach. Verwenden Sie LIMIT, um die Startposition festzulegen und die Anzahl aufzuzeichnen. Die SQL-Anweisung zum Umblättern von Seiten durch ORACLE ist umständlicher. Jeder Ergebnissatz hat nur ein ROWNUM-Feld, um seine Position anzugeben, und nur ROWNUM<100 kann verwendet werden, ROWNUM>80 kann jedoch nicht verwendet werden.
Das Folgende sind zwei bessere ORACLE-Paging-SQL-Anweisungen nach der Analyse (ID ist der Feldname des eindeutigen Schlüsselworts):
Anweisung 1:
SELECT ID, FIELD_NAME,. .
FROM TABLE_NAME
WHERE ID IN (SELECT ID
FROM (SELECT ROWNUM AS NUMROW, ID
FROM TABLE_NAME
WHERE Bedingung 1
ORDER BY Bedingung 2)
WHERE NUMROW > 80
AND NUMROW < 100)
ORDER BY Bedingung 3 ;
Anweisung 2:
SELECT *
FROM ((SELECT ROWNUM AS NUMROW, c.*
from (select FIELD_NAME,.. .
FROM TABLE_NAME
WHERE Bedingung 1
ORDER BY Bedingung 2) c) WHERE NUMROW > 80 AND NUMROW < 100)
ORDER BY Bedingung 3 ;
5. Datumsfeldverarbeitung
Das ORACLE-Datumsfeld enthält nur die Informationen zu Jahr, Monat, Tag, Stunde, Minute und Sekunde der aktuellen Datenbank ist SYSDATE, sekundengenau.
Die Mathematik für Datumsfelder ist sehr unterschiedlich.
MYSQL verwendet: DATE_FIELD_NAME > SUBDATE(NOW(),INTERVAL 7 DAY)
ORACLE verwendet: DATE_FIELD_NAME >SYSDATE - 7;
In MYSQL werden Feldnamen wie „% string%“ verwendet. In ORACLE können auch Feldnamen wie „% string%“ verwendet werden, diese Methode kann jedoch nicht verwendet werden und ist nicht schnell String-Vergleichsfunktion instr(field name,'string')>0 um genauere Suchergebnisse zu erhalten.
7. Umgang mit Nullzeichen
Die nicht leeren Felder von MYSQL haben auch nicht leere Felder und erlauben keine leeren Inhalte. Definieren Sie die ORACLE-Tabellenstruktur gemäß NOT NULL von MYSQL. Beim Importieren von Daten tritt ein Fehler auf. Daher müssen Sie beim Importieren von Daten das Nullzeichen beurteilen. Wenn es NULL oder ein Nullzeichen ist, müssen Sie es in eine Leerzeichenfolge ändern.
Hinweise zum Portieren von Oracle auf MySQL
Die vom Kunden verwendete Datenbank ist MySQL und das entwickelte Produkt unterstützt Oracle. Wir müssen die Datenbankumgebung von Oracle auf MySQL portieren. Während des Migrationsprozesses sind die folgenden Probleme aufgetreten. Wenn wir beim anfänglichen Entwurfs- und Codierungsprozess auf die Portabilität der Datenbank achten, ist in diesem Fall keine zusätzliche Arbeit erforderlich.
1. Probleme beim Übertragen der Datenbankumgebung von Oracle auf MySQL
1. Der Unterschied in der Groß-/Kleinschreibung (wenn das Server-Betriebssystem Linux ist)
Allgemeine Situation in Oracle Im Folgenden wird die Groß-/Kleinschreibung nicht beachtet. Manchmal achten wir bei der Verwendung von Oracle nicht auf die Groß-/Kleinschreibung. Beispiel: Einfügen in Tabellenname und Einfügen in Tabellenname haben den gleichen Effekt. Bei der Dateninitialisierung werden die erhaltenen Ergebnisse im Allgemeinen in Tabellennamen und Feldnamen in Großbuchstaben umgewandelt.
Aber in MySQL bestimmt die Groß-/Kleinschreibung des verwendeten Betriebssystems die Groß-/Kleinschreibung des Datenbanknamens und des Tabellennamens. Die Datenbank entspricht einem Verzeichnis im Datenverzeichnis, und jede Tabelle in der Datenbank entspricht mindestens einer Datei im Datenbankverzeichnis (möglicherweise mehreren, abhängig von der Speicher-Engine). Daher bedeutet die Verwendung einer Datenbank oder Tabelle tatsächlich eine Manipulation dieser Dateien (Ordner), sodass die Groß-/Kleinschreibung des Betriebssystems die Groß-/Kleinschreibung des Datenbanknamens und des Tabellennamens bestimmt. Bei Betriebssystemen mit Linux als Kernel wird die Groß-/Kleinschreibung beachtet.
Die Lösung besteht darin, den Datenbanknamen von MySQL mit der Groß- und Kleinschreibung von Oracle und den Tabellennamen mit dem Tabellennamen in der SQL-Zeichenfolge in der Anwendung konsistent zu halten. Wenn der Feldname in der Anwendung doppelte Anführungszeichen verwendet, setzen Sie ihn bitte ein Die Schreibweise von Feldnamen in SQL stimmt mit den Zeichen in doppelten Anführungszeichen überein. Wenn die Tabellennamen und Felder, auf die Ihre Anwendung verweist, keine einheitliche Groß- und Kleinschreibung haben, geraten Sie in große Schwierigkeiten.
2. Der Unterschied zwischen reservierten Wörtern
Funktionsnamen in der SQL-Sprache (z. B. Intervall, Show) sind reservierte Wörter. Reservierte Wörter in Oracle können als Tabellennamen und Feldnamen verwendet werden und haben keinen Einfluss auf deren Verwendung. Reservierte Wörter in MySQL können jedoch nicht als Tabellennamen und Feldnamen verwendet werden.
Die Lösung besteht darin, die reservierten Wörter in der SQL-Anweisung mit dem Symbol „“ einzuschließen, das sich über der Tabulatortaste der Tastatur befindet. Wenn es sich um einen Feldnamen handelt, gibt es eine andere Methode „tablename.field“. Name. So:
insert into tablename (id, `interval`) value(…..
oder
insert into tablename (id, tablename.inteval) value(… ..
3. Der Unterschied zwischen automatischen Wachstumstypen
Oracle hat eine Sequenz, MySQL jedoch nicht, aber es hat das auto_increment-Attribut
Die Lösung besteht darin, das zu konvertieren Sequenz in Oracle zu verwenden. In manchen Fällen gibt es eine Möglichkeit, das Problem zu lösen. Erstellen Sie eine separate Tabelle, um die automatischen Wachstumsdaten zu erfassen > In MySQL gibt es kein Varchar2 und kein Numeric. Natürlich gibt es in Oracle keinen MySQL-Zeittyp. Die Lösung besteht darin,
5 zu ersetzen
Ab MySQL 4.1.2 unterstützt die Indexlänge von MyISAM- und InnoDB-Tabellen 1000 Bytes, was bedeutet, dass die Länge des Indexfelds 1000
Bytes nicht überschreiten darf Dieser Fehler wird gemeldet:
FEHLER 1071 (42000): Der angegebene Schlüssel war zu lang; die maximale Schlüssellänge beträgt 1000 Bytes.
Wenn es sich um eine UTF-8-Kodierung handelt, entspricht dies einem Länge von 333 Zeichen. (Da ein UTF8-Zeichen 3 Bytes belegt) ist die Indexlängenbeschränkung von Oracle viel lockerer oder ändern Sie das Feld.
2. Worauf sollten wir bei der Datenbankkompatibilität achten? Manchmal verwenden Kunden bereits eine Datenbank und möchten nicht zwei Datenbanken gleichzeitig verwalten. In diesem Fall kann die Kompatibilität mit mehreren Datenbanken ein Verkaufsargument für das Produkt sein Kompatibilität besteht darin, die Standardverwendung einzuhalten
1. Halten Sie sich an die Standardverwendung und versuchen Sie, keine bestimmte datenbankspezifische Verwendung zu verwenden
wie die Verwendung des Symbols „“ von msyql Viele Leute haben beispielsweise diese Verwendung: Wenn Sie beim Entwickeln mit Oracle eine Sequenz erstellen, gehen Sie zu Bevor Sie Daten in die Tabelle einfügen, wählen Sie zuerst seq.nextval FROM DUAL; aus und fügen Sie dann den aus der Abfrage erhaltenen Wert als Wert in die Tabelle ein. Diese Verwendung kann nicht an Datenbanken ohne Reihenfolge angepasst werden. Jede Datenbank verfügt über eine automatische Wachstumsverwendung. Verwenden Sie sie bei Bedarf vollständig.
Ein weiteres Beispiel: Verschiedene Datenbanken verfügen über erweiterte Paging-Abfragen, Oracle jedoch nicht.
2. Reservierte Wörter
erfordern, dass Datenbankdesigner versuchen, keine reservierten Wörter für Tabellennamen und Feldnamen zu verwenden. Es gibt auch viele Leute, die diese Methode verwenden, indem sie „_“ vor dem Tabellennamen und dem Feldnamen hinzufügen,
wie folgt: Tabelle erstellen _tablename (_id integer). Auf diese Weise kommt es nie zu Problemen durch reservierte Wörter.
3. Vermeiden Sie Probleme mit der Groß- und Kleinschreibung der Datenbank.
Wählen Sie, ob Datenbanktabellennamen und Feldnamen in Groß- oder Kleinbuchstaben geschrieben und im Entwurfs- und Codierungsprozess der Datenbank vollständig vereinheitlicht werden sollen.
Bei Verwendung des Tools „Oracle in MySQL konvertieren“ achten Sie bitte auf die Steuerung der Option „Name in Großbuchstaben“