Spec-Zone.ru › MySQL 8.4

15.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 Cluster Disk Data, переименования InnoDB общего пространства имен, шифрования InnoDB общего пространства имен или для отметки InnoDB пространства имен отката как активного или неактивного.

Ключевое слово UNDO используется с клаузой SET {ACTIVE | INACTIVE}, чтобы отметить InnoDB пространство имен отката как активное или неактивное. Более подробная информация приведена в разделе 17.6.3.4, «Пространства имен отката».

Вариант ADD DATAFILE позволяет указать начальный размер NDB пространства имен Disk Data с помощью клаузы INITIAL_SIZE, где size измеряется в байтах; значение по умолчанию равно 134217728 (128 МБ). Вы можете дополнительно указать size с однобуквенным сокращением порядка величины, аналогично тем, что используются в my.cnf. Обычно это одна из букв M (мегабайты) или G (гигабайты).

В 32-разрядных системах максимальное поддерживаемое значение для INITIAL_SIZE равно 4294967296 (4 ГБ). (Ошибка #29186)

INITIAL_SIZE округляется явно, как и для CREATE TABLESPACE.

После создания файла данных его размер изменить нельзя; однако вы можете добавить больше файлов данных в NDB пространство имен с помощью дополнительных выражений ALTER TABLESPACE ... ADD DATAFILE.

При использовании ALTER TABLESPACE ... ADD DATAFILE с ENGINE = NDB, файл данных создается на каждом узле данных кластера, но только одна строка генерируется в таблице Информационной схемы FILES. См. описание этой таблицы, а также раздел 25.6.11.1, «Объекты NDB Cluster Disk Data» для получения дополнительной информации. ADD DATAFILE не поддерживается для InnoDB пространств имен.

Использование DROP DATAFILE с ALTER TABLESPACE удаляет файл данных 'file_name' из NDB пространства имен. Вы не можете удалить файл данных из пространства имен, которое используется какой-либо таблицей; другими словами, файл данных должен быть пустым (не используется ни один экстент). См. раздел 25.6.11.1, «Объекты NDB Cluster Disk Data». Кроме того, любой файл данных, который нужно удалить, должен быть предварительно добавлен в пространство имен с помощью CREATE TABLESPACE или ALTER TABLESPACE. DROP DATAFILE не поддерживается для InnoDB пространств имен.

WAIT анализируется, но в остальном игнорируется. Он предназначен для будущего расширения.

Клауза ENGINE, которая указывает движок хранения, используемый пространством имен, устарела, так как движок хранения пространства имен известен словарем данных, что делает клаузу ENGINE устаревшей. В MySQL 8.4 она поддерживается только в следующих двух случаях:

  • ALTER TABLESPACE tablespace_name ADD DATAFILE 'file_name'
        ENGINE={NDB|NDBCLUSTER}
    
  • ALTER UNDO TABLESPACE tablespace_name SET {ACTIVE|INACTIVE}
        ENGINE=INNODB
    

Ожидается, что в будущей версии MySQL из этих выражений также будет удалено ENGINE.

RENAME TO операции неявно выполняются в режиме автозаписи, независимо от значения autocommit.

RENAME TO операция не может быть выполнена, пока LOCK TABLES или FLUSH TABLES WITH READ LOCK действуют для таблиц, находящихся в пространстве имен.

В то время как пространство имен переименовывается, эксклюзивные блокировки накладываются на таблицы, находящиеся в общем пространстве имен, что предотвращает одновременное выполнение DDL. Одновременный DML поддерживается.

Для переименования InnoDB общего пространства имен требуется привилегия CREATE TABLESPACE.

Параметр AUTOEXTEND_SIZE определяет величину, на которую InnoDB увеличивает размер пространства имен при его заполнении. Значение должно быть кратно 4 МБ. Значение по умолчанию равно 0, что приводит к расширению пространства имен в соответствии с неявным поведением по умолчанию. Дополнительная информация приведена в разделе 17.6.3.9, «Настройка AUTOEXTEND_SIZE пространства имен».

Клауза ENCRYPTION включает или выключает шифрование данных на уровне страниц для InnoDB общего пространства имен или mysql системного пространства имен.

Для включения шифрования необходимо установить и настроить плагин хранилища ключей.

Если переменная table_encryption_privilege_check включена, для изменения общего пространства имен с помощью клаузы ENCRYPTION, значение которой отличается от значения default_table_encryption, требуется привилегия TABLE_ENCRYPTION_ADMIN.

Включение шифрования для общего пространства имен завершается ошибкой, если какая-либо таблица в пространстве имен принадлежит схеме, определенной с помощью DEFAULT ENCRYPTION='N'. Аналогично, отключение шифрования завершается ошибкой, если какая-либо таблица в общем пространстве имен принадлежит схеме, определенной с помощью DEFAULT ENCRYPTION='Y'.

Если выражение ALTER TABLESPACE, выполняемое над общим пространством имен, не включает клаузу ENCRYPTION, то пространство имен сохраняет свой текущий статус шифрования независимо от значения default_table_encryption.

При шифровании общего пространства имен или mysql системного пространства имен все таблицы, находящиеся в пространстве имен, шифруются. Точно так же таблица, созданная в зашифрованном пространстве имен, шифруется.

Алгоритм INPLACE используется при изменении атрибута ENCRYPTION общего пространства имен или mysql системного пространства имен. Алгоритм INPLACE позволяет выполнять одновременный DML для таблиц, находящихся в пространстве имен. Одновременное выполнение DDL заблокировано.

Дополнительная информация приведена в разделе 17.13, «Шифрование данных InnoDB».

Параметр ENGINE_ATTRIBUTE используется для указания атрибутов пространства имен для первичных движков хранения. Параметр зарезервирован для использования в будущем.

Присваиваемое этому параметру значение — строковая литерал, содержащая допустимый JSON-документ или пустую строку (''). Недопустимый JSON отклоняется.

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

ENGINE_ATTRIBUTE значения могут повторяться без ошибок. В этом случае используется последнее заданное значение.

ENGINE_ATTRIBUTE значения не проверяются сервером, и они не очищаются при изменении движка хранения таблицы.

Изменение отдельных элементов значения атрибута JSON запрещено. Можно только добавить или заменить атрибут.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/alter-tablespace.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API