本文へスキップ
IntoSQL ホーム

Oracle を MariaDB に変換

SQL Developer の Database Export または SQLcl が書き出した、テーブルと Insert 文を含む .sql ファイルをドロップすると、同じテーブル、キー、インデックス、データを持つ MariaDB スクリプトをダウンロードできます。MariaDB がそのまま保持できない値と、引き継がないオブジェクトは、すべてレポートに記載されます。

ファイル
sqlshop_2024_oracle.sqlサンプルファイル、9.3 KB
データベース

18 行を変換、修正なし、却下なし

表示

shop_2024_oracle.sql のテーブルOracle のダンプ · SQL Developer で作成 · utf-8

  • customers8 行
    7 列
    idbigint not null
    namevarchar(100) not null
    emailvarchar(150) not null
    countrychar(2) not null
    is_activesmallint not null
    signed_updatetime
    created_atdatetime not null
  • orders10 行
    9 列
    idbigint not null
    customer_idbigint not null
    invoicebigint
    statusvarchar(10) not null
    totaldecimal(10,2) not null
    itemsint not null
    ordered_atdatetime not null
    shipped_atdatetime
    notevarchar(255)
-- Written by IntoSQL from a Oracle dump. Load it with: mariadb --default-character-set=utf8mb4 <database> < <file>
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
SET UNIQUE_CHECKS = 0;
SET SQL_MODE = 'NO_AUTO_VALUE_ON_ZERO,ALLOW_INVALID_DATES';

CREATE SEQUENCE `invoice_numbers` START WITH 1020 MINVALUE 1 INCREMENT BY 1;
CREATE TABLE `customers` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `name` varchar(100) NOT NULL,
  `email` varchar(150) NOT NULL,
  `country` char(2) NOT NULL DEFAULT 'US',
  `is_active` smallint NOT NULL DEFAULT 1,
  `signed_up` datetime,
  `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `customers_email_uk` (`email`),
  CONSTRAINT `check1` CHECK (`is_active` IN (0, 1))
) AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='People who bought at least once';

CREATE TABLE `orders` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `customer_id` bigint NOT NULL,
  `invoice` bigint DEFAULT (nextval(`invoice_numbers`)),
  `status` varchar(10) NOT NULL DEFAULT 'pending',
  `total` decimal(10,2) NOT NULL,
  `items` int NOT NULL DEFAULT 1,
  `ordered_at` datetime NOT NULL,
  `shipped_at` datetime,
  `note` varchar(255),
  PRIMARY KEY (`id`),
  KEY `orders_status_date_ix` (`status`,`ordered_at`),
  CONSTRAINT `check1` CHECK (`status` IN ('pending', 'paid', 'shipped', 'cancelled')),
  CONSTRAINT `orders_customer_fk` FOREIGN KEY (`customer_id`) REFERENCES `customers` (`id`)
) AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

INSERT INTO `customers` (`id`,`name`,`email`,`country`,`is_active`,`signed_up`,`created_at`) VALUES (1,'Ana Martínez','ana@example.com','MX',1,'2023-01-15 00:00:00','2023-01-15 10:24:00.000000');
INSERT INTO `customers` (`id`,`name`,`email`,`country`,`is_active`,`signed_up`,`created_at`) VALUES (2,'Zoë Müller','zoe@example.de','DE',1,'2023-02-03 00:00:00','2023-02-03 08:11:42.000000');
INSERT INTO `customers` (`id`,`name`,`email`,`country`,`is_active`,`signed_up`,`created_at`) VALUES (3,'José Peña','jose@example.es','ES',0,'2023-03-21 00:00:00','2023-03-21 19:05:17.000000');
INSERT INTO `customers` (`id`,`name`,`email`,`country`,`is_active`,`signed_up`,`created_at`) VALUES (4,'李雷','lilei@example.cn','CN',1,'2023-05-09 00:00:00','2023-05-09 02:40:00.000000');
INSERT INTO `customers` (`id`,`name`,`email`,`country`,`is_active`,`signed_up`,`created_at`) VALUES (5,'Noah O\'Brien','noah@example.ie','IE',1,NULL,'2023-06-30 14:00:00.000000');
INSERT INTO `customers` (`id`,`name`,`email`,`country`,`is_active`,`signed_up`,`created_at`) VALUES (6,'Amélie Laurent','amelie@example.fr','FR',1,'2024-01-02 00:00:00','2024-01-02 09:30:00.000000');
INSERT INTO `customers` (`id`,`name`,`email`,`country`,`is_active`,`signed_up`,`created_at`) VALUES (7,'Ravi Patel','ravi@example.in','IN',0,'2024-02-29 00:00:00','2024-02-29 23:59:59.000000');
INSERT INTO `customers` (`id`,`name`,`email`,`country`,`is_active`,`signed_up`,`created_at`) VALUES (8,'Sofia Rossi 🌻','sofia@example.it','IT',1,'2024-04-12 00:00:00','2024-04-12 12:12:12.000000');
INSERT INTO `orders` (`id`,`customer_id`,`invoice`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`) VALUES (1,1,1000,'shipped',129.9,3,'2024-03-01 10:00:00','2024-03-02 16:30:00',NULL);
INSERT INTO `orders` (`id`,`customer_id`,`invoice`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`) VALUES (2,2,1001,'paid',54,1,'2024-03-02 11:15:00',NULL,'Gift wrap 🎁');
INSERT INTO `orders` (`id`,`customer_id`,`invoice`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`) VALUES (3,1,1002,'cancelled',12.5,1,'2024-03-03 09:45:00',NULL,'Customer changed their mind');
INSERT INTO `orders` (`id`,`customer_id`,`invoice`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`) VALUES (4,4,1003,'shipped',980,12,'2024-03-05 02:10:00','2024-03-07 08:00:00','请小心轻放');
INSERT INTO `orders` (`id`,`customer_id`,`invoice`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`) VALUES (5,5,1004,'pending',45.75,2,'2024-03-08 17:20:00',NULL,'Leave at the door; ring twice');
INSERT INTO `orders` (`id`,`customer_id`,`invoice`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`) VALUES (6,6,1005,'shipped',310.4,5,'2024-03-10 13:00:00','2024-03-11 09:00:00','Fragile: "glass"');
INSERT INTO `orders` (`id`,`customer_id`,`invoice`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`) VALUES (7,8,1006,'paid',76.2,2,'2024-03-11 18:45:00',NULL,NULL);
INSERT INTO `orders` (`id`,`customer_id`,`invoice`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`) VALUES (8,2,1007,'paid',19.99,1,'2024-03-12 08:00:00',NULL,'Paid at the counter');
INSERT INTO `orders` (`id`,`customer_id`,`invoice`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`) VALUES (9,3,1008,'shipped',64,2,'2024-03-14 15:30:00',NULL,'Shipping date never recorded');
INSERT INTO `orders` (`id`,`customer_id`,`invoice`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`) VALUES (10,7,1009,'paid',1499,1,'2024-03-15 21:05:00',NULL,'C:\\Users\\ravi\\invoice.pdf');

SET UNIQUE_CHECKS = 1;
SET FOREIGN_KEY_CHECKS = 1;

修正

修正が必要な箇所はありませんでした。

ファイルはこのコンピューター上で変換され、アップロードされることはありません。

その他のサンプル:

Oracle から MariaDB で変わること

各行はコンバーターが適用するルールです。ルールによってデータが変わったときにレポートに書かれる行も示します。

  • BOOLEAN (23ai)

    tinyint(1)

    MariaDB には boolean 列がないため、TRUE と FALSE は 1 と 0 になります。

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

    1024 文字までは varchar(n)、それを超えると text 型

    Oracle がバイトと文字のどちらで数えていても、長さは文字数で数えるため、すべての値が収まります。

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

    decimal(p,s)、または bigint

    NUMBER はすべての桁を保ちます。精度のない NUMBER で値がすべて 18 桁以内の整数なら 64 ビット整数になり、負のスケールはその桁数を小数点の前に確保します。

  • INTERVAL YEAR TO MONTH, INTERVAL DAY TO SECOND

    Oracle のテキスト (+01-06 など) を持つ varchar(100)

    MariaDB の TIME は 838 時間までの期間を保持できますが、年や月はありません。テキストならすべての部分を保てます。

    レポートの行: type_replaced

  • DATE, TIMESTAMP(p)

    datetime(p)

    Oracle の DATE は秒までの時刻を持つため、日付と時刻になります。アメリカ式やドイツ式のセッションでのエクスポートは、日付を時刻や世紀なしで書き出します (DD-MON-RR)。これらを保つには ISO のセッション (SYYYY-MM-DD HH24:MI:SS) でエクスポートしてください。

  • TIMESTAMP(7) to TIMESTAMP(9)

    秒の小数は 6 桁、7 桁目は切り捨て

    MariaDB はマイクロ秒まで保持します。7 桁目 (100 ナノ秒) は丸めずに切り捨てるため、値が次の秒や日に繰り上がることはありません。

    レポートの行: fraction_cut

  • TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE

    UTC の datetime(p)

    MariaDB の TIMESTAMP は 2038 年までしか扱えないため、日時は UTC の datetime として保存します。各値のオフセットにかかわらず同じ時点です。

    レポートの行: moments_as_utc

  • JSON (21c), and CLOB holding JSON

    json

    JSON の値は同じです。エクスポートが 'null' と書き出した SQL の NULL は NULL のままです。

  • BLOB, RAW(n), LONG RAW

    binary(n)、varbinary(n)、blob 型

    バイトはバイトのままです。

  • ROWID, UROWID, XMLTYPE, SDO_GEOMETRY

    text

    Oracle 独自の型には同等の型がありません。値はテキストを保ち、ROWID の値も含まれますが、Oracle の外では意味を持ちません。

    レポートの行: type_replaced

  • collations that ignore case (BINARY_CI)

    厳密な比較 (utf8mb4_bin)

    テーブルは utf8mb4_bin を使うため、Oracle で区別されていた値は一意キーでも区別されます。大文字と小文字を区別しなかった列はその動作を失います。アクセントの規則はバージョンによって異なるため、どのバージョンでも Oracle と一致する _ci 照合順序はありません。

    レポートの行: case_insensitive_collation

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

    AUTO_INCREMENT、最大の ID の後から継続

    コピーした ID はそのまま読み込み、カウンターは最大の ID の後から続きます。トリガーがシーケンスから値を入れる列 (12c より前の方法) も IDENTITY 列になります。

  • identity columns the target can't count

    普通の整数

    MariaDB が採番するのはテーブルごとに 1 列だけで、キーの先頭の列です。それ以外の列はカウンターなしで値を保ちます。

    レポートの行: counter_dropped

  • CREATE SEQUENCE

    同じオプションの CREATE SEQUENCE

    エクスポートはシーケンスの現在位置を START WITH として書き出すため、そこから続きます。

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

    生成列、PERSISTED なら STORED、それ以外は VIRTUAL

    MariaDB は同じ式から計算します。エクスポートがこれらの列に書き出した値は含めません。

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

    普通の列

    MariaDB 用に書き換えられない式は、普通の列とレポートの 1 行になります。エクスポートが仮想列に書き出した値は含めず、MariaDB が計算する値もありません。

    レポートの行: generated_not_translated

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

    デフォルト値なし

    書き換えられないデフォルト値は含めず、レポートに記載します。

    レポートの行: default_not_translated

  • CHECK constraints

    変換済み

    チェック制約は同じで、各行の読み込み時に検証します。

  • CHECK constraints with functions IntoSQL doesn't write

    作成しない

    書き換えられないチェック制約は含めず、レポートに記載します。

    レポートの行: check_skipped

  • CHECK constraints that are DISABLE or ENABLE NOVALIDATE

    作成しない

    Oracle は既存の行にこれらのチェックを適用しないため、行が違反している可能性があります。

    レポートの行: check_not_enforced

  • function-based, bitmap and domain indexes

    作成しない

    IntoSQL が書き出すのは列全体に対する b-tree インデックスです。その他は読み込み後に作り直してください。

    レポートの行: index_skipped

  • foreign keys

    外部キー、FOREIGN_KEY_CHECKS=0 で読み込み

    行はどの順序でも読み込め、その後はキーが新しい行をチェックします。

  • foreign keys to tables the export doesn't create, and DISABLE or NOVALIDATE ones

    作成しない

    キーは存在しないテーブルを参照できません。また、Oracle がチェックしないキーには親のない行がある可能性があります。

    レポートの行: foreign_key_skipped

  • partitioned tables

    すべてのパーティションの行を持つ 1 つのテーブル

    行は同じです。必要なら MariaDB でもう一度テーブルをパーティション分割してください。

    レポートの行: partitions_dropped

  • several schemas in one export

    1 つのデータベース、テーブル名の先頭にスキーマ名

    MariaDB のスキーマはデータベースであり、1 つのデータベースに読み込むエクスポートでは作成できません。1 つのスキーマだけのエクスポートはテーブル名を保ちます。

    レポートの行: schemas_merged

  • NOT NULL columns with values that become NULL

    NOT NULL を削除

    値を NULL にする必要があった列は NOT NULL を保てません。保つと読み込みが止まります。

    レポートの行: not_null_relaxed

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

    レポートに記載

    コードが PL/SQL で書かれているため、作り直せるよう一覧にします。

    レポートの行: not_converted_objects

  • exports without CREATE TABLE (data only)

    値から読み取った型

    データのみのエクスポートには行しかないため、型は値から決まります。

    レポートの行: no_schema

  • expressions in INSERT values other than the ones exports write

    NULL

    データベースを実行しないコンバーターでは、これらを評価できません。エクスポートが書き出す to_date、to_timestamp、TO_CLOB、HEXTORAW などは読み取ります。

    レポートの行: expression_value

  • types IntoSQL doesn't know, and object types

    longtext

    text はどんな値も保持できます。読み込み後に型を変更してください。

    レポートの行: unknown_type

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

    NULL

    MariaDB が保存できるのは 1000 年から 9999 年までですが、Oracle は 1 年までさかのぼれます。それらの値は NULL になり、レポートで件数を示します。

    レポートの行: date_out_of_range

  • NaN and Infinity in BINARY_FLOAT and BINARY_DOUBLE

    NULL

    MariaDB の浮動小数点型には NaN や infinity がないため、それらの値は NULL になり、レポートで件数を示します。

    レポートの行: invalid_value_null

  • NUL characters in text

    保持

    値は NUL 文字をエスケープしてコピーします。

  • text that isn't valid in its encoding

    不正なバイトを置換文字に

    スクリプトは UTF-8 なので、すべての値が有効なテキストである必要があります。

    レポートの行: invalid_utf8_replaced

  • text decoded twice (ñ)

    そのままコピー

    スクリプトにはまさにこの文字が含まれているため、そのままコピーし、レポートで指摘します。

    レポートの行: mojibake_suspected

Oracle ではMariaDB ではレポートの行
BOOLEAN (23ai)tinyint(1)MariaDB には boolean 列がないため、TRUE と FALSE は 1 と 0 になります。
VARCHAR2(n BYTE|CHAR), NVARCHAR2(n), CHAR(n), NCHAR(n), CLOB, NCLOB, LONG1024 文字までは varchar(n)、それを超えると text 型Oracle がバイトと文字のどちらで数えていても、長さは文字数で数えるため、すべての値が収まります。
NUMBER, NUMBER(p,s), FLOAT(b)decimal(p,s)、または bigintNUMBER はすべての桁を保ちます。精度のない NUMBER で値がすべて 18 桁以内の整数なら 64 ビット整数になり、負のスケールはその桁数を小数点の前に確保します。
INTERVAL YEAR TO MONTH, INTERVAL DAY TO SECONDOracle のテキスト (+01-06 など) を持つ varchar(100)MariaDB の TIME は 838 時間までの期間を保持できますが、年や月はありません。テキストならすべての部分を保てます。type_replaced
DATE, TIMESTAMP(p)datetime(p)Oracle の DATE は秒までの時刻を持つため、日付と時刻になります。アメリカ式やドイツ式のセッションでのエクスポートは、日付を時刻や世紀なしで書き出します (DD-MON-RR)。これらを保つには ISO のセッション (SYYYY-MM-DD HH24:MI:SS) でエクスポートしてください。
TIMESTAMP(7) to TIMESTAMP(9)秒の小数は 6 桁、7 桁目は切り捨てMariaDB はマイクロ秒まで保持します。7 桁目 (100 ナノ秒) は丸めずに切り捨てるため、値が次の秒や日に繰り上がることはありません。fraction_cut
TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONEUTC の datetime(p)MariaDB の TIMESTAMP は 2038 年までしか扱えないため、日時は UTC の datetime として保存します。各値のオフセットにかかわらず同じ時点です。moments_as_utc
JSON (21c), and CLOB holding JSONjsonJSON の値は同じです。エクスポートが 'null' と書き出した SQL の NULL は NULL のままです。
BLOB, RAW(n), LONG RAWbinary(n)、varbinary(n)、blob 型バイトはバイトのままです。
ROWID, UROWID, XMLTYPE, SDO_GEOMETRYtextOracle 独自の型には同等の型がありません。値はテキストを保ち、ROWID の値も含まれますが、Oracle の外では意味を持ちません。type_replaced
collations that ignore case (BINARY_CI)厳密な比較 (utf8mb4_bin)テーブルは utf8mb4_bin を使うため、Oracle で区別されていた値は一意キーでも区別されます。大文字と小文字を区別しなかった列はその動作を失います。アクセントの規則はバージョンによって異なるため、どのバージョンでも Oracle と一致する _ci 照合順序はありません。case_insensitive_collation
identity columns, and a sequence a BEFORE INSERT trigger assignsAUTO_INCREMENT、最大の ID の後から継続コピーした ID はそのまま読み込み、カウンターは最大の ID の後から続きます。トリガーがシーケンスから値を入れる列 (12c より前の方法) も IDENTITY 列になります。
identity columns the target can't count普通の整数MariaDB が採番するのはテーブルごとに 1 列だけで、キーの先頭の列です。それ以外の列はカウンターなしで値を保ちます。counter_dropped
CREATE SEQUENCE同じオプションの CREATE SEQUENCEエクスポートはシーケンスの現在位置を START WITH として書き出すため、そこから続きます。
virtual columns (GENERATED ALWAYS AS ... VIRTUAL)生成列、PERSISTED なら STORED、それ以外は VIRTUALMariaDB は同じ式から計算します。エクスポートがこれらの列に書き出した値は含めません。
virtual columns with functions IntoSQL doesn't write, and the || operator普通の列MariaDB 用に書き換えられない式は、普通の列とレポートの 1 行になります。エクスポートが仮想列に書き出した値は含めず、MariaDB が計算する値もありません。generated_not_translated
defaults with functions IntoSQL doesn't write (SYS_GUID(), ||)デフォルト値なし書き換えられないデフォルト値は含めず、レポートに記載します。default_not_translated
CHECK constraints変換済みチェック制約は同じで、各行の読み込み時に検証します。
CHECK constraints with functions IntoSQL doesn't write作成しない書き換えられないチェック制約は含めず、レポートに記載します。check_skipped
CHECK constraints that are DISABLE or ENABLE NOVALIDATE作成しないOracle は既存の行にこれらのチェックを適用しないため、行が違反している可能性があります。check_not_enforced
function-based, bitmap and domain indexes作成しないIntoSQL が書き出すのは列全体に対する b-tree インデックスです。その他は読み込み後に作り直してください。index_skipped
foreign keys外部キー、FOREIGN_KEY_CHECKS=0 で読み込み行はどの順序でも読み込め、その後はキーが新しい行をチェックします。
foreign keys to tables the export doesn't create, and DISABLE or NOVALIDATE ones作成しないキーは存在しないテーブルを参照できません。また、Oracle がチェックしないキーには親のない行がある可能性があります。foreign_key_skipped
partitioned tablesすべてのパーティションの行を持つ 1 つのテーブル行は同じです。必要なら MariaDB でもう一度テーブルをパーティション分割してください。partitions_dropped
several schemas in one export1 つのデータベース、テーブル名の先頭にスキーマ名MariaDB のスキーマはデータベースであり、1 つのデータベースに読み込むエクスポートでは作成できません。1 つのスキーマだけのエクスポートはテーブル名を保ちます。schemas_merged
NOT NULL columns with values that become NULLNOT NULL を削除値を NULL にする必要があった列は NOT NULL を保てません。保つと読み込みが止まります。not_null_relaxed
views, synonyms, types, packages, procedures, functions and other triggersレポートに記載コードが PL/SQL で書かれているため、作り直せるよう一覧にします。not_converted_objects
exports without CREATE TABLE (data only)値から読み取った型データのみのエクスポートには行しかないため、型は値から決まります。no_schema
expressions in INSERT values other than the ones exports writeNULLデータベースを実行しないコンバーターでは、これらを評価できません。エクスポートが書き出す to_date、to_timestamp、TO_CLOB、HEXTORAW などは読み取ります。expression_value
types IntoSQL doesn't know, and object typeslongtexttext はどんな値も保持できます。読み込み後に型を変更してください。unknown_type
dates before year 1 and time zones given as region namesNULLMariaDB が保存できるのは 1000 年から 9999 年までですが、Oracle は 1 年までさかのぼれます。それらの値は NULL になり、レポートで件数を示します。date_out_of_range
NaN and Infinity in BINARY_FLOAT and BINARY_DOUBLENULLMariaDB の浮動小数点型には NaN や infinity がないため、それらの値は NULL になり、レポートで件数を示します。invalid_value_null
NUL characters in text保持値は NUL 文字をエスケープしてコピーします。
text that isn't valid in its encoding不正なバイトを置換文字にスクリプトは UTF-8 なので、すべての値が有効なテキストである必要があります。invalid_utf8_replaced
text decoded twice (ñ)そのままコピースクリプトにはまさにこの文字が含まれているため、そのままコピーし、レポートで指摘します。mojibake_suspected

スクリプトを MariaDB に読み込む

スクリプトはテーブルを作成して行をコピーしてから、キー、インデックス、外部キーを追加します。そのため読み込みが速く、最初のエラーで止まります。

mariadb --default-character-set=utf8mb4 mydb < oracle.mariadb.sql

外部キーはダンプが宣言するとおりに作成し、mysqldump と同様に、行の読み込み中は FOREIGN_KEY_CHECKS=0 にします。

大きなダンプでは、サーバーと同じマシンでクライアントを実行し、1 行がとても大きい場合は max_allowed_packet を上げてください。

IntoSQL Pro なら、デスクトップアプリやコマンドラインからファイルを MariaDB に直接読み込めます。スクリプトを書き出す必要はありません。

Oracle を最適な方法でダンプする

コンバーターはダンプの内容を読み取ります。次のオプションを使うと、より多くのデータがダンプに残ります。

  • SQL Developer で Tools、Database Export を選び、DDL と Insert データ形式を指定します。SQLcl では SET SQLFORMAT INSERT で同じものを書き出せます。
  • エクスポートの前に ALTER SESSION SET NLS_DATE_FORMAT = 'SYYYY-MM-DD HH24:MI:SS' を実行してください。デフォルトの形式では日付が時刻や世紀なしで書き出されます。
  • exp や expdp の .dmp ファイルはバイナリです。Oracle データベース (たとえば Docker 上の Oracle Database Free) にインポートし、SQL Developer でエクスポートしてください。

変換されないもの

ビュー、パッケージ、プロシージャ、関数、トリガー、型、シノニムは PL/SQL で書かれています。黙って削除することはなく、レポートに名前で一覧するので、MariaDB 向けに書き直せます。

Oracle から MariaDB への変換に関する質問

ここに答えがない場合は、お問い合わせページからご連絡ください。担当者が返信します。 お問い合わせページ

ダンプはアップロードされますか?

いいえ。コンバーターはブラウザ上で動作し、ダンプをディスクから少しずつ読み込むため、ダンプがコンピューターの外に出ることはありません。デスクトップアプリとコマンドラインも、お使いのコンピューター上で変換します。

ダンプはどのくらいの大きさまで扱えますか?

コンバーターはダンプ全体をメモリに保持しません。ファイルを範囲ごとに 2 回読み、読みながらスクリプトを書き出します。数 GB のダンプも、ブラウザ、デスクトップアプリ、コマンドラインで変換できます。

exp や expdp の .dmp ファイルは変換できますか?

直接はできません。Data Pump と従来の Export は Oracle だけが読めるバイナリ形式で書き出します。任意の Oracle データベース (Oracle Database Free は Docker で動きます) にインポートし、SQL Developer の Database Export または SQLcl でエクスポートしてください。.dmp ファイルを受け取ると、コンバーターがその旨を表示します。

どの Oracle バージョンのエクスポートに対応していますか?

Oracle 11g 以降から SQL Developer と SQLcl で書き出した、DBMS_METADATA のテーブル定義を含むエクスポートです。すべてのテスト用エクスポートは Oracle 21c と 23ai でアメリカ式、ドイツ式、ISO のセッションから作成し、ソースとセル単位で比較しています。

NUMBER、DATE などの Oracle の型はどうなりますか?

NUMBER は decimal に、整数なら bigint、65 桁を超えるとテキストになります。DATE は時刻を保ったまま datetime に、CLOB は longtext、BLOB は blob になり、interval は Oracle のテキストを保ちます。NaN と Infinity は NULL になり、レポートで件数を示します。

IDENTITY 列とシーケンスは保たれますか?

はい。IDENTITY 列は AUTO_INCREMENT になり、最大の ID の後から続きます。シーケンスは MariaDB のシーケンスになり、シーケンスを使うデフォルト値もそのまま使い続けます。

PL/SQL のパッケージ、プロシージャ、トリガーはどうなりますか?

データベースごとに独自の言語で書かれるため、変換はせず、レポートに名前で一覧します。

スクリプトはどの MariaDB バージョンで読み込めますか?

MariaDB 10.11 以降です。すべてのテスト用エクスポートを 10.11 と 11.4 で読み込み、問題があれば最初のエラーで止まります。