MySQL 8.0 リファレンスマニュアル


13.1.10 ALTER TABLESPACE ステートメント

ALTER [UNDO] TABLESPACE tablespace_name
  NDB only:
    {ADD | DROP} DATAFILE 'file_name'
    [INITIAL_SIZE [=] size]
    [WAIT]
  InnoDB and NDB:
    [RENAME TO tablespace_name]
  InnoDB only:
    [AUTOEXTEND_SIZE [=] 'value']
    [SET {ACTIVE | INACTIVE}]
    [ENCRYPTION [=] {'Y' | 'N'}]
  InnoDB and NDB:
    [ENGINE [=] engine_name]
  Reserved for future use:
    [ENGINE_ATTRIBUTE [=] 'string']

このステートメントは、NDB および InnoDB テーブルスペースで使用されます。 これを使用して、新しいデータファイルを NDB テーブルスペースに追加したり、NDB テーブルスペースからデータファイルを削除できます。 また、「NDB Cluster ディスクデータ」テーブルスペースの名前変更、InnoDB 一般テーブルスペースの名前変更、InnoDB 一般テーブルスペースの暗号化、または InnoDB undo テーブルスペースをアクティブまたは非アクティブとしてマークするためにも使用できます。

MySQL 8.0.14 で導入された UNDO キーワードは、InnoDB undo テーブルスペースをアクティブまたは非アクティブとしてマークするために SET {ACTIVE | INACTIVE} 句とともに使用されます。 詳細は、セクション15.6.3.4「undo テーブルスペース」を参照してください。

ADD DATAFILE バリアントを使用すると、INITIAL_SIZE 句を使用して NDB「ディスクデータ」テーブルスペースの初期サイズを指定できます。size はバイト単位で測定され、デフォルト値は 134217728 (128 MB) です。 オプションで、my.cnf で使用されているものと同様に、size の後に一文字の略称を付けることもできます。 一般に、これは M (M バイト) または G (G バイト) のどちらかの文字です。

32 ビットシステム上では、INITIAL_SIZE のサポートされる最大値は 4294967296 (4G バイト) です。 (Bug #29186)

INITIAL_SIZE は、CREATE TABLESPACE と同様に明示的に丸められます。

データファイルが作成されると、そのサイズは変更できませんが、追加の ALTER TABLESPACE ... ADD DATAFILE ステートメントを使用して NDB テーブルスペースにデータファイルを追加できます。

ALTER TABLESPACE ... ADD DATAFILEENGINE = NDB とともに使用すると、各クラスタデータノードにデータファイルが作成されますが、INFORMATION_SCHEMA.FILES テーブルには 1 つの行のみが生成されます。 詳細は、このテーブルおよび セクション23.5.10.1「NDB Cluster ディスクデータオブジェクト」 の説明を参照してください。 ADD DATAFILE は、InnoDB テーブルスペースではサポートされていません。

ALTER TABLESPACEDROP DATAFILE を使用すると、NDB テーブルスペースからデータファイル'file_name'が削除されます。 いずれかのテーブルが使用しているテーブルスペースからはデータファイルを削除できません。つまり、そのデータファイルが空である (エクステントが使用されていない) ことが必要です。 セクション23.5.10.1「NDB Cluster ディスクデータオブジェクト」を参照してください。 さらに、削除されるデータファイルはすべて、CREATE TABLESPACE または ALTER TABLESPACE で以前にそのテーブルスペースに追加されている必要があります。 DROP DATAFILE は、InnoDB テーブルスペースではサポートされていません。

WAIT は解析されますが、それ以外は無視されます。 これは将来の拡張のために用意されています。

テーブルスペースで使用されるストレージエンジンを指定する ENGINE 句は非推奨になりました。将来のリリースで削除される予定です。 テーブルスペース記憶域エンジンはデータディクショナリによって認識されるため、ENGINE 句は廃止されています。 ストレージエンジンが指定されている場合は、データディクショナリに定義されているテーブルスペースストレージエンジンと一致する必要があります。 NDB テーブルスペースと互換性のある engine_name の値は、NDB および NDBCLUSTER のみです。

RENAME TO 操作は、autocommit の設定に関係なく、autocommit モードで暗黙的に実行されます。

テーブルスペースに存在するテーブルに対して LOCK TABLES または FLUSH TABLES WITH READ LOCK が有効になっている間は、RENAME TO 操作を実行できません。

排他的 metadata locks は、テーブルスペースの名前の変更中に一般的なテーブルスペースに存在するテーブルに対して取得されるため、同時 DDL が回避されます。 同時 DML がサポートされています。

InnoDB 一般テーブルスペースの名前を変更するには、CREATE TABLESPACE 権限が必要です。

AUTOEXTEND_SIZE オプションは、一杯になったときに InnoDB がテーブルスペースのサイズを拡張する量を定義します。 MySQL 8.0.23 で導入されました。 設定は 4MB の倍数である必要があります。 デフォルト設定は 0 で、暗黙的なデフォルト動作に従ってテーブルスペースが拡張されます。 詳細は、セクション15.6.3.9「テーブルスペースの AUTOEXTEND_SIZE 構成」を参照してください。

ENCRYPTION 句は、InnoDB 一般テーブルスペースまたは mysql システムテーブルスペースのページレベルのデータ暗号化を有効または無効にします。 一般テーブルスペースの暗号化サポートは、MySQL 8.0.13 で導入されました。 mysql システムテーブルスペースの暗号化サポートは、MySQL 8.0.16 で導入されました。

暗号化を有効にする前に、キーリングプラグインをインストールして構成する必要があります。

MySQL 8.0.16 では、table_encryption_privilege_check 変数が有効になっている場合、default_table_encryption の設定とは異なる ENCRYPTION 句の設定を使用して一般的なテーブルスペースを変更するには、TABLE_ENCRYPTION_ADMIN 権限が必要です。

テーブルスペース内のいずれかのテーブルが DEFAULT ENCRYPTION='N'で定義されたスキーマに属している場合、一般テーブルスペースの暗号化の有効化は失敗します。 同様に、一般テーブルスペースのいずれかのテーブルが DEFAULT ENCRYPTION='Y'で定義されたスキーマに属している場合、暗号化の無効化は失敗します。 DEFAULT ENCRYPTION スキーマオプションは、MySQL 8.0.16 で導入されました。

一般的なテーブルスペースで実行される ALTER TABLESPACE ステートメントに ENCRYPTION 句が含まれていない場合、default_table_encryption の設定に関係なく、テーブルスペースは現在の暗号化ステータスを保持します。

一般テーブルスペースまたは mysql システムテーブルスペースが暗号化されると、テーブルスペースに存在するすべてのテーブルが暗号化されます。 同様に、暗号化されたテーブルスペースに作成されたテーブルも暗号化されます。

INPLACE アルゴリズムは、一般テーブルスペースまたは mysql システムテーブルスペースの ENCRYPTION 属性を変更するときに使用されます。 INPLACE アルゴリズムでは、テーブルスペースに存在するテーブルに対する同時 DML が許可されます。 同時 DDL はブロックされます。

詳細は、セクション15.13「InnoDB 保存データ暗号化」を参照してください。

ENGINE_ATTRIBUTE オプション (MySQL 8.0.21 の時点で使用可能) を使用して、プライマリストレージエンジンのテーブルスペース属性を指定します。 このオプションは、将来の使用のために予約されています。

許可される値は、有効な JSON ドキュメントまたは空の文字列 ('') を含む文字列リテラルです。 無効な JSON が拒否されました。

ALTER TABLESPACE ts1 ENGINE_ATTRIBUTE='{"key":"value"}';

ENGINE_ATTRIBUTE の値は、エラーなしで繰り返すことができます。 この場合、最後に指定した値が使用されます。

ENGINE_ATTRIBUTE 値はサーバーによってチェックされず、テーブルストレージエンジンが変更されたときにもクリアされません。

JSON 属性値の個々の要素を変更することはできません。 追加または置換できるのは属性のみです。


関連キーワード:  ステートメント, テーブル, スペース, CREATE, TABLE, DROP, InnoDB, 一般, TABLESPACE, NDB