İçeriğe geç
IntoSQL ana sayfası

Oracle dışa aktarımını daha eski veya daha yeni bir Oracle sürümüne taşıyın

SQL Developer'ın Database Export aracının veya SQLcl'in tabloları ve Insert ifadeleriyle yazdığı .sql dosyasını bırakın ve Oracle 19c ve sonrasında yüklenen bir betik indirin. NUMBER, DATE, TIMESTAMP, LOB'lar, identity'ler ve diziler olduğu gibi kalır, XMLTYPE ve JSON metinlerini bir CLOB içinde korur ve her değişiklik raporda listelenir.

Dosyanız
sqlshop_2024_oracle.sqlÖrnek dosya, 9,3 kB
Veritabanınız

18 satır dönüştürüldü, düzeltme yok, reddedilen yok

Göster

shop_2024_oracle.sql içindeki tablolarOracle dökümü · SQL Developer ile yazıldı · utf-8

  • customersCUSTOMERS olarak yazıldı8 satır
    7 sütun
    IDNUMBER(10,0) not null
    NAMEVARCHAR2(100 CHAR) not null
    EMAILVARCHAR2(150 CHAR) not null
    COUNTRYCHAR(2 BYTE) not null
    IS_ACTIVENUMBER(1,0) not null
    SIGNED_UPDATE
    CREATED_ATTIMESTAMP(0) not null
  • ordersORDERS olarak yazıldı10 satır
    9 sütun
    IDNUMBER(10,0) not null
    CUSTOMER_IDNUMBER(10,0) not null
    INVOICENUMBER(10,0)
    STATUSVARCHAR2(10 CHAR) not null
    TOTALNUMBER(10,2) not null
    ITEMSNUMBER(5,0) not null
    ORDERED_ATDATE not null
    SHIPPED_ATDATE
    NOTEVARCHAR2(255 CHAR)
-- Written by IntoSQL from a Oracle 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 SEQUENCE "INVOICE_NUMBERS" START WITH 1020 INCREMENT BY 1 MINVALUE 1;
CREATE TABLE "CUSTOMERS" (
    "ID" NUMBER(10,0) GENERATED BY DEFAULT ON NULL AS IDENTITY (START WITH 1),
    "NAME" VARCHAR2(100 CHAR) NOT NULL,
    "EMAIL" VARCHAR2(150 CHAR) NOT NULL,
    "COUNTRY" CHAR(2 BYTE) DEFAULT 'US' NOT NULL,
    "IS_ACTIVE" NUMBER(1,0) DEFAULT 1 NOT NULL,
    "SIGNED_UP" DATE,
    "CREATED_AT" TIMESTAMP(0) DEFAULT LOCALTIMESTAMP NOT NULL,
    CONSTRAINT "CHECK1" CHECK ("IS_ACTIVE" IN (0, 1))
);

CREATE TABLE "ORDERS" (
    "ID" NUMBER(10,0) GENERATED BY DEFAULT ON NULL AS IDENTITY (START WITH 1),
    "CUSTOMER_ID" NUMBER(10,0) NOT NULL,
    "INVOICE" NUMBER(10,0) DEFAULT ("INVOICE_NUMBERS".NEXTVAL),
    "STATUS" VARCHAR2(10 CHAR) DEFAULT 'pending' NOT NULL,
    "TOTAL" NUMBER(10,2) NOT NULL,
    "ITEMS" NUMBER(5,0) DEFAULT 1 NOT NULL,
    "ORDERED_AT" DATE NOT NULL,
    "SHIPPED_AT" DATE,
    "NOTE" VARCHAR2(255 CHAR),
    CONSTRAINT "CHECK1_2" CHECK ("STATUS" IN ('pending', 'paid', 'shipped', 'cancelled'))
);

BEGIN
INSERT INTO "CUSTOMERS" (
"ID",
"NAME",
"EMAIL",
"COUNTRY",
"IS_ACTIVE",
"SIGNED_UP",
"CREATED_AT"
) VALUES (
1,
'Ana Martínez',
'ana@example.com',
'MX',
1,
TIMESTAMP '2023-01-15 00:00:00',
TIMESTAMP '2023-01-15 10:24:00.000000000'
);
COMMIT;
END;
/
BEGIN
INSERT INTO "CUSTOMERS" (
"ID",
"NAME",
"EMAIL",
"COUNTRY",
"IS_ACTIVE",
"SIGNED_UP",
"CREATED_AT"
) VALUES (
2,
'Zoë Müller',
'zoe@example.de',
'DE',
1,
TIMESTAMP '2023-02-03 00:00:00',
TIMESTAMP '2023-02-03 08:11:42.000000000'
);
COMMIT;
END;
/
BEGIN
INSERT INTO "CUSTOMERS" (
"ID",
"NAME",
"EMAIL",
"COUNTRY",
"IS_ACTIVE",
"SIGNED_UP",
"CREATED_AT"
) VALUES (
3,
'José Peña',
'jose@example.es',
'ES',
0,
TIMESTAMP '2023-03-21 00:00:00',
TIMESTAMP '2023-03-21 19:05:17.000000000'
);
COMMIT;
END;
/
BEGIN
INSERT INTO "CUSTOMERS" (
"ID",
"NAME",
"EMAIL",
"COUNTRY",
"IS_ACTIVE",
"SIGNED_UP",
"CREATED_AT"
) VALUES (
4,
'李雷',
'lilei@example.cn',
'CN',
1,
TIMESTAMP '2023-05-09 00:00:00',
TIMESTAMP '2023-05-09 02:40:00.000000000'
);
COMMIT;
END;
/
BEGIN
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.000000000'
);
COMMIT;
END;
/
BEGIN
INSERT INTO "CUSTOMERS" (
"ID",
"NAME",
"EMAIL",
"COUNTRY",
"IS_ACTIVE",
"SIGNED_UP",
"CREATED_AT"
) VALUES (
6,
'Amélie Laurent',
'amelie@example.fr',
'FR',
1,
TIMESTAMP '2024-01-02 00:00:00',
TIMESTAMP '2024-01-02 09:30:00.000000000'
);
COMMIT;
END;
/
BEGIN
INSERT INTO "CUSTOMERS" (
"ID",
"NAME",
"EMAIL",
"COUNTRY",
"IS_ACTIVE",
"SIGNED_UP",
"CREATED_AT"
) VALUES (
7,
'Ravi Patel',
'ravi@example.in',
'IN',
0,
TIMESTAMP '2024-02-29 00:00:00',
TIMESTAMP '2024-02-29 23:59:59.000000000'
);
COMMIT;
END;
/
BEGIN
INSERT INTO "CUSTOMERS" (
"ID",
"NAME",
"EMAIL",
"COUNTRY",
"IS_ACTIVE",
"SIGNED_UP",
"CREATED_AT"
) VALUES (
8,
'Sofia Rossi 🌻',
'sofia@example.it',
'IT',
1,
TIMESTAMP '2024-04-12 00:00:00',
TIMESTAMP '2024-04-12 12:12:12.000000000'
);
COMMIT;
END;
/
BEGIN
INSERT INTO "ORDERS" (
"ID",
"CUSTOMER_ID",
"INVOICE",
"STATUS",
"TOTAL",
"ITEMS",
"ORDERED_AT",
"SHIPPED_AT",
"NOTE"
) VALUES (
1,
1,
1000,
'shipped',
129.9,
3,
TIMESTAMP '2024-03-01 10:00:00',
TIMESTAMP '2024-03-02 16:30:00',
NULL
);
COMMIT;
END;
/
BEGIN
INSERT INTO "ORDERS" (
"ID",
"CUSTOMER_ID",
"INVOICE",
"STATUS",
"TOTAL",
"ITEMS",
"ORDERED_AT",
"SHIPPED_AT",
"NOTE"
) VALUES (
2,
2,
1001,
'paid',
54,
1,
TIMESTAMP '2024-03-02 11:15:00',
NULL,
'Gift wrap 🎁'
);
COMMIT;
END;
/
BEGIN
INSERT INTO "ORDERS" (
"ID",
"CUSTOMER_ID",
"INVOICE",
"STATUS",
"TOTAL",
"ITEMS",
"ORDERED_AT",
"SHIPPED_AT",
"NOTE"
) VALUES (
3,
1,
1002,
'cancelled',
12.5,
1,
TIMESTAMP '2024-03-03 09:45:00',
NULL,
'Customer changed their mind'
);
COMMIT;
END;
/
BEGIN
INSERT INTO "ORDERS" (
"ID",
"CUSTOMER_ID",
"INVOICE",
"STATUS",
"TOTAL",
"ITEMS",
"ORDERED_AT",
"SHIPPED_AT",
"NOTE"
) VALUES (
4,
4,
1003,
'shipped',
980,
12,
TIMESTAMP '2024-03-05 02:10:00',
TIMESTAMP '2024-03-07 08:00:00',
'请小心轻放'
);
COMMIT;
END;
/
BEGIN
INSERT INTO "ORDERS" (
"ID",
"CUSTOMER_ID",
"INVOICE",
"STATUS",
"TOTAL",
"ITEMS",
"ORDERED_AT",
"SHIPPED_AT",
"NOTE"
) VALUES (
5,
5,
1004,
'pending',
45.75,
2,
TIMESTAMP '2024-03-08 17:20:00',
NULL,
'Leave at the door; ring twice'
);
COMMIT;
END;
/
BEGIN
INSERT INTO "ORDERS" (
"ID",
"CUSTOMER_ID",
"INVOICE",
"STATUS",
"TOTAL",
"ITEMS",
"ORDERED_AT",
"SHIPPED_AT",
"NOTE"
) VALUES (
6,
6,
1005,
'shipped',
310.4,
5,
TIMESTAMP '2024-03-10 13:00:00',
TIMESTAMP '2024-03-11 09:00:00',
'Fragile: "glass"'
);
COMMIT;
END;
/
BEGIN
INSERT INTO "ORDERS" (
"ID",
"CUSTOMER_ID",
"INVOICE",
"STATUS",
"TOTAL",
"ITEMS",
"ORDERED_AT",
"SHIPPED_AT",
"NOTE"
) VALUES (
7,
8,
1006,
'paid',
76.2,
2,
TIMESTAMP '2024-03-11 18:45:00',
NULL,
NULL
);
COMMIT;
END;
/
BEGIN
INSERT INTO "ORDERS" (
"ID",
"CUSTOMER_ID",
"INVOICE",
"STATUS",
"TOTAL",
"ITEMS",
"ORDERED_AT",
"SHIPPED_AT",
"NOTE"
) VALUES (
8,
2,
1007,
'paid',
19.99,
1,
TIMESTAMP '2024-03-12 08:00:00',
NULL,
'Paid at the counter'
);
COMMIT;
END;
/
BEGIN
INSERT INTO "ORDERS" (
"ID",
"CUSTOMER_ID",
"INVOICE",
"STATUS",
"TOTAL",
"ITEMS",
"ORDERED_AT",
"SHIPPED_AT",
"NOTE"
) VALUES (
9,
3,
1008,
'shipped',
64,
2,
TIMESTAMP '2024-03-14 15:30:00',
NULL,
'Shipping date never recorded'
);
COMMIT;
END;
/
BEGIN
INSERT INTO "ORDERS" (
"ID",
"CUSTOMER_ID",
"INVOICE",
"STATUS",
"TOTAL",
"ITEMS",
"ORDERED_AT",
"SHIPPED_AT",
"NOTE"
) VALUES (
10,
7,
1009,
'paid',
1499,
1,
TIMESTAMP '2024-03-15 21:05:00',
NULL,
'C:\Users\ravi\invoice.pdf'
);
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_CUSTOMERS_EMAIL_UK" UNIQUE ("EMAIL");
ALTER TABLE "ORDERS" ADD CONSTRAINT "PK_ORDERS" PRIMARY KEY ("ID");
CREATE INDEX "IX_ORDERS_ORDERS_STATUS_DATE_IX" ON "ORDERS" ("STATUS", "ORDERED_AT");
ALTER TABLE "ORDERS" ADD CONSTRAINT "ORDERS_CUSTOMER_FK" FOREIGN KEY ("CUSTOMER_ID") REFERENCES "CUSTOMERS" ("ID") ENABLE NOVALIDATE;
BEGIN
    EXECUTE IMMEDIATE 'ALTER TABLE "ORDERS" ENABLE VALIDATE CONSTRAINT "ORDERS_CUSTOMER_FK"';
EXCEPTION
    WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE('Foreign key ' || '"ORDERS_CUSTOMER_FK"' || ' 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 < 1 THEN
        next_id := 1;
    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 < 1 THEN
        next_id := 1;
    END IF;
    EXECUTE IMMEDIATE 'ALTER TABLE "ORDERS" MODIFY ("ID" GENERATED BY DEFAULT ON NULL AS IDENTITY (START WITH ' || next_id || '))';
END;
/
DROP FUNCTION "INTOSQL_CLOB";
DROP FUNCTION "INTOSQL_BLOB";
COMMIT;
EXIT;

Düzeltmeler

Düzeltilecek bir şey yoktu.

Dosyan bu bilgisayarda dönüştürülür ve asla yüklenmez.

Diğer örnekler:

Dosya ile betik 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.

  • BOOLEAN (23ai)

    23ai'de BOOLEAN, değilse 0 ve 1'i denetleyen bir CHECK ile NUMBER(1)

    TRUE ve FALSE, true ve false olarak kalır.

  • VARCHAR2(n BYTE|CHAR), NVARCHAR2(n), CHAR(n), NCHAR(n), CLOB, NCLOB, LONG

    BYTE veya CHAR uzunluklarıyla aynı türler

    Aynı metin türleri; LONG, 8'den beri her sürümün tercih ettiği CLOB olur.

  • VARCHAR2 and NVARCHAR2 past what the target's own types hold

    her değer 4000 bayta sığıyorsa VARCHAR2(4000 CHAR), değilse CLOB

    Bir VARCHAR2 varsayılan olarak 4000 bayt tutar ve Oracle bir CLOB'u indeksleyemez; bu yüzden metin, değerleri sığıyorsa VARCHAR2 olarak kalır, sığmıyorsa CLOB olur.

    Rapor satırı: text_as_lob

  • NUMBER, NUMBER(p,s), FLOAT(b)

    aynı NUMBER türleri

    Her basamağıyla aynı NUMBER ve FLOAT türleri.

  • INTERVAL YEAR TO MONTH, INTERVAL DAY TO SECOND

    aynı INTERVAL türleri

    Aynı interval değerleri.

  • DATE, TIMESTAMP(p)

    bildirildiği gibi DATE ve TIMESTAMP(p)

    Aynı türler, bu yüzden her tarih saatini saniyesine kadar korur.

  • TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE

    aynı türler

    Oracle -12:00 ile +14:00 arasındaki farkları tutar; farkı -12:00'ın ötesinde olan bir değer UTC'de yazılır, an aynıdır.

  • JSON (21c), and CLOB holding JSON

    21c ve sonrasında JSON, değilse CLOB

    Aynı JSON değerleri; dışa aktarımın 'null' olarak yazdığı bir SQL NULL, NULL olarak kalır.

  • BLOB, RAW(n), LONG RAW

    aynı türler; LONG RAW, BLOB olarak

    Baytlar bayt olarak kalır.

  • ROWID, UROWID, XMLTYPE, SDO_GEOMETRY

    metinleriyle CLOB

    XMLTYPE, ROWID ve UROWID metinlerini bir CLOB içinde korur, böylece betik 19c'den itibaren her sürümde yüklenir.

    Rapor satırı: type_replaced

  • collations that ignore case (BINARY_CI)

    tam karşılaştırma

    Sütun harmanlamaları yazılmaz, bu yüzden büyük/küçük harfi yok sayan bir sütun (BINARY_CI) artık Ana ile ana'yı ayırt eder.

    Rapor satırı: case_insensitive_collation

  • identity columns, and a sequence a BEFORE INSERT trigger assigns

    en yüksek id'den sonra devam eden GENERATED BY DEFAULT ON NULL AS IDENTITY

    Kopyalanan id'ler olduğu gibi yüklenir ve sayaç en yüksek id'den sonra devam eder. Bir tetikleyicinin bir sequence'tan doldurduğu sütun (12c öncesi yöntem) da kimlik sütunu olur.

  • identity columns the target can't count

    düz bir tam sayı

    Oracle tablo başına tek kimlik sütunu sayar; diğerleri değerlerini sayaçsız korur.

    Rapor satırı: counter_dropped

  • CREATE SEQUENCE

    aynı seçeneklerle CREATE SEQUENCE

    Dışa aktarım, bir sequence'ın ulaştığı değeri START WITH olarak yazar; böylece oradan devam eder.

  • virtual columns (GENERATED ALWAYS AS ... VIRTUAL)

    sanal sütunlar

    Aynı sanal sütunlar.

    Rapor satırı: stored_as_virtual

  • virtual columns with functions IntoSQL doesn't write, and the || operator

    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; dışa aktarımın sanal sütunlar için yazdığı değerler dışarıda bırakılır ve Oracle bunları hesaplayamaz.

    Rapor satırı: generated_not_translated

  • defaults with functions IntoSQL doesn't write (SYS_GUID(), ||)

    varsayılan değer yok

    Yazılamayan bir varsayılan değer dışarıda bırakılır ve raporlanır.

    Rapor satırı: default_not_translated

  • CHECK constraints

    çevrilir

    Aynı CHECK kısıtları, her satır yüklenirken denetlenir.

  • CHECK constraints with functions IntoSQL doesn't write

    oluşturulmaz

    Yazılamayan bir CHECK kısıtı dışarıda bırakılır ve raporlanır.

    Rapor satırı: check_skipped

  • CHECK constraints that are DISABLE or ENABLE NOVALIDATE

    oluşturulmaz

    Oracle bu CHECK kısıtlarını zaten var olan satırlara uygulamaz, bu yüzden satırlar onları ihlal edebilir.

    Rapor satırı: check_not_enforced

  • function-based, bitmap and domain indexes

    oluşturulmaz

    IntoSQL tüm sütunlar üzerinde b-tree indeksler yazar; diğerlerini yüklemeden sonra yeniden oluşturun.

    Rapor satırı: index_skipped

  • foreign keys

    veriden sonra ENABLE NOVALIDATE, ardından yetim satırlar için uyarıyla doğrulanır

    Anahtar yeni satırları hemen denetler ve en son doğrulanır; üst satırı olmayan satırlar varsa yüklemeyi durdurmak yerine anahtar bir uyarıyla doğrulanmamış kalır.

  • ON DELETE CASCADE that cascades in a cycle or along a second path

    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 tables the export doesn't create, and DISABLE or NOVALIDATE ones

    oluşturulmaz

    Bir anahtar, var olmayan bir tabloya başvuramaz ve Oracle'ın denetlemediği bir anahtarın üst satırı olmayan satırları olabilir.

    Rapor satırı: foreign_key_skipped

  • names longer than Oracle 12.1 allows

    kısaltılır

    Oracle adları 12.2'den itibaren 128 bayt tutar; daha uzun bir ad kısaltılır.

    Rapor satırı: name_shortened

  • partitioned tables

    her bölümün satırlarını içeren tek tablo

    Satırlar aynıdır; gerekiyorsa tabloyu Oracle'da yeniden bölümleyin.

    Rapor satırı: partitions_dropped

  • several schemas in one export

    tek şema, tabloların adı önce şemalarının adıyla başlar

    Betik, onu çalıştıran kullanıcının şemasına yüklenir; bu yüzden farklı şemaların tablolarının başına şemanın adı eklenir; tek şemalık bir dışa aktarım tablolarının adlarını korur.

    Rapor satırı: schemas_merged

  • NOT NULL columns with values that become NULL

    NOT NULL kaldırılır

    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

  • views, synonyms, types, packages, procedures, functions and other triggers

    raporda listelenir

    Kodları PL/SQL ile yazılmıştır, bu yüzden yeniden oluşturmanız için listelenirler.

    Rapor satırı: not_converted_objects

  • exports without CREATE TABLE (data only)

    değerlerden okunan türler

    Yalnızca veri içeren bir dışa aktarımda yalnızca satırlar vardır, bu yüzden türler değerlerden gelir.

    Rapor satırı: no_schema

  • expressions in INSERT values other than the ones exports write

    NULL

    Veritabanı çalıştırmayan bir dönüştürücü bunları hesaplayamaz; dışa aktarımların yazdığı to_date, to_timestamp, TO_CLOB, HEXTORAW ve diğerleri okunur.

    Rapor satırı: expression_value

  • types IntoSQL doesn't know, and object types

    CLOB

    Metin her değeri tutar; yüklemeden sonra türü değiştirin.

    Rapor satırı: unknown_type

  • dates before year 1 and time zones given as region names

    NULL

    Tarih olmayan bir değer NULL olur ve rapor onu sayar.

    Rapor satırı: date_out_of_range

  • NaN and Infinity in BINARY_FLOAT and BINARY_DOUBLE

    NaN ve Infinity korunur

    Oracle'ın kayan noktalı türleri NaN ve sonsuzluğu tutar.

  • NUL characters 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 encoding

    hatalı baytlar yerine koyma karakteri olarak

    Betik UTF-8'dir ve her değer geçerli metin olmalıdır.

    Rapor satırı: invalid_utf8_replaced

  • text decoded twice (ñ)

    olduğu gibi kopyalanır

    Betik tam olarak bu karakterleri içerir, bu yüzden kopyalanırlar; rapor onları gösterir.

    Rapor satırı: mojibake_suspected

DosyadaBetikteRapor satırı
BOOLEAN (23ai)23ai'de BOOLEAN, değilse 0 ve 1'i denetleyen bir CHECK ile NUMBER(1)TRUE ve FALSE, true ve false olarak kalır.
VARCHAR2(n BYTE|CHAR), NVARCHAR2(n), CHAR(n), NCHAR(n), CLOB, NCLOB, LONGBYTE veya CHAR uzunluklarıyla aynı türlerAynı metin türleri; LONG, 8'den beri her sürümün tercih ettiği CLOB olur.
VARCHAR2 and NVARCHAR2 past what the target's own types holdher değer 4000 bayta sığıyorsa VARCHAR2(4000 CHAR), değilse CLOBBir VARCHAR2 varsayılan olarak 4000 bayt tutar ve Oracle bir CLOB'u indeksleyemez; bu yüzden metin, değerleri sığıyorsa VARCHAR2 olarak kalır, sığmıyorsa CLOB olur.text_as_lob
NUMBER, NUMBER(p,s), FLOAT(b)aynı NUMBER türleriHer basamağıyla aynı NUMBER ve FLOAT türleri.
INTERVAL YEAR TO MONTH, INTERVAL DAY TO SECONDaynı INTERVAL türleriAynı interval değerleri.
DATE, TIMESTAMP(p)bildirildiği gibi DATE ve TIMESTAMP(p)Aynı türler, bu yüzden her tarih saatini saniyesine kadar korur.
TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONEaynı türlerOracle -12:00 ile +14:00 arasındaki farkları tutar; farkı -12:00'ın ötesinde olan bir değer UTC'de yazılır, an aynıdır.
JSON (21c), and CLOB holding JSON21c ve sonrasında JSON, değilse CLOBAynı JSON değerleri; dışa aktarımın 'null' olarak yazdığı bir SQL NULL, NULL olarak kalır.
BLOB, RAW(n), LONG RAWaynı türler; LONG RAW, BLOB olarakBaytlar bayt olarak kalır.
ROWID, UROWID, XMLTYPE, SDO_GEOMETRYmetinleriyle CLOBXMLTYPE, ROWID ve UROWID metinlerini bir CLOB içinde korur, böylece betik 19c'den itibaren her sürümde yüklenir.type_replaced
collations that ignore case (BINARY_CI)tam karşılaştırmaSütun harmanlamaları yazılmaz, bu yüzden büyük/küçük harfi yok sayan bir sütun (BINARY_CI) artık Ana ile ana'yı ayırt eder.case_insensitive_collation
identity columns, and a sequence a BEFORE INSERT trigger assignsen yüksek id'den sonra devam eden GENERATED BY DEFAULT ON NULL AS IDENTITYKopyalanan id'ler olduğu gibi yüklenir ve sayaç en yüksek id'den sonra devam eder. Bir tetikleyicinin bir sequence'tan doldurduğu sütun (12c öncesi yöntem) da kimlik sütunu olur.
identity columns the target can't countdüz bir tam sayıOracle tablo başına tek kimlik sütunu sayar; diğerleri değerlerini sayaçsız korur.counter_dropped
CREATE SEQUENCEaynı seçeneklerle CREATE SEQUENCEDışa aktarım, bir sequence'ın ulaştığı değeri START WITH olarak yazar; böylece oradan devam eder.
virtual columns (GENERATED ALWAYS AS ... VIRTUAL)sanal sütunlarAynı sanal sütunlar.stored_as_virtual
virtual columns with functions IntoSQL doesn't write, and the || operatordüz bir sütunOracle için yazılamayan bir formül düz bir sütun ve bir rapor satırı bırakır; dışa aktarımın sanal sütunlar için yazdığı değerler dışarıda bırakılır ve Oracle bunları hesaplayamaz.generated_not_translated
defaults with functions IntoSQL doesn't write (SYS_GUID(), ||)varsayılan değer yokYazılamayan bir varsayılan değer dışarıda bırakılır ve raporlanır.default_not_translated
CHECK constraintsçevrilirAynı CHECK kısıtları, her satır yüklenirken denetlenir.
CHECK constraints with functions IntoSQL doesn't writeoluşturulmazYazılamayan bir CHECK kısıtı dışarıda bırakılır ve raporlanır.check_skipped
CHECK constraints that are DISABLE or ENABLE NOVALIDATEoluşturulmazOracle bu CHECK kısıtlarını zaten var olan satırlara uygulamaz, bu yüzden satırlar onları ihlal edebilir.check_not_enforced
function-based, bitmap and domain indexesoluşturulmazIntoSQL tüm sütunlar üzerinde b-tree indeksler yazar; diğerlerini yüklemeden sonra yeniden oluşturun.index_skipped
foreign keysveriden sonra ENABLE NOVALIDATE, ardından yetim satırlar için uyarıyla doğrulanırAnahtar yeni satırları hemen denetler ve en son doğrulanır; üst satırı olmayan satırlar varsa yüklemeyi durdurmak yerine anahtar bir uyarıyla doğrulanmamış kalır.
ON DELETE CASCADE that cascades in a cycle or along a second pathkaldırılırOracle'ın yabancı anahtarları yalnızca silmede, CASCADE veya SET NULL ile işlem yapar.foreign_key_action_unsupported
foreign keys to tables the export doesn't create, and DISABLE or NOVALIDATE onesoluşturulmazBir anahtar, var olmayan bir tabloya başvuramaz ve Oracle'ın denetlemediği bir anahtarın üst satırı olmayan satırları olabilir.foreign_key_skipped
names longer than Oracle 12.1 allowskısaltılırOracle adları 12.2'den itibaren 128 bayt tutar; daha uzun bir ad kısaltılır.name_shortened
partitioned tablesher bölümün satırlarını içeren tek tabloSatırlar aynıdır; gerekiyorsa tabloyu Oracle'da yeniden bölümleyin.partitions_dropped
several schemas in one exporttek şema, tabloların adı önce şemalarının adıyla başlarBetik, onu çalıştıran kullanıcının şemasına yüklenir; bu yüzden farklı şemaların tablolarının başına şemanın adı eklenir; tek şemalık bir dışa aktarım tablolarının adlarını korur.schemas_merged
NOT NULL columns with values that become NULLNOT NULL kaldırılırDeğerleri NULL olmak zorunda kalan bir sütun NOT NULL kısıtını koruyamaz, yoksa yükleme durur.not_null_relaxed
views, synonyms, types, packages, procedures, functions and other triggersraporda listelenirKodları PL/SQL ile yazılmıştır, bu yüzden yeniden oluşturmanız için listelenirler.not_converted_objects
exports without CREATE TABLE (data only)değerlerden okunan türlerYalnızca veri içeren bir dışa aktarımda yalnızca satırlar vardır, bu yüzden türler değerlerden gelir.no_schema
expressions in INSERT values other than the ones exports writeNULLVeritabanı çalıştırmayan bir dönüştürücü bunları hesaplayamaz; dışa aktarımların yazdığı to_date, to_timestamp, TO_CLOB, HEXTORAW ve diğerleri okunur.expression_value
types IntoSQL doesn't know, and object typesCLOBMetin her değeri tutar; yüklemeden sonra türü değiştirin.unknown_type
dates before year 1 and time zones given as region namesNULLTarih olmayan bir değer NULL olur ve rapor onu sayar.date_out_of_range
NaN and Infinity in BINARY_FLOAT and BINARY_DOUBLENaN ve Infinity korunurOracle'ın kayan noktalı türleri NaN ve sonsuzluğu tutar.
NUL characters in textkorunurVARCHAR2 ve CLOB bir NUL karakteri tutabilir, bu yüzden değer olduğu gibi kopyalanır.
text that isn't valid in its encodinghatalı baytlar yerine koyma karakteri olarakBetik UTF-8'dir ve her değer geçerli metin olmalıdır.invalid_utf8_replaced
text decoded twice (ñ)olduğu gibi kopyalanırBetik tam olarak bu karakterleri içerir, bu yüzden kopyalanırlar; rapor onları gösterir.mojibake_suspected

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 @oracle.oracle.sql

Yabancı 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 Oracle 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:

  • SQL Developer'da DDL ve Insert veri biçimiyle Tools, Database Export'u seçin. SQLcl aynısını SET SQLFORMAT INSERT ile yazar.
  • Dışa aktarmadan önce ALTER SESSION SET NLS_DATE_FORMAT = 'SYYYY-MM-DD HH24:MI:SS' çalıştırın: varsayılan biçim tarihleri saatleri ve yüzyılları olmadan yazar.
  • exp veya expdp ile alınan bir .dmp dosyası ikilidir: dosyayı bir Oracle veritabanına, örneğin Docker'daki Oracle Database Free'ye içe aktarın ve SQL Developer ile dışa aktarın.

Neler dönüştürülmez

Oracle kendi dilinde yazılmış görünümler, tetikleyiciler, yordamlar, fonksiyonlar ve diğer nesneler raporda adlarıyla listelenir, asla sessizce atlanmaz; böylece yeniden oluşturmadan önce her birini yüklediğiniz Oracle sürümüyle karşılaştırabilirsiniz.

Oracle sürümleri arasında taşıma 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.

exp veya expdp ile alınan bir .dmp dosyasını dönüştürebilir miyim?

Doğrudan değil: Data Pump ve özgün Export, yalnızca Oracle'ın okuyabildiği ikili bir biçim yazar. Dosyayı herhangi bir Oracle veritabanına içe aktarın (Oracle Database Free Docker'da çalışır) ve SQL Developer'ın Database Export aracıyla veya SQLcl ile dışa aktarın. Dönüştürücü bir .dmp dosyası aldığında bunu söyler.

Dışa aktarım hangi Oracle sürümlerinden gelebilir?

Oracle 11g ve sonrasından, DBMS_METADATA tablo tanımlarıyla SQL Developer ve SQLcl dışa aktarımları. Her test dışa aktarımı Amerikan, Alman ve ISO oturumlarında Oracle 21c ve 23ai'den gelir ve kaynağıyla hücre hücre karşılaştırılır.

NUMBER, DATE ve diğer Oracle türleri ne olur?

Olduğu gibi kalırlar: duyarlığıyla NUMBER, DATE, TIMESTAMP, interval'lar, uzunluklarıyla CHAR ve VARCHAR2, RAW ve LOB'lar. XMLTYPE ve JSON metinlerini bir CLOB içinde korur, böylece betik 19c'de yüklenir.

Kimlik sütunları ve sequence'lar korunuyor mu?

Evet. Kimlik sütunları ve sequence'lar olduğu gibi kalır ve dışa aktarımın ulaştıklarını söylediği değerden devam eder.

PL/SQL paketleri, saklı yordamlar ve tetikleyiciler ne olur?

Raporda adlarıyla listelenirler ve dönüştürülmezler; böylece tablolar yüklendikten sonra onları yeniden oluşturabilirsiniz.

Betik hangi Oracle sürümlerinde yüklenir?

Oracle 19c ve sonrası. Her test dışa aktarımı 21c ve 23ai üzerinde yüklenir ve bir sorun çıkarsa ilk hatada durur.