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, что дает
возможность видеть все изменения метаданных, подтвержденные другими
пользователями.
Переключатели командной строки
Переключатели командной строки начинаются в символа "-". Достаточно указать только начальные символы переключателей.
Опция |
Описание |
|---|---|
-a(ll) |
Извлечение всех метаданных, включая не-SQL объекты (например внешние функции). Используется совместно с командой |
-b(ail) |
Этот переключатель указывает утилите поручить ошибку ОС, но только в пакетном режиме ( |
-c(ache) <число> |
Задать число страниц, которые будут кэшироваться при соединении с БД. |
-ce(rtificate) <алиас> |
Использовать сертификат для проверки подлинности пользователя при многофакторной аутентификации. |
-ch(arset) <кодировка> |
Задать кодировку для текущего соединения ( |
-d(atabase) <база данных> |
Задать имя и путь к БД, которое будет записано в выходной поток. |
-e(cho) |
Включает или подавляет дублирование команд на указанное устройство вывода (монитор, в файл, и т. д.) ( |
-ex(tract) |
Извлечь метаданные. |
-f(etch_password) |
Извлечь пароль из файла. |
-i(nput) <имя файла> |
Задать файл с SQL-запросами для выполнения ( |
-l(ogin) |
Эффективный логин доверенного пользователя. Для аутентификации по паролю с именем другого пользователя. См. параметр конфигурации |
-m(erge) |
Перенаправление ошибок на поток стандартного вывода. |
-m2 |
Отправлять информацию о статистике и планах в выходной файл, который указан в переключателе |
-n(oautocommit) |
Отключить автоматическое подтверждение DDL-операций ( |
-nod(btriggers) |
Не запускать триггеры базы данных. |
-now(arnings) |
Не показывать предупреждения. |
-o(utput) <имя файла> |
Задать файл для вывода результата выполнения запросов. Без аргументов перенаправляет вывод на стандартное устройство вывода (монитор)( |
-pag(elength) <размер> |
Размер страницы. |
-p(assword) <пароль> |
Пароль пользователя. |
-pi(n) <PIN> |
Задать PIN (пароль), если он необходим для получения закрытого ключа сертификата пользователя. |
-q(uiet) |
Не показывать сообщение "Use CONNECT...". |
-r(ole) <роль> |
Имя роли. |
-r2 <роль> |
Имя роли с учетом регистра. |
-s(qldialect) <диалект> |
SQL диалект ( |
-t(erminator) <строка> |
Команда терминатора ( |
-ti(meout) <секунды> |
Время в секундах, по истечении которого сессия бездействующего пользователя будет заблокирована. Подробнее см. Блокирование сеанса пользователя . Начиная с версии РЕД Базы Данных 5.0.3 опция недоступна. |
-tr(usted) |
Использовать доверительную аутентификацию. |
-to(ken) <token> |
Токен для аутентификации по протоколу |
-u(ser) <пользователь> |
Имя пользователя. |
-x |
Извлечение метаданных. |
-xn |
Извлечь метаданные, опустив блоки |
-z |
Показать версии утилиты и сервера |
-v(erify) <алиас сертификата> |
Алиас сертификата, которым сервер будет удостоверять свою подлинность клиенту при аутентификации плагином |
Общие команды
Общие команды isql выполняют множество полезных задач, включая чтение, запись и выполнение скриптов схемы, а также выполнение команд командной строки.
Команда |
Описание |
|---|---|
BLOBDUMP <ID blob> <имя файла> |
Сохраняет данные
|
BLOBVIEW <ID blob> |
Отображает данные
Замечание: |
EDIT [<имя файла>] |
Позволяет отредактировать и заново выполнить предыдущую команду isql или пакет команд
в исходном файле. |
HELP |
Отображает список команд isql с их описанием. |
INput <имя файла> |
Читает и выполняет блок команд из указанного текстового файла (скрипта SQL). Входные
файлы могут содержать другие команды |
OUTput [<имя файла>] |
Перенаправляет выходные данные в файл на диске или на стандартное устройство вывода (монитор). Если имя файла не указано, результаты появятся на стандартном выводе, на мониторе (т. е. вывод в файл отключен). |
SET |
См. Команды SET |
SHELL [<команда>] |
Предоставляет временный доступ к окну командной строки без подтверждения или
отката любой транзакции. Аргумент |
SHOW |
См. Команды SHOW |
EXIT |
Подтверждает текущую транзакцию без подсказки, закрывает базу данных и завершает сессию isql. |
QUIT |
Отменяет текущую транзакцию и закрывает окно isql. |
RECONNECT [ [PASSWORD '<пароль>'] | [CERTIFICATE '<алиас_сертификата>' [PIN <пароль_закрытого_ключа>] ] ] |
Позволяет возобновить заблокированное подключение к базе данных. Авторизационные данные, которые необходимо указать, зависят от способа аутентификации во время первого подключения к базе данных. В случае использования доверенной аутентификации, указывать авторизационные данные не требуется. |
Команды SHOW
Команды SHOW используются для отображения метаданных, включая таблицы,
индексы, процедуры, триггеры и привилегии. Они могут отображать список
имен всех объектов указанного типа или предоставлять детальную
информацию о конкретном объекте, заданном в команде.
SHOW <объект> [<имя объекта>|<шаблон имени объекта>]
Задание имени объекта по маске производится с помощью группового символа
«%», который будет задавать маску имен объектов подобно LIKE в
SQL-запросах, то есть обозначает любое количество любых символов в
именах объектов.
Следующий пример покажет все таблицы, начинающиеся с tab.
show tables tab%
Команда |
Описание |
|---|---|
SHOW ALL |
Покажет все метаданные. |
SHOW CHECKs <имя таблицы> |
Отображает имена и тексты всех определенных пользователем ограничений |
SHOW COMMENTs |
Отображает все комментарии, которые были созданы для разных объектов текущей БД. |
SHOW {COLLATIONs | COLLATION <имя>} SHOW {COLLATEs | COLLATE <имя>} |
Выводит список всех определенных пользователем параметров сортировки текущей БД. |
SHOW {DOMAINs|DOMAIN <имя>} |
Отображает определение одного указанного домена |
SHOW {DATABASE|DB} |
Отображает информацию о подключенной базе данных (имя файла, размер и количество выделенных страниц, интервал очистки, номера транзакций, статус Forced Writes, ODS, набор символов по умолчанию). |
SHOW DEPENdencies <имя объекта> SHOW DEPENdency <имя объекта> |
Отображает все зависимости для указанного имени объекта. На выходе - разделенный запятыми список других объектов БД, с которыми указанный объект зависим. |
SHOW {EXCEPtions|EXCEPtion <имя>} |
Отображает текст одного указанного исключения |
SHOW {FILTERs | FILTER <имя>} |
Выдает список всех |
SHOW SYStem {FUNCtions|FUNCtion <имя>} |
Отображает объявление указанной UDF функции |
SHOW {FUNCtions|FUNCtion <имя>} |
Отображает объявление указанной хранимой функции |
SHOW SYStem {GENERATORs|GENERATOR <имя>} SHOW SYStem {SEQuences|SEQuence <имя>} |
Эти две команды идентичны. Отображают объявление указанного системного генератора |
SHOW {GENERATORs|GENERATOR <имя>} SHOW {SEQuences|SEQuence <имя>} |
Эти две команды идентичны. Отображают объявление указанного генератора |
SHOW {GRANTs | GRANT {<имя объекта>|<имя роли>}} |
Если команда содержит |
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 <имя>} |
Отображает все задания и краткую информацию о них: имя задания, владелец, состояние.
Или показывает полную информацию о конкретном задании: имя задания, состояние, владелец, текст задания, расписание в формате |
SHOW WIRE_STATistics |
Отображает сетевую статистику, cобранную с момента установки соединения. |
Команды SET
Команды SET позволяют просматривать и изменять некоторые вещи, связанные со
средой ISQL. Отдельные из них доступны в скриптах.
Команда |
Описание |
|---|---|
SET |
Выводит на экран текущие установленные опции |
SET AUTO[DDL] [on|off] |
Задает, будут ли операторы DLL подтверждаться автоматически после их
выполнения или будут подтверждаться после явного выполнения |
SET BAIL [on|off] |
Задание данной опции определяет поручить или нет ошибку ОС, но только в пакетном режиме. Переключатель возвращает код ошибки операционной системе. Команда была добавлена для предотвращения выполнения скриптов после обнаружения ошибки. |
SET BLOB [n|all|off] |
Задает необходимость отображения подтипа |
SET BULK_INSERT <подготовленный insert запрос> |
Примитивная обработка подготовленных запросов на вставку.
После ввода этой команды пользователь входит в интерактивный режим ( |
SET COUNT [on|off] |
Включает/выключает отображение количества строк, найденных по запросам. |
SET DECFLOAT ROUND <режим> |
Изменение режима округления для типа Поддерживаются следующие режимы округления:
|
SET DECFLOAT TRAPS TO <trap>[, <trap> ...] |
Изменение обработки ошибок для типа Исключения могут генерироваться для следующих ситуаций:
|
SET DECFLOAT BIND <bind-type> |
Изменение отображения значений Допустимые типы для привязки:
|
SET ECHO [on|off] |
Включает/выключает отображение команд до их выполнения. |
SET EXPLAIN [on|off] |
Включает/выключает расширенного подробного плана запроса. Этот план выводит более подробную информацию о методах доступа используемых оптимизатором, однако его нельзя включить в запрос. |
SET GENERATOR <имя генератора> TO <значение> |
Устанавливает значение последовательности или генератора в заданное значение. |
SET HEADING [on|off] |
Включает/выключает отображение заголовков столбцов. |
SET KEEP_TRAN_PARAMS [on|off] |
Включает/выключает сохранение параметров транзакции. Если установлено
значение |
SET LIST [on|off] |
Задает формат отображения результатов запросов |
SET LOCAL_TIMEOUT <значение> |
Позволяет установить тайм-аут выполнения оператора (в миллисекундах) для следующего оператора. После выполнения SQL оператора он автоматически сбрасывается в ноль. |
SET NAMES <csname> |
Задает набор символов, который будет активным в транзакциях базы данных. |
SET PLAN [on|off] |
Задает, нужно ли отображать план запроса оптимизатора. |
SET PLANONLY |
Задает только подготовку запросов |
SET [TRUSTED] ROLE |
Изменяет текущую роль. Позволяет установить контекстной переменной |
SET {ROWCOUNT|MAXROWS} [<n>] |
Указывает какое максимальное количество строк будет выводится при
выполнении оператора |
SET SQLDA_Display [on|off] |
Отображает или скрывает внутренние подробности об SQL-операторах, которые были выполнены isql. |
SET SQL DIALECT <n> |
Устанавливает SQL-диалект в то значение, которое было задано для сессии клиента. \(n\in\{1,2,3\}\). |
SET STATs [on|off] |
Определяет, отображать ли статистику выполнения, которая будет следовать за выходными данными запроса. Формат вывода статистики:
|
SET TIME [on|off] |
Задает, отображать ли время в значении |
SET TERM <строка> |
Задает символ, который будет использоваться в качестве терминатора команды или оператора. Он доступен в скриптах. |
SET TRANSACTION |
Запускает на выполнение транзакцию с заданными характеристиками. |
SET {WARNINGS|WNG} [on|off] |
Задает, выводить ли предупреждающие сообщения. |
SET WIDTH <столбец> [<n>] |
Используя команду |
SET WIRE_stats [on|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 и краткое описание к ним. Они сгруппированны по
назначению: для резервного копирования, для восстановления и опции, доступные в обеих операциях.
Более подробно о большинстве опций будет рассказано в подразделах, посвященных созданию резервных копий и восстановлению из них.
Опция |
Описание |
|---|---|
Имя плагина для шифрования файла резервной копии незашифрованной базы данных или для шифрования файла базы данных, восстановленной
из незашифрованной резервной копии. Его также можно использовать в сочетании с ключом Опцию |
|
Прямой ввод-вывод для файла резервной копии. |
|
Получить пароль из файла. |
|
Игнорировать ошибки контрольных сумм. Предупреждение Если указана эта опция, то в суперсервере другие подключения к базе данных будут запрещены на время выполнения бэкапа. |
|
Это плагин хранилища ключей шифрования, необходимый |
|
Явное присвоение имени ключу вместо ключа по умолчанию, указанного в исходной базе данных (при резервном копировании) или в файле резервной копии (при восстановлении). |
|
Производит резервное копирование или восстановление только метаданных. |
|
-pas[sword] |
Пароль пользователя, выполняющего операцию |
-ro[le] |
Подсоединиться с использованием роли (см. Права на запуск gbak). |
Создаёт резервную копию на том же компьютере, где находится база данных-источник. Для этого вызывается Service Manager на компьютере-сервере. |
|
Не сохранять в бэкап (или рестор) данные таблиц, имена которых соответствуют указанному здесь регулярному выражению в SQL-синтаксисе
(см. оператор |
|
Включать только данные таблиц, имена которых соответствуют указанному здесь регулярному
выражению в SQL-синтаксисе (см. оператор |
|
-st[atistics] TDRW |
Вывести статистику в процессе работы (работает вместе с
|
-tru[sted] |
Использовать доверительную аутентификацию ( |
-user |
Имя пользователя, выполняющего операцию |
Отчет о каждом выполненом действии |
|
Подробный вывод лога действии с заданным интервалом обработанных записей. Минимальное значение - 100. |
|
Вывод лога в файл. Указывается совместно с Если указан параметр |
|
-z |
Показать версию gbak и версию сервера «РЕД База Данных». |
Опция |
Описание |
|---|---|
Основная опция при создании резервной копии. Если файл резервной копии уже существует,
то резервное копирование не будет выполнено. Но если указать опцию |
|
Преобразование внешних таблиц (external tables) во внутренние таблицы. |
|
Не производить сжатие резервной копии. По умолчанию резервная копия записывается в "сжатом" виде. |
|
-fa[ctor] n |
Использовать блокирующий фактор |
Не собирать мусор во время резервного копирования [4]. |
|
Игнорировать зависшие двухфазные транзакции ( |
|
-nod[btriggers] |
Предотвращает срабатывание триггеров базы данных во время резервного копирования. |
Создаёт резервную копию в непереносимой формате между аппаратными платформами. |
|
-ol[d_descriptions] |
Производит резервное копирование метаданных в формате старого стиля, т.е. в режиме совместимости со старыми базами данных. Устарел. |
Количество параллельных рабочих потоков для бэкапа. Включает многопоточное выполнение резервного копирования. |
|
Создаёт транспортабельную (переносимую) резервную копию. Этот параметр включен по умолчанию, поэтому указывать его нет никакой необходимости. |
|
-zip |
Сжать файл резервной копии перед его шифрованием. После шифрования файл почти не сжимается.
Для сжатия используется плагин |
-com[pressor] [<имя плагина> [<уровень сжатия> [<кол-во потоков>]]] |
Сжать файл резервной копии перед его шифрованием. После шифрования файл почти не сжимается.
С РЕД Базой Данных поставляются плагины |
Опция |
Описание |
|---|---|
Восстанавливает (создаёт) базу данных из бэкапа в новый файл. |
|
Создаёт новую базу данных или заменяет (если указана опция |
|
Восстанавливает файл базы данных, заменяя имеющуюся базу данных. |
|
Задать размер страничного кэша для БД. |
|
Исправить кодировку данных |
|
Исправить кодировку метаданных |
|
Деактивировать индексы во время восстановления. При использовании опции в логе восстановления будет сообщение |
|
Восстановить без создания теневых копий |
|
Режим доступа "read_only" или "read_write" |
|
Отключение всех ограничений проверки данных ( |
|
Подтверждать транзакцию после восстановления каждой таблицы. |
|
Установить размер страницы |
|
Настраивает режим реплики восстанавливаемой базы данных: |
|
Количество параллельных рабочих потоков для рестора. Включает многопоточное выполнение восстановления
БД, если |
|
Не резервировать место под версии записей. Максимально заполнять страницы данных (для read-only баз). |
|
-rdb_map[ping_file] <файл с отображением> |
Для корректного восстановления БД с версии 2.X, если ее
бэкап содержит внешние Java функции или процедуры. Необходимость в этой опции возникла по причине изменения
синтаксиса: в версии 2.X при объявлении внешней функции(процедуры) не указывались ее аргументы, в отличии от
версии 3.0 и выше. Поэтому, если функции(процедуры) имеют аргументы, следует создать текстовый файл
package.class.Function1 arg1,arg2,arg3package.class.Function2 arg1,arg2,arg3В этом случае нужная java функция (процедура) будет подбираться на лету просто по имени. |
-ts_map[ping] <файл с отображением> |
Для корректного восстановления БД, если ее бэкап содержит таблицы или
индексы, сохраненные в табличных пространствах. Текстовый файл tablespace1 d:\db\restore\ts1.dattablespace2 d:\db\restore\ts2.datВ этом случае табличные пространства копируются с новыми путями. |
-ts <tablespace> <path> |
Позволяет задать путь для табличного пространства. Можно указывать как
абсолютный путь, так и относительный, в том числе с использованием псевдонима директории, заданного в
|
-ts_orig[inal_paths] |
Для восстановления табличных пространств по первоначальным путям, по которым
они располагались в момент создания бэкапа. При этом все еще можно переопределять пути для некоторых
табличных пространств с помощью опций |
Создание резервной копии
Утилита 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.fbkgbak -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. Процесс восстановления базы данных
из резервной копии происходит следующим образом:
Cервер создает пустую базу данных
emp.fdb. ODS базы данных будет определяться версией сервера, а не версиейgbak, т. к. только сервер создает базу данных, аgbakпри restore всего лишь ее наполняет метаданными и данными.Пустая база данных будет содержать все таблицы
rdb$(пока пустые), и будет иметь ряд параметров, например, такие как размер страницы, forced write и т. д., которые или взяты из резервной копии, или установлены в командной строкеgbak.Cервер считывает метаданные (описания таблиц и индексов, процедур) из резервной копии и переносит их в базу данных.
Cервер считывает данные из резервной копии и переносит их в базу данных.
Cервер считывает остальные метаданные (триггеры, гранты, check constraints и т. п.) из резервной копии и переносит их в базу данных
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 ничего не резервирует, а лишь создает подходящие условия,
чтобы Вы могли без каких бы то ни было проблем создавать резервные
копии.
Опция |
Описание |
|---|---|
-L(OCK) <база данных> |
Блокировка базы данных для резервирования. Это означает, что основной файл базы данных временно замораживается с возможностью внесения изменений. Как и в режиме резервирования, изменения фиксируются во временном файле дельты. |
-UN(LOCK) <база данных> |
Разблокировка ранее заблокированной базы данных. Сначала определяется наличие любых изменений с момента блокирования базы данных и производится объединение временного файла дельты и основного файла базы данных. После этого база данных переводится в нормальный режим чтения/записи, а временный файл удаляется. |
-F(IXUP) <база данных> |
Разблокировка базы данных после самостоятельного восстановления из блокированной
резервной копии. Так как копия блокированной базы данных является так же блокированной, поэтому не получится
использовать копию как рабочую базу данных. Поэтому, если исходная база данных повреждена или утеряна, то нужно
восстановить/разархивировать/скопировать базу данных из копии и разблокировать ее с параметром |
-B(ACKUP) <уровень>|<GUID> <база данных> [<резервный файл>] |
Создание резервной копии всей базы данных или инкрементных резервных копий. Вместо уровня инкрементной
резервной копии можно указать GUID бэкапа из таблицы в |
-R(ESTORE) <база данных> [<резервный файл 0> [<резервный файл 1>...]] |
Восстановление из резервной копии всего файла базы данных или из инкрементных резервных копий |
-SEQ[UENCE] |
Cохраняет существующий |
Опция |
Описание |
|---|---|
-D(IRECT) [ON | OFF] |
Включает/выключает небуферизованный ввод/вывод при чтении БД |
-I(NPLACE) |
Восстанавливает инкрементную копию в существующую базу данных [7] Предупреждение Опция
-I может повредить базу данных, если она была изменена со
времени предыдущего восстановления. Кроме того, эта опция после
восстановления инкрементного бэкапа переводит БД в режим "только для чтения". |
-S(IZE) |
Вывести количество страниц в базе после блокировки БД [8]. |
-DE(COMPRESS) <команда> |
Команда для разархивирования бэкапа во время восстановления. Символ |
Опция |
Описание |
|---|---|
-NOD(BTRIGGERS) |
Не запускать триггеры базы данных |
-U(SER) <имя пользователя> |
Имя пользователя |
-P(ASSWORD) <пароль пользователя> |
Пароль пользователя |
-RO(LE) <роль> |
Роль пользователя |
-FETCH_PASSWORD <файл> |
Считывает пароль из файла |
-Z |
Выдает версию СУБД |
-CLEAN_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
Предупреждение
-U или -P) не
могут следовать за списком файлов параметра -R.Примечание
Блокировка база данных и самостоятельное резервное копирование
Если Вы предпочитаете использовать какие-то другие утилиты для создания
резервных копий базы данных или просто делать обычную копию базы данных
как резервную, то для этого существует режим блокировки/разблокировки
программы nbackup. «Блокировка» в данном случае означает, что основной файл
базы данных временно замораживается, а не невозможность внесения
изменений в базу данных. Как и в режиме резервирования, изменения
фиксируются во временном файле дельты; при разблокировании файл дельты
объединяется с основным файлом базы данных.
Самостоятельное резервное копирование обычно происходит по следующему сценарию:
Блокировка базы данных с помощью параметра
-L(OCK):
nbackup [-U <пользователь> -P <пароль> [-RO <роль>]] -L <база_данных>
Создание резервной копии, сжатие файла базы данных, используя любые
другие программы или простое копирование файла с базой.
Разблокировка базы данных с помощью параметра
-UN(LOCK):
nbackup [-U <пользователь> -P <пароль> [-RO <роль>]] -UN <база_данных>
Восстановление из резервной копии,сделанной после блокировки
Копия блокированной базы данных является так же блокированной, поэтому Вы не сможете просто использовать копию как рабочую базу данных. В случае, если Ваша исходная база данных повреждена или утеряна, и нужно восстановить базу данных из копии, сделанной Вами самостоятельно, действуйте следующим образом:
Разархивируйте/скопируйте/восстановите файл базы данных с помощью
используемых Вами утилит.
Теперь разблокируйте базу данных, но не с параметром
-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, представлен ниже.
Опция |
Описание |
|---|---|
-ac(tivate_shadow) <теневая копия> |
Параметр предназначен для активации теневой копии. |
-at(tach) <n> |
Дополнительный параметр к |
-b(uffers) <n> |
Устанавливает новый размер страничного кэша БД в страницах. |
-co(mmit) {<ID> | all} |
Завершает подтверждением зависшую транзакцию с идентификатором |
-ca(che) |
Параметр не используется. |
-ch(ecksums) {on | off} |
Включает/отключает вычисление контрольных сумм на уровне страниц базы данных. После включения контрольные суммы начнут пересчитываться при последующей записи страниц базы данных на диск. В случае несоответствия контрольных сумм в лог-файл будет записана ошибка, но работа продолжится. |
-conf(ig_validate) <firebird.conf> |
Производит валидацию конфигурационного файла firebird.conf. Во время валидации проверяется корректность указанных параметров и регулярных выражений, отсутствие дубликатов, права доступа к файлам и директориям, перечисленным в значениях параметров, в том числе с использованием wildcards. |
-fu(ll) |
Используется вместе с |
-fo(rce_shutdown) <n> |
Дополнительный параметр к |
-fe(tch_password) |
Извлекает пароль из файла. |
-g(uid) |
Изменяет |
-h(ousekeeping) <n> |
Изменяет интервал транзакций для автоматической чистки |
-i(gnore) |
Игнорировать ошибки контрольных сумм при проверке или чистке. |
-icu |
Исправляет базу данных для работы с текущей версией |
-k(ill_shadow) <база данных> |
Удаляет все неиспользуемые теневые копии базы данных. |
-l(ist) |
Показывает некоторые сведения (в том числе |
-me(nd) |
Подготавливает повреждённую базу данных для резервного копирования. Помечает повреждённые записи как неиспользуемые. |
-mo(de) {read_write | read_only} |
Устанавливает режим записи для базы данных - только для чтения или чтение/запись. Этот параметр может принимать два значения. |
-nol(inger) |
Останавливает указанную базу данных, после того как последнего соединения не стало, независимо от установок |
-n(o_update) |
Используется вместе с |
-o(nline) {single|multi|normal} |
Возвращает в режим |
-pr(ompt) |
Используется вместе с |
-pa(ssword) <пароль> |
Пароль пользователя для работы с |
-par(allel) <n> |
Количество параллельных рабочих потоков для сборки мусора. Включает многопоточную сборку мусора, если |
-replica {none|read_only|read_write} |
Выбрать режим реплики - только для чтения ( |
-role |
Роль пользователя для работы с |
-r(ollback) {<ID> | all} |
Завершает откатом зависшую транзакцию с идентификатором |
-sq(l_dialect) <n> |
Изменяет диалект базы данных. |
-sw(eep) |
Запускает сборку мусора в БД. |
-sh(utdown) {single|multi|full} |
Останавливает базу данных. Используется с одним из дополнительных параметров |
-tw(o_phase) {<ID> | all} |
Автоматическое двухфазное восстановление |
-tra(nsaction) <n> |
Дополнительный параметр к |
-tru(sted) |
Используется |
-upgrade |
Обновляет базу данных до последней минорной версии |
-u(se) {full | reserve} |
Включает 100% заполнение страниц БД ( |
-user |
Имя пользователя для работы с |
-v(alidate) |
Проверяет базу данных на уровне страниц и освобождает страницы, помеченные как используемые, но никому не принадлежащие ( |
-w(rite) {sync|async} |
Переключает режимы синхронной/асинхронной записи |
-z |
Выводит версию РЕД Базы Данных и утилиты |
Активация теневой (оперативной) копии
Файл теневой копии является дополнительной копией первичного файла(ов)
базы данных. Для любой данной базы данных может существовать несколько
теневых копий, которые могут быть активированы и деактивированы по
умолчанию с помощью утилиты 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 <база_данных> [<опции>]
Переключатель |
Описание переключателя |
|---|---|
-a(ll) |
Это значение по умолчанию, если вы не запросили |
-b(lob) TABLE.COLUMN [TABLE.COLUMN] ... |
За переключателем |
-d(ata) |
Статистика страниц данных – информация о таблицах содержащихся в базе данных. Пользовательские и системные индексы, системные таблицы не анализируются. |
-e(ncryption) |
Статистика по зашифрованным и незашифрованным страницам БД. |
-h(eader) |
Статистика заголовочной страницы - это информация о глобальных свойствах всей базы данных, хранящаяся на
заголовочной страницы каждой базы данных. Эта информация также выводится, если использовать любой другой переключатель |
-i(ndex) |
Статистика индексов – информация об индексах в базе данных. Пользовательские и системные таблицы, системные индексы не анализируются. |
-s(ystem) |
Эквивалент переключателям |
-u(sername) |
Имя пользователя. |
-p(assword) |
Пароль пользователя. |
-par(allel) <n> |
Количество параллельных рабочих потоков для сбора статистики. Включает многопоточность, если
|
-fetch <имя файла>|stdin|/dev/tty |
Файл, из которого будет считан пароль пользователя. |
-r(ecord) |
Модификатор для переключателей |
-t(able) <ТАБЛИЦА> [<ТАБЛИЦА>] ... |
Анализ таблицы или списка таблиц и любых индексов, принадлежащих указанным таблицам, а также страниц данных этих таблиц.
За этим параметром следует список имен таблиц, которые вы хотите проанализировать.
Список должен быть в верхнем регистре, и каждая таблица разделяется пробелом.
Если использовать опцию |
-ts [<ИМЯ ТАБЛИЧНОГО ПРОСТРАНСТВА> [<ИМЯ ТАБЛИЧНОГО ПРОСТРАНСТВА>...] | <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:System Change Number:nbackup. Nbackup выполняет резервное копирование страниц базы данных,
копируя страницы, которые были изменены с момента последней резервной копии непосредственно предшествующего
уровня. Если делается резервная копия уровня 0, копируются все страницы, а если уровня 1 – копируются
только те страницы, которые были изменены после последнего уровня 0. Чтобы иметь возможность находить измененные
страницы, РЕД База Данных использует маркер, который называется SCN. Это число увеличивается при каждом изменении
состояния резервной копии и не зависит от уровня резервного копирования.gbak не восстанавливает содержимое
таблицы RDB$BACKUP_HISTORY и сбрасывает SCN всех страниц обратно на 0. Таким образом,
восстановление с помощью gbak перепишет всю базу данных (и может даже изменить размер страницы).
Это делает предыдущие резервные копии с помощью nbackup бессмысленными в качестве отправной
точки для последующих резервных копий: нужно начать заново с уровня 0.Server:RedDatabase или Firebird.ODS version:On-Disk Structure).
Представляет собой два числа, разделенные точкой. "Целая" часть - это
основная версия ODS, которая зависит от версии сервера, создавшего
данную базу данных. Главная версия определяет основные возможности
работы с базой данных, и ее значение присваивается при создании
(восстановлении) базы данных.ODS, которая может
меняться (точнее, увеличиваться) в течение жизни базы данных в
зависимости от того, под управлением какой версии сервера работают с
этой базой данных.Oldest transaction:Oldest InterestingTransaction или OIT). Первая транзакция с состоянием, отличным от commit. На практике это:Oldest Active Transaction;rollbackin-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:Next attachment ID:gstat не изменяет идентификатор.Implementation:Shadow count:Page buffers:DefaultDbCachePages в firebird.conf).Next header page:Database dialect:Creation date:Attributes:gfix.
Значения флагов можно посмотреть в таблице 8.13.Variable header data:sweep interval), GUID базы даных, GUID последней резервной копии и другое.Атрибут |
Значение флага |
Расшифровка |
|---|---|---|
active shadow |
0x1 1 |
Файл является активным Shadow-файлом. |
checksums enabled |
0x8000 32768 |
Включено вычисление контрольных сумм на уровне страниц базы данных. |
force write |
0x2 2 |
Режим принудительной записи включен ( |
crypt process, plugin <имя плагина> |
0x4 4 |
Идет процесс шифрования в фоновом режиме указанным плагином. |
no reserve |
0x8 8 |
Указывает, что на страницах не резервируется место для старых версий данных. Это позволяет более плотно упаковывать данные на каждой странице, в силу чего база данных занимает меньше дискового пространства. Это идеал для баз данных только для чтения. |
read only |
0x20 32 |
База данных работает в режиме |
encrypted, plugin <имя плагина> |
0x40 64 |
База данных зашифрована указанным плагином. |
replica |
0x100 256 |
База данных является объектом репликации (слейвом). |
multi-user maintenance |
0x80 128 |
База данных блокирована в режиме |
single-user maintenance |
0x1080 4224 |
База данных блокирована в режиме |
full shutdown |
0x1000 4096 |
База данных блокирована в режиме |
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
Элемент |
Описание |
|---|---|
Tablespace |
Табличное пространство, в котором находится объект. Если указано |
Primary pointer page |
Номер первой страницы косвенных указателей на страницы, хранящие данные таблицы |
Index root page |
Номер страницы, которая является первой страницей указателей на индексы таблицы |
Pointer pages |
Общее количество страниц косвенных указателей на страницы, хранящие данные таблицы |
data page slots |
Количество указателей на страницы базы данных, содержащихся на страницах указателей. Должно равняться числу страниц данных |
Data pages |
Общее количество страниц, в которых хранятся данные таблицы. Этот счетчик включает страницы,
хранящие неподтвержденные версии записей и мусор, потому что |
Average fill |
Обобщающая гистограмма распределения использования памяти для всех страниц, выделенных в таблице. |
Primary pages |
Количество страниц, равное ( |
Secondary pages |
Количество страниц, на которых не хранятся первичные версии записей. |
Swept pages |
Количество страниц, которые имеют только первичные версии записей, и все они были созданы подтвержденными
транзакциями. Такие страницы данных должны быть пропущены процедурой |
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
Элемент |
Описание |
|---|---|
Tablespace |
Табличное пространство, в котором находится объект. Если указано |
Root page |
Номер корневой страницы индекса |
Depth |
Количество уровней в странице индексного дерева. Если глубина дерева индексной страницы превышает 3, то доступ к записям через индекс не будет максимально эффективным. Для уменьшения глубины дерева индексной страницы увеличьте размер страницы. Если увеличение размера страницы не уменьшает глубины, снова увеличьте размер страницы. |
Leaf buckets |
Количество страниц самого низкого уровня (листовых) в дереве индекса. Это страницы, которые содержат указатели на записи. Страницы высокого уровня содержат косвенные связи. |
Nodes |
Общее количество записей, индексированных в дереве. Должно быть равно количеству индексированных строк в
дереве, хотя отчет |
Average node length |
Средний размер узлов в байтах |
Total dup |
Общее количество строк дубликатов индекса |
Max dup |
Количество дублирующих узлов в "цепочке", имеющих наибольшее количество дубликатов. Всегда будет нулем для
уникальных индексов. Если число велико по сравнению с числом в |
Average key length |
Средний размер ключа в байтах с учетом сжатия. К длине каждого ключа прибавляется от 1 до 5 байт в зависимости от размера ключа и префикса. Затем высчитывается средний размер ключа. |
Compression ratio |
Отношение средней длины ключа без учета сжатия ( |
Average prefix length |
Средний размер, занимаемый префиксами узлов, в байтах. |
Average data length |
Средняя длина каждого ключа в байтах. Она, скорее всего, меньше, чем фактическая сумма размеров столбцов, поскольку РЕД База Данных использует индексное сжатие для уменьшения объема данных, хранящихся на странице листа индекса. |
Clustering factor |
Это мера того, насколько много операций ввода-вывода будет осуществлять база данных, если бы ей пришлось читать каждую строку таблицы посредством индекса, в порядке индекса. То есть она показывает, насколько упорядочены строки в таблице по значениям индекса. Если значение близко к общему количеству страниц, значит таблица очень хорошо упорядочена. В этом случае записи индекса на одной странице листа индекса обычно указывают на строки, находящиеся в одних и тех же страницах данных. Если значение близко к общему количеству строк, значит, таблица весьма неупорядочена. В этом случае маловероятно, что записи индекса на одной странице листа индекса указывают на те же страницы данных. |
Ratio |
Отношение |
Fill distribution |
Это гистограмма с пятью 20-процентными полосами, каждая из которых показывает количество индексных страниц, чей средний процент заполнения находится в указанном диапазоне. Процент заполнения определяется соотношением пространства каждой страницы, содержащей данные. Сумма таких чисел дает общее количество страниц, содержащих индексные данные |
Статистика по размерам и версиям записей
Следующая команда:
gstat -r[ecord] [-d] <база данных>
отображает статистику по размерам и версиям записей.
Элемент |
Описание |
|---|---|
Total 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 [ <опции> ... ] <команда> [ <параметры> ... ]
Опция |
Описание |
|---|---|
-user <имя пользователя> |
Имя пользователя |
-password <пароль> |
Пароль пользователя |
-fetch_password <файл> |
Файл, из которого будет считан пароль пользователя |
-role <имя роли> |
Название роли, чьи права будет использовать указанный пользователь |
-trusted |
Использовать доверительную аутентификацию |
-database <БД_безопасности> |
Путь к файлу базы данных безопасности |
-z |
Отобразить версию |
Команда |
Описание |
|---|---|
add <имя> [ <параметр> ... ] |
Добавление нового пользователя |
delete <имя> |
Удаление пользователя |
display |
Вывод информации обо всех зарегистрированных пользователях |
display <имя> |
Вывод информации о конкретном пользователе |
modify <имя> <параметр> [ <параметр> ... ] |
Изменение информации о пользователе |
mapping {set | drop} |
Включает или выключает флаг |
{? | help} |
Отображает все опции и команды |
z |
Отобразить версию |
quit |
Выход из интерактивного режима. |
Команда |
Описание |
|---|---|
-pw <пароль> |
Пароль пользователя |
-uid <uid> |
Идентификатор пользователя |
-gid <uid> |
Идентификатор группы |
-fname <имя> |
Полное имя пользователя |
-mname <отчество> |
Отчество |
-lname <фамилия> |
Фамилия |
-admin {yes | no} |
Установка флага, имеет ли пользователь роль |
Для того, чтобы выполнить любую операцию с помощью 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 может быть выведена таблица блокировок в удобном
пользователю формате. Отчет вывода разбит на блоки в следующей
последовательности:
LOCK_HEADER BLOCK: заголовок блока;OWNER BLOCK: группы владельцев;REQUEST BLOCK: группы запросов. Каждый владелец выводится с его запросами;LOCK BLOCK: группы блокировок;History: история событий.
Утилита rdb_lock_print имеет несколько опций, приведенных в
таблице 8.20. Если никаких опций не
задано, то выводится заголовок блока LOCK_HEADER BLOCK, в котором описано основная
конфигурация и состояние таблицы блокировок.
Опция |
Описание |
|---|---|
-a |
Выводит содержимое таблицы блокировок: заголовок блока ( |
-c |
Запрашивает мьютекс (mutex) менеджера блокировок распечатать цельное последовательное представление таблицы блокировок. При этом останавливаются все процессы доступа к базе данных. |
-h |
Выводит недавнюю историю событий |
-i [a,o,t,w] [<N> [<M>]] |
Выдает интерактивный отчет, отслеживающий текущую деятельность таблицы блокировок. Выводит выбранные параметры
менеджера блокировок в течение n секунд с интервалом m секунд. Значения по умолчанию 1 сек для обоих значений.
Если указано только |
-l |
Выводит группы блоков |
-m |
Вывод в HTML формате |
-n |
Выводит только ожидающих завершения владельцев (если указано |
-o | -p |
Выводит группы владельцев |
-q <N> |
Находит владельцев взаимных блокировок и печатает их PID ( |
-r |
Выводит информацию о группе блока запросов |
-s <номер> |
Выводит группы блокировок ресурсов заданной серии (действует только если указан спецификатор |
-w |
Выводит временный список блокировок (групп запросов), блокирующих другие запросы на блокировку, для
каждого владельца (действует только с указанием |
Результаты использования утилиты могут оказаться достаточно большими,
поэтому удобнее отчет выводить в файл, указав: > <путь к файлу>.
Блок 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
Группы блокировок представляют блокируемые ресурсы различных типов, соответствующих определенным сериям:
Серия |
Символ |
Тип ресурса |
|---|---|---|
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 |
|
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 можно указать либо одно действие, либо несколько информацион-
ных элементов.
Подключение к менеджеру сервисов
Чтобы подключиться к удалённому менеджеру сервисов нужно указать имя локальной или удаленной службы. Эта строка похожа на строки подключения к базе данных, поскольку синтаксис определяет сетевой протокол, используемый для подключения клиентского приложения к менеджеру сервисов на хосте сервера.
Опция |
Описание |
|---|---|
user | user_name <имя пользователя> |
Имя пользователя. |
role | sql_role_name <роль> |
Роль. |
password <пароль> |
Пароль. |
fetch_password <файл> |
Считать пароль из файла. |
trusted_auth |
Использовать доверительную аутентификацию. |
expected_db <база данных> |
База данных безопасности, если она отличается от базы по умолчанию ( |
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
Информационные запросы
Вы можете использовать следующие опции для получения информации о конфигурации сервера.
Опция |
Описание |
|---|---|
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 |
Версия |
info_capabilities |
Битовая маска возможностей, поддерживаемых сервером. |
Отображение баз данных, используемых на сервере, а также версии СУБД:
./rdbsvcmgr yourserver:service_mgr user sysdba password masterkey
info_server_version info_svr_db_info
Действия
В одном вызове менеджера сервисов можно выполнять только одну задачу. Вы можете поддерживать несколько подключений к менеджеру сервисов и выполнять задачу в каждом подключении.
Действие action_backup позволяет выполнять резервное копирование базы данных.
Аналогично gbak -b.
Опция |
Описание |
|---|---|
dbname <путь к бд> |
Путь к основному файлу базы данных. |
verbose |
Подробный вывод о бэкапе. |
bkp_file <файл резервной копии> |
Путь к файлу резервной копии. Если файл резервной копии уже существует, то резервное копирование не будет выполнено, если не указана опция |
bkp_replace |
Перезаписать файл резервной копии, если он уже существует. |
bkp_length <n> |
Длина файла резервной копии в байтах. |
bkp_factor <n> |
Использовать блокирующий фактор n. |
bkp_ignore_checksums |
Игнорировать контрольные суммы, а также поврежденные |
bkp_ignore_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-синтаксисе (см. оператор |
bkp_include_data <шаблон>] |
Включать только данные таблиц, имена которых соответствуют указанному здесь регулярному выражению в SQL-синтаксисе (см. оператор |
bkp_stat TDRW |
Вывести статистику в процессе работы (работает вместе с T — время от начала работы D — время прошедшее с последнего вывода на экран; R — число страниц прочитанных с последнего вывода на экран; W — число страниц записанных с последнего вывода на экран. |
bkp_keyholder <имя плагина> |
Это ключ, необходимый для доступа к зашифрованной базе данных. |
bkp_keyname <имя ключа> |
Явное присвоение имени ключу вместо ключа по умолчанию, указанного в исходной базе данных (при резервном копировании) или в файле резервной копии (при восстановлении). |
bkp_crypt <имя плагина> |
Имя плагина для шифрования файла резервной копии или восстановленной базы данных вместо плагина по умолчанию.
Его также можно использовать в сочетании с ключом |
bkp_zip |
Сжать файл резервной копии перед его шифрованием. После шифрования файл почти не сжимается.
Для сжатия используется плагин |
-bkp_compressor [<имя плагина> [<уровень сжатия> [<кол-во потоков>]]] |
Сжать файл резервной копии перед его шифрованием. После шифрования файл почти не сжимается.
С РЕД Базой Данных поставляются плагины |
bkp_parallel_workers <n> |
Количество параллельных рабочих потоков для бэкапа. Включает многопоточное выполнение резервного копирования. |
bkp_direct_io |
Открытие файла бекапа в режиме прямого доступа (без буферизации). |
Действие action_restore позволяет выполнить восстановление базы данных из резервной копии. Аналогично gbak -c.
Опция |
Описание |
|---|---|
bkp_file <файл резервной копии> |
Путь к файлу резервной копии. |
dbname <база данных> |
Путь к файлу базы данных. |
res_length <n> |
Количество страниц в восстановленном файле базы данных. |
verbose |
Подробный вывод о ресторе. |
res_buffers <n> |
Задать размер страничного кэша для БД. |
res_page_size <n> |
Установить размер страницы. |
res_access_mode [prp_am_readonly | prp_am_readwrite] |
Режим доступа |
res_deactivate_idx |
Деактивировать индексы во время восстановления. |
res_no_shadow |
Восстановить без создания теневых копий. |
res_no_validity |
Отключение всех ограничений проверки данных ( |
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-синтаксисе (см. оператор |
res_include_data <шаблон> |
Включать только данные таблиц, имена которых соответствуют указанному здесь регулярному выражению в SQL-синтаксисе (см. оператор |
res_stat TDRW |
Вывести статистику в процессе работы (работает вместе с T — время от начала работы D — время прошедшее с последнего вывода на экран; R — число страниц прочитанных с последнего вывода на экран; W — число страниц записанных с последнего вывода на экран |
res_keyholder <имя плагина> |
Это ключ, необходимый для доступа к зашифрованной базе данных. |
res_keyname <имя ключа> |
Явное присвоение имени ключу вместо ключа по умолчанию, указанного в исходной базе данных (при резервном копировании) или в файле резервной копии (при восстановлении). |
res_crypt <имя плагина> |
Имя плагина для шифрования файла резервной копии или восстановленной базы данных вместо плагина по умолчанию. Его также можно
использовать в сочетании с ключом |
res_replica_mode [prp_rm_none | prp_rm_readonly | prp_rm_readwrite] |
Выбрать режим реплики - только для чтения ( |
res_parallel_workers <n> |
Количество параллельных рабочих потоков для рестора. Включает многопоточное выполнение восстановления БД,
если |
res_direct_io |
Открытие файла бекапа в режиме прямого доступа (без буферизации). |
Действие action_properties позволяет настроить параметры базы данных. Аналогично gfix.
Опция |
Описание |
|---|---|
dbname <база данных> |
Путь к файлу базы данных. |
prp_page_buffers <n> |
Устанавливает новый размер страничного кэша БД в страницах. |
prp_sweep_interval <n> |
Изменяет интервал транзакций для автоматической сборки мусора (sweep). |
prp_shutdown_db <n> |
Закрывает базу данных, когда нет соединений с базой данных, или по истечении указанного таймаута. |
prp_deny_new_transactions <n> |
Завершает работу базы данных, если в конце указанного таймаута нет активных транзакций; запрещает новые транзакции в течение этого периода ожидания; завершается ошибкой, если в конце периода ожидания есть активные транзакции. |
prp_deny_new_attachments <n> |
Завершает работу базы данных, если в конце указанного таймаута нет активных подключений; запрещает новые подключения к базе данных в течение периода ожидания; завершится ошибкой, если в конце периода ожидания есть активные подключения. |
prp_set_sql_dialect <n> |
Изменяет диалект базы данных. |
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] |
Переключает режимы синхронной/асинхронной записи |
prp_activate <теневая копия> |
Параметр предназначен для активации теневой копии.
|
prp_db_online |
Возвращает в режим |
prp_force_shutdown <n> |
Предназначен для принудительного закрытия базы данных. |
prp_attachments_shutdown <n> |
Предназначен для запрета новых соединений с БД. |
prp_transactions_shutdown <n> |
Предназначен для запрета запуска новых транзакций. |
prp_shutdown_mode [prp_sm_normal | prp_sm_multi | prp_sm_single | prp_sm_full] |
Останавливает базу данных. Используется с одним из дополнительных параметров |
prp_online_mode [prp_sm_normal | prp_sm_multi | prp_sm_single | prp_sm_full] |
Возвращает в режим |
prp_nolinger |
Останавливает указанную базу данных, после того как последнего соединения не стало, независимо от установок |
prp_replica_mode [prp_rm_none | prp_rm_readonly | prp_rm_readwrite] |
Выбрать режим реплики - только для чтения ( |
prp_checksums [true | false] |
Включает/отключает вычисление контрольных сумм на уровне страниц базы данных. После включения контрольные суммы начнут пересчитываться при последующей записи страниц базы данных на диск. В случае несоответствия контрольных сумм в лог-файл будет записана ошибка, но работа продолжится. |
Действие action_repair позволяет инициировать проверку согласованности базы данных и
исправление найденных ошибок. Аналогично gfix с опциями -validate, -full и -mend.
Опция |
Описание |
|---|---|
dbname <база данных> |
Путь к файлу базы данных. |
rpr_commit_trans {<ID> | all} |
Завершает подтверждением зависшую ( |
rpr_rollback_trans {<ID> | all} |
Завершает откатом зависшую ( |
rpr_recover_two_phase {<ID> | all} |
Автоматическое двухфазное восстановление |
rpr_commit_trans_64 {<ID> | all} |
Завершает подтверждением зависшую ( |
rpr_rollback_trans_64 {<ID> | all} |
Завершает откатом зависшую ( |
rpr_recover_two_phase_64 {<ID> | all} |
Автоматическое двухфазное восстановление |
rpr_check_db |
Проверка базы данных без исправления каких-либо проблем. |
rpr_ignore_checksum |
Игнорировать ошибки контрольных сумм при проверке. |
rpr_kill_shadows |
Удаляет все неиспользуемые теневые копии базы данных. |
rpr_mend_db |
Подготавливает повреждённую базу данных для резервного копирования. Помечает повреждённые записи как неиспользуемые. |
rpr_validate_db |
Проверяет базу данных на уровне страниц и освобождает страницы, помеченные как используемые, но никому не принадлежащие ( |
rpr_full |
Используется вместе с |
rpr_sweep_db |
Запускает принудительную сборку мусора в БД. |
rpr_list_limbo_trans |
Выводит список «зависших» транзакций ( |
rpr_icu |
Исправляет базу данных для работы с текущей версией ICU. |
rpr_par_workers <n> |
Количество параллельных рабочих потоков для сборки мусора. Включает многопоточную сборку мусора, если
|
rpr_upgrade_db |
Обновляет базу данных до последней минорной версии |
Действие action_db_stats выводит статистику базы данных. Аналогично gstat.
Опция |
Описание |
|---|---|
dbname <база данных> |
Путь к файлу базы данных. |
sts_record_versions |
Добавляет статистику о средних длинах записей, количестве версий и информацию о |
sts_nocreation |
Не выводить дату создания. |
sts_table <таблица> |
Анализ таблицы или списка таблиц и любых индексов, принадлежащих указанным таблицам. За этим параметром следует список имен таблиц, которые вы хотите проанализировать. Список должен быть в верхнем регистре, и каждая таблица разделяется пробелом. |
sts_data_pages |
Статистика страниц данных – информация о таблицах содержащихся в базе данных. Пользовательские и системные индексы, системные таблицы не анализируются. |
sts_hdr_pages |
Статистика заголовочной страницы - это информация о глобальных свойствах всей базы данных, хранящаяся на заголовочной странице каждой базы данных. |
sts_idx_pages |
Статистика индексов – информация об индексах в базе данных. Пользовательские и системные таблицы, системные индексы не анализируются. |
sts_sys_relations |
Статистика для системных таблиц и индексов в дополнение к пользовательским таблицам и индексам. |
sts_encryption |
Статистика по зашифрованным и незашифрованным страницам БД. |
sts_par_workers <n> |
Количество параллельных рабочих потоков для сбора статистики. Включает многопоточность,
если |
Отображение информации заголовка базы данных employee на локальном компьютере:
./rdbsvcmgr service_mgr user sysdba password masterkey action_db_stats dbname
employee sts_hdr_pages
Действие action_diff выполняет проверку целостности данных. Аналогично rdbrepldiff.
Опция |
Описание |
|---|---|
dbname <база данных> |
Путь к файлу базы данных. |
verbose |
Подробный вывод о проверке. |
dif_replica |
Путь к реплике базы данных. |
dif_config |
Имя измененного файла конфигурации для возможности сравнивать не все сущности базы данных, а только необходимые. При этом процесс репликации не прерывается. |
dif_sync |
Ожидание синхронизации мастера и слейва в течение одной минуты или времени, указанного в параметре |
dif_metaonly |
Производит проверку только метаданных. |
dif_timeout |
Tаймаут ожидания синхронизации (в секундах). |
dif_nodbtriggersoff |
Включает ипользование триггеров при подключении к мастеру. |
dif_simple |
Сравнение двух нереплицируемых баз данных. |
dif_full |
Показать расширенный вывод о проверке. Расширенный вывод отображает:
|
dif_values |
Показывает значения, которые отличаются у записей. Можно использовать только совместно с опцией |
Можно использовать Services API для отображения, добавления, удаления и изменения
пользователей аналогично gsec.
Действие action_display_user выводит информацию обо всех зарегистрированных пользователях.
Действие action_display_user_adm дополнительно показывает являются ли они администраторами БД.
Опция |
Описание |
|---|---|
dbname <БД_безопасности> |
Путь к файлу базы данных безопасности. |
sec_username <имя пользователя> |
Имя пользователя, для которого будет выполнена операция. |
sql_role_name <имя роли> |
Название роли, чьи права будет использовать указанный пользователь. |
Действие action_add_user нужно для добавления нового пользователя. Аналогично gsec -add.
Опция |
Описание |
|---|---|
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.
Опция |
Описание |
|---|---|
dbname <база данных> |
Путь к файлу базы данных. |
sec_username <имя пользователя> |
Имя пользователя. |
sql_role_name <роль> |
Роль. |
Действие action_modify_user нужно для удаления изменения информации о пользователе.
Аналогично gsec -modify.
Опция |
Описание |
|---|---|
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 позволяет создавать инкрементные резервные копии.
Опция |
Описание |
|---|---|
dbname <база данных> |
Путь к файлу базы данных. |
nbk_file <резервный файл> |
Путь к файлу резервной копии. |
nbk_level <уровень> |
Уровень резервной копии. |
nbk_guid <GUID> |
|
nbk_no_triggers |
Не запускать триггеры базы данных. |
nbk_direct [ON | OFF] |
Включает/выключает небуферизованный ввод/вывод при чтении БД. |
nbk_clean_history |
Очистить таблицу |
nbk_keep_days <число> |
Определяет сколько дней, начиная с сегодняшнего дня, должно храниться в истории. |
nbk_keep_rows <число> |
Определяет сколько записей должно храниться в истории. |
Действие action_nrest нужно для восстановления базы данных из инкрементных резервных
копий.
Опция |
Описание |
|---|---|
dbname <база данных> |
Путь к файлу базы данных. |
nbk_file <резервный файл> |
Путь к файлу резервной копии. |
nbk_inplace |
Восстанавливать инкремент в существующую базу данных. |
nbk_sequence |
Cохраняет существующий |
Команда action_nfix нужна для разблокировки базы данных после самостоятельного
восстановления из блокированной резервной копии. Так как копия
блокированной базы данных является так же блокированной, поэтому не
получится использовать копию как рабочую базу данных. Поэтому, если
исходная база данных повреждена или утеряна, то нужно
восстановить/разархивировать/скопировать базу данных из копии и
разблокировать ее с параметром -F (но не -UN).
Опция |
Описание |
|---|---|
dbname <база данных> |
Путь к файлу базы данных. |
nbk_sequence |
Cохраняет существующий |
Опция |
Описание |
|---|---|
dbname <база данных> |
Путь к файлу базы данных. |
verbose |
Подробный вывод о проверке. |
dif_replica <файл> |
Вторая база (реплика). |
dif_config <файл> |
Имя измененного файла конфигурации для возможности сравнивать не все сущности базы данных, а только необходимые. При этом процесс репликации не прерывается. |
dif_sync |
Ожидание синхронизации мастера и слейва в течение одной минуты или времени, указанного в параметре |
dif_metaonly |
Производит проверку только метаданных. |
dif_timeout <таймаут> |
Tаймаут ожидания синхронизации (в секундах). |
dif_nodbtriggersoff |
Включает ипользование триггеров при подключении к мастеру |
dif_simple |
Сравнение двух нереплицируемых баз данных. |
Действие |
Описание |
|---|---|
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 нужно для запуска агрегатного аудита.
Опция |
Описание |
|---|---|
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 |
Запросить метрики событий. Если указана какая-либо |
atrc_transaction |
Запросить метрики событий транзакций. |
atrc_text {<хэш запроса>|<хэш плана>} |
Вывести запрос или план запроса по указанному хэшу. |
Действие action_migrate выполняет миграцию.
Опция |
Описание |
|---|---|
dbname [] |
|
mig_version [string value] |
Действие |
Описание |
|---|---|
action_set_mapping -dbname <база данных> -sql_role_name <роль> |
Предоставляет администраторам |
action_drop_mapping -dbname <база данных> -sql_role_name <роль> |
Снимает с администратора |
Действие action_validate позволяет запустить онлайн-проверку базы данных.
Опция |
Описание |
|---|---|
-dbname <база данных> -sql_role_name <роль> |
Снимает с администратора |
dbname <база данных> |
Путь к файлу базы данных. |
val_tab_incl <шаблон> |
Шаблон таблиц, включенных в проверку. По умолчанию все пользовательские таблицы включены, системные таблицы не проверяются. |
val_tab_excl <шаблон> |
Шаблон для таблиц, исключенных из проверки. |
val_idx_incl <шаблон> |
Шаблон для индексов, включенных в проверку. По умолчанию |
val_idx_excl <шаблон> |
Шаблон списка индексов для исключения из процесса валидации. |
val_lock_timeout <число> |
Таймаут ожидания блокировки на таблицу (в секундах). По умолчанию 10 секунд, -1 - бесконечное ожидание. |
8.9. Утилита rdbguard
Утилита rdbguard контролирует состояние сервера. Если сервер
был нештатно остановлен, Guardian автоматически перезапускает его.
Опция |
Описание |
|---|---|
-s(ignore) |
Если запуск сервера завершается с ошибкой, выполнять повторные попытки запуска. |
-(o)netime |
Если запуск сервера завершается с ошибкой, не пытаться запустить его повторно. |
-(f)orever |
Если запуск или выполнение сервера завершается с ошибкой, выполнять его повторный запуск (режим по умолчанию). |
-(d)aemon |
Запускать сервер в режиме демона, отключаясь от родительского териминала. |
-(p)idfile путь_к_файлу |
Использовать указанный файл в качестве PID-файла сервера. |
-(g)uardpidfile путь_к_файлу |
Использовать указанный файл в качестве PID-файла |
-(t)imeout таймаут |
Время в секундах, которое |
8.10. Коды возврата утилит
gfix, gbak, gstat, rdbsvcmgr, rdbtracemgr, rdblogmgr, rdbreplmgr, hashgen, mint,nbackup, rdb_lock_print:gbak:online из-за ошибки при восстановлении из резервной копииrdbrepldiff:gsec:AUTO ADMINS MAPPING в базе данных безопасности-MAPPING, допускается только SET или DROP-ADMIN, принимается только YES или NOLDAPLDAPrdbserver:isql:DSQLSHOW