ホームページ  >  記事  >  データベース  >  MySQL を KingbaseESV8R2 に移行する方法

MySQL を KingbaseESV8R2 に移行する方法

WBOY
WBOY転載
2023-05-31 14:54:371735ブラウズ

    1. Oracle 転送を使用する

    KingbaseESV8R2 は Oracle からの移行のみをサポートしているため、最初に MySQL を Oracle に移行します。

    Oracle への移行の問題:
    1.Oracle ではテーブル名に最大 30 桁の制限があります
    2.無効な 16 進数、無効な 16 進数##3。テーブル データが空で、「
    4 に NULL を挿入できません。インデックス名が長すぎます。

    MySQL を Oracle に移行するときは問題が多く、調整が非常に面倒です。Oracle が移行するときは、 Kingbase に移行すると、テーブルの移行が機能しない場合があります。成功しますが、複数回試行すると再び成功する可能性があります。

    2. KingbaseESV8R3 転送を使用する

    Jincang 技術スタッフに連絡したところ、新しいバージョン V8R3 があることがわかりましたが、実稼働環境では使用できず、テストには使用できます。また、MySQL の V8R3 への直接移行をサポートします。

    したがって、仮想マシンを再インストールする必要があります。インストール プロセス中に、R2 と R3 を同時にインストールしたり、データ移行に R3 移行ツールを使用したりすることはできません。ビュー、インデックス、外部キー、デフォルト値などの設定を移行するには、ソース データベースを移行するときに [すべて選択] を選択してください。

    MySQL を KingbaseESV8R2 に移行する方法

    V8R3 への移行時の問題: 1.tinyint(1) は、すでにマッピングされていたとしても、移行後にブール値にマッピングされます。移行ツールですが、同じです。
    したがって、移行後、テーブルのフィールド タイプを変更する必要があります。デフォルト値がある場合は、デフォルト値も変更する必要があります。

    MySQL を KingbaseESV8R2 に移行する方法

    注釈には移行プロセス中に選択された場合は、デフォルト値が使用されます。オブジェクト マネージャーは依然としてフィールドのコメントを表示できません。テーブル名の上にマウスを置くと、テーブルのコメントが表示されます。まだ見る方法がありません。

    tinyint(1) の問題を修正した後、R3 オブジェクト マネージャーで論理バックアップ用のデータベースを選択できます。

    次に、R2 のオブジェクト マネージャーを使用して論理復元を実行します。

    3. その他の質問

    1.自動インクリメント

    MySQL の自動インクリメントは Kingbase の自動インクリメントとは異なります。Kingbase の自動インクリメントは Oracle と同じです。シーケンスを定義することで実装されます。

    現在転送に kingbaseV8R3 を使用している場合、mysql を r3 に移行すると、シーケンスを作成し、フィールドのデフォルト値を入力して自動インクリメントを実現できます。

    以下は自動インクリメントを手動で使用する方法です:

    最初に SEQUENCE を作成し、test_id_SEQ という名前を付け、開始値を 101

    CREATE SEQUENCE test_id_SEQ START 101;

    に設定してから追加します。自動インクリメントが必要なフィールド デフォルト値に

    NEXTVAL('test_id_SEQ'::REGCLASS)

    を追加し、insert ステートメントを使用すると、テスト テーブルのフィールド ID は 101

    INSERT INTO test (name) values('1');

    から増加し始めます。シーケンスを削除する前に、フィールドのデフォルト値を削除する必要があります。シーケンス

    DROP SEQUENCE test_id_SEQ

    2.uuid

    kingbase には uuid 関数がなく、実行エラー

    select replace(uuid(), '-', '') as id from dual

    が発生します。とりあえず

    select SYS_GUID_NAME() as id from dual;

    に置き換えました 結局、mysql と kingbase の uuid 生成ルールの違い

    4. SQL の問題発見

    1. `distinguishing キーワードは使えません

    2.関数 IFNULL は NVL

    3 に変更されます。すべてのフィールドはグループ by

    4 に表示される必要があります。sql は表示できません

    !='', エラーは報告されませんが、実行結果は null です。Kingbase では、空の文字列は null

    5. 関数 IF は NVL2 に変更されます。Kingbase は null かどうかのみ判断できます

    6. フィールドの型は文字列ですが、時刻が保存されているため、時刻をフォーマットしたいと考えています。まず時刻をタイムスタンプに変換してから、文字列

    SELECT to_char(to_timestamp('2020-02-20 15:35:44', 'YYYY-MM-DD HH24:MI:SS'),'MM-DD')

    7 にフォーマットする必要があります。二重引用符

    "" は使用できません。一重引用符 ''# を使用してください。 8 の代わりに ## を使用します。

    count('')

    9 は使用できません。時刻の書式設定、加算および減算

    limit_time = limit_time (現在) () - apply_time)

    MySQL:

    limit_time = date_add( limit_time, INTERVAL ( SELECT TimeStampDiff( DAY, now(), apply_time ) ) + 1 DAY )

    Kingbase: 問題は時間と文字列の変換にあります。まずタイムスタンプを文字列にフォーマットし、次に時間を追加または加算するために変換し直します。減算

    limit_time = limit_time + (to_date(to_char(now(),'YYYY-MM-DD'),'YYYY-MM-DD') - to_date(to_char(apply_time,'YYYY-MM-DD'),'YYYY-MM-DD') + integer '1')

    10. テーブル名とシステム ビューは同じ名前の可能性があるため、

    スキーマ名を追加します。テーブル名

    を区別するために 11. is_delete = false に変更しますフィールド値が 0 の場合、false は使用できません。

    以上がMySQL を KingbaseESV8R2 に移行する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    声明:
    この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。