sql >> データベース >  >> RDS >> MariaDB

OracleデータベースからMariaDBへの移行-詳細

    以前のブログでは、OracleからMySQL / Percona Serverに移行する方法と、最近ではOracleDatabaseからMariaDBに移行する方法-知っておくべきこと

    のトピックについて説明しました。

    何年にもわたって、MySQLとMariaDBの新しいバージョンがリリースされると、両方のプロジェクトは2つの非常に異なるRDBMSプラットフォームに完全に逸脱しました。

    MariaDBとMySQLは、特に最新バージョンであるMySQL8.0とMariaDB10.3 GAおよびその10.4(現在はRC候補)の登場により、互いに大きく異なります。

    MariaDB TX 3.0のリリースでは、MariaDBはMySQLのドロップイン代替品ではなくなったため、多くの人を驚かせました。これにより、Oracleデータベースとの新しいレベルの互換性が導入され、現在、Oracleだけでなく、IBMDB2やEnterpriseDBなどの他のエンタープライズおよびプロプライエタリデータベースの真の代替手段になりつつあります。

    MariaDBバージョン10.3から、システムバージョンのテーブルや、Oracle DBAにとって最も魅力的な、PL / SQLのサポートなどの重要な機能が導入されました!

    MariaDBのWebサイトによると、従来のOracle PL / SQLの約80%は、コードを書き直すことなく移行できます。 MariaDBにはColumnStoreもあります。これは、新しい分析エンジンであり、ビッグデータ分析などの分散型超並列処理(MPP)用に設計された列型ストレージエンジンです。

    MariaDBチームは、PL/SQLのサポートを追加するために一生懸命取り組んできました。 OracleからMariaDBへの移行がさらに簡単になります。計画された移行の参照ポイントとして、MariaDBから次の参照を確認できます。以前のブログによると、これは長いプロセスであるため、移行の全体的なプロセスをカバーしていません。ただし、移行プロセスのガイドとして役立つ十分な背景情報が提供されることを願っています。

    計画および開発戦略

    DBAにとって、OracleデータベースからMariaDBに移行する場合、このような移行は、移行や適応がそれほど難しくないはずの多くの同様の要因を意味します。 MariaDBはWindowsサーバーで操作でき、Windowsプラットフォームでダウンロード可能なバイナリがあります。 Oracle for OLAP(Online Analytical Processing)またはビジネスインテリジェンスを使用している場合、MariaDBにはColumnStoreもあります。これは、OracleのDatabaseIn-Memory列ストアに相当します。

    MySQL / Percona Serverと同じように、Data Guard ++ Oracle RAC(Real Application Cluster)を備えたMAA(Maximum Available Architecture)を備えたOracleアーキテクチャを使用することに慣れている場合は、MariaDBで同期レプリケーションから選択できます。同期、または非同期レプリケーション。

    高可用性ソリューションの場合、MariaDBには、使用できるメインオプションとしてMaxscaleがあります。 MaxScaleをKeepalivedおよびHAProxyと混在させることができます。たとえば、ClusterControlはこれを効率的に管理でき、MariaDBの製品であるMariaDBTXが新しく登場した場合でも管理できます。 ClusterControlがこれを効率的に管理する方法の詳細については、以前のブログを参照してください。

    MariaDBはオープンソーステクノロジーであるため、この質問は「どのようにサポートを受けるのですか?」と見なされます。

    サポートオプションを選択するときは、データベースに限定されないことを確認する必要がありますが、スケーラビリティ、冗長性、復元力、バックアップ、高可用性、セキュリティ、監視/監視可能性、リカバリ、およびミッションクリティカルなシステムへの関与に関する専門知識をカバーする必要があります。全体として、選択するサポートは、データの機密性を公開することなく、アーキテクチャの設定を理解する必要があります。

    さらに、MariaDBには、世界中に非常に大規模で協調的なコミュニティがあります。問題が発生し、このコミュニティに関係する人々に質問したい場合は、IRCクライアント(インターネットリレーチャット)を介してFreenodeを試すか、コミュニティページにアクセスするか、メーリングリストに参加してください。

    評価または予備チェック

    構成やセットアップファイル、カーネルチューニング、自動化スクリプトなどのデータのバックアップを検討する必要があります。これは明らかな作業ですが、移行する前に、特に別のプラットフォームに移動する場合は、必ず最初にすべてを保護してください。

    また、アプリケーションが最新のソフトウェアエンジニアリング規則に従っていることを評価し、プラットフォームに依存しないことを確認する必要があります。これらの方法は、特に別のデータベースプラットフォームに移行する場合に役立ちます。

    MariaDBはオープンソーステクノロジーであるため、MariaDBで使用可能なコネクタが何であるかを確認してください。さまざまな利用可能なクライアントライブラリがあるため、これは今のところ非常に簡単です。これらのクライアントライブラリのリストについては、こちらを確認してください。それとは別に、利用可能なクライアントとユーティリティのページのこのリストも確認できます。

    最後に、ハードウェア要件を確認してください。

    MariaDBには特定の要件はありません。一般的なコモディティサーバーは機能しますが、それは必要なパフォーマンスの量によって異なります。ただし、分析アプリケーションまたはデータウェアハウスアプリケーションでColumnStoreを使用している場合は、それらのドキュメントを確認してください。彼らのページから、AWSの場合、費用対効果の高い中間点としてm4.4xlargeインスタンスタイプを使用してこれをテストしました。 R4.8xlargeもテストされており、約2倍の価格で約2倍の速度で動作します。

    知っておくべきこと

    MySQLと同じように、MariaDBでは複数のデータベースを作成できますが、Oracleには同じ機能がありません。

    MariaDBでは、スキーマはデータベースと同義です。 MariaDB SQL構文では、DATABASEの代わりにキーワードSCHEMAを使用できます。たとえば、 CREATE SCHEMAを使用します CREATE DATABASEの代わりに;オラクルはこれを区別しています。スキーマは、データベースの一部、つまり1人のユーザーが所有するテーブルやその他のオブジェクトのみを表します。通常、インスタンスとデータベースの間には1対1の関係があります。

    たとえば、Oracleで同等のレプリケーション設定(Real Application ClustersやRACなど)では、複数のインスタンスが単一のデータベースにアクセスします。これにより、複数のサーバーでOracleを起動し、すべて同じデータにアクセスできます。ただし、MariaDBでは、複数のインスタンスから複数のデータベースへのアクセスを許可でき、MariaDBノードに複製できるデータベース/スキーマを除外することもできます。

    以前のブログの1つ(これとこれ)を参照すると、インターネット上にある利用可能なツールを使用してデータベースを変換する場合にも同じ原則が適用されます。

    OracleデータベースをMariaDBに100%変換できるツールはありませんが、MariaDBにはRed Rover Migration Practiceがあります。これは、MariaDBが提供するサービスであり、無料ではありません。

    MariaDBは、Oracleの互換性に関するMariaDBとのコラボレーションの結果として、Development Bank of Singapore(DBS)での移行について話します。ミッションクリティカルなアプリケーションの50%以上を、わずか12か月でOracleDatabaseからMariaDBに移行することができました。

    ただし、いくつかのツールを探している場合は、SQLinesSQLConverterおよびSQLinesDataToolであるsqlinesツールがシンプルでありながら操作可能なツールのセットを提供します。

    以下のセクションでは、移行と論理SQLの結果の検証に関して知っておく必要のある事項についてさらに概説します。

    データ型マッピング

    MySQLとMariaDBは、使用可能な同じデータ型を共有します。実装方法にはさまざまなバリエーションがありますが、MariaDBのデータ型のリストはここで確認できます。

    MySQLはJSONデータ型を使用しますが、MariaDBはLONG​​TEXTデータ型の単なるエイリアスであるため異なります。 MariaDBには、CHECK制約式内で使用できる関数JSON_VALIDもあります。

    したがって、MariaDBに対するMySQLのデータ型はそれほど逸脱しないため、ここでの情報に基づいて以下の表形式のプレゼンテーションを使用しますが、MariaDB10.3でROWデータ型が導入されたため変更を追加しました。 PL/SQL互換性機能の一部として0。

    以下の表を確認してください:

    日時
    Oracle MySQL
    1 BFILE バイナリファイルへのポインタ、⇐4G VARCHAR(255)
    2 BINARY_FLOAT 32ビット浮動小数点数 フロート
    3 BINARY_DOUBLE 64ビット浮動小数点数 DOUBLE
    4 BLOB バイナリラージオブジェクト、⇐4G LONGBLOB
    5 CHAR(n)、CHARACTER(n) 固定長文字列、1⇐n⇐255 CHAR(n)、CHARACTER(n)
    6 CHAR(n)、CHARACTER(n) 固定長文字列、256⇐n⇐2000 VARCHAR(n)
    7 CLOB キャラクターラージオブジェクト、⇐4G LONGTEXT
    8 日付 日時
    9 DECIMAL(p、s)、DEC(p、s) 固定小数点数 10進数(p、s)、DEC(p、s)
    10 倍精度 浮動小数点数 倍精度
    11 FLOAT(p) 浮動小数点数 DOUBLE
    12 INTEGER、INT 38桁の整数 INT 10進数(38)
    13 INTERVAL YEAR(p)TO MONTH 日付間隔 VARCHAR(30)
    14 間隔日(p)から2番目まで 曜日と時間の間隔 VARCHAR(30)
    15 長い キャラクターデータ、⇐2G LONGTEXT
    16 LONG RAW バイナリデータ、⇐2G LONGBLOB
    17 NCHAR(n) 固定長UTF-8文字列、1⇐n⇐255 NCHAR(n)
    18 NCHAR(n) 固定長UTF-8文字列、256⇐n⇐2000 NVARCHAR(n)
    19 NCHAR VARYING(n) 可変長UTF-8文字列、1⇐n⇐4000 NCHAR VARYING(n)
    20 NCLOB 可変長Unicode文字列、⇐4G NVARCHAR(max)
    21 NUMBER(p、0)、NUMBER(p) 8ビット整数、1 <=p <3 TINYINT (0〜255)
    16ビット整数、3 <=p <5 SMALLINT
    32ビット整数、5 <=p <9 INT
    64ビット整数、9 <=p <19 BIGINT
    固定小数点数、19 <=p <=38 10進数(p)
    22 NUMBER(p、s) 固定小数点数、s> 0 10進数(p、s)
    23 NUMBER、NUMBER(*) 浮動小数点数 DOUBLE
    24 NUMERIC(p、s) 固定小数点数 NUMERIC(p、s)
    25 NVARCHAR2(n) 可変長UTF-8文字列、1⇐n⇐4000 NVARCHAR(n)
    26 RAW(n) 可変長のバイナリ文字列、1⇐n⇐255 BINARY(n)
    27 RAW(n) 可変長のバイナリ文字列、256⇐n⇐2000 VARBINARY(n)
    28 本物 浮動小数点数 DOUBLE
    29 ROWID 物理的な行のアドレス CHAR(10)
    したがって、PL / SQLとの互換性のために、ROW(<フィールド名><データ型>[{、<フィールド名><データ型>})を使用できます。 ..])
    30 SMALLINT 38桁の整数 10進数(38)
    31 TIMESTAMP(p) 分数付きの日付と時刻 DATETIME(p)
    32 TIMESTAMP(p)WITH TIME ZONE 分数とタイムゾーンを含む日付と時刻 DATETIME(p)
    33 UROWID(n) 論理行アドレス、1⇐n⇐4000 VARCHAR(n)
    34 VARCHAR(n) 可変長文字列、1⇐n⇐4000 VARCHAR(n)
    35 VARCHAR2(n) 可変長文字列、1⇐n⇐4000 VARCHAR(n)
    36 XMLTYPE XMLデータ LONGTEXT

    データ型の属性とオプション:

    Oracle MySQL
    BYTEおよびCHAR列サイズのセマンティクス サイズは常に文字数です

    トランザクション

    MariaDBは、以前のバージョンから10.1までのXtraDBを使用し、バージョン10.2以降はInnoDBに移行しました。ただし、MyRocksストレージエンジンなどのトランザクションを処理するための代替選択肢として、さまざまなストレージエンジンを使用できます。

    デフォルトでは、MariaDBのautocommit変数はONに設定されています。つまり、変更を無視したり、SAVEPOINTを利用したりするために、ROLLBACKを利用するには、トランザクションステートメントを明示的に処理する必要があります。

    これは、コミット、ロールバック、およびセーブポイントに関してOracleが使用するのと基本的に同じ概念です。

    明示的なトランザクションの場合、これは START TRANSACTION/BEGIN;を使用する必要があることを意味します。 ;コミット; 構文。

    それ以外の場合、自動コミットを無効にする必要がある場合は、データの変更が必要なステートメントに対して常に明示的にコミットする必要があります。

    デュアルテーブル

    MariaDBにはOracleとの二重の互換性があります。これは、ダミーテーブル、つまりDUALを使用したデータベースの互換性を目的としています。 FROM句が必須ではないMySQLとまったく同じように動作するため、DUALテーブルは必要ありません。ただし、DUALテーブルはOracleの場合とまったく同じようには機能しませんが、MariaDBの単純なSELECTの場合は、これで問題ありません。

    これはOracleのDUALの使用法に適しているため、DUALを使用するアプリケーション内の既存のステートメントは、MariaDBへの移行時に変更する必要がない場合があります。

    Oracle FROM句はすべてのSELECTステートメントに必須であるため、Oracleデータベースはテーブル名が不要なSELECTステートメントにDUALテーブルを使用します。

    以下の例を参照してください:

    Oracleの場合:

    SQL> DESC DUAL;
     Name                                      Null?    Type
     ----------------------------------------- -------- ----------------------------
     DUMMY                                              VARCHAR2(1)
    
    SQL> SELECT CURRENT_TIMESTAMP FROM DUAL;
    CURRENT_TIMESTAMP
    ---------------------------------------------------------------------------
    16-FEB-19 04.16.18.910331 AM +08:00

    しかし、MariaDBでは:

    MariaDB [test]> DESC DUAL;
    ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'DUAL' at line 1
    MariaDB [test]> SELECT CURRENT_TIMESTAMP FROM DUAL;
    +---------------------+
    | CURRENT_TIMESTAMP   |
    +---------------------+
    | 2019-02-27 04:11:01 |
    +---------------------+
    1 row in set (0.000 sec)

    注: DESC DUAL 構文はMariaDBでは機能せず、MySQLのCURRENT_TIMESTAMP(TIMESTAMPデータ型を使用)にはタイムゾーンが含まれていないため、結果も異なります。

    SYSDATE

    OracleのSYSDATE関数は、MariaDBでもほぼ同じです。

    MariaDBは日付と時刻を返します。これは、()を必要とする関数です。 (引数を必要とせずに括弧を閉じて開きます。これを以下に示すために、SYSDATEの使用に関するOracleとMariaDBを示します。

    Oracleでは、プレーンSYSDATEを使用すると、時刻なしでその日の日付が返されます。ただし、時刻と日付を取得するには、TO_CHARを使用して日時を目的の形式に変換します。一方、MariaDBでは、日付と時刻の両方が返されるため、日付と時刻を取得する必要がない場合があります。

    以下の例を参照してください。

    Oracleの場合:

    SQL> SELECT TO_CHAR (SYSDATE, 'MM-DD-YYYY HH24:MI:SS') "NOW" FROM DUAL;
    NOW
    -------------------
    02-16-2019 04:39:00
    
    SQL> SELECT SYSDATE FROM DUAL;
    
    SYSDATE
    ---------
    16-FEB-19

    しかし、MariaDBでは:

    MariaDB [test]> SELECT SYSDATE() FROM DUAL;
    +---------------------+
    | SYSDATE()           |
    +---------------------+
    | 2019-02-27 04:11:57 |
    +---------------------+
    1 row in set (0.000 sec)

    日付をフォーマットする場合、MariaDBにはDATE_FORMAT()関数があります。

    詳細については、MariaDBの日付と時刻のドキュメントを確認してください。

    TO_DATE

    MariaDBで同等のOracleのTO_DATEは、STR_TO_DATE()関数です。

    Oracleのデータ型とほぼ同じです。DATEデータ型を返しますが、MariaDBではDATETIMEデータ型を返します。

    オラクル:

    SQL> SELECT TO_DATE ('20190218121212','yyyymmddhh24miss') as "NOW" FROM DUAL; 
    NOW
    -------------------------
    18-FEB-19

    MariaDB:

    MariaDB [test]> SELECT STR_TO_DATE('2019-02-18 12:12:12','%Y-%m-%d %H:%i:%s') as "NOW" FROM DUAL;
    +---------------------+
    | NOW                 |
    +---------------------+
    | 2019-02-18 12:12:12 |
    +---------------------+
    1 row in set (0.000 sec)

    類義語

    MariaDBには、これと同等の機能はまだありません。現在、JiraチケットMDEV-16482に基づいて、SYNONYMを追加するこの機能リクエストはまだ開いており、現時点ではまだ進捗の兆候はありません。これが将来のリリースに組み込まれることを期待しています。ただし、可能な代替手段はVIEWを使用することです。

    OracleのSYNONYMを使用してリモートテーブルのエイリアスを作成できますが、

    例:

    CREATE PUBLIC SYNONYM emp_table FOR [email protected]

    MariaDBでは、さまざまなデータベースソースに接続できるため、FederatedXストレージエンジンよりも強力なCONNECTストレージエンジンを利用できます。この短いビデオプレゼンテーションをチェックできます。

    MariaDBのマニュアルページに良い例がありますが、特にODBCを使用する場合に満たす必要のある特定の考慮事項があるため、ここでは繰り返し説明しません。マニュアルを参照してください。

    空の文字列とNULLの動作

    MariaDBでは、空の文字列はNULLではないのに対し、Oracleは空の文字列をnull値として扱うことに注意してください。

    Oracleの場合:

    SQL> SELECT CASE WHEN '' IS NULL THEN 'Yes' ELSE 'No' END AS "Null Eval" FROM dual;
    Nul
    ---
    Yes

    MariaDBの場合:

    MariaDB [test]> SELECT CASE WHEN '' IS NULL THEN 'Yes' ELSE 'No' END AS "Null Eval" FROM dual;
    +-----------+
    | Null Eval |
    +-----------+
    | No        |
    +-----------+
    1 row in set (0.001 sec)

    シーケンス

    MariaDB 10.3以降、Oracle互換のシーケンスとOracle PL/SQLに準拠したストアドプロシージャ言語が導入されました。 MariaDBでは、シーケンスの作成はOracleのSEQUENCEと非常によく似ています。

    MariaDBの例:

    CREATE SEQUENCE s START WITH 100 INCREMENT BY 10;
    CREATE SEQUENCE s2 START WITH -100 INCREMENT BY -10;

    実行可能な最小値と最大値を指定すると、次のようになります

    CREATE SEQUENCE s3 START WITH -100 INCREMENT BY 10 MINVALUE=-100 MAXVALUE=1000;

    文字列関数

    MariaDBには、MySQLと同じように、ここで1つずつ説明するには長すぎる文字列関数がいくつかあります。したがって、ここからドキュメントを確認して、これをOracleの文字列関数と比較できます。

    DMLステートメント

    Oracleからの挿入/更新/削除ステートメントはMariaDBで一致しています。

    OracleのINSERTALL / INSERT FIRST MariaDBではサポートされておらず、Jiraでこの機能リクエストを開いた人はまだいません(私が知っていることです)。

    それ以外の場合は、MySQLクエリを1つずつ記述する必要があります。

    例:

    Oracleの場合:

    SQL> INSERT ALL
      INTO CUSTOMERS (customer_id, customer_name, city) VALUES (1000, 'Jase Alagaban', 'Davao City')
      INTO CUSTOMERS (customer_id, customer_name, city) VALUES (2000, 'Maximus Aleksandre Namuag', 'Davao City')
    SELECT * FROM dual;
    2 rows created.

    ただし、MariaDBでは、一度に1つずつ挿入を実行する必要があります:

    MariaDB [test]> INSERT INTO CUSTOMERS (customer_id, customer_name, city) VALUES (1000, 'Jase Alagaban', 'Davao City');
    Query OK, 1 row affected (0.02 sec)
    MariaDB [test]> INSERT INTO CUSTOMERS (customer_id, customer_name, city) VALUES (2000, 'Maximus Aleksandre Namuag', 'Davao City');
    Query OK, 1 row affected (0.00 sec)

    INSERT ALL / INSERT FIRSTは、構文にWHENキーワードを追加することで条件を利用できる、Oracleでの使用方法とは異なります。現時点では、MariaDBに同等のオプションはありません。

    したがって、これに関する代替ソリューションは、手順を使用することです。

    外部結合「+」記号

    現在、互換性のために、MariaDBにはまだ存在していません。したがって、MariaDBで見つけたJiraチケットはたくさんありますが、これは機能要求に関してはるかに正確です。したがって、今回の代替選択は、JOIN構文を使用することです。詳細については、ドキュメントを確認してください。

    START WITH..CONNECT BY

    OracleはSTARTWITH..CONNECT BYを使用します 階層クエリの場合。

    MariaDB 10.2から、隣接リストや入れ子集合モデルなどのモデルを使用する階層データ結果の生成をサポートするように設計されたCTE(共通テーブル式)が導入されました。

    PostgreSQLやMySQLと同様に、MariaDBは非再帰的および再帰的CTEを使用します。

    たとえば、個人をグループと比較するために使用される単純な非再帰的例:

    WITH sales_product_year AS (
    SELECT product,
    YEAR(ship_date) AS year,
    SUM(price) AS total_amt
    FROM item_sales
    GROUP BY product, year
    )
    
    SELECT * 
    FROM sales_product_year S1
    WHERE
    total_amt > 
        (SELECT 0.1 * SUM(total_amt)
         FROM sales_product_year S2
         WHERE S2.year = S1.year)

    一方、再帰CTE(例:ニューヨークを起点としてバスの目的地を返す)

    WITH RECURSIVE bus_dst as ( 
        SELECT origin as dst FROM bus_routes WHERE origin='New York' 
      UNION
        SELECT bus_routes.dst FROM bus_routes, bus_dst WHERE bus_dst.dst= bus_routes.origin 
    ) 
    SELECT * FROM bus_dst;

    MariaDBのPL/SQL?

    以前、「Oracle DatabaseからMariaDBへの移行-知っておくべきこと」に関するブログで、データベースカーネルの一部としてPL / SQLを採用するためのコンプライアンスを追加することで、MariaDBがいかに強力であるかを紹介しました。 MariaDBでPL/SQL互換性を使用する場合は常に、 SQL_MODE ='Oracle'を設定していることを確認してください。 次のように:

    SET SQL_MODE='ORACLE';

    新しい互換モードは、次の構文に役立ちます。

    • ループ構文
    • 変数宣言
    • 非ANSIストアドプロシージャコンストラクト
    • カーソル構文
    • ストアドプロシージャパラメータ
    • データ型の継承(%TYPE、%ROWTYPE)
    • PL/SQLスタイルの例外
    • 基本的なSQLタイプの同義語(VARCHAR2、NUMBER、…)

    たとえば、Oracleでは、論理的に関連するPL / SQLタイプ、変数、およびサブプログラムをグループ化するスキーマ・オブジェクトであるパッケージを作成できます。したがって、MariaDBでは、次のように実行できます。

    MariaDB [test]> CREATE OR REPLACE PACKAGE BODY hello AS
        -> 
        ->   vString VARCHAR2(255) := NULL;
        -> 
        ->   -- was declared public in PACKAGE
        ->   PROCEDURE helloFromS9s(pString VARCHAR2) AS
        ->   BEGIN
        ->     SELECT 'Severalnines showing MariaDB Package Procedure in ' || pString || '!' INTO vString FROM dual;
        ->     SELECT vString;
        ->   END;
        -> 
        -> BEGIN
        ->   SELECT 'called only once per connection!';
        -> END hello;
        -> /
    Query OK, 0 rows affected (0.021 sec)
    
    MariaDB [test]> 
    MariaDB [test]> DECLARE
        ->   vString VARCHAR2(255) := NULL;
        ->   -- CONSTANT seems to be not supported yet by MariaDB
        ->   -- cString CONSTANT VARCHAR2(255) := 'anonymous block';
        ->   cString VARCHAR2(255) := 'anonymous block';
        -> BEGIN
        ->   CALL hello.helloFromS9s(cString);
        -> END;
        -> /
    +----------------------------------+
    | called only once per connection! |
    +----------------------------------+
    | called only once per connection! |
    +----------------------------------+
    1 row in set (0.000 sec)
    
    +--------------------------------------------------------------------+
    | vString                                                            |
    +--------------------------------------------------------------------+
    | Severalnines showing MariaDB Package Procedure in anonymous block! |
    +--------------------------------------------------------------------+
    1 row in set (0.000 sec)
    
    Query OK, 1 row affected (0.000 sec)
    
    MariaDB [test]> 
    MariaDB [test]> DELIMITER ;

    ただし、OracleのPL / SQLは、サーバーにロードされるときに実行前にコンパイルされます。 MariaDBはマニュアルでこれを述べていませんが、アプローチはMySQLと同じであり、呼び出されたときにコンパイルされてキャッシュに保存されると思います。

    移行ツール

    同僚のBartが以前のブログで示したように、SQLinesSQLConverterおよびSQLinesDataToolであるsqlinesツールも移行の一部として支援を提供できます。

    MariaDBには、利用できるRed RoverMigrationPracticeサービスがあります。

    全体として、OracleのMariaDBへの移行は、MySQL / Perconaへの移行ほど簡単ではありません。これにより、MariaDBよりも多くの課題が追加される可能性があります。特に、MySQLにはPL/SQLの互換性はありません。

    とにかく、OracleからMariaDBへの移行に役立ち、有益であると思われるツールを見つけた場合、または知っている場合は、このブログにコメントを残してください!

    テスト

    このブログで述べたことと同じように、ここでその一部を繰り返します。

    移行計画の一環として、テストは非常に重要な役割を果たし、移行に関する決定に影響を与える重要なタスクです。

    ツールdbdeployer(MySQL Sandboxの代替)は、利用できる非常に便利なツールです。これは、RDBMSプラットフォームを最初に試してテストすることが目的である場合にスタック全体を設定するのではなく、さまざまなアプローチを試してテストするのが非常に簡単で、時間を節約できます。

    SQLストアドルーチン(関数またはプロシージャ)、トリガー、イベントをテストするには、これらのツールmytapまたはGoogleの単体テストフレームワークを使用することをお勧めします。

    Perconaツールは引き続き有用であり、MariaDBを使用してもDBAまたはエンジニアリングタスクに組み込むことができます。 PerconaToolkitをここでチェックアウトしてください。特にテストや本番使用のタスクでは、ニーズに応じてツールを選択できます。

    全体として、MariaDBサーバーのテストを行う際のガイドラインとして覚えておく必要があることは次のとおりです。

    • インストール後、調整を検討する必要があります。 MariaDBサーバーのチューニングに関するウェビナーをご覧ください。
    • 現在のノードの構成セットアップに対して、いくつかのベンチマークとストレス負荷テストを実行します。これを支援できるmysqlslapとsysbenchをチェックアウトしてください。また、ブログ「SysBenchを使用してMySQLとMariaDBのパフォーマンスをベンチマークする方法」も確認してください。
    • DDLが正しく定義されているかどうかを確認します。たとえば、データ型、制約、クラスター化インデックスとセカンダリインデックス、またはパーティションがある場合はパーティションなどです。
    • 特に構文が正しく、データが期待どおりに正しく保存されている場合は、DMLを確認してください。
    • 保存されているルーチン、イベント、トリガーをチェックして、期待どおりの結果が実行/返されるようにします。
    • 実行中のクエリが実行可能であることを確認します。オープンソースツールを利用するか、ClusterControl製品を試してみることをお勧めします。特にMariaDBクラスターの監視/可観測性を提供します。 ClusterControlがMariaDBTX3.0の管理にどのように役立つかを紹介するこの以前のブログを確認してください。ここでClusterControlを使用して、クエリとそのクエリプランを監視し、パフォーマンスが高いことを確認できます。

    1. sqlite:合計時間を追加する方法hh:mm:ssここで、列のデータ型はDATETIMEですか?

    2. SQLServerでGOTOを使用する方法

    3. 簡単な方法特定のテーブルの主キーとして適切な列を選択する

    4. SQLServerでのデータ圧縮の節約を見積もる