Справочник по маркерам версий 5.5.5.4
Следующее обсуждение служит справочником по элементам маркеров версий:
Функции маркеров версий
Библиотека плагинов маркеров версий содержит несколько функций. Одна группа функций позволяет управлять и просматривать список маркеров версий на сервере. Другая группа функций позволяет блокировать и разблокировать маркеры версий. Для вызова любой функции маркеров версий требуется привилегия SUPER.
Следующие функции позволяют создавать, изменять, удалять и просматривать список маркеров версий на сервере. Интерпретация аргументов name_list и token_list (включая обработку пробелов) происходит так, как описано в разделе 5.5.5.3 «Использование маркеров версий», где подробно описывается синтаксис указания маркеров и приводятся дополнительные примеры.
-
version_tokens_delete(name_list)Удаляет маркеры из списка маркеров версий сервера, используя аргумент
name_list, и возвращает двоичную строку, указывающую результат операции.name_list— это список имён маркеров версий, разделённых точкой с запятой, которые требуется удалить.mysql>
SELECT version_tokens_delete('tok1;tok3');+------------------------------------+ | version_tokens_delete('tok1;tok3') | +------------------------------------+ | 2 version tokens deleted. | +------------------------------------+Аргумент
NULLобрабатывается как пустая строка, что не оказывает влияния на список маркеров.version_tokens_delete()удаляет маркеры, указанные в аргументе, если они существуют. (Удаление несуществующих маркеров не является ошибкой.) Чтобы полностью очистить список маркеров, не зная, какие маркеры в нём находятся, передайтеNULLили строку без маркеров вversion_tokens_set():mysql>
SELECT version_tokens_set(NULL);+------------------------------+ | version_tokens_set(NULL) | +------------------------------+ | Version tokens list cleared. | +------------------------------+ mysql>SELECT version_tokens_set('');+------------------------------+ | version_tokens_set('') | +------------------------------+ | Version tokens list cleared. | +------------------------------+ -
version_tokens_edit(token_list)Изменяет список маркеров версий сервера, используя аргумент
token_list, и возвращает двоичную строку, указывающую результат операции.token_list— это список пар «имя маркера/значение», разделённых точкой с запятой, определяющих маркеры для определения. Если маркер существует, его значение обновляется заданным значением. Если маркер не существует, он создаётся с заданным значением. Если аргумент равенNULLили строке без маркеров, список маркеров остаётся неизменным.mysql>
SELECT version_tokens_set('tok1=value1;tok2=value2');+-----------------------------------------------+ | version_tokens_set('tok1=value1;tok2=value2') | +-----------------------------------------------+ | 2 version tokens set. | +-----------------------------------------------+ mysql>SELECT version_tokens_edit('tok2=new_value2;tok3=new_value3');+--------------------------------------------------------+ | version_tokens_edit('tok2=new_value2;tok3=new_value3') | +--------------------------------------------------------+ | 2 version tokens updated. | +--------------------------------------------------------+ -
version_tokens_set(token_list)Заменяет список маркеров версий сервера маркерами, определёнными в аргументе
token_list, и возвращает двоичную строку, указывающую результат операции.token_list— это список пар «имя маркера/значение», разделённых точкой с запятой, определяющих маркеры для определения. Если аргумент равенNULLили строке без маркеров, список маркеров очищается.mysql>
SELECT version_tokens_set('tok1=value1;tok2=value2');+-----------------------------------------------+ | version_tokens_set('tok1=value1;tok2=value2') | +-----------------------------------------------+ | 2 version tokens set. | +-----------------------------------------------+ -
Возвращает список маркеров версий сервера как двоичную строку, содержащую список пар «имя маркера/значение», разделённых точкой с запятой.
mysql>
SELECT version_tokens_show();+--------------------------+ | version_tokens_show() | +--------------------------+ | tok2=value2;tok1=value1; | +--------------------------+
Следующие функции позволяют блокировать и разблокировать маркеры версий:
-
version_tokens_lock_exclusive(token_name[,token_name] ...,timeout)Получает эксклюзивные блокировки на один или несколько маркеров версий, заданных в виде строк, и завершается с ошибкой при истечении времени ожидания, если блокировки не получены в течение заданного значения таймаута.
mysql>
SELECT version_tokens_lock_exclusive('lock1', 'lock2', 10);+-----------------------------------------------------+ | version_tokens_lock_exclusive('lock1', 'lock2', 10) | +-----------------------------------------------------+ | 1 | +-----------------------------------------------------+ -
version_tokens_lock_shared(token_name[,token_name] ...,timeout)Получает общие блокировки на один или несколько маркеров версий, заданных в виде строк, и завершается с ошибкой при истечении времени ожидания, если блокировки не получены в течение заданного значения таймаута.
mysql>
SELECT version_tokens_lock_shared('lock1', 'lock2', 10);+--------------------------------------------------+ | version_tokens_lock_shared('lock1', 'lock2', 10) | +--------------------------------------------------+ | 1 | +--------------------------------------------------+ -
Освобождает все блокировки, полученные в текущем сеансе с помощью
version_tokens_lock_exclusive()иversion_tokens_lock_shared().mysql>
SELECT version_tokens_unlock();+-------------------------+ | version_tokens_unlock() | +-------------------------+ | 1 | +-------------------------+
Функции блокировки обладают следующими характеристиками:
Возвращаемое значение отлично от нуля при успехе. В противном случае возникает ошибка.
Имена маркеров — строки.
В отличие от обработки аргументов для функций, которые манипулируют списком маркеров сервера, пробелы вокруг аргументов имён маркеров не игнорируются, и разрешены символы
=и;.Можно блокировать несуществующие имена маркеров. Это не создаёт маркеры.
Значения таймаута — неотрицательные целые числа, представляющие время в секундах ожидания получения блокировок перед истечением таймаута и возникновением ошибки. Если таймаут равен 0, ожидания нет, и функция выдаёт ошибку, если блокировки не могут быть получены сразу.
Функции блокировки маркеров версий основаны на службе блокировки, описанной в разделе 5.5.6.1 «Служба блокировки».
Переменные системы токенов версий
Токены версий поддерживают следующие системные переменные. Эти переменные недоступны, если плагин Токенов версий не установлен (см. Раздел 5.5.5.2, «Установка или отключение токенов версий»).
Системные переменные:
-
Формат командной строки --version-tokens-session=valueСистемная переменная version_tokens_sessionОбласть Глобальная, сессия Динамическая Да Тип Строка Значение по умолчанию NULLЗначение сессии этой переменной указывает список токенов версии клиента и обозначает токены, которые клиентская сессия требует иметь в списке токенов версии сервера.
Если переменная
version_tokens_sessionимеет значениеNULL(по умолчанию) или пустое значение, любой список токенов сервера соответствует. (Фактически, пустое значение отключает требования к соответствию).Если переменная
version_tokens_sessionимеет ненулевое значение, любое несоответствие между её значением и списком токенов сервера приводит к ошибке для любого оператора, отправляемого сессией на сервер. Несоответствие возникает в следующих случаях:Имя токена в значении
version_tokens_sessionотсутствует в списке токенов сервера. В этом случае возникает ошибка.Значение токена в значении
version_tokens_sessionотличается от значения соответствующего токена в списке токенов сервера. В этом случае возникает ошибка.
Не считается несоответствием, если список токенов версии сервера содержит токен, не указанный в значении
version_tokens_session.Предположим, что приложение управления установило список токенов сервера следующим образом:
mysql>
SELECT version_tokens_set('tok1=a;tok2=b;tok3=c');+--------------------------------------------+ | version_tokens_set('tok1=a;tok2=b;tok3=c') | +--------------------------------------------+ | 3 version tokens set. | +--------------------------------------------+Клиент регистрирует токены, которые он требует для соответствия серверу, установив значение
version_tokens_session. Затем для каждого последующего оператора, отправленного клиентом, сервер проверяет свой список токенов по значениюversion_tokens_sessionклиента и генерирует ошибку, если есть несоответствие:mysql>
SET @@SESSION.version_tokens_session = 'tok1=a;tok2=b';mysql>SELECT 1;+---+ | 1 | +---+ | 1 | +---+ mysql>SET @@SESSION.version_tokens_session = 'tok1=b';mysql>SELECT 1;ERROR 3136 (42000): Version token mismatch for tok1. Correct value aПервый
SELECTуспешно выполняется, потому что токены клиентаtok1иtok2присутствуют в списке токенов сервера, и каждое значение токена в списке сервера совпадает. ВторойSELECTтерпит неудачу, потому что, хотяtok1присутствует в списке токенов сервера, его значение отличается от значения, указанного клиентом.В этот момент любой оператор, отправленный клиентом, терпит неудачу, если список токенов сервера не изменится таким образом, чтобы снова соответствовать. Предположим, что приложение управления изменяет список токенов сервера следующим образом:
mysql>
SELECT version_tokens_edit('tok1=b');+-------------------------------+ | version_tokens_edit('tok1=b') | +-------------------------------+ | 1 version tokens updated. | +-------------------------------+ mysql>SELECT version_tokens_show();+-----------------------+ | version_tokens_show() | +-----------------------+ | tok3=c;tok1=b;tok2=b; | +-----------------------+Теперь значение
version_tokens_sessionклиента соответствует списку токенов сервера, и клиент снова может успешно выполнять операторы:mysql>
SELECT 1;+---+ | 1 | +---+ | 1 | +---+ -
Формат командной строки --version-tokens-session-number=#Системная переменная version_tokens_session_numberОбласть Глобальная, сессия Динамическая Нет Тип Целое число Значение по умолчанию 0Эта переменная предназначена для внутреннего использования.
© 2025 Oracle
Licensed under the GPLv2 License.