すべてのプロダクト
Search
ドキュメントセンター

PolarDB:DDL よくある質問

最終更新日:Mar 28, 2026

このトピックでは、PolarDB-X 1.0 における DDL 実行エラーに関するよくある質問とその対応方法について説明します。

テーブル作成に失敗した場合の対応方法

PolarDB-X 1.0 では、DDL 文が複数のシャードにまたがって分散モードで実行されます。途中でエラーが発生した場合、一部のシャードでは物理テーブルが作成される一方で、他のシャードでは作成されない状態となり、スキーマが不整合な状態になる可能性があります。そのため、失敗したシャードを特定し、手動で操作を完了またはクリーンアップする必要があります。

ステップ 1:エラーの詳細を確認します。

PolarDB-X 1.0 は、構文エラーなどの基本的なエラー情報を直接表示します。エラーメッセージが途中で切り捨てられている場合は、SHOW WARNINGS を実行して、各データベースシャードにおける完全な失敗原因を確認してください。

ステップ 2:物理テーブルのトポロジーを確認します。

SHOW TOPOLOGY を実行し、存在する物理テーブルおよびそれらが属するシャードを確認します:

SHOW TOPOLOGY FROM multi_db_multi_tbl;

期待される出力例:

+------+-----------------+-----------------------+
| ID   | GROUP_NAME      | TABLE_NAME            |
+------+-----------------+-----------------------+
|    0 | corona_qatest_0 | multi_db_multi_tbl_00 |
|    1 | corona_qatest_0 | multi_db_multi_tbl_01 |
|    2 | corona_qatest_0 | multi_db_multi_tbl_02 |
|    3 | corona_qatest_1 | multi_db_multi_tbl_03 |
|    4 | corona_qatest_1 | multi_db_multi_tbl_04 |
|    5 | corona_qatest_1 | multi_db_multi_tbl_05 |
|    6 | corona_qatest_2 | multi_db_multi_tbl_06 |
|    7 | corona_qatest_2 | multi_db_multi_tbl_07 |
|    8 | corona_qatest_2 | multi_db_multi_tbl_08 |
|    9 | corona_qatest_3 | multi_db_multi_tbl_09 |
|   10 | corona_qatest_3 | multi_db_multi_tbl_10 |
|   11 | corona_qatest_3 | multi_db_multi_tbl_11 |
+------+-----------------+-----------------------+
12 rows in set (0.21 sec)

ステップ 3:論理テーブルのステータスを確認します。

論理テーブル名に対して CHECK TABLE を実行し、そのステータスを確認します:

mysql> check table multi_db_multi_tbl;

いずれかのシャードで物理テーブルが欠落している場合、該当シャードに対してエラーが表示されます:

+-------------------------------------------------+-------+----------+---------------------------------------------------------------------------+
| TABLE                                           | OP    | MSG_TYPE | MSG_TEXT                                                                  |
+-------------------------------------------------+-------+----------+---------------------------------------------------------------------------+
| andor_mysql_qatest. multi_db_multi_tbl | check | Error    | Table 'corona_qatest_0. multi_db_multi_tbl_02' doesn't exist |
+-------------------------------------------------+-------+----------+---------------------------------------------------------------------------+
1 row in set (0.16 sec)

ステップ 4:冪等モードで DDL を再実行します。

IF NOT EXISTS または IF EXISTS を使用して、残りの物理テーブルに対して安全に操作を再試行します:

-- 欠落している物理テーブルを再作成
CREATE TABLE IF NOT EXISTS table1
(id int, name varchar(30), primary key(id))
dbpartition by hash(id);

-- または、すべての物理テーブルをクリーンアップ
DROP TABLE IF EXISTS table1;

インデックス作成またはカラム追加に失敗した場合の対応方法

同様の手順で対応します:まず SHOW WARNINGS を実行してエラーの詳細を確認し、次に SHOW TOPOLOGY で影響を受けるシャードを特定し、さらに CHECK TABLE で現在の状態を検証したうえで、DDL 文の冪等形式を用いて再実行してください。

詳細については、「DDL 例外のトラブルシューティング」をご参照ください。