8. Утилиты командной строки

8.1. Утилита ISQL

ISQL - это утилита командной строки для работы с базами данных «РЕД Базы Данных» при помощи языка структурированных запросов (Structured Query Language SQL, подробнее о языке SQL см. «Руководство по SQL»). Утилита может быть использована для создания БД, создания и изменения метаданных и для выполнения различных запросов к БД. Утилита может работать в двух режимах: пакетном и интерактивном.

В пакетном режиме утилита получает на вход файл со скриптом SQL, который содержит одну или несколько команд. По завершении выполнения всех переданных на вход команд утилита завершает свою работу.

В интерактивном режиме пользователь последовательно вводит команды для работы с базами данных и тут же получает результат их выполнения. При этом одна команда может быть разбита на несколько строк. После завершения обработки каждой команды и вывода всех результатов ее работы пользователь получает приглашение ввести следующую команду до тех пор, пока не будет введена команда выхода из интерактивного режима (exit или quit).

В интерактивном режиме история команд пишется в файл. По умолчанию максимальный размер истории ограничен 1000 строк. Изменить это ограничение можно с помощью переменной среды ISQL_HISTSIZE. В пакетном режиме история не пишется.

Запуск ISQL

Запуск утилиты производится следующим образом:

isql [–u <пользователь>] [-p <пароль>] [-r <роль>] [[<спецификация сервера>] <БД>]

<спецификация сервера> ::= host[\port | service]:
                           | \\host[@port | service]\
                           | <protocol>://[ host[:port | service]/]
<protocol> ::= inet \| inet4 \| inet6 \| xnet

Соединение с базой данных

После запуска утилиты необходимо либо присоединиться уже к существующей БД, либо создать новую. Для создания базы используется оператор CREATE DATABASE, для соединения с уже существующей базой данных — оператор CONNECT (подробнее см. «Руководство по SQL», глава 6). Присоединиться к уже существующей БД можно непосредственно при запуске утилиты, указав имя базы, и, если необходимо, имя пользователя и пароль [1]. Необязательный переключатель -role задаёт имя роли, права которой будут учитываться при работе с базой данных.

isql 127.0.0.1:c:\temp\base.fdb –user testuser –password pass -role rdb$admin

Символ терминатора

Символом конца строки (завершения команды) в ISQL по умолчанию является точка с запятой. Этот символ можно изменить командой:

SET TERM <строка>;

где <строка> может быть как одним символом, так и группой символов.

Транзакции в ISQL

ISQL может использоваться для выполнения операций трех типов:

  • изменение структуры БД (DDL-операции);

  • изменение и выборка данных из БД (DML-операции);

  • просмотр структуры БД (извлечение метаданных).

В каждом из этих случаев, если не задано отдельно оператором SET TRANSACTION, ISQL автоматически запускает транзакцию по умолчанию.

При выполнении DDL-операции эта транзакция автоматически подтверждается после ввода каждого оператора DDL, и стартует новая транзакция. Отключить режим автоматического подтверждения DDL-операций можно командой SET AUTO[DDL] {OFF|ON}.

При выполнении запроса выборки/изменения данных стартует транзакция с уровнем изоляции SNAPSHOT. Такая транзакция будет активной до тех пор, пока не будет вручную подтверждена оператором COMMIT или отменена оператором ROLLBACK.

Извлечение метаданных производится с помощью команды SHOW. При этом ISQL запускает транзакцию с уровнем изоляции READ COMMITED, что дает возможность видеть все изменения метаданных, подтвержденные другими пользователями.

Переключатели командной строки

Переключатели командной строки начинаются в символа "-". Достаточно указать только начальные символы переключателей.

Таблица 8.1 Опции ISQL

Опция

Описание

-a(ll)

Извлечение всех метаданных, включая не-SQL объекты (например внешние функции). Используется совместно с командой extract.

-b(ail)

Этот переключатель указывает утилите поручить ошибку ОС, но только в пакетном режиме (set bail on). Переключатель возвращает код ошибки операционной системе. Он был добавлен для предотвращения выполнения скриптов после обнаружения ошибки.

-c(ache) <число>

Задать число страниц, которые будут кэшироваться при соединении с БД.

-ce(rtificate) <алиас>

Использовать сертификат для проверки подлинности пользователя при многофакторной аутентификации.

-ch(arset) <кодировка>

Задать кодировку для текущего соединения (set names).

-d(atabase) <база данных>

Задать имя и путь к БД, которое будет записано в выходной поток.

-e(cho)

Включает или подавляет дублирование команд на указанное устройство вывода (монитор, в файл, и т. д.) (set echo on).

-ex(tract)

Извлечь метаданные.

-f(etch_password)

Извлечь пароль из файла.

-i(nput) <имя файла>

Задать файл с SQL-запросами для выполнения (set input).

-l(ogin)

Эффективный логин доверенного пользователя. Для аутентификации по паролю с именем другого пользователя. См. параметр конфигурации TrustedUser.

-m(erge)

Перенаправление ошибок на поток стандартного вывода.

-m2

Отправлять информацию о статистике и планах в выходной файл, который указан в переключателе -o(utput).

-n(oautocommit)

Отключить автоматическое подтверждение DDL-операций (set autoddl off).

-nod(btriggers)

Не запускать триггеры базы данных.

-now(arnings)

Не показывать предупреждения.

-o(utput) <имя файла>

Задать файл для вывода результата выполнения запросов. Без аргументов перенаправляет вывод на стандартное устройство вывода (монитор)(set output).

-pag(elength) <размер>

Размер страницы.

-p(assword) <пароль>

Пароль пользователя.

-pi(n) <PIN>

Задать PIN (пароль), если он необходим для получения закрытого ключа сертификата пользователя.

-q(uiet)

Не показывать сообщение "Use CONNECT...".

-r(ole) <роль>

Имя роли.

-r2 <роль>

Имя роли с учетом регистра.

-s(qldialect) <диалект>

SQL диалект (set sql dialect).

-t(erminator) <строка>

Команда терминатора (set term).

-ti(meout) <секунды>

Время в секундах, по истечении которого сессия бездействующего пользователя будет заблокирована. Подробнее см. Блокирование сеанса пользователя . Начиная с версии РЕД Базы Данных 5.0.3 опция недоступна.

-tr(usted)

Использовать доверительную аутентификацию.

-to(ken) <token>

Токен для аутентификации по протоколу OpenIDConnect.

-u(ser) <пользователь>

Имя пользователя.

-x

Извлечение метаданных.

-xn

Извлечь метаданные, опустив блоки SET TERM ^ ; ... SET TERM ; ^.

-z

Показать версии утилиты и сервера

-v(erify) <алиас сертификата>

Алиас сертификата, которым сервер будет удостоверять свою подлинность клиенту при аутентификации плагином VerifyServer.

Общие команды

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

Таблица 8.2 Общие команды ISQL

Команда

Описание

BLOBDUMP <ID blob> <имя файла>

Сохраняет данные BLOB в указанном файле.

<ID blob>- идентификатор, содержащий два шестнадцатеричных числа, разделенных двоеточием (:). Первое число является идентификатором таблицы, содержащей столбец BLOB. Второе - последовательный номер объекта. Для получения этого идентификатора выдайте любой оператор SELECT, который выбирает столбец BLOB. Выход покажет шестнадцатеричный идентификатор BLOB выше или на месте столбца BLOB в зависимости от того, установлен ли SET [DISPLAY] в ON или OFF.

BLOBVIEW <ID blob>

Отображает данные BLOB в текстовом редакторе по умолчанию.

<ID blob>- идентификатор, содержащий два шестнадцатеричных числа, разделенных двоеточием (:). См. описание BLOBDUMP для определения идентификатора.

Замечание: BLOBVIEW может вернуть ошибку "Invalid transaction handle" после закрытия редактора. Для исправления ситуации запустите транзакцию вручную с помощью команды SET TRANSACTION.

EDIT [<имя файла>]

Позволяет отредактировать и заново выполнить предыдущую команду isql или пакет команд в исходном файле. <имя файла> (необязательно) - полностью заданное имя файла для редактирования в файловой системе.

HELP

Отображает список команд isql с их описанием.

INput <имя файла>

Читает и выполняет блок команд из указанного текстового файла (скрипта SQL). Входные файлы могут содержать другие команды INPUT, предоставляя таким образом возможность проектирования цепочного или структурированного набора скриптов DDL.

OUTput [<имя файла>]

Перенаправляет выходные данные в файл на диске или на стандартное устройство вывода (монитор). Если имя файла не указано, результаты появятся на стандартном выводе, на мониторе (т. е. вывод в файл отключен).

SET

См. Команды SET

SHELL [<команда>]

Предоставляет временный доступ к окну командной строки без подтверждения или отката любой транзакции. Аргумент <команда> является необязательным, это команда или вызов, допустимый в командной строке, из которой была запущена isql. Команда будет выполнена, а управление возвращено isql. Если команда не указана, isql открывает интерактивную сессию в командной строке, ввод EXIТ возвращает управление isql.

SHOW

См. Команды SHOW

EXIT

Подтверждает текущую транзакцию без подсказки, закрывает базу данных и завершает сессию isql.

QUIT

Отменяет текущую транзакцию и закрывает окно isql.

RECONNECT [ [PASSWORD '<пароль>'] | [CERTIFICATE '<алиас_сертификата>' [PIN <пароль_закрытого_ключа>] ] ]

Позволяет возобновить заблокированное подключение к базе данных. Авторизационные данные, которые необходимо указать, зависят от способа аутентификации во время первого подключения к базе данных. В случае использования доверенной аутентификации, указывать авторизационные данные не требуется.

Команды SHOW

Команды SHOW используются для отображения метаданных, включая таблицы, индексы, процедуры, триггеры и привилегии. Они могут отображать список имен всех объектов указанного типа или предоставлять детальную информацию о конкретном объекте, заданном в команде.

SHOW <объект> [<имя объекта>|<шаблон имени объекта>]

Задание имени объекта по маске производится с помощью группового символа «%», который будет задавать маску имен объектов подобно LIKE в SQL-запросах, то есть обозначает любое количество любых символов в именах объектов.

Следующий пример покажет все таблицы, начинающиеся с tab.

show tables tab%
Таблица 8.3 Команды SHOW

Команда

Описание

SHOW ALL

Покажет все метаданные.

SHOW CHECKs <имя таблицы>

Отображает имена и тексты всех определенных пользователем ограничений CHECK, заданных для указанной таблицы.

SHOW COMMENTs

Отображает все комментарии, которые были созданы для разных объектов текущей БД.

SHOW {COLLATIONs | COLLATION <имя>}

SHOW {COLLATEs | COLLATE <имя>}

Выводит список всех определенных пользователем параметров сортировки текущей БД.

SHOW {DOMAINs|DOMAIN <имя>}

Отображает определение одного указанного домена <имя> или отображает список имен всех доменов, объявленных в базе данных (DOMAINs) .

SHOW {DATABASE|DB}

Отображает информацию о подключенной базе данных (имя файла, размер и количество выделенных страниц, интервал очистки, номера транзакций, статус Forced Writes, ODS, набор символов по умолчанию).

SHOW DEPENdencies <имя объекта>

SHOW DEPENdency <имя объекта>

Отображает все зависимости для указанного имени объекта. На выходе - разделенный запятыми список других объектов БД, с которыми указанный объект зависим.

SHOW {EXCEPtions|EXCEPtion <имя>}

Отображает текст одного указанного исключения <имя> или отображает список имен и текстов всех исключений, объявленных в базе данных (EXCEPtions).

SHOW {FILTERs | FILTER <имя>}

Выдает список всех BLOB-фильтров, объявленных оператором declare filter или показывает подробную информацию о конкретном фильтре.

SHOW SYStem {FUNCtions|FUNCtion <имя>}

Отображает объявление указанной UDF функции <имя> или отображает список имен всех UDF функций, объявленных в базе данных (FUNCtions).

SHOW {FUNCtions|FUNCtion <имя>}

Отображает объявление указанной хранимой функции <имя> или отображает список имен всех хранимых функций, объявленных в базе данных (FUNCtions).

SHOW SYStem {GENERATORs|GENERATOR <имя>}

SHOW SYStem {SEQuences|SEQuence <имя>}

Эти две команды идентичны. Отображают объявление указанного системного генератора <имя> вместе с его текущим значением или отображает список имен всех системных генераторов, объявленных в базе данных вместе с их текущими значениями (GENERATORs|SEQuences).

SHOW {GENERATORs|GENERATOR <имя>}

SHOW {SEQuences|SEQuence <имя>}

Эти две команды идентичны. Отображают объявление указанного генератора <имя> вместе с его текущим значением или отображает список имен всех несистемных генераторов, объявленных в базе данных вместе с их текущими значениями (GENERATORs|SEQuences).

SHOW {GRANTs | GRANT {<имя объекта>|<имя роли>}}

Если команда содержит GRANTs, то она отображает список всех привилегий в текущей БД. Иначе отображает информацию привилегий и ролей по отношению к указанному объекту в подключенной базе данных или отображает членство пользователей в роли.

SHOW {INDexes|INDICES}

SHOW {INDICES|INDexes} <имя таблицы>

SHOW INDex <имя индекса>

Первая форма отображает информацию обо всех индексах для всех таблиц в подключенной базе данных. Вторая форма отображает информацию об индексах для указанной таблицы <имя таблицы>. Наконец третья форма отображает информацию об указанном индексе.

SHOW {MAPPING | MAPPING <имя>}

Показывает все созданные отображения объектов безопасности в подключенной базе данных или информацию о конкретном отображении.

SHOW {PROCedures | PROCedure <имя>}

Отображает все процедуры в подключенной базе данных с их зависимостями или отображает текст указанной процедуры с объявлениями и типами (входной/выходной) каждого аргумента.

SHOW {PACKAGES | PACKAGE <имя>}

Отображает все пакеты в подключенной базе данных с их зависимостями или отображает содержимое указанного пакета.

SHOW {ROLEs | ROLE <имя>}

Отображает имена ролей SQL в подключенной базе данных или отображает всех пользователь, получивших данную роль.

SHOW SECCLAsses <имя объекта>

Отображает информацию о классах безопасности для данного объекта.

SHOW SQL DIALECT

Отображает диалекты SQL клиента и подключенной базы данных.

SHOW SYStem [<имя таблицы>]

Команда без параметров отображает имена системных таблиц, функций и сортировок для конкретных наборов данных. Для уточнения деталей о конкретной таблице укажите имя таблицы.

SHOW {TABLEs | TABLE <имя>}

Отображает список имен всех таблиц в алфавитном порядке или показывает подробности указанной таблицы.

SHOW {TABLESPACEs | TABLESPACE <имя табличного пространства>}

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

SHOW {TRIGgers | TRIGger <имя>}

Отображает список имен всех таблиц вместе с именами их триггеров в алфавитном порядке или для заданного триггера указывает таблицу, к которой он принадлежит, отображает параметры заголовка, статус активности и исходный код PSQL тела триггера.

SHOW USERS

Выводит список пользователей, соединенных с БД в настоящее время.

SHOW VERsion

Отображает информацию о программной версии isql и серверной программы РЕД База Данных, а также номер структуры на диске (ODS) подключенной базы данных.

SHOW {VIEWs | VIEW <имя>}

Отображает все представления или информацию об указанном представлении.

SHOW {JOBs | JOB <имя>}

Отображает все задания и краткую информацию о них: имя задания, владелец, состояние. Или показывает полную информацию о конкретном задании: имя задания, состояние, владелец, текст задания, расписание в формате cron.

SHOW WIRE_STATistics

Отображает сетевую статистику, cобранную с момента установки соединения.

Команды SET

Команды SET позволяют просматривать и изменять некоторые вещи, связанные со средой ISQL. Отдельные из них доступны в скриптах.

Таблица 8.4 Команды SET

Команда

Описание

SET

Выводит на экран текущие установленные опции SET

SET AUTO[DDL] [on|off]

Задает, будут ли операторы DLL подтверждаться автоматически после их выполнения или будут подтверждаться после явного выполнения COMMIT. Оператор доступен в скриптах. Без аргументов - просто переключает AUTODDL между включено и выключено.

SET BAIL [on|off]

Задание данной опции определяет поручить или нет ошибку ОС, но только в пакетном режиме. Переключатель возвращает код ошибки операционной системе. Команда была добавлена для предотвращения выполнения скриптов после обнаружения ошибки.

SET BLOB [n|all|off]

Задает необходимость отображения подтипа ВLOВ и отображения данных BLOB. n - отображать ВLOВ заданного подтипа. Значение по умолчанию n=1 (текст). Положительные числа определены в системе; отрицательные числа определяются пользователем. all - отображать данные ВLOВ любого подтипа. off - отключает отображение данных ВLOВ. Вывод показывает только идентификатор ВLOВ (два шестнадцатеричных числа, разделенных двоеточием).

SET BULK_INSERT <подготовленный insert запрос>

Примитивная обработка подготовленных запросов на вставку. После ввода этой команды пользователь входит в интерактивный режим (BULK>), где требуется ввести параметры в виде кортежа (val1, ..., valN). Для выхода из интерактивного режима введите пустую строку или любой символ, отличный от '(' и '--' (можно явно выйти, введя слово stop). Кортежи должны располагаться на одной строке, за исключением параметров в кавычках. Однако, если добавить '+++'} после запятой, параметры кортежа можно переносить на следующую строку. Одиночные комментарии ('--') можно добавлять только между кортежами. Команды commit или commit work вводятся с первого символа строки и располагаются на одной строке. Любые символы, идущие за кортежем, кроме ')' и '+++', будут игнорироваться.

SET COUNT [on|off]

Включает/выключает отображение количества строк, найденных по запросам.

SET DECFLOAT ROUND <режим>

Изменение режима округления для типа DECFLOAT. Подробнее о типе DECFLOAT см. Руководство по SQL.

Поддерживаются следующие режимы округления:

  • CEILING

  • HALF_UP

  • HALF_DOWN

  • REROUND

  • UP

  • HALF_EVEN

  • FLOOR

  • DOWN

SET DECFLOAT TRAPS TO <trap>[, <trap> ...]

Изменение обработки ошибок для типа DECFLOAT. Подробнее о типе DECFLOAT см. Руководство по SQL.

Исключения могут генерироваться для следующих ситуаций:

  • Division_by_zero

  • Inexact

  • Invalid_operation

  • Overflow

  • Underflow

SET DECFLOAT BIND <bind-type>

Изменение отображения значений DECFLOAT на другие доступные типы данных. Подробнее о типе DECFLOAT см. Руководство по SQL.

Допустимые типы для привязки:

  • NATIVE

  • DOUBLE PRECISION

  • CHAR[ACTER]

  • BIGINT[,<точность>]

SET ECHO [on|off]

Включает/выключает отображение команд до их выполнения.

SET EXPLAIN [on|off]

Включает/выключает расширенного подробного плана запроса. Этот план выводит более подробную информацию о методах доступа используемых оптимизатором, однако его нельзя включить в запрос.

SET GENERATOR <имя генератора> TO <значение>

Устанавливает значение последовательности или генератора в заданное значение.

SET HEADING [on|off]

Включает/выключает отображение заголовков столбцов.

SET KEEP_TRAN_PARAMS [on|off]

Включает/выключает сохранение параметров транзакции. Если установлено значение ON, то будет сохранён полный текст SQL следующего успешного оператора SET TRANSACTION, и новые транзакции запускаются с использованием того же текста SQL (вместо режима CONCURRENCY WAIT по умолчанию). Если установлено значение OFF, то новые транзакции будут запускаться с параметрами по умолчанию. Имя KEEP_TRAN можно использовать в качестве сокращения KEEP_TRAN_PARAMS.

SET LIST [on|off]

Задает формат отображения результатов запросов SELECT. По умолчанию данные на экране выводятся в табличном варианте, где сверху названия столбцов, а под ними все строки, удовлетворяющие запросу SELECT. Значение ON позволяет выводить результат в другом виде, где для каждой строки (результата запроса) выводится своя отдельная таблица (с заголовками столбцов слева).

SET LOCAL_TIMEOUT <значение>

Позволяет установить тайм-аут выполнения оператора (в миллисекундах) для следующего оператора. После выполнения SQL оператора он автоматически сбрасывается в ноль.

SET NAMES <csname>

Задает набор символов, который будет активным в транзакциях базы данных.

SET PLAN [on|off]

Задает, нужно ли отображать план запроса оптимизатора.

SET PLANONLY

Задает только подготовку запросов SELECT и отображение плана без выполнения самого запроса.

SET [TRUSTED] ROLE

Изменяет текущую роль. Позволяет установить контекстной переменной CURRENT_ROLE одну из назначенных ролей для пользователя CURRENT_USER или роль, полученную в результате доверительной аутентификации (SET TRUSTED ROLE).

SET {ROWCOUNT|MAXROWS} [<n>]

Указывает какое максимальное количество строк будет выводится при выполнении оператора SELECT. Значение 0 (стоит по умолчанию) говорит о том, что ограничений нет.

SET SQLDA_Display [on|off]

Отображает или скрывает внутренние подробности об SQL-операторах, которые были выполнены isql.

SET SQL DIALECT <n>

Устанавливает SQL-диалект в то значение, которое было задано для сессии клиента. \(n\in\{1,2,3\}\).

SET STATs [on|off]

Определяет, отображать ли статистику выполнения, которая будет следовать за выходными данными запроса. Формат вывода статистики:

  • Current memory - Объём памяти, используемой сервером (в байтах)

  • Delta memory - Показывает, на сколько байт изменилось использование памяти (значение Current memory) за время выполнения запроса

  • Max memory - Максимальное использование памяти, которое было зафиксировано с момента запуска сервера

  • Elapsed time - Время выполнения запроса

  • Cpu - Время использования CPU

  • Buffers - Количество кэшированных страниц

  • Reads - Количество страниц, считанных с диска

  • Writes - Страницы, записанные из кэша на диск (или в кэш операционной системы). Insert, update, delete - влияют на этот показатель, также влияет сборка мусора при select.

  • Fetches - Индикатор операций с памятью (включая CPU). Сколько было обращений к странице в кэше, чтение записей, чтение ключей, чтение страниц указателей, и т.п.

SET TIME [on|off]

Задает, отображать ли время в значении DATE (только диалект 1).

SET TERM <строка>

Задает символ, который будет использоваться в качестве терминатора команды или оператора. Он доступен в скриптах.

SET TRANSACTION

Запускает на выполнение транзакцию с заданными характеристиками.

SET {WARNINGS|WNG} [on|off]

Задает, выводить ли предупреждающие сообщения.

SET WIDTH <столбец> [<n>]

Используя команду set width, пользователь может регулировать ширину столбца на экране. Но только для character - столбцов. <n> - количество символов.

SET WIRE_stats [on|off]

Включает/выключает отображение сетевой статистики, которая отображается после выполнения запроса По умолчанию установлено значение OFF.

Счетчики статистики разделены на две группы: логические и физические. Логические счетчики показывают количество пакетов в рамках сетевого протокола и количество отправленных (до сжатия) и полученных (после декомпрессии) байт. Физические счетчики показывают количество пакетов и байт, отправленных и полученных по сети. На количество байт может повлиять сжатие сетевого трафика, если оно включено. Также показывается количество передач сетевых пакетов: это число изменений сетевых вызовов с "отправки" на "получение" Сетевая статистика собирается только удаленным провайдером, то есть для встроенных соединений она всегда равна нулю. Так как сетевая статистика собирается на клиентской стороне, то направление сетевого ввода-вывода (отправлено, получено) отображается относительно клиента.

SET EXEC_PATH_DISPLAY {BLR | OFF}

Отладочная команда, показывающая BLR (скомпилированную форму) оператора.

8.2. Утилита GBAK

Утилита gbak, входящая в поставку РЕД Базы Данных, является средством создания резервных копий баз данных и восстановления баз данных из резервных копий. Она есть во всех дистрибутивах для всех платформ. И в отличие от интерактивных средств, использующих Services API (например, RDB Expert), позволяет автоматизировать процесс резервного копирования.

Термин "резервное копирование" имеет достаточно общий смысл, целью которого является получение копии базы данных, пригодной для архивирования. Например, "резервную копию" бызы данных можно изготовить простым способом – скопировать базу данных, предварительно остановив сервер РЕД Базы Данных (иначе, при работающем сервере, копия будет являться "поврежденным файлом", т. к. копирование производится последовательно, а база данных – файл произвольного доступа). Если же нужно сделать резервную копию базы данных "на ходу", во время работы СУБД, то для этого и предназначен gbak.

Примечание

В gbak действует принцип «обратной совместимости». Это значит, что созданные резервные копии в более ранних версиях «РЕД База Данных» могут быть восстановлены в более поздних, но не наоборот.

Права на запуск gbak

Для того, чтобы выполнить любую операцию над базой данных с помощью gbak, необходимо пройти процедуру идентификации и аутентификации — указать имя и пароль пользователя, который имеет право на запуск сервиса gbak. Это могут сделать SYSDBA, владелец базы, администратор с ролью rdb$admin или любой другой пользователь с привилегией USE_GBAK_UTILITY (подробнее см. Распределение системных привилегий ). Для указания имени и пароля пользователя используются переключатели -user и -pa[ssword], соответственно, например:

gbak -b employee.fdb emp.fbk -user testuser -pas pass -role rdb$admin ...

Необязательный переключатель -role задаёт имя роли, права которой будут учитываться при выполнении каких-либо действий утилиты. Поэтому если пользователь не указывает роль, то он получает права только тех ролей, которые ему назначены с DEFAULT.

Имя пользователя и пароль можно не указывать, если в системе установлены контекстные переменные ISC_USER и ISC_PASSWORD. А также если используется доверительная аутентификация Windows (Win_Sspi) или доверенная через механизм GSSAPI (gss), и пользователь системы, от имени которого запускается утилита gbak, является членом группы администраторов.

Далее в примерах опции -user, -pas и -role будем опускать для наглядности команд.

Имена файлов

Имя базы

Поскольку gbak - это программа, которая читает данные из базы данных, то сама база данных и сервер могут находиться где угодно.

В следующем примере использован локальный коннект:

gbak -b employee.fdb employee.fbk

подразумевающий, что gbak выполняется на сервере.

Если запускать gbak с клиентской машины, и обращаться к серверу, то тогда вместо employee.fdb надо было бы писать

server:c:\Firebird\bin\employee.fdb

то есть штатную строку коннекта с указанием сервера и пути к БД (или алиаса).

Разумеется, gbak создавая резервную копию, будет создавать ее локально, т. е. на компьютере где находится gbak. И если сервер – это другой компьютер, то фактически вся база данных будет считана по сети.

Примечание

Если требуется осуществить резервное копирование в файл на стороне сервера, лучше использовать сервисы.

Имя резервной копии

Имя резервной копии может быть абсолютно любое, включая любое расширение. Например, bak, gbk, fbk, и так далее. Но лучше имя резервной копии формировать как: имя базы и дата, причем дату лучше всего указывать в формате YYYYMMDD – так имена файлов будут корректно сортироваться при просмотре папки.

Опции утилиты

В таблицах приведены все доступные опции утилиты gbak и краткое описание к ним. Они сгруппированны по назначению: для резервного копирования, для восстановления и опции, доступные в обеих операциях.

Более подробно о большинстве опций будет рассказано в подразделах, посвященных созданию резервных копий и восстановлению из них.

Таблица 8.5 Общие опции GBAK (для backup и restore)

Опция

Описание

-crypt <имя плагина>

Имя плагина для шифрования файла резервной копии незашифрованной базы данных или для шифрования файла базы данных, восстановленной из незашифрованной резервной копии. Его также можно использовать в сочетании с ключом -KEYNAME.

Опцию -KEYHOLDER нужно указывать обязательно.

-d[irect_io]

Прямой ввод-вывод для файла резервной копии.

-fe[tch_password]

Получить пароль из файла.

-ig[nore]

Игнорировать ошибки контрольных сумм.

Предупреждение

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

-keyholder <имя плагина>

Это плагин хранилища ключей шифрования, необходимый gbak для доступа к зашифрованной базе данных.

-keyname <имя ключа>

Явное присвоение имени ключу вместо ключа по умолчанию, указанного в исходной базе данных (при резервном копировании) или в файле резервной копии (при восстановлении).

-m[eta_data]

Производит резервное копирование или восстановление только метаданных.

-pas[sword]

Пароль пользователя, выполняющего операцию gbak (см. Права на запуск gbak).

-ro[le]

Подсоединиться с использованием роли (см. Права на запуск gbak).

-se[rvice]

Создаёт резервную копию на том же компьютере, где находится база данных-источник. Для этого вызывается Service Manager на компьютере-сервере.

-skip_d[ata] <шаблон>

Не сохранять в бэкап (или рестор) данные таблиц, имена которых соответствуют указанному здесь регулярному выражению в SQL-синтаксисе (см. оператор SIMILAR TO) [3].

-include[_data] <шаблон>

Включать только данные таблиц, имена которых соответствуют указанному здесь регулярному выражению в SQL-синтаксисе (см. оператор SIMILAR TO). Причем, если <шаблон> для -INCLUDE_DATA и -SKIP_DATA соответствует одной и той же таблице, то таблица пропускается.

-st[atistics] TDRW

Вывести статистику в процессе работы (работает вместе с -v(erbose) и -verbi(nt)).

T — время от начала работы gbak;

D — время прошедшее с последнего вывода на экран;

R — число страниц прочитанных с последнего вывода на экран;

W — число страниц записанных с последнего вывода на экран.

-tru[sted]

Использовать доверительную аутентификацию (Win_Sspi).

-user

Имя пользователя, выполняющего операцию gbak (см. Права на запуск gbak).

-v[erify]

Отчет о каждом выполненом действии

-verbi[nt] <n>

Подробный вывод лога действии с заданным интервалом обработанных записей. Минимальное значение - 100.

-y {<путь к файлу> | SUPPRESS}

Вывод лога в файл. Указывается совместно с -v(erify) или -verbi(nt).

Если указан параметр suppress, не будет выведено никакой информации даже с опцией -v(erify).

-z

Показать версию gbak и версию сервера «РЕД База Данных».

Таблица 8.6 Backup опции GBAK

Опция

Описание

-B[ACKUP_DATABASE] [O[VERWRITE]]

Основная опция при создании резервной копии. Если файл резервной копии уже существует, то резервное копирование не будет выполнено. Но если указать опцию O[VERWRITE], файл бэкапа будет заменен.

-co[nvert]

Преобразование внешних таблиц (external tables) во внутренние таблицы.

-e[xpand]

Не производить сжатие резервной копии. По умолчанию резервная копия записывается в "сжатом" виде.

-fa[ctor] n

Использовать блокирующий фактор n для ленточного накопителя. Устарел.

-g[arbage_collect]

Не собирать мусор во время резервного копирования [4].

-l[imbo]

Игнорировать зависшие двухфазные транзакции (limbo).

-nod[btriggers]

Предотвращает срабатывание триггеров базы данных во время резервного копирования.

-nt

Создаёт резервную копию в непереносимой формате между аппаратными платформами.

-ol[d_descriptions]

Производит резервное копирование метаданных в формате старого стиля, т.е. в режиме совместимости со старыми базами данных. Устарел.

-par[allel] <n>

Количество параллельных рабочих потоков для бэкапа. Включает многопоточное выполнение резервного копирования.

-t[ransportable]

Создаёт транспортабельную (переносимую) резервную копию. Этот параметр включен по умолчанию, поэтому указывать его нет никакой необходимости.

-zip

Сжать файл резервной копии перед его шифрованием. После шифрования файл почти не сжимается. Для сжатия используется плагин zstd с 5 уровнем сжатия в 1 поток. Такой сжатый файл может быть распакован только восстановлением gbak. Ключ -zip не нужен для восстановления, потому что формат определяется автоматически.

-com[pressor] [<имя плагина> [<уровень сжатия> [<кол-во потоков>]]]

Сжать файл резервной копии перед его шифрованием. После шифрования файл почти не сжимается. С РЕД Базой Данных поставляются плагины zstd и zlibcompressor. Сжатие плагином zstd выполняется быстрее, итоговый размер резервной копии будет меньше, чем при использовании zlibcompressor. Плагин zstd поддерживает 22 уровня сжатия, а zlibcompressor 9. Плагин zlibcompressor выполняет сжатие в 1 поток и проигнорирует указанное количество потоков. По умолчанию используется плагин zstd с 5 уровнем сжатия в 1 поток. Такой сжатый файл может быть распакован только восстановлением gbak. Ключ -com не нужен для восстановления, потому что формат определяется автоматически.

Таблица 8.7 Restore опции GBAK

Опция

Описание

-C[REATE_DATABASE]

Восстанавливает (создаёт) базу данных из бэкапа в новый файл.

-R[ECREATE_DATABASE] [O[VERWRITE]]

Создаёт новую базу данных или заменяет (если указана опция O) существующую базу данных из бэкапа.

-REP[LACE_DATABASE]

Восстанавливает файл базы данных, заменяя имеющуюся базу данных.

-bu[ffers]

Задать размер страничного кэша для БД.

-fix_fss_d[ata] <кодировка>

Исправить кодировку данных

-fix_fss_m[etadata] <кодировка>

Исправить кодировку метаданных

-i[nactive]

Деактивировать индексы во время восстановления. При использовании опции в логе восстановления будет сообщение "gbak: WARNING:Database is not online due to inactive indexes (option -I)". Перед возвращением базы данных в режим "online" не забудьте активировать индексы.

-k[ill]

Восстановить без создания теневых копий

-mo[de] <режим доступа>

Режим доступа "read_only" или "read_write"

-n[o_validity]

Отключение всех ограничений проверки данных (check) и ограничений NOT NULL. При использовании опции в логе восстановления будет сообщение "gbak: WARNING:Database is not online due to skipped restoring of validity conditions (option -N)". Перед возвращением базы данных в режим "online" не забудьте пересоздать отключенные ограничения.

-o[ne_at_a_time]

Подтверждать транзакцию после восстановления каждой таблицы.

-p[age_size]

Установить размер страницы

-replica <режим>

Настраивает режим реплики восстанавливаемой базы данных: "none", "read_only" или "read_write".

-par[allel] <n>

Количество параллельных рабочих потоков для рестора. Включает многопоточное выполнение восстановления БД, если MaxParallelWorkers > 1 (см. firebird.conf). Вместо этого параметра утилиты можно указать параметр конфигурации ParallelWorkers.

-use_[all_space]

Не резервировать место под версии записей. Максимально заполнять страницы данных (для read-only баз).

-rdb_map[ping_file] <файл с отображением>

Для корректного восстановления БД с версии 2.X, если ее бэкап содержит внешние Java функции или процедуры. Необходимость в этой опции возникла по причине изменения синтаксиса: в версии 2.X при объявлении внешней функции(процедуры) не указывались ее аргументы, в отличии от версии 3.0 и выше. Поэтому, если функции(процедуры) имеют аргументы, следует создать текстовый файл <файл с отображением>, где первый столбец - имя функции(процедуры) в java, а во втором - типы аргументов:

package.class.Function1 arg1,arg2,arg3
package.class.Function2 arg1,arg2,arg3

В этом случае нужная java функция (процедура) будет подбираться на лету просто по имени.

-ts_map[ping] <файл с отображением>

Для корректного восстановления БД, если ее бэкап содержит таблицы или индексы, сохраненные в табличных пространствах. Текстовый файл <файл с отображением> должен состоять из строк с двумя значениями: первый столбец - имя табличного пространства, второй - новое расположение табличного пространства для восстановленной базы данных. Можно указывать как абсолютный путь, так и относительный, в том числе с использованием псевдонима директории, заданного в directories.conf в секции tablespaces.

tablespace1 d:\db\restore\ts1.dat
tablespace2 d:\db\restore\ts2.dat

В этом случае табличные пространства копируются с новыми путями.

-ts <tablespace> <path>

Позволяет задать путь для табличного пространства. Можно указывать как абсолютный путь, так и относительный, в том числе с использованием псевдонима директории, заданного в directories.conf в секции tablespaces. Опцию можно использовать столько раз, сколько требуется. Также ее можно использовать совместно с -ts_map.

-ts_orig[inal_paths]

Для восстановления табличных пространств по первоначальным путям, по которым они располагались в момент создания бэкапа. При этом все еще можно переопределять пути для некоторых табличных пространств с помощью опций -ts и -ts_map.

Создание резервной копии

Утилита gbak является программой, которая подсоединяется к базе данных, стартует транзакцию snapshot, и затем сохраняет в специальный файл метаданные (описания таблиц, процедур, триггеров и т. д.) и данные (запросами select * from tablename).

Благодаря тому, что считывание данных происходит в транзакции snapshot, gbak на протяжении процесса чтения данных "видит" неизменные данные благодаря версионности. То есть, во время работы gbak другие приложения могут работать с базой данных. Однако, те изменения, которые были произведены приложениями во время работы gbak, разумеется не будут сохранены в резервную копию БД.

Формат командной строки для создания резервной копии:

gbak -B[ACKUP_DATABASE] [O[VERWRITE]] [backup опции] [общие опции] <база данных> <файл резервной копии>

Основная опция при создании резервной копии — -b (другие опции подробно описаны дальше). Причем опции могут быть указаны как в начале, так и в конце.

Ключ -b означает, что необходимо выполнить резервное копирование базы данных, путь к которой указан как <база данных>, а результаты резервного копирования сохранить в файл, указанный как <файл резервной копии>. При этом, если путь последнего содержит несуществующие каталоги, они будут созданы автоматически.

Если <файл резервной копии> уже существует, то резервное копирование не будет выполнено. Но если указать опцию O[VERWRITE], файл бэкапа будет заменен [5].

gbak -b o employee.fdb employee.fbk

Теперь поподробнее остановимся на других опциях бэкапа.

-v[erify], -verbi[nt] <n>

Полный вывод лога действий.

Примечание

Эти опции является взаимоисключающими. Использование -verify аналогично указанию -verbint 10000.

Без указаний этих опций gbak не выводит никаких сообщений при выполнении резервного копирования (или восстановления), кроме сообщений об ошибках, если такие возникли.

С указанием опций выводится большой объем информации о выполненных действиях. По умолчанию выходные данные отображаются на экране, но вы можете перенаправить лог в файл с помощью ключа -y.

Впрочем, для систем с регулярным резервным копированием, а также когда backup выполняется долго, лучше сразу указать опцию полного вывода лога действий. Даже в случае появления ошибки контекст этой ошибки будет виден четче, и также будет видно что именно сервер успел поместить в резервную копию до ошибки.

Так выглядит команда с ключом -v:

gbak -b employee.fdb employee.fbk -v

Примечание

Параметр -v в справке, выдаваемой gbak, описан как -v[erify]. Вопреки своему названию, эта опция ничего не проверяет. Скорее, этот параметр должен расшифровываться как "verbose".

Единственный способ проверить резервную копию — восстановить ее, проверить, не содержит ли она ошибок, и, возможно, выполнить несколько запросов для проверки работоспособности.

Если -v[erify] выводит информацию о каждом обработанном действии, то -verbi[nt] <n> - с заданным интервалом обработанных записей. Интервал управляет тем, сколько записей будет выведено gbak; другими словами, он контролирует частоту вывода сообщений "...records written". Минимальное значение - 100.

Так выглядит команда с ключом -verbi:

gbak -b employee.fdb employee.fbk -verbi 200

-y { <имя файла> | SUPPRESS }

Перенаправление лога в файл или полное подавление записи лога.

Указывается совместно с опцией -v(erify) или -verbi(nt).

Если задан параметр -y <имя файла>, то вывод лога будет записан в файл <имя файла>, без какого-либо вывода на экран.

gbak -b employee.fdb employee.fbk -v -y e_bak.txt

Если указан параметр -y suppress, то независимо от указания опций -v или -verbi, не будет выведено никаких сообщений ни в файл, ни на экран:

gbak -b employee.fdb employee.fbk -v -y suppress

Предупреждение

Лог-файл не должен существовать. Если он есть, операция резервного копирования или восстановления завершится неудачей:

gbak -backup employee.fdb employee.fbk -y e_bak.txt -v

gbak:cannot open status and error output file e_bak.txt
gbak:Exiting before completion due to errors

Имя файла лога может быть любое, включая расширение. Расширение лога имеет смысл выбрать таким, чтобы по умолчанию файл открывался Блокнотом или программой, которой вы привыкли просматривать текстовые файлы.

-g[arbage_collect]

Отключает сборку мусора

Если подробнее, то этот параметр запрещает серверу проверять читаемые записи на наличие мусорных, что ускоряет процесс бэкапа. Фактически gbak -b без ключа -g будет вызывать срабатывание кооперативной сборки мусора, причем для всех данных, т. к. будут прочитаны все данные всех таблиц. Создание резервной копии должно выполняться максимально быстро, а соответственно лучше не загружать сервер в это время сборкой мусора. Поэтому рекомендуется всегда использовать такое начало командной строки бэкапа:

gbak -backup -garbage_collect employee.fdb employee employee.fbk

Предупреждение

При резервном копировании никакой "мусор" никогда не попадает в файл backup, ни при каких условиях.

-t[ransportable]

Создание транспортабельной (переносимой) резервной копии.

Этот параметр действует по умолчанию, поэтому указывать его нет никакой необходимости.

Он означает, что полученный файл резервной копии можно восстановить на альтернативной аппаратной платформе, где порядок байт в целых числах отличается. То есть, например, между Intel и Sparc, или HP-UX и Intel, и так далее. Но между Windows и Linux (или другой ОС) на Intel файл резервной копии будет и так переносимым, даже при указании ключа -nt (non-transportable). Так что, про -t, как и про -nt можно забыть, и никогда не указывать их в командной строке gbak.

-e[xpand]

Сжатие (низкой степени) файла резервной копии

По умолчанию gbak -b производит некую легкую компрессию данных. Отключить ее можно параметром -expand.

Были проведы тесты резервного копирования с параметром -expand, которые показали небольшое ускорение процесса бэкап (на 5-7.5%), но сильное увеличение размера резервной копии (до 30%). Так что практическую полезность параметра -expand, учитывая сильное увеличение размера резервной копии, можно считать равной нулю.

Для лучшего сжатия резервной копии используйте опцию -ZIP.

-co[nvert]

Преобразование внешних таблиц в обычные таблицы.

Если в базе данных созданы внешние таблицы (external tables), то при создании резервной копии они будут помещены внутрь бэкапа как обычные таблицы. Без параметра -co внешние таблицы в резервную копию не попадают.

Можно сказать, что -co нужен тогда, когда вам требуется "взять с собой" не только базу, но и внешние файлы. Правда, в зависимости от назначения эти файлы могут иметь разный размер, и может оказаться, что сами они будут больше, чем база данных. Для обычного, регулярного backup, параметр -co не требуется.

-ig[nore]

Игнорирование ошибок контрольных сумм страниц

Если произошло повреждение базы данных, и данные на страницах БД искажены (нули или другая произвольная информация), то сервер при чтении такой страницы будет писать информацию об ошибке контрольной суммы в лог.

Параметр -ig позволяет игнорировать ошибки контрольных сумм страниц. Если во время резервного копирования возникла ошибка при чтении блоба, то блоб будет пропущен, если установлен ключ -ig.

Предупреждение

Поэтому, в обычной командной строке для создания резервной копии БД категорически не рекомендуется указывать параметр -ig. Если база данных вдруг окажется повреждена, то с этим параметром вы можете "не увидеть" повреждение. Так что, -ig для gbak используется только в крайнем случае – когда поврежденная база починена утилитой gfix, но обычный backup не проходит. Только тогда имеет смысл повторить бэкап с опцией -ig.

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

-m[eta_data]

Выполняется резервное копирование или восстановление только метаданных.

Сохраняет только метаданные (описания таблиц, процедуры, триггеры и т. д.). Данные в резервную копию не попадают. При ресторе восстанавливаются только метаданные базы данных, а любые данные из файла резервной копии не восстанавливаются. Используется когда вам нужно сделать копию пустой БД.

gbak -backup -meta_data employee employee.meta.fbk
gbak -create employee.fbk mytest.fdb -meta_data

-l[imbo]

Игнорирование limbo-транзакций

Не сохраняет в резервной копии БД версии записей, которые созданы транзакциями, находящимися в состоянии in limbo. Такое состояние может быть только у не завершившихся транзакций двухфазного коммита (2PC).

Например: если двухфазная транзакция (например, между двумя разными базами данных), завершилась неудачно из-за того, что сервер упал до commit или rollback, но после того, как изменения были подготовлены, то это limbo-транзакция. Этот переключатель заставляет процесс бэкапа игнорировать данные таких транзакций.

Её не следует использовать для обычного резервного копирования, а использовать, как ключ -IG[NORE], только для попытки восстановления после сбоя.

-crypt <имя плагина>

Имя плагина для шифрования файла резервной копии или восстановленной базы данных

Опцию -crypt указывают совместно с опцией -KEYHOLDER (обязательно). Также может указываться опция -KEYNAME.

При создании резервной копии незашифрованной базы данных в опции -crypt указывается плагин шифрования, который будет использоваться для шифрования файла резервной копии.

При создании резервной копии зашифрованной базы данных указывать -crypt не нужно, поскольку по умолчанию будет использоваться тот же плагин и ключ, что и для самой базы данных. Невозможно создать резервную копию зашифрованной базы данных в незашифрованный файл резервной копии.

При восстановлении незашифрованной резервной копии опция -crypt зашифрует новую базу данных с использованием указанного плагина.

При восстановлении базы данных из зашифрованной резервной копии указывать -crypt не нужно, поскольку по умолчанию будет использоваться тот же плагин и ключ, что и для самой резервной копии. Невозможно восстановить зашифрованный файл резервной копии в незашифрованную базу данных.

Пример

Чтобы сделать зашифрованную резервную копию незашифрованной базы данных, выполните:

gbak -b -keyholder MyKeyHolderPlugin -crypt MyDbCryptPlugin -keyname
SomeKey host:dbname encrypted_backup_file

-keyholder <имя плагина>

Имя плагина хранилища ключей шифрования базы данных.

Опцию обычно используют в сочетании с опциями -CRYPT и -KEYNAME (необязательно).

Опция -keyholder должна указываться:

  • при создании резервной копии зашифрованной базы данных (соответственно, без опции -crypt);

  • при создании зашифрованной резервной копии незашифрованной базы данных (совместно с опцией -crypt);

  • при восстановлении из зашифрованной резервной копии в зашифрованную базу данных (без опции -crypt);

  • при восстановлении из незашифрованной резервной копии в зашифрованную базу данных (совместно с опцией -crypt).

Пример 1

Чтобы сделать бэкап зашифрованной базы данных, выполните подобную команду:

gbak -b -keyholder MyKeyHolderPlugin host:dbname backup_file_name

Файл резервной копии будет зашифрован с использованием того же плагина и ключа шифрования, которые используются для шифрования базы данных. Это гарантирует, что украсть данные из файла резервной копии будет не легче, чем из базы данных.

Пример 2

Чтобы создать сжатую зашифрованную резервную копию, выполните:

gbak -b -keyholder MyKeyHolderPlugin -zip host:dbname backup_file_name

Файл резервной копии будет сжат до того, как он будет зашифрован с использованием того же плагина шифрования и того же ключа, который используется для шифрования базы данных.

Пример 3

Чтобы восстановить базу данных, которая была ранее зашифрована, выполните следующую команду:

gbak -c -keyholder MyKeyHolderPlugin backup_file_name host:dbname

Восстановленная база данных будет зашифрована с использованием того же плагина и ключа, что и файл резервной копии. В данном примере это тот же плагин и ключ, что и в исходной базе данных.

-keyname <имя ключа>

Имя ключа, который будет использоваться для шифрования.

Опция -keyname может указываться (необязательно, если этого требует плагин шифрования):

  • при создании зашифрованной резервной копии незашифрованной базы данных (совместно с опцией -crypt и -keyholder);

  • при восстановлении из зашифрованной резервной копии в зашифрованную базу данных с именем ключа, отличным от значения по умолчанию (без опции -crypt, но с опцией -keyholder);

  • при восстановлении из незашифрованной резервной копии в зашифрованную базу данных (совместно с опцией -crypt и -keyholder).

Пример

С помощью следующей команды можно:

  • либо восстановить базу данных из файла резервной копии, созданного с

использованием нестандартных плагинов шифрования Crypt и Keyholder, используя тот же Keyname, который использовался для резервного копирования;

  • либо восстановить незашифрованную резервную копию как зашифрованную

базу данных.

gbak -c -keyholder MyKeyHolderPlugin -crypt MyDbCryptPlugin -keyname
SomeKey non_encrypted_backup_file host:dbname

-d[irect_io]

Прямая запись-чтение файлов резервной копии.

При включении этой опции gbak создает (при бэкапе) или открывает (при восстановлении), файл резервной копии в режиме прямой записи-чтения (без буферизации). В этом режиме не задействуется кэш файловой системы.

Обычно резервная копия записывается (при бэкапе) или считывается (при восстановлении) всего один раз, и нет реальной выгоды от кэширования ее содержимого. Производительность не должна падать, так как gbak читает файл или записывает в него последовательно, используя относительно большие порции данных.

Режим прямой записи-чтения игнорируется, если файл резервной копии записывается в стандартный вывод или считывается из стандартного ввода (т.е. если имя файла резервной копии - stdout или stdin).

-fe[tch_password]

Считать пароль из файла

-FE[TCH_PASSWORD] { <имя файла> | stdin | /dev/tty }

С этой опцией пароль соответствующего пользователя (указанного в -user) считываться из файла, а не указываться в командной строке. Указанное имя файла не заключено в кавычки и должно быть доступно для чтения пользователю, запустившему gbak.

Если имя файла указано как stdin, пользователю будет предложено ввести пароль. В системах POSIX имя файла /dev/tty также приведет к запросу пароля.

-par[allel] <n>

Количество потоков, используемых для создания резервной копии.

РЕД База Данных (начиная с версии 3.0) поддерживает многопоточный бэкап. Он показал себя до 5 раз быстрее обычного бэкапа в один поток. Реальное ускорение зависит от процессора, дисковой подсистемы и структуры базы данных.

По умолчанию используется один поток.

При создании резервной копии эта опция контролирует количество соединений, используемых для чтения пользовательских данных. Каждый дополнительный рабочий поток создает отдельное соединение для чтения данных одновременно с другими потоками. Все соединения используют один и тот же снимок базы данных для обеспечения консистентности резервной копии. Потоки создаются и управляются самим gbak. Метаданные базы данных читаются одним потоком.

Для включения распараллеливания в gbak выполните команду:

gbak –b employee.fdb employee.fbk –par 8 ...

Примечание

Параметры конфигурации MaxParallelWorkers и ParallelWorkers не оказывают влияния на включение или отключение многопоточного бэкапа в gbak за исключением операций создания индекса. MaxParallelWorkers может ограничивать количество параллельных рабочих процессов во время создания индекса, а ParallelWorkers используется при создания индекса, если -par[allel] не указан.

Примечание

Так как каждый рабочий поток создаёт собственное подключение к БД, невозможен параллельный бэкап базы данных в режиме single shutdown. В случае задания параметра -par 2 или более, возникнет ошибка "ERROR: database ... shutdown".

-skip_d[ata] <шаблон>

Исключает данные указанных таблиц из резервной копии или восстановленой базы данных.

В бэкап (или рестор) не попадают данные таблиц, имена которых соответствуют указанному здесь регулярному выражению в SQL-синтаксисе. Метаданные таблицы включаются.

Противоположная опция -INCLUDE_DATA. Чтобы пропустить все данные, используйте -META_DATA.

gbak –b employee.fdb employee.fbk -skip_d table1|table2| ...

Предупреждение

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

Можно использовать опцию восстановления -INACTIVE, чтобы отключить все индексы, первичные, уникальные и внешние ключи. Если есть ограничения CHECK, зависящие от исключенных данных, возможно, потребуется также указать опцию -NO_VALIDITY.

-include[_data] <шаблон>

В резервную копию или восстановленую БД включаются только данные указанных таблиц.

В бэкап (или рестор) попадают данные только тех таблиц, имена которых соответствуют указанному здесь регулярному выражению в SQL-синтаксисе (см. оператор SIMILAR TO). Метаданные остальных таблицы включаются, а данные пропускаются.

Противоположная опция -SKIP_D[ATA].

Если <шаблон> для -INCLUDE_DATA и -SKIP_DATA соответствует одной и той же таблице, то таблица пропускается.

Предупреждение

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

Можно использовать опцию восстановления -INACTIVE, чтобы отключить все индексы, первичные, уникальные и внешние ключи. Если есть ограничения CHECK, зависящие от не включенных данных, возможно, потребуется также указать опцию -NO_VALIDITY.

Замечания

Резервное копирование может быть выполнено в любой момент, во время работы пользователей с базой данных. Эту операцию можно и нужно автоматизировать, сделав резервное копирование регулярным. Без резервных копий есть риск потерять данные, если база данных окажется повреждённой по какой-либо причине.

Категорически нельзя делать резервные копии на тот же самый логический диск, где находится база данных. Еще лучше делать резервные копии на другой физический диск, поскольку чтение и запись будут разделены, и это даст как минимум 30% ускорение процесса резервного копирования.

Восстановление базы данных из резервной копии

Для восстановления базы из резервной копии действует следующая команда:

gbak -C[REATE_DATABASE] [restore опции] [общие опции] <файл резервной копии> <база данных>

Ключ -C означает, что необходимо восстановить базу данных из резервной копии, путь к которой указан как <файл резервной копии>, а результаты восстановления сохранить в файл, указанный как <база_данных>. Недостающие каталоги, если такие имеются, в пути к файлу будут автоматически созданы. Файл <база_данных> не должен существовать, иначе произойдёт ошибка.

Вместо данной команды можно использовать -R[ECREATE_DATABASE] [O[VERWRITE]] (восстанавливает БД в новый файл или восстанавливает ее вместо старой, если используется параметр o) и -REP[LACE_DATABASE] (восстанавливает БД, заменяя имеющуюся базу данных).

gbak -c emp.fbk emp.fdb

База emp.fdb будет восстановлена из резервной копии emp.fbk. Процесс восстановления базы данных из резервной копии происходит следующим образом:

  1. Cервер создает пустую базу данных emp.fdb. ODS базы данных будет определяться версией сервера, а не версией gbak, т. к. только сервер создает базу данных, а gbak при restore всего лишь ее наполняет метаданными и данными.

    Пустая база данных будет содержать все таблицы rdb$ (пока пустые), и будет иметь ряд параметров, например, такие как размер страницы, forced write и т. д., которые или взяты из резервной копии, или установлены в командной строке gbak.

  2. Cервер считывает метаданные (описания таблиц и индексов, процедур) из резервной копии и переносит их в базу данных.

  3. Cервер считывает данные из резервной копии и переносит их в базу данных.

  4. Cервер считывает остальные метаданные (триггеры, гранты, check constraints и т. п.) из резервной копии и переносит их в базу данных

  5. Cервер создает (активирует) все индексы таблиц (которые были активны в момент создания резервной копии).

То есть, восстановленная из резервной копии база данных будет на самом деле не копией старой базы, а совершенно новой базой данных, наполненной старыми данными.

Если в процессе восстановления из резервной копии возникает ошибка в BLR процедуры, функции или триггера, то рестор продолжится, а в лог будет добавлено предупреждение. BLR такого объекта будет отмечен, как невалидный (поле RDB$VALID_BLR устанавливается в 0). После завершения рестора невалидные объекты необходимо перекомпилировать.

Предупреждение

Помните, что если вы делаете восстановление на новой версии сервера, например, резервную копию делали на РЕД Базе Данных 3 (формат БД ODS 12.3), а восстанавливаете на РЕД Базе Данных 5 (формат БД ODS 13.1), то база будет создана в формате, поддерживаемом по умолчанию РЕД Базой Данных 5, и РЕД База Данных 3 с этой базой работать не сможет.

Узнать версию ODS поможет команда:

gstat -h <база_данных>

Предупреждение

Резервные копии тоже имеют свой формат, и резервная копия базы данных, сделанная, например, в РЕД Базе Данных 5 утилитой gbak этой же версии, не может быть восстановлена утилитой gbak от РЕД Базы Данных 3.

Теперь поподробнее остановимся на опциях бэкапа. О некоторых общих опциях (для бэкапа и рестора) : -crypt, -keyholder , -keyname, -d[irect_io], -fe[tch_password], -ig[nore], -m[eta_data], -skip_d[ata], -include[_data], -v[erify], -verbi[nt], -y уже шла речь в предыдущем разделе. О дополнительных параметрах restore рассказано ниже.

-R[ECREATE_DATABASE] [O[VERWRITE]]

Восстановление в новую БД, при необходимости позволяя перезаписать существующую БД.

Эта команда аналогична команде -C[REATE_DATABASE], которая выполняет восстановление базы данных в новый файл. Но если указанный файл уже существует, будет выдано сообщение об ошибке.

Избежать такую ошибку поможет опция o[verwrite]. В таком случае файл с существующей базой данных будет молча удален и вместо него создан новый с тем же именем. Этого допускать нельзя, потому что по разным причинам восстановление из резервной копии может не состояться, и тогда вы останетесь без оригинальной базы данных и с невосстановимой резервной копией.

Если вы замените открытую и работающую базу данных, есть большая вероятность, что вы ее испортите. Для достижения наилучших результатов и минимальной вероятности повреждения базы данных следует закрыть ее перед заменой. Чтобы закрыть базу данных, используйте gfix следующим образом:

gfix -shut -tran 60 employee.fdb

В приведенном выше примере предотвращается запуск любой новой транзакции, что предотвращает выполнение новых запросов или новых сеансов подключения к базе данных. Прежде чем завершить работу базы данных, gfix будет ждать до 60 секунд, пока все выйдут из системы и завершится все текущие транзакции. Если какие-либо длительные транзакции не завершатся по истечении 60 секунд, время завершения работы истечет, а база данных останется открытой.

Предупреждение

Не рекомендуется использовать команду -r[ecreate_database] o[verwrite] с целью избежания потери данных.

Использование -r[ecreate_database] o[verwrite] фактически аналогично использованию -rep[lace_database].

-REP[LACE_DATABASE]

Восстановление в базу данных, позволяя перезаписать существующую базу данных.

Если база данных уже существует, то она будет удалена перед восстановлением. Этого допускать нельзя, потому что по разным причинам восстановление из резервной копии может не состояться, и тогда вы останетесь без оригинальной базы данных и с невосстановимой резервной копией.

Команда -rep полностью аналогична -r o.

Предупреждение

Не рекомендуется использовать команду -rep с целью избежания потери данных.

-bu[ffers] <n>

Изменяет размер кэша базы данных.

По умолчанию кэш базы данных задан в файле конфигурации сервера (параметр DefaultDbCachePages в firebird.conf), и равен 1024 страниц. Это значение действует для всех баз данных, у которых размер кэша задан неявно. Если вы используете на сервере несколько баз данных, то может потребоваться указать для них разный размер кэша, в зависимости от назначения этих баз.

Узнать текущий размер кэша поможет команда gstat -h <база данных>.

Параметр -bu <n> позволяет при восстановлении базы данных задать или изменить этот размер. К сожалению, у gbak можно указать значение -bu только больше 0. Если вы обнаружили, что в бэкапе уже определено значение кэша, то "сбросить" его при восстановлении не получится. Для убирания размера кэша в БД придется использовать gfix.

Если размер кэша вообще задан в БД (а в большинстве случаев это не делают), то этот параметр используется обычно при переносе базы данных, например, со старого сервера на новый, или при переносе БД между архитектурами Classic и SuperServer.

Эквивалентно команде gfix -bu <n>.

gstat -h employee.fdb | grep -i buffer   # Проверить текущий размер кэша
  Page buffers            0

gbak -c -buffer 200 /backups/employee.fbk employee.fdb

gstat -h employee.fdb | grep -i buffer
  Page buffers            200

-fix_fss_d[ata], -fix_fss_m[etadata]

Изменение набора символов метаданных (и данных)

Опции -fix_fss_metadata и -fix_fss_data предназначены для исправления набора символов (charset) метаданных (и данных), которые были записаны в некорректной кодировке. Например, при редактировании процедур или триггеров в код могли попасть комментарии или константы в кодировке none, в то время когда они на самом деле являются символами Windows-1251.

В штатной ситуации указывать эти опции не требуется, но если при восстановлении gbak выводит сообщение об ошибке:

Malformed string

то нужно принудительно указать нужную кодировку при помощи указанных опций. После этого в столбцах Unicode данные будут записаны корректно.

gbak также может выдавать сообщение:

gbak:Invalid metadata detected. Use -FIX_FSS_METADATA option.

что сигнализирует об аналогичной ситуации, и требует явного указания данной опции с нужной кодировкой.

Предупреждение

Указывать опции -fix... можно только один раз. Если вы сделаете еще раз backup/restore этой же базы данных с этими опциями, то исходные тексты процедур и триггеров будут испорчены.

Указание неправильного имени набора символов может привести к логическому повреждению ваших данных.

Предупреждение

Не используйте эту опцию без четкого понимания того, что она делает. Неправильное использование может повредить ваши данные вместо того, чтобы что-то исправить. Всегда сохраняйте копию исходной базы данных и ее резервную копию.

-i[nactive]

Не выполнять создание (активацию) индексов (последняя фаза восстановления).

После восстановления базы данных все индексы в ней останутся отключены (неактивны). Фактически с такой базой данных работать нельзя, т. к. при отключенных индексах Primary key, Foreign key и Unique возможны нарушения целостности данных в таблицах (дублирование первичных ключей и т. д.).

Данный параметр имеет смысл использовать разве что в специфических целях – например, восстановить только данные из бэкапа за максимально быстрое время, или определить длительность создания всех индексов (замерить время gbak -c, затем замерить время gbak -c -i, после чего вычесть одно время из другого – получите длительность активации всех индексов), чтобы определить или текущую производительность каталога temp, или сравнить ее с явно заданным в конфигурации расположении temp на другом физическом диске.

Если вы восстановили бэкап с опцией -i, индексы можно активировать командой alter index <имя индекса> active (для каждого индекса).

-k[ill]

Восстановить базу данных без создания теневый копий

Эта опция восстанавливает базу данных, но не воссоздает ранее существовавшие теневые копии. На самом деле этот параметр не только "не создает" shadow, но и еще удаляет существующие, например в варианте с backup/restore с промежуточным переименованием базы данных.

gbak -b -kill /backups/employee.fbk employee.fdb

Эквивалентно команде gfix -kill.

-mo[de] <режим доступа>

Восстанавливает базу данных в режиме read_write или read_only

-MO[DE] { READ_ONLY | READ_WRITE }

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

gbak -b -mode read_only employee.fbk employee.fdb

Эквивалентно команде gfix -mode read_write/read_only.

Примечание

Эту опцию не следует путать с режимом реплики, настроенным с помощью -REPLICA. Например, база данных, созданная с параметром -REPLICA READ_ONLY, по-прежнему доступна для записи при подключении репликатора, а база данных, созданная с параметром -MODE READ_ONLY, вообще не доступна для записи.

-n[o_validity]

Отключает ограничения CHECK

Эта опция аналогична -i[nactive], за исключением того, что она отключает ограничения CHECK в востанавливаемой базе данных.

-o[ne_at_a_time]

Подтверждать транзакцию после восстановления каждой таблицы.

Эта опция восстанавливает данные потаблично, используя транзакцию для каждой таблицы. Она может быть полезна, если предыдущее восстановление не удалось из-за ошибок данных. Обычно восстановление выполняется за одну транзакцию с одним коммитом в конце восстановления. Если восстановление по какой-либо причине прерывается, конечным результатом является пустая база данных. С опцией -o[ne_at_a_time] запускается транзакция для каждой таблицы и после восстановления каждой таблицы выполняется коммит.

-p[age_size] <размер страниц>

Позволяет задать новый размер страницы базы данных.

По умолчанию база данных восстанавливается с тем же размером страницы базы данных, что и исходная база данных (как записано в файле резервной копии).

Посмотреть размер страницы базы данных можно с помощью команды gstat -h.

gstat -h employee | grep -i "page size"
    Page size               4096

gbak -b -page_size 8192 /backups/employee.fbk employee.fdb

gstat -h employee | grep -i "page size"
    Page size               8192

Сделать рестор с параметром -p - это единственный способ, которым можно изменить размер страницы базы данных. В зависимости от версии допустимые размеры страниц: 1024, 2048, 4096, 8192, 16384 и 32768 байт. Если у базы данных размер страницы 1024 или 2048 байт – рекомендуется сделать backup и restore с указанием размера страницы 4096, 8192 или 16384 байт (если ваша версия сервера поддерживает страницы в 16к). Потому что даже небольшие базы данных с таким небольшим размером страницы имеют явно худшую производительность, чем базы со страницей 4 килобайта и выше.

-par[allel] <n>

Количество потоков, используемых для восстановления из резервной копии.

РЕД База Данных (начиная с версии 3.0) поддерживает многопоточный restore. Он показал себя до 2-х раз быстрее обычного рестора в один поток. Реальное ускорение зависит от процессора, дисковой подсистемы и структуры базы данных.

По умолчанию используется один поток. Но для рестора это не идентично явному указанию -PARALLEL 1.

Для включения распараллеливания в gbak появилась опция -par <n>:

gbak –c backup database –par 8 ...

а также два параметра конфигурации ParallelWorkers и MaxParallelWorkers.

Для рестора параллельная обработка реализована только при построении индексов. При этом внутри ядра создаются N потоков, где N - либо значение, переданное из gbak, либо значение параметра конфига ParallelWorkers (если при ресторе не задан ключ -PAR). N должен быть меньше значения параметра конфигурации MaxParallelWorkers (максимальное допустимое значение - 64), иначе операция завершится с ошибкой. По умолчанию MaxParallelWorkers = 1, т.е. параллельное создание индексов отключено даже если в ресторе задан ключ -PAR.

Параллельные потоки одновременно читают таблицу и сортируют её записи. Затем один основной поток строит дерево сортировки (B+tree) и создаёт индекс.

Предупреждение

Т.к. при параллельном создании индексов рабочие потоки внутри ядра создают собственные подключения к базе, она не может быть восстановлена в режиме single shutdown как это было раньше. Поэтому при использовании опции -par при ресторе база создаётся в режиме multi shutdown, т.е. в процессе рестора к ней может подключиться SYSDBA или владелец базы и сделать с ней что хочет.

-replica

Настраивает режим реплики восстанавливаемой базы данных.

-REPLICA { NONE | READ_ONLY | READ_WRITE }

Режим реплики базы данных хранится в файле резервной копии. При восстановлении по умолчанию этот режим реплики устанавливается для вновь созданной базы данных.

Опция -REPLICA явно устанавливает режим реплики, переопределяя значение, унаследованное от резервной копии. Например, значение NONE сделает базу данных основной (или обычной), READ_ONLY помечает базу данных как реплику, доступную только для чтения, а READ_WRITE — как реплику для чтения/записи.

После восстановления режим реплики базы данных можно изменить с помощью gfix -replica { NONE | READ_ONLY | READ_WRITE } <база данных>.

-use_[all_space]

Максимально заполнять страницы данных (для read-only баз).

По умолчанию базы данных РЕД Базы Данных резервируют примерно 30% пространства на страницах данных, для размещения версий при будущих вставках, удалениях или обновлениях записей. Если предполагается запись базы данных на диск, то лучше базу данных несколько "сжать", указав параметр -use_ при restore (одновременно указав -mode read_only).

Эквивалентно команде gfix -use full. Обратная команда (снятие режима максимального заполнения страниц) – gfix -use reserve.

Замечания

Восстановление (например, проверочное) на тот же самый диск, где находится резервная копия, не так опасно, как в случае backup (когда свободное место может кончится, и резервная копия будет неполной, да еще и база данных может быть повреждена). Но разумеется имеет те же самые проблемы с производительностью, когда восстановление проводится на тот же самый физический диск (поочередные чтение и запись с разных участков диска). Поэтому при восстановлении базы данных из резевной копии рекомендуется использовать разные физические диски.

Работа с GBAK через Services API

Как уже было сказано, gbak - это программа, которая сама выполняет команду резервного копирования, "прокачивая" данные через себя. Но утилита может работать и в другом режиме, используя Services API для выполнения сервером по команде действий, аналогичных gbak. Утилита gbak, использующая Services API, отправляет серверу команду, а сервер ее выполняет сам (то есть не gbak, а сам сервер будет выполнять резервное копирование). В этом случае программа, отдавшая команду, может получать лог выполнения от сервера и выдавать все, что сообщит о процессе сервер. Чтобы включить работу gbak в этом режиме, используйте опцию -se:

gbak -b -g -se server:service_mgr c:\db\e.fdb d:\bak\e.fbk ...
gbak -c -se server:service_mgr d:\e.fbk c:\db\e.fdb

server – имя компьютера, где находится сервер РЕД Базы Данных (если на этом же, то можно указать localhost). server можно не указывать, если сервер "локальный", и работает локальный протокол:

gbak -b -g -se service_mgr c:\db\e.fdb d:\bak\e.fbk ...

service_mgr – имя интерфейса Services API, оно обязательно, неизменно, и пока только одно (может быть в дальнейшем появится что-то еще).

Поскольку не gbak, а сам сервер теперь выполняет резервное копирование, то есть несколько требований:

  • пути к базам (или алиасы) должны быть указаны только серверные, как для базы так и для файла резервной копии.

  • имя сервера к имени базы данных добавлять не нужно, т. к. оно уже должно быть указано как опция команды -se.

  • у сервера должны быть права на запись туда, куда сохраняется резервная копия. На Windows сервер по умолчанию стартует под учетной записью LocalSystem, которая не имеет и не может иметь прав на внешние ресурсы (например, папки с общим доступом). Поэтому, если вы хотите сохранять резервные копии БД на другой компьютер сразу, а не путем копирования получившегося на сервере файла backup – нужно создать пользователя (например, reddatabase), дать этому пользователю права на папки установки сервера, папки с базами данных и папки с резервными копиями, и затем остановить сервер и запустить его указав в параметрах сервиса новое имя пользователя.

Примечание

По результатам тестирования резервное копирование через Services API является самым быстрым, по сравнению с локальным протоколом или tcp/ip (результаты тестирования). Однако, если потребуется прекратить процесс backup или restore, то:

  • для gbak -b/-c достаточно принудительно снять (завершить) процесс gbak.exe, или если он запущен интерактивно, нажать в окне cmd Ctrl-C. Поскольку backup или restore выполняется не сервером, а утилитой gbak, этот процесс будет прекращен.

  • для backup и restore, выполняемых через Services API, это возможно только остановкой сервера, т. к. именно он выполняет этот процесс.

8.3. Утилита NBACKUP

Nbackup позволяет создавать резервные копии и восстанавливать из резервных копий так же, как gbak, и дополнительно позволяет создавать инкрементные копии и восстанавливать из них БД. Инкрементная резервная копия содержит только изменения со времени создания определенной, ранее созданной резервной копии.

Второе назначение Nbackup – блокировать файл базы данных. Таким образом, Вы после этого сможете сами создавать обычные копии или резервные копии с помощью утилит по Вашему выбору. В этом режиме Nbackup ничего не резервирует, а лишь создает подходящие условия, чтобы Вы могли без каких бы то ни было проблем создавать резервные копии.

Таблица 8.8 Опции основных задач утилиты NBACKUP

Опция

Описание

-L(OCK) <база данных>

Блокировка базы данных для резервирования. Это означает, что основной файл базы данных временно замораживается с возможностью внесения изменений. Как и в режиме резервирования, изменения фиксируются во временном файле дельты.

-UN(LOCK) <база данных>

Разблокировка ранее заблокированной базы данных. Сначала определяется наличие любых изменений с момента блокирования базы данных и производится объединение временного файла дельты и основного файла базы данных. После этого база данных переводится в нормальный режим чтения/записи, а временный файл удаляется.

-F(IXUP) <база данных>

Разблокировка базы данных после самостоятельного восстановления из блокированной резервной копии. Так как копия блокированной базы данных является так же блокированной, поэтому не получится использовать копию как рабочую базу данных. Поэтому, если исходная база данных повреждена или утеряна, то нужно восстановить/разархивировать/скопировать базу данных из копии и разблокировать ее с параметром -F (но не -UN).

-B(ACKUP) <уровень>|<GUID> <база данных> [<резервный файл>]

Создание резервной копии всей базы данных или инкрементных резервных копий. Вместо уровня инкрементной резервной копии можно указать GUID бэкапа из таблицы в RDB$BACKUP_HISTORY. Он формируется при каждом бэкапе. В этом случае инкрементный бэкап можно делать относительно любой копии (а не только относительно предыдущего уровня) [6]

-R(ESTORE) <база данных> [<резервный файл 0> [<резервный файл 1>...]]

Восстановление из резервной копии всего файла базы данных или из инкрементных резервных копий

-SEQ[UENCE]

Cохраняет существующий GUID и последовательность репликации исходной базы данных (в противном случае они сбрасываются). Эта опция должна использоваться при создании реплики, чтобы асинхронная репликация могла быть автоматически продолжена с того момента, когда было выполнено физическое резервное копирование на основной базе

Таблица 8.9 Специальные опции утилиты NBACKUP

Опция

Описание

-D(IRECT) [ON | OFF]

Включает/выключает небуферизованный ввод/вывод при чтении БД

-I(NPLACE)

Восстанавливает инкрементную копию в существующую базу данных [7]

Предупреждение

Опция -I может повредить базу данных, если она была изменена со времени предыдущего восстановления. Кроме того, эта опция после восстановления инкрементного бэкапа переводит БД в режим "только для чтения".

-S(IZE)

Вывести количество страниц в базе после блокировки БД [8].

-DE(COMPRESS) <команда>

Команда для разархивирования бэкапа во время восстановления. Символ @ в команде соответствует файлу бэкапа.

Таблица 8.10 Общие опции утилиты NBACKUP

Опция

Описание

-NOD(BTRIGGERS)

Не запускать триггеры базы данных

-U(SER) <имя пользователя>

Имя пользователя

-P(ASSWORD) <пароль пользователя>

Пароль пользователя

-RO(LE) <роль>

Роль пользователя

-FETCH_PASSWORD <файл>

Считывает пароль из файла

-Z

Выдает версию СУБД

-CLEAN_HISTORY

Очистить таблицу RDB$HISTORY

-KEEP_DAYS <число>

Определяет сколько дней, начиная с сегодняшнего дня, должно храниться в истории

-KEEP_ROWS <число>

Определяет сколько записей должно храниться в истории

Создание резервной копии всей базы данных

Nbackup может работать с активной базой данных, не мешая подключенным к ней пользователям. Созданная резервная копия базы данных всегда будет отображать состояние базы данных на момент начала создания резервной копии.

Синтаксис nbackup для создания резервной копии всей базы данных:

nbackup [-U <пользователь> -P <пароль> [-RO <роль>]] -B 0 <база_данных>
[<резервный_файл>]

Например:

nbackup -user testuser -password pass -role rdb$admin -b 0 base.fdb
base_10_04_17.nbk

Имя пользователя и пароль можно не указывать, если в системе установлены контекстные переменные ISC_USER и ISC_PASSWORD. А также если используется доверительная аутентификация Windows (Win_Sspi) или доверенная через механизм GSSAPI (gss), и пользователь системы, от имени которого запускается утилита ISQL, является членом группы администраторов.

Необязательный переключатель -role задаёт имя роли, права которой будут учитываться при выполнении каких-либо действий утилиты. Поэтому если пользователь не указывает роль, то он получает права только тех ролей, которые ему назначены с DEFAULT. Например, если в команде выше не указать роль пользователя (предположим роль rdb$admin не была назначена ему с DEFAULT), то выдастся сообщение об ошибке:

-ALTER DATABASE failed
-no permission for ALTER access to DATABASE

Уровень резервной копии 0 означает создание резервной копии всей базы данных. Уровни резервных копий больше 0 используются для создания инкрементных резервных копий.

Вместо имени файла базы данных можно указать псевдоним (alias, из файла databases.conf).

Вместо имени файла резервной копии можно указать stdout. Это перенаправит резервную копию в стандартный поток вывода, откуда Вы сможете перенаправить ее, например, на ленточный накопитель или на вход утилиты для сжатия получаемой резервной копии.

Восстановление из резервной копии всего файла базы данных

Резервная копия всей базы данных восстанавливается следующим образом:

nbackup [-U <пользователь> -P <пароль> [-RO <роль>]] -R <база_данных>
[<резервный_файл>]

Например:

nbackup -user sysdba -password masterkey -r base.fdb base_10_04_17.nbk

Уровень не указывается при восстановлении. Параметр -R должен быть указан последним.

Предупреждение

Если указанная база данных уже существует и нет активных соединений, она будет перезаписана без предупреждения! Если есть активные соединения, восстановление не состоится, и Вы получите сообщение об ошибке.

Создание инкрементных резервных копий

Инкрементная резервная копия базы данных содержит только изменения с момента создания последней резервной копии. Существует два подхода к создания инкрементной резервной копии:

  • По уровню резервной копии (больше \(0\));

  • С помощью GUID последней созданной резервной копии базы данных.

Примечание

Создание инкрементных резервных копий для многофайловых баз данных еще не поддерживается.

Инкрементная резервная копия уровня \(N\) содержит изменения базы данных с момента создания последней резервной копии уровня \(N-1\).

Примеры

Через день после создания резервной копии всей базы данных (уровня 0) создается резервная копия уровня 1:

nbackup -B 1 base.fdb base_11_04_17.nbk

Эта резервная копия будет содержать только изменения базы данных за последний день. Если через день вновь создать резервную копию уровня 1:

nbackup -B 1 base.fdb base_12_04_17.nbk

Эта копия будет содержать изменения за последние два дня, то есть с момента создания резервной копии всей базы данных, а не только с момента создания предыдущей инкрементной копии уровня 1.

Далее, при создании резервной копии уровня 2 (допустим, в тот же день):

nbackup -B 2 base.fdb base_12_04_17_2.nbk

Эта резервная копия будет содержать изменения только с момента создания последней резервной копии уровня 1 (то есть за несколько часов).

Создать инкрементную резервную копию базы данных можно используя GUID. Такой способ не требует знания уровня резервной копии для создания инкремента. Резервная копия будет содержать только изменения с момента создания последней резервной копии.

После создания резервной копии всей базы данных (уровня 0) можно создать инкрементную резервную копию. Для этого сначала необходимо узнать GUID последней резервной копии (Database backup GUID). Это можно сделать с помощью утилиты gstat с параметром -h.

Синтаксис для создания инкрементной резервной копии базы данных:

nbackup [-U <пользователь> -P <пароль> [-RO <роль>]] -B <GUID>
<база_данных> [<резервный_файл>]

Например:

После создания резервной копии всей базы данных (уровня 0) узнаём её GUID:

gstat -h base.fdb

В выводе будет GUID последней резервной копии (Database backup GUID):

Variable header data:
  Database backup GUID: {DEE5ECBE-3731-4FB4-4693-2D96439FD746}
  Database GUID: {6A03998A-33B5-2BCC-B8CB12CAA7ED}

Далее создаём инкрементную резервную копию:

nbackup -B {DEE5ECBE-3731-4FB4-4693-} base.fdb base_11_04_17.nbk

После этого GUID в выводе утилиты gstat изменится и можно будет создать инкрементную резервную копию, которая будет содержать изменения, внесённые с момента создания последней резервной копии.

Восстановление из инкрементных резервных копии

При восстановлении базы данных из инкрементных резервных копий необходимо обеспечить наличие полной цепочки инкрементных резервных копий, начиная с уровня 0 и до уровня, которым необходимо завершить восстановление.

Cинтаксис:

nbackup [-U <пользователь> -P <пароль> -RO <роль>] -R <база_данных>
[<резервная_копия0> [<резервная_копия1> [...] ] ]

Таким образом, восстановление для предыдущего примера до уровня 2 будет выглядеть так:

nbackup -R base.fdb base_10_04_17.nbk base_12_04_17.nbk base_11_04_17_2.nbk

Предупреждение

Nbackup считает все аргументы после параметра именами файлов с резервными копиями. По этой причине никакие другие параметры (-U или -P) не могут следовать за списком файлов параметра -R.

Примечание

Не существует формального ограничения на уровень резервной копии, однако на практике редко имеет смысл создавать копии уровней больше 3 или 4.

Блокировка база данных и самостоятельное резервное копирование

Если Вы предпочитаете использовать какие-то другие утилиты для создания резервных копий базы данных или просто делать обычную копию базы данных как резервную, то для этого существует режим блокировки/разблокировки программы nbackup. «Блокировка» в данном случае означает, что основной файл базы данных временно замораживается, а не невозможность внесения изменений в базу данных. Как и в режиме резервирования, изменения фиксируются во временном файле дельты; при разблокировании файл дельты объединяется с основным файлом базы данных.

Самостоятельное резервное копирование обычно происходит по следующему сценарию:

  1. Блокировка базы данных с помощью параметра -L(OCK):

nbackup [-U <пользователь> -P <пароль> [-RO <роль>]] -L <база_данных>
  1. Создание резервной копии, сжатие файла базы данных, используя любые

другие программы или простое копирование файла с базой.

  1. Разблокировка базы данных с помощью параметра -UN(LOCK):

nbackup [-U <пользователь> -P <пароль> [-RO <роль>]] -UN <база_данных>

Восстановление из резервной копии,сделанной после блокировки

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

  1. Разархивируйте/скопируйте/восстановите файл базы данных с помощью

используемых Вами утилит.

  1. Теперь разблокируйте базу данных, но не с параметром -UN(LOCK), а с параметром -F(IXUP):

nbackup -F <база_данных>

При использовании параметра -UN сначала определяется наличие любых изменений с момен- та блокирования базы данных (после использования параметра -L) и производится объединение временного файла дельты и основного файла базы данных. После этого база данных переводится в нормальный режим чтения/записи, а временный файл удаляется. При использовании параметра -F только изменяется в «нормальное» значение флага состояния самостоятельно восстановленной базы данных.

8.4. Утилита GFIX

Эта утилита является одним из основных инструментов администратора БД. Утилита GFIX позволяет:

  • Выполнять принудительную сборку мусора (sweep);

  • Изменять интервал автоматической сборки мусора;

  • Закрывать базу данных для получения монопольного доступа, и затем снова открывать ее;

  • Переводить базу в режимы «чтение/запись» или «только чтение»;

  • Переключаться между синхронным и асинхронным вводом (Forced Writes);

  • Изменять диалект БД;

  • Устанавливать размер кэша;

  • Изменять GUID базы данных;

  • Искать зависшие транзакции и отменять или подтверждать их;

  • Активировать или удалять теневые копии;

  • Производить ремонт поврежденных баз данных.

Запуск GFIX осуществляется следующим образом:

gfix [<опции>] <имя базы данных>

Если база данных состоит из нескольких файлов, то при запуске gfix необходимо указать первичный файл.

Для того, чтобы выполнить любую операцию над базой данных с помощью gfix, необходимо пройти процедуру идентификации и аутентификации — указать имя и пароль пользователя, который имеет право на запуск сервиса gfix (подробнее см. Распределение системных привилегий ). Для указания имени и пароля пользователя используются переключатели -user и -pa[ssword], соответственно, например:

gfix -user testuser -pas pass -role rdb$admin [опции] <имя базы данных>

Необязательный переключатель -role задаёт имя роли, права которой будут учитываться при выполнении каких-либо действий утилиты. Поэтому если пользователь не указывает роль, то он получает права только тех ролей, которые ему назначены с DEFAULT.

Имя пользователя и пароль можно не указывать, если в системе установлены контекстные переменные ISC_USER и ISC_PASSWORD. А также если используется доверительная аутентификация Windows (Win_Sspi) или доверенная через механизм GSSAPI (gss), и пользователь системы, от имени которого запускается утилита ISQL, является членом группы администраторов.

Набор всех возможных опций утилиты GFIX, представлен ниже.

Таблица 8.11 Опции GFIX

Опция

Описание

-ac(tivate_shadow) <теневая копия>

Параметр предназначен для активации теневой копии. <теневая копия> - адрес и имя файла теневой копии (или первого из файлов).

-at(tach) <n>

Дополнительный параметр к -shut. Предназначен для запрета новых соединений с БД. <n> указывает количество секунд, через которое произойдет отключение БД. Отключение отменится, если к этому времени еще останутся активные соединения.

-b(uffers) <n>

Устанавливает новый размер страничного кэша БД в страницах. <n> - количество страниц.

-co(mmit) {<ID> | all}

Завершает подтверждением зависшую транзакцию с идентификатором <ID>, или все зависшие транзакции (all).

-ca(che)

Параметр не используется.

-ch(ecksums) {on | off}

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

-conf(ig_validate) <firebird.conf>

Производит валидацию конфигурационного файла firebird.conf. Во время валидации проверяется корректность указанных параметров и регулярных выражений, отсутствие дубликатов, права доступа к файлам и директориям, перечисленным в значениях параметров, в том числе с использованием wildcards.

-fu(ll)

Используется вместе с -validate для более глубокой проверки на уровне записей; освобождает неназначенные фрагменты записей.

-fo(rce_shutdown) <n>

Дополнительный параметр к -shut. Предназначен для принудительного закрытия базы данных. <n> указывает количество секунд, через которое произойдет закрытие. Если остались активные пользователи, они отключатся, последние результаты их работы будут потеряны. Такое средство нужно применять с осторожностью, как последнюю возможность.

-fe(tch_password)

Извлекает пароль из файла.

-g(uid)

Изменяет GUID базы данных. GUID генерируется случайно.

-h(ousekeeping) <n>

Изменяет интервал транзакций для автоматической чистки sweep. <n> устанавливает новый интервал. Если n = 0, автоматическая чистка запрещена.

-i(gnore)

Игнорировать ошибки контрольных сумм при проверке или чистке.

-icu

Исправляет базу данных для работы с текущей версией ICU.

-k(ill_shadow) <база данных>

Удаляет все неиспользуемые теневые копии базы данных.

-l(ist)

Показывает некоторые сведения (в том числе ID) о всех зависших транзакциях.

-me(nd)

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

-mo(de) {read_write | read_only}

Устанавливает режим записи для базы данных - только для чтения или чтение/запись. Этот параметр может принимать два значения.

-nol(inger)

Останавливает указанную базу данных, после того как последнего соединения не стало, независимо от установок LINGER в базе данных.

-n(o_update)

Используется вместе с -v(alidate) для проверки разрушенных или неразмещенных структур. Если таковые есть, они отобразятся в сообщении, но не будут исправлены.

-o(nline) {single|multi|normal}

Возвращает в режим "online" базу, остановленную с помощью -shut. Опция normal позволяет устанавливать соединение с БД любым авторизованным пользователям, а не только SYSDBA и владельцем БД. Опция multi позволяет устанавливать соединение с БД только SYSDBA и владельцем БД. Опция single похожа на multi, за тем исключением, что только один из пользователей - SYSDBA или владелец БД - может соединиться.

-pr(ompt)

Используется вместе с -l(ist). Выводит подсказки при восстановлении транзакций.

-pa(ssword) <пароль>

Пароль пользователя для работы с gfix.

-par(allel) <n>

Количество параллельных рабочих потоков для сборки мусора. Включает многопоточную сборку мусора, если MaxParallelWorkers > 1 (см. firebird.conf). Вместо этого параметра утилиты можно указать параметр конфигурации ParallelWorkers.

-replica {none|read_only|read_write}

Выбрать режим реплики - только для чтения (read_only) или для чтения и записи (read_write). Режим none отключает репликацию и переводит реплику в режим read_write. Как правило, этот режим должен использоваться после сбоя в базе данных мастера, когда эта реплика переходит в статус мастера. Или если нужно сделать физические резервные копии из реплики.

-role

Роль пользователя для работы с gfix.

-r(ollback) {<ID> | all}

Завершает откатом зависшую транзакцию с идентификатором <ID>, или все зависшие транзакции (all).

-sq(l_dialect) <n>

Изменяет диалект базы данных. <n> может быть 1 или 3.

-sw(eep)

Запускает сборку мусора в БД.

-sh(utdown) {single|multi|full}

Останавливает базу данных. Используется с одним из дополнительных параметров -attach, -force или -tran. Опция multi позволяет устанавливать соединение с БД только SYSDBA и владельцем БД. Опция single похожа на multi, за тем исключением, что только один из пользователей - SYSDBA или владелец БД - может соединиться. Опция full не позволяет соединиться с БД никому, даже SYSDBA и владельцу БД.

-tw(o_phase) {<ID> | all}

Автоматическое двухфазное восстановление limbo транзакции с номером <ID>, или всех транзакций (all).

-tra(nsaction) <n>

Дополнительный параметр к -shut. Предназначен для запрета запуска новых транзакций. <n> указывает количество секунд, через которое произойдет отключение БД. Отключение отменится, если к этому времени еще останутся активные транзакции.

-tru(sted)

Используется trusted авторизация.

-upgrade

Обновляет базу данных до последней минорной версии ODS в пределах поддерживаемой мажорной версии.

-u(se) {full | reserve}

Включает 100% заполнение страниц БД (full) или 80% заполнение по умолчанию (reserve). 100%-е заполнение имеет смысл для баз только для чтения.

-user

Имя пользователя для работы с gfix.

-v(alidate)

Проверяет базу данных на уровне страниц и освобождает страницы, помеченные как используемые, но никому не принадлежащие (orphans). Также выполняет проверку контрольных сумм базы данных. В случае их несоответствия в лог файл будет записана ошибки и, если не указана опция no_update, контрольная сумма будет исправлена.

-w(rite) {sync|async}

Переключает режимы синхронной/асинхронной записи Forced Writes.

-z

Выводит версию РЕД Базы Данных и утилиты gfix.

Активация теневой (оперативной) копии

Файл теневой копии является дополнительной копией первичного файла(ов) базы данных. Для любой данной базы данных может существовать несколько теневых копий, которые могут быть активированы и деактивированы по умолчанию с помощью утилиты gfix.

Для активации теневой копии используется команда -ac[tivate]:

gfix -activate <файл теневой копии>

Это делает файл теневой копии новым файлом базы данных, и пользователи могут продолжать нормальную обработку данных и без потерь.

В случае, если ваш основной файл(ы) базы данных поврежден или нечитабелен, администратор базы данных может активировать теневой файл. После активации файл больше не является теневым файлом, и для его замены необходимо создать новый. Кроме того, теневой файл должен быть переименован на имя старого файла базы данных, который он заменяет.

Предупреждение

Следует отметить, что активация теневой копии, в то время как сама база данных активна, может привести к повреждению тени. Перед ее активацией убедитесь, что файл базы данных действительно недоступен.

Примечание

Администратор базы данных может настроить базу данных для автоматического создания нового теневого файла в случае активации текущей тени. Это позволяет обеспечить непрерывную поставку теневых файлов и предотвращает работу базы данных без нее.

Удаление теневых копий

Удаление всех недоступных теневых копий конкретной базы данных производится командой:

gfix -kill <база данных>

В случае, если база данных, работающая с теневыми файлами, теряет тень, или по какой-либо причине тень становится непригодной, база данных перестанет принимать новые соединения до тех пор, пока администратор базы не уничтожит поврежденную тень и, в идеале, создаст новую тень для замены сломанной.

Примечание

При соединении с локальной базой данных пользователь может не обладать правом на запуск сервиса gfix. Однако он сможет выполнить ту или иную операцию, только если у него есть соответствующие права. Например, для удаления теневой копии пользователь должен обладать правом на DDL-операцию DROP SHADOW— подробнее см. Распределение прав на DDL-операции .

Установка размера кэша базы данных

Кэш (или буфер) базы данных - это оперативная память, выделяемая сервером для работы с базой данных. Операции в оперативной памяти происходят гораздо быстрее, чем если данные постоянно считываются с диска. Размер кэша указывается в страницах БД. Если размер страницы установлен 8192, то кэш в 5000 страниц займет примерно 40 мегабайт ОЗУ. Если сразу много пользователей одновременно обращаются к базе данных, может случиться, что серверу не хватит выделенной оперативной памяти. В этом случае он начнет работать с диском, что замедлит производительность БД. Изменить размер кэша для базы данных можно командой:

gfix -b[uffers] <кол-во страниц> <база данных>

Это действие применяется только к указанной вами базе данных. На другие базы данных, работающие на том же сервере, это изменение не повлияет.

Другим способом установить размер кэша по умолчанию для всех вновь создаваемых БД, является изменение конфигурационного файла firebird.conf, а именно параметра DefaultDbCachePages.

Однако более предпочтительным способом для этих целей является утилита gfix, так как она позволяет установить собственный размер кэша для каждой базы данных. Если какой-то базой данных пользуются реже, размер кэша для нее можно оставить по умолчанию, или даже уменьшить.

Управление limbo транзакциями

«Застрявшей» («зависшей») транзакцией (limbo) называют транзакцию, которая работает одновременно с двумя или более базами данных. При завершении такой транзакции, РЕД База Данных совершает двухфазное подтверждение Commit, гарантируя, что изменения будут внесены либо во все БД, либо ни в одну. При этом подтверждения в базах данных будут даваться по очереди. Если в это время возникнет сбой системы, то может получиться, что в каких то БД изменения были сделаны, а в каких то нет. При этом транзакция переходит в неопределенное состояние, когда сервер не знает, следует ли подтвердить эту транзакцию, или откатить.

Gfix предоставляет несколько команд для управления транзакциями limbo.

Команда gfix -l[ist] будет отображать сведения о limbo транзакциях. Если команда не выдала результата, то зависших транзакций нет, и дальнейшие действия не требуются:

gfix -l[ist] <база данных>

Эту команду можно дополнить ключом -pr[ompt], и тогда вам будет предложено выполнить Commit или Rollback для каждой обнаруженной транзакции limbo. В этом случае команда будет такой:

gfix -l[ist] -pr[ompt] <база данных>

Если обнаружено больше одной транзакции в состоянии in-limbo, то администратор может подтвердить (или откатить) все limbo транзакции или какую-то одну, указав идентификатор:

gfix -commit {all | <ID>} <база данных>
gfix -rollback {all | <ID>} <база данных>

После срабатывания этих команд следует заново запустить команду -list, чтобы убедиться, что limbo транзакций больше не осталось.

Gfix можно использовать для автоматического двухфазного восстановления limbo транзакции с идентификатором, или всех транзакций:

gfix -tw[o_phase] {all | <ID>} <база данных>

Эти три команды можно также использовать вместе с ключом -pr[ompt].

Предупреждение

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

Установка режима доступа для базы данных

База данных может работать в одном из двух режимов доступа: только для чтения, или для чтения / записи (по умолчанию). Если вам понадобилось поменять режим, выполните команду:

gfix -mo {read_only | read_write} <база данных>

Например, если вы хотите разместить базу данных на CD диске, у вас не получится это сделать в режиме «чтения-записи». После того, как база данных будет заполнена данными, ее следует изменить в режим только для чтения, а затем использовать на CD диске (или других файловых системах только для чтения) без проблем.

Сборка мусора

Вследствие того, что СУБД «РЕД База Данных» имеет версионную архитектуру, со временем в ней могут накапливаться устаревшие версии записей, которые не нужны ни одной активной транзакции. В обычных условиях такие записи успешно удаляются «сборщиком мусора», но при возникновении ошибок в работе сервера «РЕД База Данных» (например, из-за аппаратного сбоя), в базе данных могут остаться зависшие транзакции или фрагменты записей, которые не могут быть удалены обычным «сборщиком мусора». Большое число таких «мусорных» записей может привести к значительному росту размера БД и падению производительности. Для удаления таких записей применяется процедура чистки (sweep). Чистка может производится в ручном и автоматическом режиме. В автоматическом режиме администратор задает интервал чистки — разницу между Oldest Transaction (или Oldest Interesting Transaction, OIT – находится в любом состоянии, кроме подтвержденного) и Oldest Snapshot Transaction (OST). По умолчанию этот интервал равен 20000 транзакций. Изменить этот параметр для конкретной базы данных можно с помощью опции -h[ouskeeping]:

gfix -h[ouskeeping] <интервал> <база данных>

Если интервал равен 0, то в этом случае автоматическая чистка будет отменена.

Вручную чистку можно произвести с помощью команды -sweep:

gfix -sweep [-i[gnore]] <база данных>

Ключ -i[gnore] заставляет РЕД Базу Данных игнорировать ошибки контрольной суммы на страницах базы данных. Лучше не использовать эту опцию, однако, если в вашей базе данных возникли некоторые проблемы, возможно, эта опция станет необходимой.

Закрытие (блокировка) базы данных

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

Закрытие базы данных может быть необходимо для получения монопольного доступа к ней и проведения действий по восстановлению структуры базы и/или хранящихся в ней данных.

Для закрытия БД используется команда -sh[ut]. Совместно с этой командой указывается режим отключения существующих соединений и время ожидания (в секундах) до полной блокировки:

gfix -sh[ut] {full|single|multi} {-at[tach]|-tr[аn]|-f[orce]} <таймаут> <база
данных>

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

Состояние multi означает, что пользователи SYSDBA и владелец базы данных могут неограниченно подключаться к базе данных. Все остальные соединения запрещены. Это состояние используется по умолчанию при блокировке базы данных.

Состояние single означает, что пользователю SYSDBA или владельцу базы данных позволено одно подключение к базе данных. Все остальные соединения запрещены.

Режим -at[tach] означает, что все новые соединения к базе данных запрещены. Существующие соединения при этом не разрываются. Число <таймаут> определяет количество секунд, которое сервер будет ждать до завершения всех активных соединений к базе данных. Если после этого не останется ни одного активного соединения, то база данных будет закрыта. В противном случае, закрытие БД будет отменено.

При указании режима -tra[nsaction] сервер заблокирует запуск новых транзакций в закрываемой базе данных. Если по истечении <таймаут> секунд к базе не останется ни одного активного подключения, то база данных будет закрыта. В противном случае закрытие БД будет отменено.

В режим -fo[rce_shutdown] сервер будет ждать завершения всех активных соединений к базе данных. По истечении времени <таймаут> база будет закрыта вне зависимости от того, есть ли еще к ней активные соединения. В этом режиме возможна потеря данных, но он гарантирует, в отличие от двух предыдущих, что база будет переведена в закрытое состояние.

Перевести закрытую базу снова в открытое состояние можно только с помощью команды -on[line]

gfix -o[nline] {single|multi|normal} <база данных>

Состояние normal означает, что к базе данных могут подключаться любые авторизованные пользователи. Этот режим используется по умолчанию при включении базы данных.

Использование пространства страниц базы данных

Примечание

Изменять режим заполнения страниц с данными можно только, если база находится в режиме read_write.

Когда пишется страница базы данных, РЕД База Данных резервирует 20% страницы для будущего использования.

Для использования всего доступного пространства страницы базы данных вы можете использовать команду -use full. Если впоследствии вы захотите вернуться к режиму по умолчанию, введите команду -use reserve, чтобы использовать только 80% каждой страницы.

gfix -use {full|reserve} <база данных>

Проверка и исправление баз данных

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

Перед проверкой (или исправлением — см. далее) базы данных необходимо получить эксклюзивный доступ к ней, как это описано в подразделе .

Проверка базы данных выполняется с помощью команды -v[alidate]:

gfix -v[alidate] <база данных>

По умолчанию при проверке базы данных gfix освобождает неиспользуемые страницы в базе данных [9], а также обнаруживает разрушенные структуры данных.

По умолчанию проверка работает на уровне страниц. Для проверки и на уровне страниц и на уровне записей используйте команду:

gfix -v[alidate] -full <база данных>

которая освобождает неиспользуемые фрагменты записей.

Для того, чтобы gfix производил только проверку базы данных без освобождения неиспользуемых страниц, необходимо указать опцию -n[o_update]:

gfix -v[alidate] -n[o_update] <база данных>

Для того, чтобы gfix не проверял ошибки контрольных сумм, используется опция -i[gnore] [10] команды -v[alidate]:

gfix -v[alidate] -i[gnore] <база данных>

Результаты работы утилиты gfix сохраняются в лог-файле сервера – firebird.log.

После проверки базы данных, если были найдены ошибки, можно попытаться исправить базу данных. Для этого существует опция -mend. Однако и она не в состоянии исправить все ошибки и может привести к потере данных (поврежденных записей).

gfix -mend <база данных>

Лучший способ избежать потери данных - регулярно делать резервное копирование и проверять копии на возможность восстановления. При попытке исправить поврежденную базу данных всегда работайте с копией основного файла, а не с оригиналом. Использование опции -mend может привести к «бесшумному» удалению данных.

Изменение режима записи на диск

Многие ОС применяют кэширование операций ввода-вывода. При этом для буферизации используется некоторый объем быстрой памяти (который может быть как частью оперативной памяти сервера, так и специальной памятью, встроенной в сам диск). Это повышает производительность приложений, их интенсивность записи, но пользователь не будет уверен, когда его данные будут занесены на физический диск.

При работе с базой данных крайне желательно, чтобы данные были безопасно сохранены. В РЕД Базе Данных можно указать должны ли данные сразу записываться на физический диск по commit или же доверить запись ОС.

gfix -write {sync|async} <база данных>

По умолчанию, все БД работают с включенным Forced Writes (sync) и отключать этот режим не рекомендуется. Если все же вы не удовлетворены производительностью БД, и при этом стопроцентно уверены в своем серверном оборудовании, можете попробовать отключить Forced Writes.

Активация режима репликаци

Для активации режима репликации для базы данных используется команда:

gfix -replica { NONE | READ_ONLY | READ_WRITE } <база данных>

Здесь указывается GUID мастер-базы. GUID это уникальный идентификатор БД, используемый для её опознавания в системе репликации. Узнать его можно с помощью утилиты gstat -h. Он генерируется при создании базы (либо при первом коннекте, если еще не задан). Он будет автоматически пересоздан при восстановлении базы из бэкапа и при выполнении команды nbackup -f (выход из режима блокировки базы без влития изменений из дельта-файла). Также его можно сменить с помощью команды gfix -g, которая должна выполняться в эксклюзивном режиме с правами администратора. Это может быть полезно при копировании БД средствами файловой системы.

Удаляется GUID для слейв-базы в момент отключения режима реплики.

Снятие режима реплики производится с помощью команды:

gfix -replica {} <имя базы данных>

8.5. Утилита GSTAT

Утилита gstat предназначена для получения полной информации о базе данных. Gstat даёт информацию о дате создания базы данных, размере страниц базы данных, количестве теневых копий, таблицах и другую.

Для того, чтобы работать с gstat, необходимо пройти процедуру идентификации и аутентификации — указать имя и пароль пользователя, который имеет право на запуск сервиса gstat (подробнее см. Распределение системных привилегий ). Для указания имени и пароля пользователя используются переключатели -user и -password, соответственно, например:

gstat -u testuser -p pass -role rdb$admin [<опции>] <база данных>

Необязательный переключатель -role задаёт имя роли, права которой будут учитываться при выполнении каких-либо действий утилиты. Поэтому если пользователь не указывает роль, то он получает права только тех ролей, которые ему назначены с DEFAULT.

Имя пользователя и пароль можно не указывать, если в системе установлены контекстные переменные ISC_USER и ISC_PASSWORD. А также, если используется доверительная аутентификация Windows (Win_Sspi) или доверенная через механизм GSSAPI (Gss), и пользователь системы, от имени которого запускается утилита ISQL, является членом группы администраторов.

Запуск GSTAT осуществляется одним из следующих способов:

gstat [<опции>] <база_данных>
gstat <база_данных> [<опции>]
Таблица 8.12 Опции GSTAT

Переключатель

Описание переключателя

-a(ll)

Это значение по умолчанию, если вы не запросили -index, -data или -all. Отыскивает и отображает статистику по -index и -data.

-b(lob) TABLE.COLUMN [TABLE.COLUMN] ...

За переключателем -b следует список имен таблиц и столбцов, где хранятся ссылки на файловые блобы. Список должен быть в верхнем регистре, и каждая TABLE.COLUMN разделяется пробелом. Выводится информация для каждого элемента TABLE.COLUMN: общее количество ссылок, количество отсутствующих файлов (ссылка есть, файла нет), общий размер файлов по этим ссылкам, некорректные ссылки (ссылки, для которых не удалось установить путь к файлу). Если указано несколько таблиц — выводится также суммарная статистика по всем указанным таблицам.

-d(ata)

Статистика страниц данных – информация о таблицах содержащихся в базе данных. Пользовательские и системные индексы, системные таблицы не анализируются.

-e(ncryption)

Статистика по зашифрованным и незашифрованным страницам БД.

-h(eader)

Статистика заголовочной страницы - это информация о глобальных свойствах всей базы данных, хранящаяся на заголовочной страницы каждой базы данных. Эта информация также выводится, если использовать любой другой переключатель gstat.

-i(ndex)

Статистика индексов – информация об индексах в базе данных. Пользовательские и системные таблицы, системные индексы не анализируются.

-s(ystem)

Эквивалент переключателям -a[ll] -s[ystem]. Это модификатор, который дополняет выводы -data или -index анализом системных таблиц (индексов).

-u(sername)

Имя пользователя.

-p(assword)

Пароль пользователя.

-par(allel) <n>

Количество параллельных рабочих потоков для сбора статистики. Включает многопоточность, если MaxParallelWorkers > 1 (см. firebird.conf). Вместо этого параметра утилиты можно указать параметр конфигурации ParallelWorkers.

-fetch <имя файла>|stdin|/dev/tty

Файл, из которого будет считан пароль пользователя.

-r(ecord)

Модификатор для переключателей -data и system. Добавляет статистику о средних длинах записей, количестве версий и информацию о BLOB.

-t(able) <ТАБЛИЦА> [<ТАБЛИЦА>] ...

Анализ таблицы или списка таблиц и любых индексов, принадлежащих указанным таблицам, а также страниц данных этих таблиц. За этим параметром следует список имен таблиц, которые вы хотите проанализировать. Список должен быть в верхнем регистре, и каждая таблица разделяется пробелом. Если использовать опцию -t совместно с -i, то будет отображена статистика по индексам, но не будет информации о страницах данных. Если использовать опцию -t совместно с -d, то будет отображена статистика по страницам данных, но не будет информации об индексах.

-ts [<ИМЯ ТАБЛИЧНОГО ПРОСТРАНСТВА> [<ИМЯ ТАБЛИЧНОГО ПРОСТРАНСТВА>...] | <PRIMARY>]

Вывод информации об объектах, находящихся в табличных пространствах. При указании списка имён табличных простанств или PRIMARY (основной файл базы данных) будет отображена информация об объектах, находящихся в заданных табличных пространствах. Список должен быть в верхнем регистре, а имена табличных пространств должны разделяться пробелом. Если не указывать имена табличных пространств или PRIMARY, то будет отображена информация обо всех объектах, находящися в пользовательских табличных пространствах.

-role

Роль.

-tr

Использовать доверительную аутентификацию.

-z

Показать версию сервера и утилиты.

Статистика заголовочной страницы

Запустив утилиту gstat с ключом -header можно получить статистические данные о нашей базе данных. Часть информации является статичной, часть – меняется в зависимости от происходящих в базе данных изменений. Пример информации с заголовочной страницы приводится ниже:

Database "d:\RedDatadase\testdb.fdb"
Database header page information:
      Flags                0
      Checksum             65417
      Generation           103
      System Change Number 3
      Page size            8192
      Server               RedDatabase
      ODS version          12.0
      Oldest transaction   91
      Oldest active        92
      Oldest snapshot      92
      Next transaction     92
      Autosweep gap        1
      Sequence number      0
      Next attachment ID   65
      Implementation       HW=AMD/Intel/x64 little-endian OS=WindowsCC=MSVC
      Shadow count         0
      Page buffers         0
      Next header page     0
      Database dialect     3
      Creation date        Sep 6, 2017 16:58:58
      Attributes           force write, checksums enabled
Variable header data:
      Database backup GUID: {49E55285-939F-4960-94A3-3681659D2341}
      Database GUID: {F87421F8-92F4-49C0-3D8F-3B88FDA010C1}
      *END*
Flags:
Не используеся в заголовочной странице базы данных.
Checksum:
Контрольная сумма заголовочной страницы базы данных.
Generation:
Это счетчик, который увеличивается на единицу всякий раз, когда заголовочная страница записывается на диск.
Page size:
Размер страницы базы данных, исчисляется в байтах. Все файлы одной базы данных состоят из страниц одинакового размера, который устанавливается при создании базы данных и при восстановлении базы данных из резервной копии. Множество важнейших параметров сервера зависят от размера страницы - например, кэш базы данных. Рекомендуют создавать базу данных с размером страниц не менее 4096 байт, а лучше 8192 или 16384 байта.
System Change Number:
Маркер (число от 0 до 3), которым помечаются страницы базы данных при создании инкрементных копий с помощью утилиты nbackup. Nbackup выполняет резервное копирование страниц базы данных, копируя страницы, которые были изменены с момента последней резервной копии непосредственно предшествующего уровня. Если делается резервная копия уровня 0, копируются все страницы, а если уровня 1 – копируются только те страницы, которые были изменены после последнего уровня 0. Чтобы иметь возможность находить измененные страницы, РЕД База Данных использует маркер, который называется SCN. Это число увеличивается при каждом изменении состояния резервной копии и не зависит от уровня резервного копирования.
0 – страницы перед резервным копированием;
1 – страницы, записанные в дельта-файл во время резервного копирования;
2 – страницы, записанные во время слияния дельта-файла с основной резервной копией;
3 – страницы, записанные после окончания первого бэкапа и слияния.
Резервное копирование и восстановление с помощью gbak не восстанавливает содержимое таблицы RDB$BACKUP_HISTORY и сбрасывает SCN всех страниц обратно на 0. Таким образом, восстановление с помощью gbak перепишет всю базу данных (и может даже изменить размер страницы). Это делает предыдущие резервные копии с помощью nbackup бессмысленными в качестве отправной точки для последующих резервных копий: нужно начать заново с уровня 0.
Server:
Чьим сервером была создана база данных: RedDatabase или Firebird.
ODS version:
Версия структуры базы данных на диске (On-Disk Structure). Представляет собой два числа, разделенные точкой. "Целая" часть - это основная версия ODS, которая зависит от версии сервера, создавшего данную базу данных. Главная версия определяет основные возможности работы с базой данных, и ее значение присваивается при создании (восстановлении) базы данных.
"Дробная" часть (после точки) - это минорная версия ODS, которая может меняться (точнее, увеличиваться) в течение жизни базы данных в зависимости от того, под управлением какой версии сервера работают с этой базой данных.
Oldest transaction:
Идентификатор старейшей заинтересованной транзакции в базе данных (Oldest Interesting
Transaction или OIT). Первая транзакция с состоянием, отличным от commit. На практике это:
- Oldest Active Transaction;
- номер самой старой транзакции, завершенной "настоящим" rollback
(выполняется если пользователь в одной транзакции модифицировал более 100000 записей);
- транзакция в состоянии in-limbo (полузавершенная) двухфазного commit.
Значение этого параметра часто сравнивается с Next transaction. Разница этих параметров показывает количество мусора в базе данных и можно судить о целесообразность выполнения резервного копирования.
Oldest active:
Старейшая транзакция, которую пользователь стартовал, и до сих пор не завершил по commit или rollback (Oldest Active Transaction или OAT).
Oldest snapshot:
Номер последней транзакции , которая влияет на процесс сборки мусора (Oldest Snapshot Transaction или OST). Дело в том, что только транзакции с уровнем изоляции snapshot вызывают появление мусорных версий записей в базе данных. OST – это старейший «номер snapshot» для всех активных транзакций. Транзакция read-only, read committed не имеет «номера snapshot». Транзакция read-write, read committed имеет «номер snapshot» равный своему собственному номеру. Для транзакции snapshot «номер snapshot» – это номер Oldest Active Transaction на момент ее старта. Номер Oldest Snapshot Transactio обновляется, когда стартует новая транзакция (или выполняется commit retaining) или когда стартует sweep.
Autosweep gap:
Разница между Oldest transaction и Oldest snapshot. Показывает необходимость сборки мусора. Когда значение достигает Sweep interval (по умолчанию значение Sweep interval равно 20000) запускается автоматическая сборка мусора.Значение может быть отрицательным при долгоживущих транзакциях snapshot.
Next transaction:
Это просто номер, который будет присвоен следующей транзакции при ее старте.
Если вы заметили, что разница между OIT и Next transaction все увеличивается, значит какие-то транзакции не подтверждаются должным образом и следовательно может накапливаться все большее число мусорных записей. В конце концов вы увидите, что время запуска базы данных увеличивается, а производительность падает. В таком случае возможно следует запустить gfix для сборки мусора вручную.
Sequence number:
Порядковый номер файла базы данных. Для базы данных, состоящей из одного файла, он всегда равен нулю. Второй файл в базе данных будет иметь номер 1 и т. д.
Next attachment ID:
Номер следующего соединения к этой базе данных. Каждый раз, когда приложение подключается к базе данных, это число увеличивается на один. Запуск и завершение работы базы данных также увеличивает этот номер. Запуск gstat не изменяет идентификатор.
Implementation:
Архитектура аппаратуры, на которой была создана база данных.
Shadow count:
Число файлов оперативных копий, которые определены для данной базы данных.
Page buffers:
Размер кэша базы данныхв страницах. Ноль означает, что база данных использует значение по умолчанию сервера (DefaultDbCachePages в firebird.conf).
Next header page:
Номер следующей заголовочной страницы. Всегда равен нулю. Собственно говоря, любая страница в базе данных имеет ссылку на номер следующей страницы такого же типа, но так как заголовочная страница всегда единственная в каждом файле базы данных, то у нее эта ссылка обнулена.
Database dialect:
Диалект SQL базы данных.
Creation date:
Дата создания базы данных или последнего восстановления из резервной копии.
Attributes:
Это набор флагов, определяющий важные особенности поведения базы данных. Флаги устанавливаются только с помощью специальных инструментов, например, gfix. Значения флагов можно посмотреть в таблице 8.13.
Variable header data:
Переменные данные заголовочной страницы. Например, интервал очистки (sweep interval), GUID базы даных, GUID последней резервной копии и другое.
Таблица 8.13 Атрибуты и флаги файла базы данных

Атрибут

Значение флага

Расшифровка

active shadow

0x1 1

Файл является активным Shadow-файлом.

checksums enabled

0x8000 32768

Включено вычисление контрольных сумм на уровне страниц базы данных.

force write

0x2 2

Режим принудительной записи включен (forced write on).

crypt process, plugin <имя плагина>

0x4 4

Идет процесс шифрования в фоновом режиме указанным плагином.

no reserve

0x8 8

Указывает, что на страницах не резервируется место для старых версий данных. Это позволяет более плотно упаковывать данные на каждой странице, в силу чего база данных занимает меньше дискового пространства. Это идеал для баз данных только для чтения.

read only

0x20 32

База данных работает в режиме Read Only. Если флаг не установлен, то допустимы как чтение, так и запись.

encrypted, plugin <имя плагина>

0x40 64

База данных зашифрована указанным плагином.

replica

0x100 256

База данных является объектом репликации (слейвом).

multi-user maintenance

0x80 128

База данных блокирована в режиме multi.

single-user maintenance

0x1080 4224

База данных блокирована в режиме single.

full shutdown

0x1000 4096

База данных блокирована в режиме full.

backup lock

0x400 1024

Основной файл базы данных временно заблокирован. Изменения фиксируются во временном файле дельты.

backup merge

0x800 2048

Объединение файла дельты с основным файлом базы данных.

Статистика по табличным пространствам

Для вывода информации только об объектах, находящихся в табличных пространствах, выполните команду:

gstat <база данных> -ts

Данные о табличных пространствах в общем выводе отображаются так:

Tablespaces:
  PRIMARY (1)
    Full path: /home/test/employee.fdb
    Tables:
      COUNTRY
      JOB
    Indices:
      RDB$PRIMARY1 (COUNTRY)
      RDB$FOREIGN23 (CUSTOMER)
      RDB$PRIMARY22 (CUSTOMER)
  TS1 (2)
    Full path: /home/test/ts.ts
    Tables:
      EMPLOYEE
      PROJECT
      SALES
    Indices:
      CUSTNAMEX (CUSTOMER)
      MAXSALX (JOB)
      NEEDX (SALES)
      QTYX (SALES)
  TS2 (3)
    Full path: /home/test/ts2.ts
    Tables:
      CUSTOMER
    Indices:
      CUSTREGION (CUSTOMER)
  TS3 (4)
    Full path: /home/test/ts3.ts
    Tablespace is empty

Анализ всей базы данных

Если не заданы никакие опции утилиты gstat по умолчанию выполняется анализ всей базы данных. Будет собрана информация о таблицах и индексах, содержащихся в базе данных. Поскольку вывод, скорее всего, будет очень большим, рекомендуется передать вывод в файл:

gstat d:\RedDataBases\testdb.fdb > d:\RedDataBases\testdb.txt

Статистика страниц данных

Следующая команда

gstat -data <база данных>

просматривает в базе данных таблицу за таблицей, отображая итоговую информацию о страницах данных. Для включения в отчет системных таблиц добавьте переключатель -system.

При указании опции -d совместно с -t будет сформирована статистика по страницам данных только для указанной таблицы. Вы можете записать разделенный пробелам и список имен таблиц для получения результатов более чем по одной таблице.

Вывод о каждой таблице будет примерно следующий:

TEST_TABLE (338)
     Primary pointer page: 734, Index root page: 735
     Pointer pages: 7, data page slots: 20448
     Data pages: 20448, average fill: 85%
     Primary pages: 13998, secondary pages: 6450, swept pages: 13998
     Empty pages: 0, full pages: 20446
     Big record pages: 8
     Blobs: 463, total length: 248371310, blob pages: 15410
         Level 0: 463, Level 1: 0, Level 2: 0
     Fill distribution:
          0 - 19% = 0
         20 - 39% = 0
         40 - 59% = 0
         60 - 79% = 0
         80 - 99% = 0
Таблица 8.14 Вывод gstat -d[ata]

Элемент

Описание

Tablespace

Табличное пространство, в котором находится объект. Если указано PRIMARY, то объект расположен в основном файле базы данных.

Primary pointer page

Номер первой страницы косвенных указателей на страницы, хранящие данные таблицы

Index root page

Номер страницы, которая является первой страницей указателей на индексы таблицы

Pointer pages

Общее количество страниц косвенных указателей на страницы, хранящие данные таблицы

data page slots

Количество указателей на страницы базы данных, содержащихся на страницах указателей. Должно равняться числу страниц данных

Data pages

Общее количество страниц, в которых хранятся данные таблицы. Этот счетчик включает страницы, хранящие неподтвержденные версии записей и мусор, потому что gstat не может их отличить друг от друга

Average fill

Обобщающая гистограмма распределения использования памяти для всех страниц, выделенных в таблице.

Primary pages

Количество страниц, равное (Data pages - Secondary pages)

Secondary pages

Количество страниц, на которых не хранятся первичные версии записей.

Swept pages

Количество страниц, которые имеют только первичные версии записей, и все они были созданы подтвержденными транзакциями. Такие страницы данных должны быть пропущены процедурой sweep.

Empty pages

Количество страниц, на которых нет записей

Full pages

Количество полностью заполненных страниц

Fill distribution

Это гистограмма из пяти 20-процентных "полос", каждая из которых показывает количество страниц данных, чье среднее заполнение попадает в этот диапазон. Процент заполнения определяется соотношением пространства каждой страницы, содержащей данные. Сумма этих чисел дает общее количество страниц, содержащих данные.

Анализ индексов

Следующая команда

gstat -i[ndex] <база данных>

отыскивает и отображает статистику по индексам в базе данных: средняя длина ключа (в байтах), общее количество дубликатов и максимальное количество дубликатов одного ключа и другое. Вы можете добавить переключатель -system, чтобы включить сведения о системных индексах в отчет.

К сожалению, не существует способа получить статистику по одному индексу. Однако вы можете ограничить результат одной таблицей, используя переключатель -t, за которым следует имя таблицы. Вы можете записать разделенный пробелам и список имен таблиц для получения результатов более чем по одной таблице.

Данные индексной страницы отображаются так:

TEST_TABLE (128)
     Index IND1 (0)
         Root page: 756595, depth: 4, leaf buckets: 232528, nodes: 50422773
         Average node length: 11.90, total dup: 0, max dup: 0
         Average key length: 8.11, compression ratio: 1.11
         Average prefix length: 3.89, average data length: 5.11
         Clustering factor: 6485823, ratio: 0.13
         Fill distribution:
             0 - 19% = 1
             20 - 39% = 0
             40 - 59% = 0
             60 - 79% = 0
             80 - 99% = 232527
Таблица 8.15 Вывод gstat -i[ndex]

Элемент

Описание

Tablespace

Табличное пространство, в котором находится объект. Если указано PRIMARY, то объект расположен в основном файле базы данных.

Root page

Номер корневой страницы индекса

Depth

Количество уровней в странице индексного дерева. Если глубина дерева индексной страницы превышает 3, то доступ к записям через индекс не будет максимально эффективным. Для уменьшения глубины дерева индексной страницы увеличьте размер страницы. Если увеличение размера страницы не уменьшает глубины, снова увеличьте размер страницы.

Leaf buckets

Количество страниц самого низкого уровня (листовых) в дереве индекса. Это страницы, которые содержат указатели на записи. Страницы высокого уровня содержат косвенные связи.

Nodes

Общее количество записей, индексированных в дереве. Должно быть равно количеству индексированных строк в дереве, хотя отчет gstat может включать узлы, которые были удалены, но не вычищены в процессе сборки мусора. Может также включать множество элементов для записей, у которых был изменен индексный ключ.

Average node length

Средний размер узлов в байтах

Total dup

Общее количество строк дубликатов индекса

Max dup

Количество дублирующих узлов в "цепочке", имеющих наибольшее количество дубликатов. Всегда будет нулем для уникальных индексов. Если число велико по сравнению с числом в Total dup, то это признак плохой селективности.

Average key length

Средний размер ключа в байтах с учетом сжатия. К длине каждого ключа прибавляется от 1 до 5 байт в зависимости от размера ключа и префикса. Затем высчитывается средний размер ключа.

Compression ratio

Отношение средней длины ключа без учета сжатия (Average prefix length + Average data length) к средней длине ключа с учетом сжатия (Average key length).

Average prefix length

Средний размер, занимаемый префиксами узлов, в байтах.

Average data length

Средняя длина каждого ключа в байтах. Она, скорее всего, меньше, чем фактическая сумма размеров столбцов, поскольку РЕД База Данных использует индексное сжатие для уменьшения объема данных, хранящихся на странице листа индекса.

Clustering factor

Это мера того, насколько много операций ввода-вывода будет осуществлять база данных, если бы ей пришлось читать каждую строку таблицы посредством индекса, в порядке индекса. То есть она показывает, насколько упорядочены строки в таблице по значениям индекса. Если значение близко к общему количеству страниц, значит таблица очень хорошо упорядочена. В этом случае записи индекса на одной странице листа индекса обычно указывают на строки, находящиеся в одних и тех же страницах данных. Если значение близко к общему количеству строк, значит, таблица весьма неупорядочена. В этом случае маловероятно, что записи индекса на одной странице листа индекса указывают на те же страницы данных.

Ratio

Отношение Clustering factor к общему количеству узлов в индексе.

Fill distribution

Это гистограмма с пятью 20-процентными полосами, каждая из которых показывает количество индексных страниц, чей средний процент заполнения находится в указанном диапазоне. Процент заполнения определяется соотношением пространства каждой страницы, содержащей данные. Сумма таких чисел дает общее количество страниц, содержащих индексные данные

Статистика по размерам и версиям записей

Следующая команда:

gstat -r[ecord] [-d] <база данных>

отображает статистику по размерам и версиям записей.

Таблица 8.16 Вывод gstat -r[ecord]

Элемент

Описание

Total formats

Общее количество форматов в таблице RDB$FORMATS

Used formats

Количество используемых форматов

Average record length

Средний размер сжатой записи в байтах

Total records

Общее количество строк в таблице.

Average version length

Среднее значение длины старых версий в байтах

Total versions

Общее количество старых версий в таблице

Max versions

Максимальная цепочка старых версий для записи

Average fragment length

Средний размер фрагмента в байтах

Total fragments

Количество всех фрагментов во всех записях

Max fragments

Максимальное количество фрагментов в одной записи

Average unpacked length

Средний размер записи в байтах (без сжатия)

Compression ratio

Отношение несжатых данных к сжатым

Big record pages

Количество страниц, которые полностью заняты только одной записью

Blobs

Количество всех блобов (0, 1 и 2 уровня)

Total length

Размер, занимаемый блобами, в байтах

Blob pages

Количество страниц с блобами

Level <n>

Количество блобов каждого уровня

Статистика по файловым блобам

В утилите gstat можно воспользоваться опцией, в которой указываются таблицы, где хранятся ссылки на файловые блобы и которая будет подсчитывать для каждой указанной таблицы количество и общий размер файлов по ссылкам, количество ненайденных файлов (ссылка есть, файла нет), некорректные ссылки (не удалось установить путь к файлу). Null, пустые строки, а также строки, состоящие только из пробелов, ссылками не считаются и не увеличивают счётчик ссылок.

gstat <база данных> -b <таблица>.<столбец> [<таблица>.<столбец>] ...

Если указано несколько столбцов одной таблицы, то при выводе произойдёт группировка по таблице. Если передано больше одного поля, то выведется суммарная статистика.

Файловые блобы хранятся в каталогах, настраиваемых в файле directories.conf. Они управляются тремя системными функциями: CREATE_FILE, READ_FILE, DELETE_FILE.

CREATE_FILE создаёт файл из указанного блоба и возвращает ссылку на него. Эта ссылка может быть сохранена в таблице в обычном текстовом поле. READ_FILE может по этой ссылке прочитать файл и вернуть его содержимое в виде блоба.

Опция -b при вызове gstat указывается после пути к базе данных. Опцию -b можно совмещать со всеми параметрами, кроме -e и -b.

gstat d:/work/test.fdb -b BAT.VCHAR BAT.BL LINKS.B1 LINKS.B2 LINKS.B3
=========================================================================
Database file sequence:
File D:\WORK\TEST.FDB is the only file

Analyzing file blobs ...
BAT (130)
  'VCHAR' field:
    Links'count: 2
    Missing files'count: 0
    Unresolved links'count: 0
    Blob files'size: 26 bytes

  'BL' field:
    Links'count: 2
    Missing files'count: 0
    Unresolved links'count: 0
    Blob files'size: 22 bytes

LINKS (128)
  'B1' field:
    Links'count: 2
    Missing files'count: 0
    Unresolved links'count: 1
    Blob files'size: 7 bytes

  'B2' field:
    Links'count: 2
    Missing files'count: 1
    Unresolved links'count: 1
    Blob files'size: 0 bytes

  'B3' field:
    Links'count: 2
    Missing files'count: 0
    Unresolved links'count: 1
    Blob files'size: 13 bytes

Total links'count: 10
Total missing files'count: 1
Total unresolved links'count: 3
Total blob files'size: 68 bytes

8.6. Утилита GSEC

GSEC — это утилита для работы с базой данных безопасности (содержащей информацию о пользователях СУБД). Она позволяет привилегированному пользователю управлять учетными записями пользователей для различных баз данных. Используя различные опции, можно добавлять, изменять или удалять учетные записи пользователей из базы данных безопасности.

Предупреждение

Утилита GSEC устарела. Вместо неё лучше использовать SQl-команды для управления пользователями или Services API.

Информация о всех пользователях хранится в обычной базе данных, называемой базой данных безопасности. По умолчанию база данных безопасности располагается в директории «РЕД Базы Данных» и называется security_version (см. app:securitydb).

GSEC может быть запущена как в интерактивном, так и в командном режиме, и может отображать подсказки с перечислением всех опций.

Синтаксис GSEC:

gsec [ <опции> ... ] <команда> [ <параметры> ... ]
Таблица 8.17 Опции GSEC

Опция

Описание

-user <имя пользователя>

Имя пользователя

-password <пароль>

Пароль пользователя

-fetch_password <файл>

Файл, из которого будет считан пароль пользователя

-role <имя роли>

Название роли, чьи права будет использовать указанный пользователь

-trusted

Использовать доверительную аутентификацию

-database <БД_безопасности>

Путь к файлу базы данных безопасности

-z

Отобразить версию GSEC и сервера РЕД Базы Данных.

Таблица 8.18 Команды GSEC [11]

Команда

Описание

add <имя> [ <параметр> ... ]

Добавление нового пользователя

delete <имя>

Удаление пользователя

display

Вывод информации обо всех зарегистрированных пользователях

display <имя>

Вывод информации о конкретном пользователе

modify <имя> <параметр> [ <параметр> ... ]

Изменение информации о пользователе

mapping {set | drop}

Включает или выключает флаг AUTO ADMIN MAPPING для автоматического предоставления роли RDB$ADMIN администраторам Windows в текущей базе данных, если используется доверительная авторизация

{? | help}

Отображает все опции и команды GSEC

z

Отобразить версию GSEC и сервера РЕД Базы Данных

quit

Выход из интерактивного режима.

Таблица 8.19 Параметры GSEC

Команда

Описание

-pw <пароль>

Пароль пользователя

-uid <uid>

Идентификатор пользователя

-gid <uid>

Идентификатор группы

-fname <имя>

Полное имя пользователя

-mname <отчество>

Отчество

-lname <фамилия>

Фамилия

-admin {yes | no}

Установка флага, имеет ли пользователь роль RDB$ADMIN

Для того, чтобы выполнить любую операцию с помощью gsec, необходимо пройти процедуру идентификации и аутентификации — указать имя и пароль пользователя, который имеет право на запуск сервиса gsec (подробнее см. Распределение системных привилегий ). Для указания имени и пароля пользователя используются переключатели -user и -pa[ssword], соответственно, например:

gsec -user testuser -password pass -role rdb$admin <команда> [<параметры>...]

Необязательный переключатель -role задаёт имя роли, права которой будут учитываться при выполнении каких-либо действий утилиты. Поэтому если пользователь не указывает роль, то он получает права только тех ролей, которые ему назначены с DEFAULT. Права на внесение изменений в базу данных безопасности имеют пользователи с административными привилегиями. При этом роль RDB$ADMIN должна быть указана в переключателе -role. Остальные пользователи имеют права только на изменение своей учетной записи.

Имя пользователя и пароль можно не указывать, если в системе установлены контекстные переменные ISC_USER и ISC_PASSWORD. А также если используется доверительная аутентификация Windows (Win_Sspi) или доверенная через механизм GSSAPI (gss), и пользователь системы, от имени которого запускается утилита ISQL, является членом группы администраторов.

Пример запуска утилиты GSEC в интерактивном режиме:

gsec -user sysdba -password masterkey

Пример вывода информации о пользователях:

GSEC> display
user name uid gid full name
---------------------------------------------------------
SYSDBA 0 0 Sql Server Administrator
TEST_USER 0 0 John Smith

GSEC можно использовать для управления базой данных безопасности на удаленном сервере. Для этого необходимо указать в командной строке имя:

gsec -database 192.168.10.1:C:\RedDatabase\security5.fdb -user sysdba -password masterkey

Для выхода из интерактивного режима утилиты GSEC используется команда q[uit]:

GSEC> quit

8.7. Утилита rdb_lock_print

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

Исполняемый модуль rdb_lock_print находится в каталоге bin установки СУБД РЕД База Данных. Синтаксис вызова утилиты может выглядеть одним из следующих способов:

rdb_lock_print -d <database_name> [<опции>...]
rdb_lock_print -f <lock_file> [<опции>...]

Где параметр <database_name> задает имя и путь к БД. Параметр lock_file задает имя и путь к lock - файлу. Путь к файлу таблицы блокировок проходит через /tmp/firebird в ОС Linux и C:/ProgramData/firebird в ОС Windows.

С помощью утилиты rdb_lock_print может быть выведена таблица блокировок в удобном пользователю формате. Отчет вывода разбит на блоки в следующей последовательности:

  1. LOCK_HEADER BLOCK: заголовок блока;

  2. OWNER BLOCK: группы владельцев;

  3. REQUEST BLOCK: группы запросов. Каждый владелец выводится с его запросами;

  4. LOCK BLOCK: группы блокировок;

  5. History: история событий.

Утилита rdb_lock_print имеет несколько опций, приведенных в таблице 8.20. Если никаких опций не задано, то выводится заголовок блока LOCK_HEADER BLOCK, в котором описано основная конфигурация и состояние таблицы блокировок.

Таблица 8.20 Опции rdb_lock_print

Опция

Описание

-a

Выводит содержимое таблицы блокировок: заголовок блока (LOCK_HEADER BLOCK), группы блоков (LOCK BLOCK), группы владельцев (OWNER BLOCK), группы запросов (REQUEST BLOCK) и историю событий (History).

-c

Запрашивает мьютекс (mutex) менеджера блокировок распечатать цельное последовательное представление таблицы блокировок. При этом останавливаются все процессы доступа к базе данных.

-h

Выводит недавнюю историю событий

-i [a,o,t,w] [<N> [<M>]]

Выдает интерактивный отчет, отслеживающий текущую деятельность таблицы блокировок. Выводит выбранные параметры менеджера блокировок в течение n секунд с интервалом m секунд. Значения по умолчанию 1 сек для обоих значений. Если указано только -i - выводится вся информация.

-l

Выводит группы блоков

-m

Вывод в HTML формате

-n

Выводит только ожидающих завершения владельцев (если указано -o) или ожидающих завершения групп блоков (если указано -l)

-o | -p

Выводит группы владельцев

-q <N>

Находит владельцев взаимных блокировок и печатает их PID (N - интервал сканирования)

-r

Выводит информацию о группе блока запросов

-s <номер>

Выводит группы блокировок ресурсов заданной серии (действует только если указан спецификатор -l)

-w

Выводит временный список блокировок (групп запросов), блокирующих другие запросы на блокировку, для каждого владельца (действует только с указанием -o)

Результаты использования утилиты могут оказаться достаточно большими, поэтому удобнее отчет выводить в файл, указав: > <путь к файлу>.

Блок LOCK_HEADER

Первая группа всех отчетов rdb_lock_print. Каждый отчет выводит только одну группу заголовка. На рисунке 8.1 представлено, как может выглядеть блок LOCK_HEADER.

Version:

Номер версии менеджера блокировок.

Active owner:

Владелец, который управляет таблицей блокировок в настоящий момент. Если в таблицу блокировок не пишет ни один процесс, то активным владельцем будет 0.

Length:

Общий объем памяти, выделенный таблице блокировок (в байтах).

Used:

Наибольшая величина смещения в таблице блокировок, которая используется в настоящий момент.

Пример группы заголовка блока

Рис. 8.1 Пример группы заголовка блока

Flags:

Определены два битовых флага:

  • LHB_shut_manager — показывает, что БД остановлена;

  • LHB_lock_ordering — блокировки назначаются в порядке запросов FIFO.

Enqs:

Число запросов, полученных на блокировку (не включает запросы, которые пришли и ушли).

Converts:

Запросы на повышение уровня блокировки.

Rejects:

Запросы, которые не могут быть удовлетворены.

Вlocks:

Запросы, которые не могут быть удовлетворены немедленно.

Deadlock scans:

Показывает число просмотров менеджером блокировок цепочки блокировок и владельцев для поиска взаимных блокировок. Менеджер приступает к просмотру, когда процесс ожидает блокировки в течение Scan interval секунд.

Deadlocks:

Число найденных взаимных блокировок.

Scan interval:

Время (в секундах), которое ожидает менеджер блокировок до того как запустить к поиску взаимных блокировок.

Acquires:

Сколько раз владелец запрашивает исключительное управление таблицей блокировок, чтобы выполнить изменения.

Acquire blocks:

Сколько раз владелец находился в состоянии ожидания при запросе исключительного управления таблицей блокировок.

Spin count:

Режим ожидания взаимной блокировки, когда повторяется запрос к таблице блокировок. По умолчанию отключено(равно 0).

Mutex wait:

Процент попыток, которые были заблокированы, когда владелец старался обратиться к таблице блокировок. Сколько раз (в процентах) владелец находился в состоянии ожидания, когда пытался обратиться к таблице блокировок.

Hash slots:

Число слотов кэширования блокировок.

Hash lengths:

Длина цепочки кэширования.

Remove node:

Владелец сообщает о намерении удалить узел из таблицы, когда зависает при запросе к таблице блокировок.

Insert queue:

Владелец сообщает о намерении добавить узел в таблицу, когда зависает при запросе к таблице блокировок.

Insert prior:

Указывает, где размещается ошибочное добавление узла.

Оwners:

Количество владельцев, соединенных с таблицей блокировок.

Free owners:

Количество блоков владельцев, выделенных владельцам, которые завершили их соединения, оставив блоки неиспользованными.

Free locks:

Количество групп блокировок, которые были освобождены и не использованы повторно.

Free requests:

Количество групп запросов, которые были освобождены и не использованы повторно.

Lock ordering:

Определяет порядок получение запросов на блокировку (в порядке их поступления). Включено, если установлен флаг LHB_lock_ordering.

Creation timestamp:

Время создания.

Hash lengths distribution:

Распределение длин хэшей.

Pending request count:

Количество ожидающих запросов.

Блок OWNER

Идентифицирует конкретного владельца. Владельцы делятся на несколько типов, которым сопоставляются числа: 1 – процесс, 2 – база данных, 3 – клиентское соединение, 4 – транзакция, 255 – фиктивный процесс.

Заголовок блока содержит число, которое используется в качестве идентификатора владельца в таблице блокировок.

Пример группы владельцев

Рис. 8.2 Пример группы владельцев

Owner id::

Идентификатор владельца.

Type:

Тип владельца.

Pending:

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

Process id:

Идентификатор процесса.

Thread id:

Идентификатор потока.

Flags:

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

Requests:

Запросы на блокировку (обработанные или ожидающие завершения) связанные с этим процессом.

Forward:

Ссылается на последующий элемент в очереди запросов, принадлежащих этому процессу. Число задает смещение.

Backward:

Ссылается на предыдущий элемент в очереди запросов, принадлежащих этому процессу. Число задает смещение.

Blocks:

Временный список блокировок (групп запросов), блокирующих другие запросы на блокировку, которыми владеет этот процесс.

Блок REQUEST

Выводит все запросы владельца. На рисунке 8.3 показано как выглядит блок REQUEST BLOCK.

Пример блока конкретного запроса

Рис. 8.3 Пример блока конкретного запроса

Owner:

Смещение группы владельца в таблице блокировок, выполнившего запрос.

Lock:

Смещение группы блокировки, которая описывает блокируемый ресурс.

State:

Состояние блокировки, которое назначено этому ресурсу.

Mode:

Режим блокировки – состояние, которое было запрошено для блокировки.

Flags:

Флаг запроса содержит биты: 1 – блокирование, 2 – ожидание завершения, 4 – конвертирование, 8 – отмена. Они могут комбинироваться.

AST:

Адрес подпрограммы, которая вызывается, когда кто-либо еще хочет получить блокировку на ресурс, используемый настоящим запросом.

Argument:

Адрес аргумента, который может понадобиться подпрограмме AST.

Блок LOCK

Группы блокировок представляют блокируемые ресурсы различных типов, соответствующих определенным сериям:

Таблица 8.21 Типы ресурсов

Серия

Символ

Тип ресурса

1

LCK_database

Сама база данных

2

LCK_relation

Отношение

3

LCK_bdb

Страница базы данных

4

LCK_tra

Транзакция

5

LCK_rel_exist

Существование отношения

6

LCK_idx_exist

Существование индекса

7

LCK_attachment

Подключение

8

LCK_shadow

Теневая копия

9

LCK_sweep

Сборка мусора

10

LCK_expression

Механизм кэширования индекса по выражению

11

LCK_prc_exist

Существование процедуры

12

LCK_update_shadow

Синхронное изменение теневой копии

13

LCK_backup_alloc

Страница размещения таблицы в резервном файле

14

LCK_backup_database

Защита записи в файл БД

15

LCK_backup_end

Защита согласованного удаления резервного файла

16

LCK_rel_partners

Связанные таблицы

17

LCK_page_space

Идентификатор страничного пространства

18

LCK_dsql_cache

DSQL кэш

19

LCK_monitor_state

Сбрасывание данных мониторинга

20

LCK_tt_exist

Существование TextType

21

LCK_cancel

Отмена операции

22

LCK_btr_dont_gc

Предотвращение удаления страницы B-дерева из индекса

23

LCK_rel_gc

Разрешение сборки мусора для отношения

24

LCK_tpc_init

Инициализация TPC

25

LCK_tpc_block

Существование файла tpc-блока памяти

26

LCK_fun_exist

Существование функции

27

LCK_rel_rescan

Принудительное повторное сканирование отношения

28

LCK_crypt

Однопоточное шифрование

29

LCK_crypt_status

Сообщает об изменении статуса шифрования базы данных

30

LCK_record_gc

Сборка мусора на уровне записи

31

LCK_alter_database

ALTER DATABASE

32

LCK_repl_state

Состояние репликации

33

LCK_repl_tables

Реплицированный набор

34

LCK_dsql_statement_cache

Кэш DSQL операторов

35

LCK_profiler_listener

Слушатель сетевого профайлера

36

LCK_tablespace_exist

Существование табличного пространства

37

LCK_repl_txn

Транзакция репликации

На рисунке 8.4 представлен вывод группы блокировки ресурса серии 8. Блок LOCK_BLOCK идентифицирует группу описания заблокированного ресурса.

Пример группы блокировок

Рис. 8.4 Пример группы блокировок

Series:

Тип ресурса.

Parent:

Родитель для всех блокировок, связанных с конкретным типом ресурса.

State:

Наивысшее текущее состояние блокировки.

Size:

Длина части группы блокировки, содержащей ключ (в байтах).

Length:

Фактическая длина ключа.

Data:

Данные. Являются целым числом.

Key:

Идентификатор заблокированного ресурса.

Hash queue:

Начало и конец очереди хэш для ключей ресурсов.

Requests:

Показывает число запросов на блокировку этого ресурса и указатели вперед и назад на группы блокировок.

Request:

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

Flags:

Флаг запроса содержит биты: 1 – блокирование, 2 – ожидание завершения, 4 – конвертирование, 8 – отмена. Они могут комбинироваться.

Блок History

Менеджер блокировок запоминает действия, которые он выполнял для каждого владельца. Эти действия можно просмотреть в блоке History и блоке Event log.

Пример вывода записей истории

Рис. 8.5 Пример вывода записей истории

GRANT:

Предоставление блокировки на ресурс.

ENQ:

Помещение в очередь запрос.

DENY:

Отказ в запросе на ресурс.

POST:

Отправка сообщения владельцу по поводу ресурса.

DEQ:

Снятие блокировки владельцем.

SCAN:

Сканирование взаимных блокировок.

WAIT:

Владелец в состоянии ожидания.

CONVERT:

Повышение уровня блокировки.

8.8. Утилита rdbsvcmgr

Утилита предоставляет интерфейс командной строки для Services API, обеспечивая доступ к любой службе, которая реализуется в СУБД.

Services API - программный интерфейс для запуска служебных задач (например, бэкап, рестор, проверка базы данных, сбор статистики и т.д.) без использования утилит. СУБД выполняет эти задачи с помощью менеджера сервисов (service manager). Утилита rdbsvcmgr обеспечивает доступ к сервисам.

Синтаксис вызова утилиты:

rdbsvcmgr <имя сервиса> <опции>

Имя сервиса должно быть service_mgr, может иметь префикс с именем хоста в соответствии с общими правилами (host:service_mgr, \\\host\service_mgr).

Опции в точности соответствуют тегам SPB, используемым в сокращенном виде. Удалите части тега isc_, spb_, svc_ и вы получите опцию. Например, isc_action_svc_backup нужно указать как action_backup, isc_spb_dbname как dbname, isc_info_svc_implementation как info_implementation, isc_spb_prp_db_online как prp_db_online и так далее.

В одном вызове rdbsvcmgr можно указать либо одно действие, либо несколько информацион- ных элементов.

Подключение к менеджеру сервисов

Чтобы подключиться к удалённому менеджеру сервисов нужно указать имя локальной или удаленной службы. Эта строка похожа на строки подключения к базе данных, поскольку синтаксис определяет сетевой протокол, используемый для подключения клиентского приложения к менеджеру сервисов на хосте сервера.

Таблица 8.22 Подключение к менеджеру сервисов

Опция

Описание

user | user_name <имя пользователя>

Имя пользователя.

role | sql_role_name <роль>

Роль.

password <пароль>

Пароль.

fetch_password <файл>

Считать пароль из файла.

trusted_auth

Использовать доверительную аутентификацию.

expected_db <база данных>

База данных безопасности, если она отличается от базы по умолчанию (security5.fdb).

key_holder <имя плагина>

Ключ, необходимый для доступа к зашифрованной базе данных.

Запуск rdbrepldiff через сервис:

./rdbsvcmgr localhost:service_mgr -user SYSDBA -password masterkey -action_diff
-dbname localhost:/my/other/database.fdb -dif_simple -dif_replica
john:smith@/my/replica/database2.fdb

Информационные запросы

Вы можете использовать следующие опции для получения информации о конфигурации сервера.

Таблица 8.23 Информационные запросы

Опция

Описание

info_server_version

Версия сервера.

info_implementation

Аппаратная платформа, на которой была создана база данных.

info_user_dbpath

Путь к базе данных безопасности сервера.

info_get_env

Расположение корневого каталога сервера.

info_get_env_lock

Расположение файла таблицы блокировок на сервере.

info_get_env_msg

Расположение файла сообщений на сервере.

info_svr_db_info

Количество подключений к базе данных и баз данных, активных в данный момент на сервере.

info_version

Версия Service Manager.

info_capabilities

Битовая маска возможностей, поддерживаемых сервером.

Отображение баз данных, используемых на сервере, а также версии СУБД:

./rdbsvcmgr yourserver:service_mgr user sysdba password masterkey
info_server_version info_svr_db_info

Действия

В одном вызове менеджера сервисов можно выполнять только одну задачу. Вы можете поддерживать несколько подключений к менеджеру сервисов и выполнять задачу в каждом подключении.

Действие action_backup позволяет выполнять резервное копирование базы данных. Аналогично gbak -b.

Таблица 8.24 Опции action_backup

Опция

Описание

dbname <путь к бд>

Путь к основному файлу базы данных.

verbose

Подробный вывод о бэкапе.

bkp_file <файл резервной копии>

Путь к файлу резервной копии. Если файл резервной копии уже существует, то резервное копирование не будет выполнено, если не указана опция bkp_replace.

bkp_replace

Перезаписать файл резервной копии, если он уже существует.

bkp_length <n>

Длина файла резервной копии в байтах.

bkp_factor <n>

Использовать блокирующий фактор n.

bkp_ignore_checksums

Игнорировать контрольные суммы, а также поврежденные BLOB при бэкапе и BLR при ресторе.

bkp_ignore_limbo

Игнорировать зависшие двухфазные транзакции (limbo).

bkp_metadata_only

Производит резервное копирование только метаданных.

bkp_no_garbage_collect

Не собирать мусор во время резервного копирования.

bkp_old_descriptions

Производит резервное копирование метаданных в формате старого стиля, т.е. в режиме совместимости со старыми базами данных.

bkp_non_transportable

Создаёт резервную копию в нетранспортабельном формате.

bkp_convert

Преобразование внешних файлов во внутренние таблицы.

bkp_no_triggers

Не запускать триггеры уровня базы данных.

verbint <n>

Подробный вывод лога действии с заданным интервалом обработанных записей.

bkp_skip_data <шаблон>

Пропускать данные таблиц, имена которых соответствуют указанному здесь регулярному выражению в SQL-синтаксисе (см. оператор SIMILAR TO).

bkp_include_data <шаблон>]

Включать только данные таблиц, имена которых соответствуют указанному здесь регулярному выражению в SQL-синтаксисе (см. оператор SIMILAR TO).

bkp_stat TDRW

Вывести статистику в процессе работы (работает вместе с -verbose).

T — время от начала работы gbak;

D — время прошедшее с последнего вывода на экран;

R — число страниц прочитанных с последнего вывода на экран;

W — число страниц записанных с последнего вывода на экран.

bkp_keyholder <имя плагина>

Это ключ, необходимый для доступа к зашифрованной базе данных.

bkp_keyname <имя ключа>

Явное присвоение имени ключу вместо ключа по умолчанию, указанного в исходной базе данных (при резервном копировании) или в файле резервной копии (при восстановлении).

bkp_crypt <имя плагина>

Имя плагина для шифрования файла резервной копии или восстановленной базы данных вместо плагина по умолчанию. Его также можно использовать в сочетании с ключом -KEYNAME для шифрования резервной копии незашифрованной базы данных или для шифрования базы данных, восстановленной из незашифрованной резервной копии.

bkp_zip

Сжать файл резервной копии перед его шифрованием. После шифрования файл почти не сжимается. Для сжатия используется плагин zstd с 5 уровнем сжатия в 1 поток.

-bkp_compressor [<имя плагина> [<уровень сжатия> [<кол-во потоков>]]]

Сжать файл резервной копии перед его шифрованием. После шифрования файл почти не сжимается. С РЕД Базой Данных поставляются плагины zstd и zlibcompressor. Плагин zstd поддерживает 22 уровня сжатия, а zlibcompressor 9. Количество потоков для zstd и zlibcompressor не ограничено. По умолчанию используется плагин zstd с 5 уровнем сжатия в 1 поток.

bkp_parallel_workers <n>

Количество параллельных рабочих потоков для бэкапа. Включает многопоточное выполнение резервного копирования.

bkp_direct_io

Открытие файла бекапа в режиме прямого доступа (без буферизации).

Действие action_restore позволяет выполнить восстановление базы данных из резервной копии. Аналогично gbak -c.

Таблица 8.25 Опции action_restore

Опция

Описание

bkp_file <файл резервной копии>

Путь к файлу резервной копии.

dbname <база данных>

Путь к файлу базы данных.

res_length <n>

Количество страниц в восстановленном файле базы данных.

verbose

Подробный вывод о ресторе.

res_buffers <n>

Задать размер страничного кэша для БД.

res_page_size <n>

Установить размер страницы.

res_access_mode [prp_am_readonly | prp_am_readwrite]

Режим доступа "read_only" или "read_write".

res_deactivate_idx

Деактивировать индексы во время восстановления.

res_no_shadow

Восстановить без создания теневых копий.

res_no_validity

Отключение всех ограничений проверки данных (check) и ограничений NOT NULL.

res_one_at_a_time

Подтверждать транзакцию после восстановления каждой таблицы.

res_replace

Заменить базу данных, если она существует.

res_create

Восстановить, но не перезаписывать существующую базу данных.

res_use_all_space

Не резервировать место под версии записей.

res_fix_fss_data <кодировка>

Исправить кодировку данных.

res_fix_fss_metadata <кодировка>

Исправить кодировку метаданных.

res_metadata_only

Производит восстановление только метаданных.

verbint <n>

Подробный вывод лога действии с заданным интервалом обработанных записей.

res_skip_data <шаблон>

Пропускать данные таблиц, имена которых соответствуют указанному здесь регулярному выражению в SQL-синтаксисе (см. оператор SIMILAR TO).

res_include_data <шаблон>

Включать только данные таблиц, имена которых соответствуют указанному здесь регулярному выражению в SQL-синтаксисе (см. оператор SIMILAR TO).

res_stat TDRW

Вывести статистику в процессе работы (работает вместе с -verbose).

T — время от начала работы gbak;

D — время прошедшее с последнего вывода на экран;

R — число страниц прочитанных с последнего вывода на экран;

W — число страниц записанных с последнего вывода на экран

res_keyholder <имя плагина>

Это ключ, необходимый для доступа к зашифрованной базе данных.

res_keyname <имя ключа>

Явное присвоение имени ключу вместо ключа по умолчанию, указанного в исходной базе данных (при резервном копировании) или в файле резервной копии (при восстановлении).

res_crypt <имя плагина>

Имя плагина для шифрования файла резервной копии или восстановленной базы данных вместо плагина по умолчанию. Его также можно использовать в сочетании с ключом -KEYNAME для шифрования резервной копии незашифрованной базы данных или для шифрования базы данных, восстановленной из незашифрованной резервной копии.

res_replica_mode [prp_rm_none | prp_rm_readonly | prp_rm_readwrite]

Выбрать режим реплики - только для чтения (read_only) или для чтения и записи (read_write). Режим none отключает репликацию и переводит реплику в режим read_write. Как правило, этот режим должен использоваться после сбоя в базе данных мастера, когда эта реплика переходит в статус мастера. Или если нужно сделать физические резервные копии из реплики.

res_parallel_workers <n>

Количество параллельных рабочих потоков для рестора. Включает многопоточное выполнение восстановления БД, если MaxParallelWorkers > 1 (см. firebird.conf). Вместо этого параметра утилиты можно указать параметр конфигурации ParallelWorkers.

res_direct_io

Открытие файла бекапа в режиме прямого доступа (без буферизации).

Действие action_properties позволяет настроить параметры базы данных. Аналогично gfix.

Таблица 8.26 Опции action_properties

Опция

Описание

dbname <база данных>

Путь к файлу базы данных.

prp_page_buffers <n>

Устанавливает новый размер страничного кэша БД в страницах. <n> - количество страниц.

prp_sweep_interval <n>

Изменяет интервал транзакций для автоматической сборки мусора (sweep). <n> устанавливает новый интервал. Если n = 0, автоматическая сборки мусора не выполняется.

prp_shutdown_db <n>

Закрывает базу данных, когда нет соединений с базой данных, или по истечении указанного таймаута.

prp_deny_new_transactions <n>

Завершает работу базы данных, если в конце указанного таймаута нет активных транзакций; запрещает новые транзакции в течение этого периода ожидания; завершается ошибкой, если в конце периода ожидания есть активные транзакции.

prp_deny_new_attachments <n>

Завершает работу базы данных, если в конце указанного таймаута нет активных подключений; запрещает новые подключения к базе данных в течение периода ожидания; завершится ошибкой, если в конце периода ожидания есть активные подключения.

prp_set_sql_dialect <n>

Изменяет диалект базы данных. <n> может быть 1 или 3.

prp_access_mode [prp_am_readonly | prp_am_readwrite]

Устанавливает режим записи для базы данных - только для чтения или чтение/запись. Этот параметр может принимать два значения.

prp_reserve_space [prp_res_use_full | prp_res]

Включает 100% заполнение страниц БД (full) или 80% заполнение по умолчанию (reserve). 100%-е заполнение имеет смысл для баз только для чтения.

prp_write_mode [prp_wm_async | prp_wm_sync]

Переключает режимы синхронной/асинхронной записи Forced Writes.

prp_activate <теневая копия>

Параметр предназначен для активации теневой копии.

<теневая копия> - адрес и имя файла теневой копии (или первого из файлов).

prp_db_online

Возвращает в режим "online" базу, остановленную с помощью -shut

prp_force_shutdown <n>

Предназначен для принудительного закрытия базы данных. <n> указывает количество секунд, через которое произойдет закрытие. Если остались активные пользователи, они отключатся, последние результаты их работы будут потеряны. Такое средство нужно применять с осторожностью.

prp_attachments_shutdown <n>

Предназначен для запрета новых соединений с БД. <n> указывает количество секунд, через которое произойдет отключение БД. Отключение отменится, если к этому времени еще останутся активные соединения.

prp_transactions_shutdown <n>

Предназначен для запрета запуска новых транзакций. <n> указывает количество секунд, через которое произойдет отключение БД. Отключение отменится, если к этому времени еще останутся активные транзакции.

prp_shutdown_mode [prp_sm_normal | prp_sm_multi | prp_sm_single | prp_sm_full]

Останавливает базу данных. Используется с одним из дополнительных параметров -attach, -force или -tran. Опция multi позволяет устанавливать соединение с БД только SYSDBA и владельцем БД. Опция single похожа на multi, за тем исключением, что только один из пользователей – SYSDBA или владелец БД – может соединиться. Опция full не позволяет соединиться с БД никому, даже SYSDBA или владельцу БД.

prp_online_mode [prp_sm_normal | prp_sm_multi | prp_sm_single | prp_sm_full]

Возвращает в режим "online" базу, остановленную с помощью -shut. Опция normal позволяет устанавливать соединение с БД любым авторизованным пользователям, а не только SYSDBA и владельцем БД. Опция multi позволяет устанавливать соединение с БД только SYSDBA и владельцем БД. Опция single похожа на multi за тем исключением, что допускается только одно подключение от SYSDBA или владельца БД.

prp_nolinger

Останавливает указанную базу данных, после того как последнего соединения не стало, независимо от установок LINGER в базе данных.

prp_replica_mode [prp_rm_none | prp_rm_readonly | prp_rm_readwrite]

Выбрать режим реплики - только для чтения (read_only) или для чтения и записи (read_write). Режим none отключает репликацию и переводит реплику в режим read_write. Как правило, этот режим должен использоваться после сбоя в базе данных мастера, когда эта реплика переходит в статус мастера. Или если нужно сделать физические резервные копии из реплики.

prp_checksums [true | false]

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

Действие action_repair позволяет инициировать проверку согласованности базы данных и исправление найденных ошибок. Аналогично gfix с опциями -validate, -full и -mend.

Таблица 8.27 Опции action_repair

Опция

Описание

dbname <база данных>

Путь к файлу базы данных.

rpr_commit_trans {<ID> | all}

Завершает подтверждением зависшую (in limbo) двухфазную транзакцию с идентификатором <ID>, или все зависшие транзакции (all).

rpr_rollback_trans {<ID> | all}

Завершает откатом зависшую (in limbo) двухфазную транзакцию с идентификатором <ID>, или все зависшие транзакции (all).

rpr_recover_two_phase {<ID> | all}

Автоматическое двухфазное восстановление limbo транзакции с номером <ID>, или всех транзакций (all).

rpr_commit_trans_64 {<ID> | all}

Завершает подтверждением зависшую (in limbo) двухфазную транзакцию с идентификатором <ID>, или все зависшие транзакции (all).

rpr_rollback_trans_64 {<ID> | all}

Завершает откатом зависшую (in limbo) двухфазную транзакцию с идентификатором <ID>, или все зависшие транзакции (all).

rpr_recover_two_phase_64 {<ID> | all}

Автоматическое двухфазное восстановление limbo транзакции с номером <ID>, или всех транзакций (all).

rpr_check_db

Проверка базы данных без исправления каких-либо проблем.

rpr_ignore_checksum

Игнорировать ошибки контрольных сумм при проверке.

rpr_kill_shadows

Удаляет все неиспользуемые теневые копии базы данных.

rpr_mend_db

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

rpr_validate_db

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

rpr_full

Используется вместе с -validate_db для более глубокой проверки на уровне записей; освобождает неназначенные фрагменты записей.

rpr_sweep_db

Запускает принудительную сборку мусора в БД.

rpr_list_limbo_trans

Выводит список «зависших» транзакций (limbo).

rpr_icu

Исправляет базу данных для работы с текущей версией ICU.

rpr_par_workers <n>

Количество параллельных рабочих потоков для сборки мусора. Включает многопоточную сборку мусора, если MaxParallelWorkers > 1 (см. firebird.conf). Вместо этого параметра утилиты можно указать параметр конфигурации ParallelWorkers.

rpr_upgrade_db

Обновляет базу данных до последней минорной версии ODS в пределах поддерживаемой мажорной версии.

Действие action_db_stats выводит статистику базы данных. Аналогично gstat.

Таблица 8.28 Опции action_db_stats

Опция

Описание

dbname <база данных>

Путь к файлу базы данных.

sts_record_versions

Добавляет статистику о средних длинах записей, количестве версий и информацию о BLOB.

sts_nocreation

Не выводить дату создания.

sts_table <таблица>

Анализ таблицы или списка таблиц и любых индексов, принадлежащих указанным таблицам. За этим параметром следует список имен таблиц, которые вы хотите проанализировать. Список должен быть в верхнем регистре, и каждая таблица разделяется пробелом.

sts_data_pages

Статистика страниц данных – информация о таблицах содержащихся в базе данных. Пользовательские и системные индексы, системные таблицы не анализируются.

sts_hdr_pages

Статистика заголовочной страницы - это информация о глобальных свойствах всей базы данных, хранящаяся на заголовочной странице каждой базы данных.

sts_idx_pages

Статистика индексов – информация об индексах в базе данных. Пользовательские и системные таблицы, системные индексы не анализируются.

sts_sys_relations

Статистика для системных таблиц и индексов в дополнение к пользовательским таблицам и индексам.

sts_encryption

Статистика по зашифрованным и незашифрованным страницам БД.

sts_par_workers <n>

Количество параллельных рабочих потоков для сбора статистики. Включает многопоточность, если MaxParallelWorkers > 1 (см. firebird.conf). Вместо этого параметра утилиты можно указать параметр конфигурации ParallelWorkers.

Отображение информации заголовка базы данных employee на локальном компьютере:

./rdbsvcmgr service_mgr user sysdba password masterkey action_db_stats dbname
employee sts_hdr_pages

Действие action_diff выполняет проверку целостности данных. Аналогично rdbrepldiff.

Таблица 8.29 Опции action_diff

Опция

Описание

dbname <база данных>

Путь к файлу базы данных.

verbose

Подробный вывод о проверке.

dif_replica

Путь к реплике базы данных.

dif_config

Имя измененного файла конфигурации для возможности сравнивать не все сущности базы данных, а только необходимые. При этом процесс репликации не прерывается.

dif_sync

Ожидание синхронизации мастера и слейва в течение одной минуты или времени, указанного в параметре dif_timeout.

dif_metaonly

Производит проверку только метаданных.

dif_timeout

Tаймаут ожидания синхронизации (в секундах).

dif_nodbtriggersoff

Включает ипользование триггеров при подключении к мастеру.

dif_simple

Сравнение двух нереплицируемых баз данных.

dif_full

Показать расширенный вывод о проверке. Расширенный вывод отображает:

  • Записи, которые отсутсвуют на слейве;

  • Поля, которые отличаются у записей;

  • Разницу в количестве записей на мастере и на слейве.

dif_values

Показывает значения, которые отличаются у записей. Можно использовать только совместно с опцией dif_full.

Можно использовать Services API для отображения, добавления, удаления и изменения пользователей аналогично gsec.

Действие action_display_user выводит информацию обо всех зарегистрированных пользователях. Действие action_display_user_adm дополнительно показывает являются ли они администраторами БД.

Таблица 8.30 Опции action_display_user и action_display_user_adm

Опция

Описание

dbname <БД_безопасности>

Путь к файлу базы данных безопасности.

sec_username <имя пользователя>

Имя пользователя, для которого будет выполнена операция.

sql_role_name <имя роли>

Название роли, чьи права будет использовать указанный пользователь.

Действие action_add_user нужно для добавления нового пользователя. Аналогично gsec -add.

Таблица 8.31 Опции action_add_user

Опция

Описание

dbname <база данных>

Путь к файлу базы данных

sec_username <имя пользователя>

Имя пользователя

sql_role_name <имя роли>

Название роли, чьи права будет использовать указанный пользователь.

sec_password <пароль>

Пароль.

sec_groupname <имя группы>

Группа.

sec_firstname <имя>

Имя.

sec_middlename <отчество>

Отчество.

sec_lastname <фамилия>

Фамилия.

sec_userid <uid>

Идентификатор пользователя.

sec_groupid <gid>

Идентификатор группы.

sec_admin <число>

Если значение не равно 0, пользователю будут назначены права администратора

Действие action_delete_user нужно для удаления нового пользователя. Аналогично gsec -delete.

Таблица 8.32 Опции action_delete_user

Опция

Описание

dbname <база данных>

Путь к файлу базы данных.

sec_username <имя пользователя>

Имя пользователя.

sql_role_name <роль>

Роль.

Действие action_modify_user нужно для удаления изменения информации о пользователе. Аналогично gsec -modify.

Таблица 8.33 Опции action_modify_user

Опция

Описание

dbname <база данных>

Путь к файлу базы данных.

sec_username <имя пользователя>

Имя пользователя.

sql_role_name <роль>

Роль.

sec_password <пароль>

Пароль.

sec_groupname <имя группы>

Группа.

sec_firstname <имя>

Имя.

sec_middlename <отчество>

Отчество.

sec_lastname <фамилия>

Фамилия.

sec_userid <uid>

Идентификатор пользователя.

sec_groupid <gid>

Идентификатор группы.

sec_admin <число>

Если значение не равно 0, пользователю будут назначены права администратора

Действие action_nbak позволяет создавать инкрементные резервные копии.

Таблица 8.34 Опции action_nbak

Опция

Описание

dbname <база данных>

Путь к файлу базы данных.

nbk_file <резервный файл>

Путь к файлу резервной копии.

nbk_level <уровень>

Уровень резервной копии.

nbk_guid <GUID>

GUID предыдущего бекапа, относительно которого нужно создавать инкремент.

nbk_no_triggers

Не запускать триггеры базы данных.

nbk_direct [ON | OFF]

Включает/выключает небуферизованный ввод/вывод при чтении БД.

nbk_clean_history

Очистить таблицу RDB$HISTORY.

nbk_keep_days <число>

Определяет сколько дней, начиная с сегодняшнего дня, должно храниться в истории.

nbk_keep_rows <число>

Определяет сколько записей должно храниться в истории.

Действие action_nrest нужно для восстановления базы данных из инкрементных резервных копий.

Таблица 8.35 Опции action_nrest

Опция

Описание

dbname <база данных>

Путь к файлу базы данных.

nbk_file <резервный файл>

Путь к файлу резервной копии.

nbk_inplace

Восстанавливать инкремент в существующую базу данных.

nbk_sequence

Cохраняет существующий GUID и последовательность репликации исходной базы данных (в противном случае они сбрасываются). Эта опция должна использоваться при создании реплики, чтобы асинхронная репликация могла быть автоматически продолжена с того момента, когда было выполнено физическое резервное копирование на основной базе.

Команда action_nfix нужна для разблокировки базы данных после самостоятельного восстановления из блокированной резервной копии. Так как копия блокированной базы данных является так же блокированной, поэтому не получится использовать копию как рабочую базу данных. Поэтому, если исходная база данных повреждена или утеряна, то нужно восстановить/разархивировать/скопировать базу данных из копии и разблокировать ее с параметром -F (но не -UN).

Таблица 8.36 Опции action_nfix

Опция

Описание

dbname <база данных>

Путь к файлу базы данных.

nbk_sequence

Cохраняет существующий GUID и последовательность репликации исходной базы данных (в противном случае они сбрасываются). Эта опция должна использоваться при создании реплики, чтобы асинхронная репликация могла быть автоматически продолжена с того момента, когда было выполнено физическое резервное копирование на основной базе.

Таблица 8.37 Опции action_diff

Опция

Описание

dbname <база данных>

Путь к файлу базы данных.

verbose

Подробный вывод о проверке.

dif_replica <файл>

Вторая база (реплика).

dif_config <файл>

Имя измененного файла конфигурации для возможности сравнивать не все сущности базы данных, а только необходимые. При этом процесс репликации не прерывается.

dif_sync

Ожидание синхронизации мастера и слейва в течение одной минуты или времени, указанного в параметре -dif_timeout.

dif_metaonly

Производит проверку только метаданных.

dif_timeout <таймаут>

Tаймаут ожидания синхронизации (в секундах).

dif_nodbtriggersoff

Включает ипользование триггеров при подключении к мастеру

dif_simple

Сравнение двух нереплицируемых баз данных.

Таблица 8.38 Действия для ведения аудита

Действие

Описание

action_trace_start -trc_cfg <конфигурационный файл> -trc_name <имя сессии>

Запускает сессию пользовательской трассировки.

action_get_fb_log, action_get_ib_log

Отображают лог СУБД.

action_trace_suspend -trc_id <ID сессии>

Приостановление сеанса трассировки.

action_trace_resume -trc_id <ID сессии>

Возобновление сеанса трассировки.

action_trace_stop -trc_id <ID сессии>

Завершение сеанса трассировки.

action_trace_list

Вывод списка существующих сеансов трассировки.

Действие action_aggtrace нужно для запуска агрегатного аудита.

Таблица 8.39 Опции action_aggtrace

Опция

Описание

atrc_get

Запросить метрики новых и обновлённых запросов.

atrc_get_new

Запросить метрики только новых запросов.

atrc_get_updated

Запросить метрики только обновлённых запросов т.е тех, у которых изменились значения метрик.

atrc_get_old

Запросить метрики только старых запросов, то есть тех, которые уже запрашивались ранее, но значения метрик не изменились.

atrc_get_all

Запросить метрики по всем статусам.

atrc_clear

Очистить сохранённую статистику.

atrc_with_query

Добавлять текст запроса в вывод.

atrc_with_plan

Добавлять план запроса в вывод.

atrc_get_version

Вывести версию плагина агрегатного аудита.

atrc_statement

Запросить метрики событий. Если указана какая-либо "get" опция (atrc_get_new, atrc_get_old, atrc_get_all, atrc_with_query, atrc_get или atrc_get_updated), то atrc_statement будет применена автоматически.

atrc_transaction

Запросить метрики событий транзакций.

atrc_text {<хэш запроса>|<хэш плана>}

Вывести запрос или план запроса по указанному хэшу.

Действие action_migrate выполняет миграцию.

Таблица 8.40 Опции action_migrate

Опция

Описание

dbname []

mig_version [string value]

Таблица 8.41 Работа с отображениями

Действие

Описание

action_set_mapping

-dbname <база данных>

-sql_role_name <роль>

Предоставляет администраторам Windows роль RDB$ADMIN в указанной базе данных, если используется доверительная авторизация

action_drop_mapping

-dbname <база данных>

-sql_role_name <роль>

Снимает с администратора Windows роль RDB$ADMIN в указанной базе данных.

Действие action_validate позволяет запустить онлайн-проверку базы данных.

Таблица 8.42 Опции action_validate

Опция

Описание

-dbname <база данных>

-sql_role_name <роль>

Снимает с администратора Windows роль RDB$ADMIN в указанной базе данных.

dbname <база данных>

Путь к файлу базы данных.

val_tab_incl <шаблон>

Шаблон таблиц, включенных в проверку. По умолчанию все пользовательские таблицы включены, системные таблицы не проверяются.

val_tab_excl <шаблон>

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

val_idx_incl <шаблон>

Шаблон для индексов, включенных в проверку. По умолчанию % – все индексы включены.

val_idx_excl <шаблон>

Шаблон списка индексов для исключения из процесса валидации.

val_lock_timeout <число>

Таймаут ожидания блокировки на таблицу (в секундах). По умолчанию 10 секунд, -1 - бесконечное ожидание.

8.9. Утилита rdbguard

Утилита rdbguard контролирует состояние сервера. Если сервер был нештатно остановлен, Guardian автоматически перезапускает его.

Таблица 8.43 Опции rdbguard

Опция

Описание

-s(ignore)

Если запуск сервера завершается с ошибкой, выполнять повторные попытки запуска.

-(o)netime

Если запуск сервера завершается с ошибкой, не пытаться запустить его повторно.

-(f)orever

Если запуск или выполнение сервера завершается с ошибкой, выполнять его повторный запуск (режим по умолчанию).

-(d)aemon

Запускать сервер в режиме демона, отключаясь от родительского териминала.

-(p)idfile путь_к_файлу

Использовать указанный файл в качестве PID-файла сервера.

-(g)uardpidfile путь_к_файлу

Использовать указанный файл в качестве PID-файла rdbguard.

-(t)imeout таймаут

Время в секундах, которое rdbguard будет ожидать с момента начала остановки сервера, прежде чем убить его процесс. По умолчанию 1800 секунд (30 минут). Если сервер не успевает остановиться в отведенное время, то это может привести к неполной записи на диск измененных страниц из кэша. В этом случае целостность базы данных не нарушается, но может наблюдаться снижение производительности.

8.10. Коды возврата утилит

Для утилит gfix, gbak, gstat, rdbsvcmgr, rdbtracemgr, rdblogmgr, rdbreplmgr, hashgen, mint,
nbackup, rdb_lock_print:
0 – успешно
1 – ошибка

Для утилиты gbak:
0 – успешно
1 – ошибка
2 – база данных не переведена в режим online из-за ошибки при восстановлении из резервной копии

Для утилиты rdbrepldiff:
0 – успешно (базы идентичны)
1 – базы не идентичны
2 – ошибка в процессе работы

Для утилиты gsec:
0 – успешно
15 – невозможно открыть базу данных
16 – ошибка в опции утилиты
17 – операция не указана
18 – имя пользователя не указано
19 – ошибка добавления записи
20 – ошибка изменения записи
21 – ошибка поиска/изменения записи
22 – запись не найдена для пользователя:
23 – ошибка удаления записи
24 – ошибка поиска/удаления записи
28 – ошибка поиска/отображения записи
29 – недопустимый параметр, опция не определена
30 – операция уже указана
31 – пароль уже указан
32 – идентификатор пользователя уже указан
33 – идентификатор группы уже указан
34 – проект уже указан
35 – организация уже указан
36 – имя уже указаноОткрытие файла бекапа в режиме прямого доступа
37 – отчество уже указано
38 – фамилия уже указана
40 – указана недопустимая опция
41 – указана неоднозначная опция
42 – не указана операция для параметров
43 – нет допустимых параметров для этой операции
44 – указаны несовместимые опции
74 – ошибка выделения памяти
75 – ошибка
76 – недопустимое имя пользователя (допускается не более 31 байта)
77 – недопустимый пароль (допускается не более 16 байт)
78 – база данных уже указана
79 – имя администратора базы данных уже указано
80 – пароль администратора базы данных уже указан
81 – роль уже указана
92 – указана недопустимая в интерактивном режиме опция
93 – ошибка при закрытии базы данных безопасности
94 – ошибка при выполнении запроса в базе данных безопасности
96 – ошибка при получении пароля из файла
97 – ошибка при изменении AUTO ADMINS MAPPING в базе данных безопасности
99 – недопустимый параметр для -MAPPING, допускается только SET или DROP
103 – недопустимый параметр для -ADMIN, принимается только YES или NO
104 – недостаточно прав для завершения операции
200 – пользователь не найден в LDAP
200 – ошибка при изменении пароля LDAP

Для утилиты rdbserver:
0 – успешно
1 – ошибка
2 – ошибка запуска

Для утилиты isql:
0 – успешно
1 – ошибка
101 – ошибка аутентификации
102 – ошибка ввода/вывода
103 – ошибка DSQL
104 – ошибка функции SHOW