MySQL - Oracle dönüştürme
mysqldump, mariadb-dump, mysqlpump, phpMyAdmin veya Adminer ile alınmış bir dökümü .sql veya .sql.gz olarak bırakın ve aynı tablolar, anahtarlar, indeksler ve verilerle bir Oracle betiği indirin. Oracle tarafından olduğu gibi tutulamayan her değer ve taşınmayan her nesne raporda listelenir.
18 satır dönüştürüldü, 4 düzeltme, reddedilen yok
shop_2024.sql içindeki tablolarMySQL 8.0.46 dökümü · mysqldump ile yazıldı · utf8mb4
customersCUSTOMERS olarak yazıldı8 satır2
7 sütun ID NUMBER(10) not null NAME VARCHAR2(100 CHAR) not null EMAIL VARCHAR2(150 CHAR) not null COUNTRY VARCHAR2(2 CHAR) not null IS_ACTIVE NUMBER(1) not null SIGNED_UP DATE CREATED_AT TIMESTAMP(0) WITH TIME ZONE not null ordersORDERS olarak yazıldı10 satır2
9 sütun ID NUMBER(10) not null CUSTOMER_ID NUMBER(10) not null STATUS VARCHAR2(9 CHAR) TOTAL NUMBER(10,2) not null ITEMS NUMBER(5) not null ORDERED_AT TIMESTAMP(0) not null SHIPPED_AT TIMESTAMP(0) NOTE VARCHAR2(255 CHAR) UPDATED_AT TIMESTAMP(0) WITH TIME ZONE not null
-- Written by IntoSQL from a MySQL dump. Load it with: NLS_LANG=.AL32UTF8 sqlplus -S -L <user>/<password>@<database> @<file>
WHENEVER SQLERROR EXIT FAILURE ROLLBACK;
SET DEFINE OFF;
SET SQLBLANKLINES ON;
SET FEEDBACK OFF;
SET SERVEROUTPUT ON;
CREATE OR REPLACE FUNCTION "INTOSQL_CLOB" (p SYS.ODCIVARCHAR2LIST) RETURN CLOB IS
r CLOB;
BEGIN
DBMS_LOB.CREATETEMPORARY(r, TRUE);
FOR i IN 1 .. p.COUNT LOOP
IF p(i) IS NOT NULL THEN
DBMS_LOB.WRITEAPPEND(r, LENGTH2(p(i)), p(i));
END IF;
END LOOP;
RETURN r;
END;
/
CREATE OR REPLACE FUNCTION "INTOSQL_BLOB" (p SYS.ODCIVARCHAR2LIST) RETURN BLOB IS
r BLOB;
piece RAW(2000);
BEGIN
DBMS_LOB.CREATETEMPORARY(r, TRUE);
FOR i IN 1 .. p.COUNT LOOP
piece := HEXTORAW(p(i));
DBMS_LOB.WRITEAPPEND(r, UTL_RAW.LENGTH(piece), piece);
END LOOP;
RETURN r;
END;
/
CREATE TABLE "CUSTOMERS" (
"ID" NUMBER(10) GENERATED BY DEFAULT ON NULL AS IDENTITY (START WITH 1001),
"NAME" VARCHAR2(100 CHAR) NOT NULL,
"EMAIL" VARCHAR2(150 CHAR) NOT NULL,
"COUNTRY" VARCHAR2(2 CHAR) DEFAULT 'US' NOT NULL,
"IS_ACTIVE" NUMBER(1) DEFAULT 1 NOT NULL,
"SIGNED_UP" DATE,
"CREATED_AT" TIMESTAMP(0) WITH TIME ZONE DEFAULT SYSTIMESTAMP NOT NULL,
CONSTRAINT "CK_CUSTOMERS_ID" CHECK ("ID" >= 0),
CONSTRAINT "CK_CUSTOMERS_IS_ACTIVE" CHECK ("IS_ACTIVE" IN (0, 1))
);
CREATE TABLE "ORDERS" (
"ID" NUMBER(10) GENERATED BY DEFAULT ON NULL AS IDENTITY (START WITH 5001),
"CUSTOMER_ID" NUMBER(10) NOT NULL,
"STATUS" VARCHAR2(9 CHAR) DEFAULT 'pending',
"TOTAL" NUMBER(10,2) NOT NULL,
"ITEMS" NUMBER(5) DEFAULT 1 NOT NULL,
"ORDERED_AT" TIMESTAMP(0) NOT NULL,
"SHIPPED_AT" TIMESTAMP(0),
"NOTE" VARCHAR2(255 CHAR),
"UPDATED_AT" TIMESTAMP(0) WITH TIME ZONE DEFAULT SYSTIMESTAMP NOT NULL,
CONSTRAINT "CK_ORDERS_ID" CHECK ("ID" >= 0),
CONSTRAINT "CK_ORDERS_CUSTOMER_ID" CHECK ("CUSTOMER_ID" >= 0),
CONSTRAINT "CK_ORDERS_STATUS" CHECK ("STATUS" IN ('pending', 'paid', 'shipped', 'cancelled')),
CONSTRAINT "CK_ORDERS_ITEMS" CHECK ("ITEMS" >= 0)
);
BEGIN
INSERT INTO "CUSTOMERS" (
"ID",
"NAME",
"EMAIL",
"COUNTRY",
"IS_ACTIVE",
"SIGNED_UP",
"CREATED_AT"
) VALUES (
1,
'Ana Martínez',
'ana@example.com',
'MX',
1,
DATE '2023-01-15',
TIMESTAMP '2023-01-15 10:24:00 +00:00'
);
INSERT INTO "CUSTOMERS" (
"ID",
"NAME",
"EMAIL",
"COUNTRY",
"IS_ACTIVE",
"SIGNED_UP",
"CREATED_AT"
) VALUES (
2,
'Zoë Müller',
'zoe@example.de',
'DE',
1,
DATE '2023-02-03',
TIMESTAMP '2023-02-03 08:11:42 +00:00'
);
INSERT INTO "CUSTOMERS" (
"ID",
"NAME",
"EMAIL",
"COUNTRY",
"IS_ACTIVE",
"SIGNED_UP",
"CREATED_AT"
) VALUES (
3,
'José Peña',
'jose@example.es',
'ES',
0,
DATE '2023-03-21',
TIMESTAMP '2023-03-21 19:05:17 +00:00'
);
INSERT INTO "CUSTOMERS" (
"ID",
"NAME",
"EMAIL",
"COUNTRY",
"IS_ACTIVE",
"SIGNED_UP",
"CREATED_AT"
) VALUES (
4,
'李雷',
'lilei@example.cn',
'CN',
1,
DATE '2023-05-09',
TIMESTAMP '2023-05-09 02:40:00 +00:00'
);
INSERT INTO "CUSTOMERS" (
"ID",
"NAME",
"EMAIL",
"COUNTRY",
"IS_ACTIVE",
"SIGNED_UP",
"CREATED_AT"
) VALUES (
5,
'Noah O''Brien',
'noah@example.ie',
'IE',
1,
NULL,
TIMESTAMP '2023-06-30 14:00:00 +00:00'
);
INSERT INTO "CUSTOMERS" (
"ID",
"NAME",
"EMAIL",
"COUNTRY",
"IS_ACTIVE",
"SIGNED_UP",
"CREATED_AT"
) VALUES (
6,
'Amélie Laurent',
'amelie@example.fr',
'FR',
1,
DATE '2024-01-02',
TIMESTAMP '2024-01-02 09:30:00 +00:00'
);
INSERT INTO "CUSTOMERS" (
"ID",
"NAME",
"EMAIL",
"COUNTRY",
"IS_ACTIVE",
"SIGNED_UP",
"CREATED_AT"
) VALUES (
7,
'Ravi Patel',
'ravi@example.in',
'IN',
0,
DATE '2024-02-29',
TIMESTAMP '2024-02-29 23:59:59 +00:00'
);
INSERT INTO "CUSTOMERS" (
"ID",
"NAME",
"EMAIL",
"COUNTRY",
"IS_ACTIVE",
"SIGNED_UP",
"CREATED_AT"
) VALUES (
8,
'Sofia Rossi 🌻',
'sofia@example.it',
'IT',
1,
DATE '2024-04-12',
TIMESTAMP '2024-04-12 12:12:12 +00:00'
);
COMMIT;
END;
/
BEGIN
INSERT INTO "ORDERS" (
"ID",
"CUSTOMER_ID",
"STATUS",
"TOTAL",
"ITEMS",
"ORDERED_AT",
"SHIPPED_AT",
"NOTE",
"UPDATED_AT"
) VALUES (
1,
1,
'shipped',
129.90,
3,
TIMESTAMP '2024-03-01 10:00:00',
TIMESTAMP '2024-03-02 16:30:00',
NULL,
TIMESTAMP '2024-03-02 16:30:00 +00:00'
);
INSERT INTO "ORDERS" (
"ID",
"CUSTOMER_ID",
"STATUS",
"TOTAL",
"ITEMS",
"ORDERED_AT",
"SHIPPED_AT",
"NOTE",
"UPDATED_AT"
) VALUES (
2,
2,
'paid',
54.00,
1,
TIMESTAMP '2024-03-02 11:15:00',
NULL,
'Gift wrap 🎁',
TIMESTAMP '2024-03-02 11:20:00 +00:00'
);
INSERT INTO "ORDERS" (
"ID",
"CUSTOMER_ID",
"STATUS",
"TOTAL",
"ITEMS",
"ORDERED_AT",
"SHIPPED_AT",
"NOTE",
"UPDATED_AT"
) VALUES (
3,
1,
'cancelled',
12.50,
1,
TIMESTAMP '2024-03-03 09:45:00',
NULL,
'Customer changed their mind',
TIMESTAMP '2024-03-03 10:00:00 +00:00'
);
INSERT INTO "ORDERS" (
"ID",
"CUSTOMER_ID",
"STATUS",
"TOTAL",
"ITEMS",
"ORDERED_AT",
"SHIPPED_AT",
"NOTE",
"UPDATED_AT"
) VALUES (
4,
4,
'shipped',
980.00,
12,
TIMESTAMP '2024-03-05 02:10:00',
TIMESTAMP '2024-03-07 08:00:00',
'请小心轻放',
TIMESTAMP '2024-03-07 08:00:00 +00:00'
);
INSERT INTO "ORDERS" (
"ID",
"CUSTOMER_ID",
"STATUS",
"TOTAL",
"ITEMS",
"ORDERED_AT",
"SHIPPED_AT",
"NOTE",
"UPDATED_AT"
) VALUES (
5,
5,
'pending',
45.75,
2,
TIMESTAMP '2024-03-08 17:20:00',
NULL,
'Leave at the door; ring twice',
TIMESTAMP '2024-03-08 17:20:00 +00:00'
);
INSERT INTO "ORDERS" (
"ID",
"CUSTOMER_ID",
"STATUS",
"TOTAL",
"ITEMS",
"ORDERED_AT",
"SHIPPED_AT",
"NOTE",
"UPDATED_AT"
) VALUES (
6,
6,
'shipped',
310.40,
5,
TIMESTAMP '2024-03-10 13:00:00',
TIMESTAMP '2024-03-11 09:00:00',
'Fragile: "glass"',
TIMESTAMP '2024-03-11 09:00:00 +00:00'
);
INSERT INTO "ORDERS" (
"ID",
"CUSTOMER_ID",
"STATUS",
"TOTAL",
"ITEMS",
"ORDERED_AT",
"SHIPPED_AT",
"NOTE",
"UPDATED_AT"
) VALUES (
7,
8,
'paid',
76.20,
2,
TIMESTAMP '2024-03-11 18:45:00',
NULL,
NULL,
TIMESTAMP '2024-03-11 18:46:00 +00:00'
);
INSERT INTO "ORDERS" (
"ID",
"CUSTOMER_ID",
"STATUS",
"TOTAL",
"ITEMS",
"ORDERED_AT",
"SHIPPED_AT",
"NOTE",
"UPDATED_AT"
) VALUES (
8,
2,
NULL,
19.99,
1,
TIMESTAMP '2024-03-12 08:00:00',
NULL,
'Status lost in an old import',
TIMESTAMP '2024-03-12 08:00:00 +00:00'
);
INSERT INTO "ORDERS" (
"ID",
"CUSTOMER_ID",
"STATUS",
"TOTAL",
"ITEMS",
"ORDERED_AT",
"SHIPPED_AT",
"NOTE",
"UPDATED_AT"
) VALUES (
9,
3,
'shipped',
64.00,
2,
TIMESTAMP '2024-03-14 15:30:00',
NULL,
'Shipping date never recorded',
TIMESTAMP '2024-03-15 10:00:00 +00:00'
);
INSERT INTO "ORDERS" (
"ID",
"CUSTOMER_ID",
"STATUS",
"TOTAL",
"ITEMS",
"ORDERED_AT",
"SHIPPED_AT",
"NOTE",
"UPDATED_AT"
) VALUES (
10,
7,
'paid',
1499.00,
1,
TIMESTAMP '2024-03-15 21:05:00',
NULL,
'C:\Users\ravi\invoice.pdf',
TIMESTAMP '2024-03-15 21:05:00 +00:00'
);
COMMIT;
END;
/
-- Keys, indexes, foreign keys, counters and triggers, after the rows.
ALTER TABLE "CUSTOMERS" ADD CONSTRAINT "PK_CUSTOMERS" PRIMARY KEY ("ID");
ALTER TABLE "CUSTOMERS" ADD CONSTRAINT "UQ_CUSTOMERS_UQ_EMAIL" UNIQUE ("EMAIL");
ALTER TABLE "ORDERS" ADD CONSTRAINT "PK_ORDERS" PRIMARY KEY ("ID");
CREATE INDEX "IX_ORDERS_IDX_CUSTOMER" ON "ORDERS" ("CUSTOMER_ID");
CREATE INDEX "IX_ORDERS_IDX_STATUS_DATE" ON "ORDERS" ("STATUS", "ORDERED_AT");
ALTER TABLE "ORDERS" ADD CONSTRAINT "FK_ORDERS_CUSTOMER" FOREIGN KEY ("CUSTOMER_ID") REFERENCES "CUSTOMERS" ("ID") ENABLE NOVALIDATE;
BEGIN
EXECUTE IMMEDIATE 'ALTER TABLE "ORDERS" ENABLE VALIDATE CONSTRAINT "FK_ORDERS_CUSTOMER"';
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Foreign key ' || '"FK_ORDERS_CUSTOMER"' || ' has rows without a parent: it stays unvalidated, and new rows are checked.');
END;
/
DECLARE
next_id NUMBER;
BEGIN
SELECT NVL(MAX("ID"), 0) + 1 INTO next_id FROM "CUSTOMERS";
IF next_id < 1001 THEN
next_id := 1001;
END IF;
EXECUTE IMMEDIATE 'ALTER TABLE "CUSTOMERS" MODIFY ("ID" GENERATED BY DEFAULT ON NULL AS IDENTITY (START WITH ' || next_id || '))';
END;
/
COMMENT ON TABLE "CUSTOMERS" IS 'People who bought at least once';
DECLARE
next_id NUMBER;
BEGIN
SELECT NVL(MAX("ID"), 0) + 1 INTO next_id FROM "ORDERS";
IF next_id < 5001 THEN
next_id := 5001;
END IF;
EXECUTE IMMEDIATE 'ALTER TABLE "ORDERS" MODIFY ("ID" GENERATED BY DEFAULT ON NULL AS IDENTITY (START WITH ' || next_id || '))';
END;
/
CREATE OR REPLACE TRIGGER "TR_ORDERS_UPDATED_AT" BEFORE UPDATE ON "ORDERS" FOR EACH ROW
BEGIN
IF NOT UPDATING('UPDATED_AT') THEN
:NEW."UPDATED_AT" := SYSTIMESTAMP;
END IF;
END;
/
DROP FUNCTION "INTOSQL_CLOB";
DROP FUNCTION "INTOSQL_BLOB";
COMMIT;
EXIT;
Düzeltmeler
- customers tablosunun "signed_up" sütunu artık NULL kabul ediyor: bazı değerleri saklanamadı ve NULL oldu.
- customers tablosundaki "signed_up" sütununun varsayılan değeri 0000‑00‑00, Oracle'in kabul ettiği bir tarih değil; bu yüzden sütunun varsayılan değeri yok.
- orders tablosunun "status" sütunu artık NULL kabul ediyor: bazı değerleri saklanamadı ve NULL oldu.
- orders tablosunun "updated_at" sütunu her güncellemede geçerli zamana ayarlanıyor; Oracle'de bunu bir tetikleyici yapıyor.
Kontrol edilmeli
- customers tablosunun "signed_up" sütununda 0000‑00‑00 gibi 1 sıfır veya imkansız tarih var; Oracle bunları saklayamaz, bu yüzden NULL yapıldı. Bu tarihler bir anlam taşıyorsa döküm almadan önce kaynakta gerçek tarihlerle değiştirin.
- orders tablosunun "shipped_at" sütununda 0000‑00‑00 00:00:00 gibi 1 sıfır veya imkansız tarih var; Oracle bunları saklayamaz, bu yüzden NULL yapıldı. Bu tarihler bir anlam taşıyorsa döküm almadan önce kaynakta gerçek tarihlerle değiştirin.
- orders tablosunun "status" sütunundaki 1 boş değer NULL oldu; Oracle boş bir dizeyi NULL olarak saklar. Sorguların bu sütunu ' ile karşılaştırdığı yerlerde bunun yerine IS NULL kullanın.
Dosyan bu bilgisayarda dönüştürülür ve asla yüklenmez.
Diğer örnekler:
MySQL ile Oracle arasında neler değişir
Her satır, dönüştürücünün uyguladığı bir kuraldır; yanında, kural verilerinizde bir şeyi değiştirdiğinde yazılan rapor satırı yer alır.
TINYINT(1), BOOL
her değer 0 veya 1 ise 0 ve 1 CHECK'i ile NUMBER(1), değilse NUMBER(3)
MySQL'in BOOL türü, -128 ile 127 arasında herhangi bir sayıyı tutabilen bir TINYINT(1)'dir. Oracle 23ai öncesinde boolean sütun yoktur, bu yüzden 0 ve 1'lerden oluşan bir sütun CHECK ile NUMBER(1) olur; 2 veya -1 tutan bir sütun sayılarını korur.
Rapor satırı: bool_kept_numeric
UNSIGNED integers
aralığa yetecek genişlikte NUMBER, negatif olmadığını denetleyen bir CHECK ile
Oracle'ın NUMBER türü MySQL'deki genişliklerin her tam sayısını tutar; CHECK, MySQL'deki gibi negatif değerleri dışarıda tutar.
ZEROFILL and display widths
kaldırılır
Sıfır dolgusu bir sayının gösterilme biçimidir, sayının parçası değildir. Sayılar korunur; dolgu önemliyse okurken biçimlendirin.
Rapor satırı: zerofill_dropped
FLOAT(M,D)
ölçek olmadan BINARY_FLOAT veya BINARY_DOUBLE
Oracle'ın ikili kayan noktalı sayılarının sabit ölçeği yoktur. Saklanan değerler olduğu gibi kopyalanır.
Rapor satırı: float_scale_dropped
DECIMAL(p,s)
38 basamağa kadar NUMBER(p,s); ötesi VARCHAR2
Oracle'ın NUMBER türü 38 basamak tutar. Daha geniş ondalıklar her basamak tam kalsın diye metin olarak korunur.
Rapor satırı: decimal_as_text
BIT(1), BIT(n)
NUMBER(1), 63 bite kadar NUMBER(19), BIT(64) için NUMBER(20)
Bit alanları, bitlerinin oluşturduğu sayı olarak saklanır.
zero, partial or impossible dates (0000-00-00, 2024-02-30)
NULL
Oracle yalnızca gerçek takvim tarihlerini saklar. MySQL, SQL modu izin verdiğinde sıfır ve imkansız tarihleri tutar; bunlar NULL olur ve rapor bunları sayar.
Rapor satırı: invalid_date_null
NOT NULL columns with values that become NULL
NOT NULL kaldırılır
Boş dizeler dahil, değerleri NULL olmak zorunda kalan bir sütun NOT NULL kısıtını koruyamaz, yoksa yükleme durur.
Rapor satırı: not_null_relaxed
empty strings and empty binary values
NULL
Oracle boş bir dizeyi NULL olarak saklar, bu yüzden ' olan bir değer NULL olarak okunur. Rapor bunları sütun başına sayar.
Rapor satırı: empty_string_null
DEFAULT '0000-00-00'
varsayılan değer yok
Oracle'ın saklayamadığı bir varsayılan değer, uydurma bir tarihle değiştirilmek yerine dışarıda bırakılır.
Rapor satırı: zero_date_default
TIME
süreleri tutan INTERVAL DAY TO SECOND
Oracle'da günün saati türü yoktur ve MySQL'in TIME türü -838:59:59 ile 838:59:59 arasında bir süredir; bir interval her değeri tutar.
YEAR
aralığını denetleyen bir CHECK ile NUMBER(4)
Oracle'da yıl türü yoktur; CHECK, MySQL'in izin verdiği değerlerin aynısını korur.
CHAR(n), VARCHAR(n)
karakter sayan VARCHAR2(n CHAR)
Uzunluklar MySQL'deki gibi karakter sayar ve MySQL CHAR değerlerini sondaki boşluklar olmadan döndürür, VARCHAR2 da onları öyle korur.
VARCHAR(n) and TEXT longer than 4000 bytes
CLOB
Bir VARCHAR2 varsayılan olarak 4000 bayt tutar, bu yüzden daha uzun metin CLOB olur; tüm değerleri sığan bir sütun VARCHAR2 olarak kalır.
Rapor satırı: text_as_lob
DATETIME
TIMESTAMP
DATETIME, TIMESTAMP gibi saat dilimi olmayan bir duvar saati okumasıdır. DATE, Oracle'ın DATE türüne dönüşür; bu tür gece yarısında kalan bir günün saatini de tutar.
TIMESTAMP
dökümün belirttiği saat diliminde TIMESTAMP WITH TIME ZONE, belirtmiyorsa UTC
TIMESTAMP bir andır. Dökümler değeri yazdıkları saat dilimini belirtir (mysqldump UTC yazar); bu bilgi yoksa değerler UTC olarak okunur ve rapor bunu belirtir.
Rapor satırı: timestamp_zone_assumed
ENUM
değerlerini denetleyen bir CHECK ile VARCHAR2
CHECK ile metin aynı değerleri korur.
ENUM holding '' (MySQL's error value)
NULL
MySQL, esnek bir SQL modunda bir ENUM'a geçersiz bir değer girildiğinde boş bir dize saklar. Oracle bunu NULL olarak saklar, CHECK buna izin verir ve rapor onu diğer boş değerlerle birlikte sayar.
ENUM holding values outside its list
CHECK yok
Listede adı geçmeyen değerler CHECK'ten geçemez; bu yüzden CHECK oluşturulmaz.
Rapor satırı: enum_check_skipped
SET
MySQL'in yazdığı şekliyle VARCHAR2 ('a,b')
Oracle'da küme türü yoktur; metin MySQL'in döndürdüğü metindir.
JSON
CLOB
Oracle'ın JSON fonksiyonları her sürümde JSON'u metinden okur ve bir CLOB her boyuttaki değeri tutar.
NUL bytes in text
korunur
VARCHAR2 ve CLOB bir NUL karakteri tutabilir, bu yüzden değer olduğu gibi kopyalanır.
text that isn't valid in its character set
hatalı baytlar yerine koyma karakteri olarak
Metnin VARCHAR2 olarak yazılabilmesi için karakter olarak okunması gerekir.
Rapor satırı: invalid_utf8_replaced
text decoded twice (ñ)
olduğu gibi kopyalanır
Döküm tam olarak bu karakterleri içerir, bu yüzden kopyalanırlar; rapor onları gösterir.
Rapor satırı: mojibake_suspected
AUTO_INCREMENT
kopyalanan id'lerin ötesinden yeniden başlatılan GENERATED BY DEFAULT ON NULL AS IDENTITY
Kopyalanan id'ler olduğu gibi yüklenir ve sayaç, en yüksek id'den veya dökümün AUTO_INCREMENT değerinden (hangisi büyükse) sonra devam eder.
MyISAM AUTO_INCREMENT on the second column of a key
tablo için tek sayaç
MyISAM, anahtarın ilk sütununun her grubu için ayrı sayar; Oracle'da tablo başına tek sayaç vardır.
Rapor satırı: myisam_group_autoincrement
ON UPDATE CURRENT_TIMESTAMP
bir BEFORE UPDATE tetikleyicisi
Tetikleyici, bir güncelleme sütunu ayarlamadığında sütunu geçerli zamana ayarlar.
Rapor satırı: on_update_trigger
generated columns
sanal sütunlar
Oracle üretilen sütunları yalnızca okurken hesaplar; STORED sütunlar aynı değerlerle sanal olur.
Rapor satırı: stored_as_virtual
generated columns with functions Oracle lacks
düz bir sütun
Oracle için yazılamayan bir formül, düz bir sütun ve bir rapor satırı bırakır.
Rapor satırı: generated_not_translated
INVISIBLE columns
INVISIBLE sütunlar
Oracle, MySQL'deki gibi görünmez sütunları SELECT * sonucundan gizler.
CHECK constraints
çevrilir, CREATE TABLE içinde satır içi
Satır içi CHECK kısıtları her satır yüklenirken test edilir.
CHECK constraints with functions Oracle lacks
oluşturulmaz
Oracle için yazılamayan bir CHECK kısıtı dışarıda bırakılır ve raporlanır.
Rapor satırı: check_skipped
CHECK ... NOT ENFORCED
oluşturulmaz
MySQL bu CHECK kısıtlarını uygulamadan tutar, bu yüzden satırlar onları ihlal edebilir.
Rapor satırı: check_not_enforced
defaults with functions Oracle lacks
varsayılan değer yok
Oracle için yazılamayan bir varsayılan değer dışarıda bırakılır ve raporlanır.
Rapor satırı: default_not_translated
keys and indexes on a prefix, c(20)
sütunun SUBSTR'si üzerinde bir indeks
Sütunun aynı başlangıcı üzerindeki bir fonksiyon indeksi aynı satırları birbirinden ayırır ve Oracle'ın tamamını indeksleyemediği CLOB sütunlarını indeksler.
Rapor satırı: prefix_unique
FULLTEXT indexes
oluşturulmaz
Oracle Text tam metin aramayı kendi indeks türü ve sorgularıyla kurar.
Rapor satırı: fulltext_not_created
SPATIAL indexes
oluşturulmaz
Geometriler WKB baytları olarak saklanır ve uzamsal indeks bunları okuyamaz.
Rapor satırı: spatial_index_not_created
functional indexes, and indexes on whole CLOB or BLOB columns
oluşturulmaz
Oracle büyük bir nesneyi bütün olarak indeksleyemez ve bazı MySQL fonksiyonlarının Oracle karşılığı yoktur.
Rapor satırı: index_skipped
foreign keys
veriden sonra ENABLE NOVALIDATE, ardından yetim satırlar için uyarıyla doğrulanır
Dökümler FOREIGN_KEY_CHECKS=0 ile yüklenir ve MyISAM hiç denetlemez, bu yüzden üst satırı olmayan satırlar yaygındır. Anahtar yeni satırları hemen denetler ve en son doğrulanır; yetim satırlar varsa yüklemeyi durdurmak yerine anahtar bir uyarıyla doğrulanmamış kalır.
ON UPDATE CASCADE, SET NULL or SET DEFAULT; ON DELETE SET DEFAULT
kaldırılır
Oracle'ın yabancı anahtarları yalnızca silmede, CASCADE veya SET NULL ile işlem yapar.
Rapor satırı: foreign_key_action_unsupported
foreign keys to columns without a unique key
oluşturulmaz
Oracle, başvurulan sütunlarda bir birincil anahtar veya benzersiz bir kısıt ister; InnoDB istemez.
Rapor satırı: foreign_key_skipped
table and column names
düz adlarsa büyük harf, değilse yazıldığı gibi
Oracle tırnaksız yazılan adları büyük harfle saklar; bu yüzden düz adlar büyük harfe çevrilir ve sorgular tırnakları atlayabilir; diğer adlar büyük/küçük harflerini korur ve tırnak gerektirir.
Rapor satırı: identifier_renamed
names over 128 bytes
kısaltılır
Oracle 12.2 ve sonrasında adlar 128 bayt tutar.
Rapor satırı: name_shortened
GEOMETRY, POINT, POLYGON...
WKB tutan BLOB
WKB, her uzamsal kütüphanenin okuduğu standart biçimdir; SDO_GEOMETRY, Oracle Spatial meta verilerini gerektirir.
Rapor satırı: geometry_as_blob
INET4, INET6, UUID (MariaDB)
VARCHAR2(39), VARCHAR2(36)
Oracle'da bu türlerin hiçbiri yoktur; metin MariaDB'nin döndürdüğü metindir.
BINARY, VARBINARY, BLOB
2000 bayta kadar RAW, değilse BLOB
Baytlar bayt olarak kalır.
PARTITION BY
tek tablo
Satırlar aynıdır; gerekiyorsa tabloyu Oracle'da yeniden bölümleyin.
Rapor satırı: partitions_dropped
WITH SYSTEM VERSIONING (MariaDB)
mevcut satırları içeren bir tablo
Döküm yalnızca mevcut satırları içerir.
Rapor satırı: system_versioning_dropped
MyISAM, MEMORY and other engines
normal bir tablo
Oracle'ın tek bir tablo motoru vardır.
Rapor satırı: engine_dropped
views, triggers, procedures, functions and events
raporda listelenir
Kodları MySQL'in dilinde yazılmıştır, bu yüzden yeniden oluşturmanız için listelenirler.
Rapor satırı: not_converted_objects
dumps without CREATE TABLE
değerlerden okunan türler
--no-create-info ile alınan bir dökümde yalnızca satırlar vardır, bu yüzden türler değerlerden gelir.
Rapor satırı: no_schema
geometries in a dump without CREATE TABLE
WKB tutan BLOB
MySQL'in geometri biçimi değerlerden tanınır ve standart WKB olarak saklanır.
Rapor satırı: geometry_inferred
_ci collations
tam karşılaştırma
Oracle, aksi belirtilmedikçe metni tam olarak karşılaştırır.
Rapor satırı: case_insensitive_collation
SET NAMES utf8 from utf8mb4 tables
dönüştürülür, uyarıyla
MySQL 5.x mysqldump varsayılan olarak 3 baytlık utf8 yazar ve herhangi bir dönüştürücü dosyayı görmeden önce her emojiyi soru işaretiyle değiştirir.
Rapor satırı: dump_lost_four_byte_chars
dumps without SET NAMES whose text isn't UTF-8
Latin-1 (Windows-1252) olarak okunur
MySQL'in latin1 kodlaması Windows-1252'dir; bu tür dökümlerin olağan kodlamasıdır.
Rapor satırı: charset_guessed
sjis, cp932, gbk, big5 dumps
uyarıyla UTF-8 olarak okunur
Bu kodlamalar henüz çözülmüyor.
Rapor satırı: unsupported_charset
UNHEX('..'), CONVERT(b'..', UNSIGNED), CONVERT(".." USING x), ST_GeomFromText('..') in rows
hesaplanır
Bazı döküm araçları değerleri bu çağrılar olarak yazar; bunlar ürettikleri değerler olarak okunur, coğrafi WKT'de boylam başa alınır.
other expressions in rows
NULL
Veritabanı çalıştırmayan bir dönüştürücü bunları hesaplayamaz.
Rapor satırı: expression_value
DEFAULT in VALUES
sütunun varsayılan değeri
Sabit bir varsayılan değer satıra kopyalanır.
Rapor satırı: default_keyword_filled
DEFAULT in VALUES without a literal default
NULL
Kopyalanacak bir değer yok.
Rapor satırı: default_keyword_null
REPLACE and INSERT IGNORE
düz satırlar
Bir dökümde her anahtar için bir satır vardır, bu yüzden satırlar aynıdır.
Rapor satırı: replace_as_insert
types IntoSQL doesn't know
CLOB
Metin her değeri tutar; yüklemeden sonra türü değiştirin.
Rapor satırı: unknown_type
values that don't fit their column
NULL
Hasarlı veya elle yazılmış bir döküm, sütununun tutamayacağı değerler içerebilir; geri kalanın yüklenmesi için bunlar NULL olur.
Rapor satırı: invalid_value_null
unreadable geometries
NULL
Geometri olmayan baytlar geometri olarak saklanamaz.
Rapor satırı: bad_geometry
dumps of several databases
tek şema, her tablonun adı önce veritabanının adıyla başlar
Betik, onu çalıştıran kullanıcının şemasına yüklenir; bu yüzden farklı veritabanlarının tablolarının başına veritabanının adı eklenir.
Rapor satırı: databases_merged
CREATE SEQUENCE (MariaDB)
ulaştığı değerden CREATE SEQUENCE
Oracle sequence nesneleri aynı şekilde çalışır.
VECTOR(n) (MariaDB 11.7+)
float'ları JSON dizisi olarak tutan CLOB
Yalnızca Oracle 23ai'de vektör türü vardır; bir JSON dizisi her sürümde her float'ı korur.
Rapor satırı: type_replaced
| MySQL içinde | Oracle içinde | Rapor satırı |
|---|---|---|
| TINYINT(1), BOOL | her değer 0 veya 1 ise 0 ve 1 CHECK'i ile NUMBER(1), değilse NUMBER(3)MySQL'in BOOL türü, -128 ile 127 arasında herhangi bir sayıyı tutabilen bir TINYINT(1)'dir. Oracle 23ai öncesinde boolean sütun yoktur, bu yüzden 0 ve 1'lerden oluşan bir sütun CHECK ile NUMBER(1) olur; 2 veya -1 tutan bir sütun sayılarını korur. | bool_kept_numeric |
| UNSIGNED integers | aralığa yetecek genişlikte NUMBER, negatif olmadığını denetleyen bir CHECK ileOracle'ın NUMBER türü MySQL'deki genişliklerin her tam sayısını tutar; CHECK, MySQL'deki gibi negatif değerleri dışarıda tutar. | |
| ZEROFILL and display widths | kaldırılırSıfır dolgusu bir sayının gösterilme biçimidir, sayının parçası değildir. Sayılar korunur; dolgu önemliyse okurken biçimlendirin. | zerofill_dropped |
| FLOAT(M,D) | ölçek olmadan BINARY_FLOAT veya BINARY_DOUBLEOracle'ın ikili kayan noktalı sayılarının sabit ölçeği yoktur. Saklanan değerler olduğu gibi kopyalanır. | float_scale_dropped |
| DECIMAL(p,s) | 38 basamağa kadar NUMBER(p,s); ötesi VARCHAR2Oracle'ın NUMBER türü 38 basamak tutar. Daha geniş ondalıklar her basamak tam kalsın diye metin olarak korunur. | decimal_as_text |
| BIT(1), BIT(n) | NUMBER(1), 63 bite kadar NUMBER(19), BIT(64) için NUMBER(20)Bit alanları, bitlerinin oluşturduğu sayı olarak saklanır. | |
| zero, partial or impossible dates (0000-00-00, 2024-02-30) | NULLOracle yalnızca gerçek takvim tarihlerini saklar. MySQL, SQL modu izin verdiğinde sıfır ve imkansız tarihleri tutar; bunlar NULL olur ve rapor bunları sayar. | invalid_date_null |
| NOT NULL columns with values that become NULL | NOT NULL kaldırılırBoş dizeler dahil, değerleri NULL olmak zorunda kalan bir sütun NOT NULL kısıtını koruyamaz, yoksa yükleme durur. | not_null_relaxed |
| empty strings and empty binary values | NULLOracle boş bir dizeyi NULL olarak saklar, bu yüzden ' olan bir değer NULL olarak okunur. Rapor bunları sütun başına sayar. | empty_string_null |
| DEFAULT '0000-00-00' | varsayılan değer yokOracle'ın saklayamadığı bir varsayılan değer, uydurma bir tarihle değiştirilmek yerine dışarıda bırakılır. | zero_date_default |
| TIME | süreleri tutan INTERVAL DAY TO SECONDOracle'da günün saati türü yoktur ve MySQL'in TIME türü -838:59:59 ile 838:59:59 arasında bir süredir; bir interval her değeri tutar. | |
| YEAR | aralığını denetleyen bir CHECK ile NUMBER(4)Oracle'da yıl türü yoktur; CHECK, MySQL'in izin verdiği değerlerin aynısını korur. | |
| CHAR(n), VARCHAR(n) | karakter sayan VARCHAR2(n CHAR)Uzunluklar MySQL'deki gibi karakter sayar ve MySQL CHAR değerlerini sondaki boşluklar olmadan döndürür, VARCHAR2 da onları öyle korur. | |
| VARCHAR(n) and TEXT longer than 4000 bytes | CLOBBir VARCHAR2 varsayılan olarak 4000 bayt tutar, bu yüzden daha uzun metin CLOB olur; tüm değerleri sığan bir sütun VARCHAR2 olarak kalır. | text_as_lob |
| DATETIME | TIMESTAMPDATETIME, TIMESTAMP gibi saat dilimi olmayan bir duvar saati okumasıdır. DATE, Oracle'ın DATE türüne dönüşür; bu tür gece yarısında kalan bir günün saatini de tutar. | |
| TIMESTAMP | dökümün belirttiği saat diliminde TIMESTAMP WITH TIME ZONE, belirtmiyorsa UTCTIMESTAMP bir andır. Dökümler değeri yazdıkları saat dilimini belirtir (mysqldump UTC yazar); bu bilgi yoksa değerler UTC olarak okunur ve rapor bunu belirtir. | timestamp_zone_assumed |
| ENUM | değerlerini denetleyen bir CHECK ile VARCHAR2CHECK ile metin aynı değerleri korur. | |
| ENUM holding '' (MySQL's error value) | NULLMySQL, esnek bir SQL modunda bir ENUM'a geçersiz bir değer girildiğinde boş bir dize saklar. Oracle bunu NULL olarak saklar, CHECK buna izin verir ve rapor onu diğer boş değerlerle birlikte sayar. | |
| ENUM holding values outside its list | CHECK yokListede adı geçmeyen değerler CHECK'ten geçemez; bu yüzden CHECK oluşturulmaz. | enum_check_skipped |
| SET | MySQL'in yazdığı şekliyle VARCHAR2 ('a,b')Oracle'da küme türü yoktur; metin MySQL'in döndürdüğü metindir. | |
| JSON | CLOBOracle'ın JSON fonksiyonları her sürümde JSON'u metinden okur ve bir CLOB her boyuttaki değeri tutar. | |
| NUL bytes in text | korunurVARCHAR2 ve CLOB bir NUL karakteri tutabilir, bu yüzden değer olduğu gibi kopyalanır. | |
| text that isn't valid in its character set | hatalı baytlar yerine koyma karakteri olarakMetnin VARCHAR2 olarak yazılabilmesi için karakter olarak okunması gerekir. | invalid_utf8_replaced |
| text decoded twice (ñ) | olduğu gibi kopyalanırDöküm tam olarak bu karakterleri içerir, bu yüzden kopyalanırlar; rapor onları gösterir. | mojibake_suspected |
| AUTO_INCREMENT | kopyalanan id'lerin ötesinden yeniden başlatılan GENERATED BY DEFAULT ON NULL AS IDENTITYKopyalanan id'ler olduğu gibi yüklenir ve sayaç, en yüksek id'den veya dökümün AUTO_INCREMENT değerinden (hangisi büyükse) sonra devam eder. | |
| MyISAM AUTO_INCREMENT on the second column of a key | tablo için tek sayaçMyISAM, anahtarın ilk sütununun her grubu için ayrı sayar; Oracle'da tablo başına tek sayaç vardır. | myisam_group_autoincrement |
| ON UPDATE CURRENT_TIMESTAMP | bir BEFORE UPDATE tetikleyicisiTetikleyici, bir güncelleme sütunu ayarlamadığında sütunu geçerli zamana ayarlar. | on_update_trigger |
| generated columns | sanal sütunlarOracle üretilen sütunları yalnızca okurken hesaplar; STORED sütunlar aynı değerlerle sanal olur. | stored_as_virtual |
| generated columns with functions Oracle lacks | düz bir sütunOracle için yazılamayan bir formül, düz bir sütun ve bir rapor satırı bırakır. | generated_not_translated |
| INVISIBLE columns | INVISIBLE sütunlarOracle, MySQL'deki gibi görünmez sütunları SELECT * sonucundan gizler. | |
| CHECK constraints | çevrilir, CREATE TABLE içinde satır içiSatır içi CHECK kısıtları her satır yüklenirken test edilir. | |
| CHECK constraints with functions Oracle lacks | oluşturulmazOracle için yazılamayan bir CHECK kısıtı dışarıda bırakılır ve raporlanır. | check_skipped |
| CHECK ... NOT ENFORCED | oluşturulmazMySQL bu CHECK kısıtlarını uygulamadan tutar, bu yüzden satırlar onları ihlal edebilir. | check_not_enforced |
| defaults with functions Oracle lacks | varsayılan değer yokOracle için yazılamayan bir varsayılan değer dışarıda bırakılır ve raporlanır. | default_not_translated |
| keys and indexes on a prefix, c(20) | sütunun SUBSTR'si üzerinde bir indeksSütunun aynı başlangıcı üzerindeki bir fonksiyon indeksi aynı satırları birbirinden ayırır ve Oracle'ın tamamını indeksleyemediği CLOB sütunlarını indeksler. | prefix_unique |
| FULLTEXT indexes | oluşturulmazOracle Text tam metin aramayı kendi indeks türü ve sorgularıyla kurar. | fulltext_not_created |
| SPATIAL indexes | oluşturulmazGeometriler WKB baytları olarak saklanır ve uzamsal indeks bunları okuyamaz. | spatial_index_not_created |
| functional indexes, and indexes on whole CLOB or BLOB columns | oluşturulmazOracle büyük bir nesneyi bütün olarak indeksleyemez ve bazı MySQL fonksiyonlarının Oracle karşılığı yoktur. | index_skipped |
| foreign keys | veriden sonra ENABLE NOVALIDATE, ardından yetim satırlar için uyarıyla doğrulanırDökümler FOREIGN_KEY_CHECKS=0 ile yüklenir ve MyISAM hiç denetlemez, bu yüzden üst satırı olmayan satırlar yaygındır. Anahtar yeni satırları hemen denetler ve en son doğrulanır; yetim satırlar varsa yüklemeyi durdurmak yerine anahtar bir uyarıyla doğrulanmamış kalır. | |
| ON UPDATE CASCADE, SET NULL or SET DEFAULT; ON DELETE SET DEFAULT | kaldırılırOracle'ın yabancı anahtarları yalnızca silmede, CASCADE veya SET NULL ile işlem yapar. | foreign_key_action_unsupported |
| foreign keys to columns without a unique key | oluşturulmazOracle, başvurulan sütunlarda bir birincil anahtar veya benzersiz bir kısıt ister; InnoDB istemez. | foreign_key_skipped |
| table and column names | düz adlarsa büyük harf, değilse yazıldığı gibiOracle tırnaksız yazılan adları büyük harfle saklar; bu yüzden düz adlar büyük harfe çevrilir ve sorgular tırnakları atlayabilir; diğer adlar büyük/küçük harflerini korur ve tırnak gerektirir. | identifier_renamed |
| names over 128 bytes | kısaltılırOracle 12.2 ve sonrasında adlar 128 bayt tutar. | name_shortened |
| GEOMETRY, POINT, POLYGON... | WKB tutan BLOBWKB, her uzamsal kütüphanenin okuduğu standart biçimdir; SDO_GEOMETRY, Oracle Spatial meta verilerini gerektirir. | geometry_as_blob |
| INET4, INET6, UUID (MariaDB) | VARCHAR2(39), VARCHAR2(36)Oracle'da bu türlerin hiçbiri yoktur; metin MariaDB'nin döndürdüğü metindir. | |
| BINARY, VARBINARY, BLOB | 2000 bayta kadar RAW, değilse BLOBBaytlar bayt olarak kalır. | |
| PARTITION BY | tek tabloSatırlar aynıdır; gerekiyorsa tabloyu Oracle'da yeniden bölümleyin. | partitions_dropped |
| WITH SYSTEM VERSIONING (MariaDB) | mevcut satırları içeren bir tabloDöküm yalnızca mevcut satırları içerir. | system_versioning_dropped |
| MyISAM, MEMORY and other engines | normal bir tabloOracle'ın tek bir tablo motoru vardır. | engine_dropped |
| views, triggers, procedures, functions and events | raporda listelenirKodları MySQL'in dilinde yazılmıştır, bu yüzden yeniden oluşturmanız için listelenirler. | not_converted_objects |
| dumps without CREATE TABLE | değerlerden okunan türler--no-create-info ile alınan bir dökümde yalnızca satırlar vardır, bu yüzden türler değerlerden gelir. | no_schema |
| geometries in a dump without CREATE TABLE | WKB tutan BLOBMySQL'in geometri biçimi değerlerden tanınır ve standart WKB olarak saklanır. | geometry_inferred |
| _ci collations | tam karşılaştırmaOracle, aksi belirtilmedikçe metni tam olarak karşılaştırır. | case_insensitive_collation |
| SET NAMES utf8 from utf8mb4 tables | dönüştürülür, uyarıylaMySQL 5.x mysqldump varsayılan olarak 3 baytlık utf8 yazar ve herhangi bir dönüştürücü dosyayı görmeden önce her emojiyi soru işaretiyle değiştirir. | dump_lost_four_byte_chars |
| dumps without SET NAMES whose text isn't UTF-8 | Latin-1 (Windows-1252) olarak okunurMySQL'in latin1 kodlaması Windows-1252'dir; bu tür dökümlerin olağan kodlamasıdır. | charset_guessed |
| sjis, cp932, gbk, big5 dumps | uyarıyla UTF-8 olarak okunurBu kodlamalar henüz çözülmüyor. | unsupported_charset |
| UNHEX('..'), CONVERT(b'..', UNSIGNED), CONVERT(".." USING x), ST_GeomFromText('..') in rows | hesaplanırBazı döküm araçları değerleri bu çağrılar olarak yazar; bunlar ürettikleri değerler olarak okunur, coğrafi WKT'de boylam başa alınır. | |
| other expressions in rows | NULLVeritabanı çalıştırmayan bir dönüştürücü bunları hesaplayamaz. | expression_value |
| DEFAULT in VALUES | sütunun varsayılan değeriSabit bir varsayılan değer satıra kopyalanır. | default_keyword_filled |
| DEFAULT in VALUES without a literal default | NULLKopyalanacak bir değer yok. | default_keyword_null |
| REPLACE and INSERT IGNORE | düz satırlarBir dökümde her anahtar için bir satır vardır, bu yüzden satırlar aynıdır. | replace_as_insert |
| types IntoSQL doesn't know | CLOBMetin her değeri tutar; yüklemeden sonra türü değiştirin. | unknown_type |
| values that don't fit their column | NULLHasarlı veya elle yazılmış bir döküm, sütununun tutamayacağı değerler içerebilir; geri kalanın yüklenmesi için bunlar NULL olur. | invalid_value_null |
| unreadable geometries | NULLGeometri olmayan baytlar geometri olarak saklanamaz. | bad_geometry |
| dumps of several databases | tek şema, her tablonun adı önce veritabanının adıyla başlarBetik, onu çalıştıran kullanıcının şemasına yüklenir; bu yüzden farklı veritabanlarının tablolarının başına veritabanının adı eklenir. | databases_merged |
| CREATE SEQUENCE (MariaDB) | ulaştığı değerden CREATE SEQUENCEOracle sequence nesneleri aynı şekilde çalışır. | |
| VECTOR(n) (MariaDB 11.7+) | float'ları JSON dizisi olarak tutan CLOBYalnızca Oracle 23ai'de vektör türü vardır; bir JSON dizisi her sürümde her float'ı korur. | type_replaced |
Betiği Oracle veritabanına yükleyin
Betik tabloları oluşturur, satırları kopyalar, ardından anahtarları, indeksleri ve yabancı anahtarları ekler; böylece hızlı yüklenir ve ilk hatada durur.
NLS_LANG=.AL32UTF8 sqlplus -S -L user@//localhost/mydb @mysql.oracle.sqlYabancı anahtarlar ENABLE NOVALIDATE ile eklenir, böylece yeni satırlar hemen denetlenir, ardından doğrulanır. Eski bir satır var olmayan bir satıra işaret ediyorsa betik, yarı yolda başarısız olmak yerine hangi kısıt olduğunu söyler ve onu doğrulanmamış bırakır.
Büyük bir döküm için SQL*Plus'ı veritabanıyla aynı makinede çalıştırın. Betik her 100 satırda bir commit yapar. Betiği çalıştıran kullanıcının CREATE TABLE, CREATE SEQUENCE, CREATE TRIGGER ve CREATE PROCEDURE yetkilerine ve tablo alanında kotaya ihtiyacı vardır.
En iyi sonuç için MySQL dökümü nasıl alınır
Dönüştürücü, dökümün içerdiğini okur. Bu seçenekler verilerinizin daha fazlasını dökümde tutar:
- --default-character-set=utf8mb4 emoji ve diğer 4 baytlık karakterleri korur; utf8 dökümü bunları dönüştürücü görmeden önce kaybeder.
- --hex-blob ikili sütunları onaltılık olarak yazar; bu biçim sistemler arasında kopyalamada bozulmaz.
- --routines --triggers --events bu nesneleri döküme ekler; böylece rapor onları listeleyebilir.
Neler dönüştürülmez
Görünümler, tetikleyiciler, saklı yordamlar, fonksiyonlar ve olaylar her veritabanının kendi dilinde yazılır. Raporda adlarıyla listelenirler, asla sessizce atlanmazlar; böylece onları Oracle için yeniden yazabilirsiniz.
MySQL - Oracle dönüştürme hakkında sorular
Yanıtınızı bulamadınız mı? İletişim sayfasından bize yazın, bir kişi yanıt verir. İletişim sayfası
Dökümüm yükleniyor mu?
Hayır. Dönüştürücü tarayıcınızda çalışır ve dökümü diskinizden parça parça okur; böylece döküm bilgisayarınızdan hiç çıkmaz. Masaüstü uygulaması ve komut satırı da bilgisayarınızda dönüştürür.
Döküm ne kadar büyük olabilir?
Dönüştürücü dökümün tamamını asla bellekte tutmaz: dosyayı aralıklar halinde iki kez okur ve betiği ilerledikçe yazar. Birkaç gigabaytlık dökümler tarayıcıda, masaüstü uygulamasında ve komut satırıyla dönüştürülür.
MariaDB dökümlerini okuyor mu?
Evet. mariadb-dump ile alınan dökümler ve MariaDB 10.3 ile 12 arası sürümlerin dökümleri, MariaDB'nin INET6, INET4 ve UUID sütunları dahil, aynı şekilde dönüştürülür.
0000-00-00 tarihlerine ne olur?
Oracle içinde sıfır tarih yoktur; bu yüzden bunlar NULL olur ve sütun NULL kabul eder. Rapor her sütunda kaç tane olduğunu söyler. Oracle boş dizeleri NULL olarak sakladığı için boş dizeler de NULL olur.
AUTO_INCREMENT değerleri korunuyor mu?
Evet. Her AUTO_INCREMENT sütunu bir kimlik sütunu olur, her satır kendi id'sini korur ve sonraki id en yüksek id'den sonra devam eder; tablonun AUTO_INCREMENT değeri daha yüksekse ondan sonra.
TINYINT(1) boolean olur mu?
Oracle 23ai öncesinde boolean sütun yoktur. Değerlerinin tümü 0 veya 1 olan bir sütun, bunu koruyan bir CHECK ile NUMBER(1) olur; başka sayılar içeren bir sütun onları korur ve rapor nedenini söyler.
Saklı yordamlar ve tetikleyiciler ne olur?
Raporda adlarıyla listelenirler ve dönüştürülmezler, çünkü her veritabanı onları kendi dilinde yazar. ON UPDATE CURRENT_TIMESTAMP istisnadır: bir Oracle tetikleyicisine dönüşür.
Betik hangi Oracle sürümlerinde yüklenir?
Oracle 19c ve sonrası. Her test dökümü 21c ve 23ai üzerinde yüklenir ve bir sorun çıkarsa ilk hatada durur.