データベースの移行
サポート、メンテナンス、またはパフォーマンス上の理由により、現在使用しているデータベースから Liferay がサポートする他のデータベースに移行することが必要になる場合があります。 正確な手順とツールはドキュメントの範囲外ですが、データベースを移行する際には避けるべき落とし穴がいくつかあります。
Liferay は サービス ビルダーを介してデータベースにアクセスします。サービス ビルダーは、Liferay のデータ型を、サポートされているデータベースの最も適切な列タイプにマッピングします。 データベースを移行する場合、多くの場合、さまざまなサードパーティ製ツールを使用してスキーマ定義とデータを移行しますが、ここで問題となるのは、これらのツールが Liferay のデータ マッピングについて何も認識していないことです。 移行を行う際に、間違った列タイプや命名規則を選択してしまう可能性が非常に高くなります。
たとえば、Liferay ではデータベースごとに異なるタイプが想定されます。
| Liferayタイプ | DB2 | MySQL | Oracle | PostgreSQL | SQL Server |
|---|---|---|---|---|---|
| ブール値 | smallint | tinyint | number(1, 0) | bool | bit |
| Long | bigint | bigint | number(30,0) | bigint | bigint |
| テキストボックス | clob(2G) | longtext | clob | text | nvarchar(max) |
| ヴァルチャール | varchar | varchar | varchar2 | varchar | nvarchar |
さらに、Liferay のテーブル名と列の命名規則はデータベースごとに異なります。
PostgreSQL: 小文字 → レイアウトセット および ヘッドID
Oracle および DB2: 大文字 → LAYOUTSET および HEADID
SQL Server: 変更なし → LayoutSet および headId
MySQL: データベース環境とその lower_case_table_names 設定に依存します
サードパーティ ツールを使用してサポートされている別のデータベースに移行すると、次の 3 つの問題が発生する可能性があります。
-
列が間違ったデータ型にマップされている可能性があります (つまり、Oracle では
varcharではなくvarchar2、PostgreSQL ではboolではなく数値型)。 -
テーブル名と列名は、間違った命名規則を使用して作成される可能性があります。
-
インデックス名が失われる可能性があり、再作成が必要な場合にパフォーマンスの問題が発生します。
これらの理由から、サードパーティの移行ツールは データ移行にのみ推奨され、 スキーマ移行には推奨されません。
PostgreSQLへの移行
Liferay のデフォルトのデータベースは PostgreSQL です。 Liferay には、PostgreSQL に移行するためのベータ版のサポートされていないツールがあります。これについては、 こちらで説明されています。
サポートされている任意のデータベースへの移行
Liferay にスキーマの作成を許可し、データを移行することで、サポートされている任意のデータベースに移行できます。
-
Liferay 用の新しいデータベース を設定します。
-
Liferay を起動し 、先ほど設定した新しいデータベースを指定します。 Liferay はデータベースにスキーマを作成します。
-
Liferayを停止します。 データベースに接続し、SQL を使用してデータベース内のすべてのテーブルのデータを削除します (つまり、
TRUNCATE TABLE [Table];またはDELETE FROM [Table];を使用します)。 これで、新しいデータベースに空の Liferay スキーマが作成されました。 -
古いデータベースから新しいデータベースにデータを移行し、古いデータベースの既存のテーブル名と列名を新しいデータベースにマッピングします。
アップグレードする場合
Liferay のアップグレード中にデータベースを移行する場合は、まず古いバージョンの Liferay 上のデータベースを移行します。 アップグレードを試みる前に、Liferay が新しいデータベースで期待どおりに動作することを確認してください。