Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ
Шрифт:
* Хранение и отыскание данных BLOB наиболее эффективны, когда целый BLOB располагается на одной странице базы данных. Если приложение хранит множество BLOB, превышающих 4 Кбайт, больший размер страницы сокращает время доступа к данным BLOB.
* Сокращение размера страницы может быть более подходящим, если большинство транзакций используют только небольшое количество строк данных, поскольку объем перемещаемых туда и обратно данных будет меньше, и меньше памяти будет использовано для дискового кэша.
Использование gbak с Менеджером сервисов Firebird
Переключатель -se[rvice_mgr] вызывает Менеджер сервисов на (обычно) удаленном сервере. Это может сэкономить значительный объем времени и сетевого трафика, когда вы хотите создавать файлы копии или базы данных на том же хосте, где размещается база данных.
На сервере Windows с локальным соединением использование Менеджера сервисов не дает никаких преимуществ.
На сервере POSIX это экономит время и трафик - даже при локальном соединении.
Если вы выполняете gbak с переключателем -service, то утилита работает другим образом. Это приводит к тому, что gbak вызывает функции копирования и восстановления Менеджера сервисов Firebird на сервере, где находится база данных.
Вы можете копировать во множество файлов и восстанавливать из множества файлов при использовании Менеджера сервисов.
Переключатель -se получает аргумент, который состоит из имени хоста подключенного сервера с константной строкой service_mgr через специальный символ. Синтаксис этого аргумента варьируется в соответствии с используемым сетевым протоколом:
* TCP/IP: hostname: service_mgrj
* именованные каналы (Named Pipes): \\hostname\service_mgr.
Восстановление в POSIX
Пользователь, который был текущим на сервере, когда был вызван Менеджер серверов для выполнения копирования - root, firebird или interbase - является владельцем файла копии на уровне файловой системы, что позволяет читать его только этим пользователем.
Когда вам нужно восстановить базу данных на сервере POSIX, которая была скопирована с использованием Менеджера сервисов, вы должны или использовать Менеджер сервисов,
Когда режим -service не используется, владение файлом копии присваивается тому, кто выполнял gbak.
Эти ограничения не применяются к платформе Windows.
Копирование
В этом примере мы копируем базу данных, находящуюся на диске D: удаленного сервера, в файл копии на диске F: той же самой удаленной машины. Мы направляем подробный отчет об операции в файл протокола в другом каталоге. Как обычно, пример является одной строкой:
gbak -b -se hotchicken :service_mgr
d: \data\stocks.fdb
f:\backups\stocks.20040715.fbk
– v -y f:\backups\logs\stocks.20040715.log
! ! !
ПРИМЕЧАНИЕ. Порядок переключателей имеет значение, когда вы используете переключатель -se. Если вы хотите определить файл протокола, убедитесь, что вы поместили его после задания хост-сервера, чтобы избежать ошибки в команде, по причине невозможности отыскать размещение файла протокола.
. ! .
Восстановление
Следующий пример восстанавливает многотомную базу данных из каталога /january на сервере hotchicken в каталог /currentdb. Он использует переключатель -r[epiace_database] и будет перезаписывать базу данных magic.fdb, если она будет найдена в /currentdb. Первые два файла восстанавливаемой базы данных имеют длину 500 страниц, а последний будет увеличиваться в размерах по необходимости.
gbak -r -user frodo -pas pipeweed -se hotchicken:service_mgr
/january/magicl.fbk /january/magic2.fbk /january/magicLast.fbk
/currentdb/magic.fdb 500 /currentdb/magic.fd2 500
/currentdb/magic.fd3
Следующий пример выполняется на сервере hotchicken и восстанавливает копию, которая находится на hotchicken, на другой сервер с именем icarus:
gbak -с -user frodo -pas pipeweed -se hotchicken:service_mgr
/january/magic. fbk j carus : /currentdb/raagic. fdb
Сообщение об ошибках gbak
В табл. 38.3 описаны сообщения об ошибках, которые могут возникнуть в процессе копирования и восстановления, вместе с некоторыми советами, как поступать с этими ошибками.
Таблица 38.3. Сообщения об ошибках gbak при копировании и восстановлении
Сообщение об ошибке | Причины и рекомендуемые действия |
Array dimension for column <string> is invalid (Ошибочная размерность массива для столбца <строка>) | Исправьте определение массива перед копированием |
Bad attribute for RDB$CHARACTER SETS (Неверный атрибут для RDB$CHARACTER_SETS) | Используется несовместимый набор символов |
Bad attribute for RDB$COLLATIONS (Неверный атрибут для RDB$COLLATIONS) | Исправьте атрибут в указанной системной таблице |
Bad attribute for table constraint (Неверный атрибут для ограничения таблицы) | Проверьте ограничения целостности. Если ошибка возникла при восстановлении, рассмотрите возможность использования режима -no_validity для удаления проверки ограничений |
Blocking factor parameter missing (Отсутствует параметр коэффициента блокирования) | Задайте числовой аргумент для режима "коэффициент" (например, для ленточного устройства для копии) |
Cannot commit files (Невозможно подтвердить файлы) | База данных содержит дефекты или нарушения ограничений целостности метаданных. Попытайтесь восстановить таблицы с использованием режима -one at a time или удалите проверку ограничений, используя режим -no_yalidity |
Cannot commit index <string> (Невозможно подтвердить индекс <строка>) | Возможно, данные конфликтуют с определенными индексами. Попытайтесь выполнить восстановление с использованием "неактивного" режима для предотвращения создания индексов |
Cannot find column for blob ... (Невозможно найти столбец blob) | Используйте -one_at_a_time для отыскания проблемной таблицы |
Cannot find table <string> . . . (Невозможно найти таблицу <строка>) | То же |
Cannot open backup file <string> (Невозможно открыть файл копии <строка>) | Исправьте имя файла копии и выполните снова |
Cannot open status and error output file <string> (Невозможно открыть выходной файл состояния и ошибок <строка>) | Сообщения были направлены в файл с неверным именем или в файл, который уже существует. Проверьте формат задания файла или полномочия к каталогу выходного файла, либо удалите существующий файл, либо выберите другое имя для файла протокола |
Commit failed on table <stririg> (Ошибка подтверждения таблицы <строка>) | Разрушение данных или нарушение ограничения целостности в указанной таблице. Проверьте метаданные или восстановите "одну таблицу за раз" |
Conflicting switches for backup/restore (Конфликт переключателей для копирования/восстановления) | Режим только для копирования и режим только для восстановления были использованы в одной операции. Исправьте и снова выполните команду |
Couxd not open file name <string> (Невозможно открыть файл с именем <строка>) | Исправьте имя файла и снова выполните команду |
Could not read from file <string> (Невозможно читать из файла <строка>) | Исправьте имя файла и снова выполните команду |
Could not write to file <string> (Невозможно писать в файл <строка>) | Исправьте имя файла и снова выполните команду |
Datatype n not understood (Тип данных n неизвестен) | Где-то задан неверный тип данных. Проверьте метаданные и при необходимости повторите команду с использованием -one at a time |
Database format n is too old to restore to (Формат базы данных слишком старый для восстановления) | Используемая версия gbak несовместима с версией Firebird, которым создавалась база данных, указанная для копирования. Попытайтесь скопировать эту базу данных с использованием режима -expand или -old, а затем восстановите ее |
Database <string> already exists (База данных <строка> уже существует) | Вы использовали -create при восстановлении файла копии, но указанная база данных уже существует. Если вы действительно хотите заменить существующую базу данных, используйте переключатель -R, в противном случае введите другое имя файла базы данных |
Could not drop database <string> (database might be in use) (Невозможно удалить базу данных <строка> (возможно, база данных используется)) | Вы использовали -replace при восстановлении файла в существующую базу данных, но эта база данных находится в использовании. или измените имя у восстанавливаемой базы данных, или подождите завершения использования существующей базы данных |
Do not recognize record type n . . . (He распознан тип записи n) | Проверьте метаданные и при необходимости выполните восстановление с использованием -one at_a time |
Do not recognize <string> attribute n - continuing ... (He распознан атрибут n <строка> - выполнение продолжается) | Не фатальная ошибка в данных |
Do not understand BLOB INFO item n ... (Непонятный элемент BLOB INFO) | |
Error accessing BLOB column <string> - continuing ... (Ошибка при обращении к столбцу BLOB <строка> - выполнение продолжается) | Не фатальная ошибка в данных |
ERROR: Backup incomplete The backup cannot be written to the target device or file system (ОШИБКА: копирование не завершено. Копия не может быть записана на устройство или в файл системы) | Причинами могут быть недостаточное пространство, проблемы с выводом на устройство или разрушение данных |
Error committing metadata for table <string> (Ошибка при подтверждении метаданных для таблицы <строка>) | Возможно, таблица разрушена. При восстановлении базы данных используйте -one at a time для изоляции таблицы |
Exiting before completion due to errors (Выход до завершения по причине ошибок) | Это сообщение сопровождает другие сообщения об ошибках и указывает на то, что копирование или восстановление не может быть выполнено. Причину найдите в других сообщениях об ошибках |
Expected array dimension n but instead found m (Ожидается размерность массива n, но найдена m) | Проблемы с массивом |
Expected array version number n but instead found m (Ожидается номер версии массива n, но найден m) | Проблемы с массивом |
Expected backup database <string>, found <string> (Ожидается | Проверьте имена восстанавливаемых файлов копии |
Expected backup description record . . . (Ожидается дескриптор записи копии ...) | |
Expected backup start time <string>, found <string> . . . (Ожидается время начала копирования <строка>, найдено <строка>) | |
Expected backup version 1, 2, or 3. Found n ... (Ожидается версия копии 1, 2 или 3. Найдена n) | |
Expected blocking factor, encountered <string> (Ожидается коэффициент блокирования, встречено <строка>) | Режим -factor требует числового аргумента |
Expected data attribute . . . (Ожидается атрибут данных) | |
Expected database description record . . . (Ожидается дескриптор записи базы данных) | |
Expected number of bytes to be skipped, encountered <string> ... (Ожидается количество пропускаемых байтов, встречено <строка>) | |
Expected page size, encountered <string> (Ожидается размер страницы, встречено <строка>) | |
Режим -page_size требует числового аргумента | Expected record length . . . (Ожидается длина записи) |
Expected volume number n, found volume m (Ожидается номер тома n, найден том m) | |
При копировании на множество лент или восстановлении с множества лент убедитесь, что задали правильный номер тома | Expected XDR record length ... (Ожидается длина записи XDR) |
Failed in put blr gen id ... (Ошибка в put blr gen id ...) | |
Failed in store blr gen id ... (Ошибка в store blr gen id ...) | |
Failed to create database <string> (Ошибка создания базы данных <строка>) | |
Указана неверная база данных, возможно, она уже существует | Column <string> used in index <string> seems to have vanished (Столбец <строка>, используемый в индексе <строка>, видимо пропал) |
Индекс ссылается на не существующий столбец. Проверьте определение индекса или столбца | Found unknown switch (Найден неизвестный переключатель) |
Задан режим, не распознанный утилитой gbak | Index <string> omitted because n of the expected m keys were found .,. (Индекс <строка> пропускается потому, что было найдено n из ожидаемых m ключей) |
Input and output have the same name Disallowed. (Вход и выход имеют одни и те же имена. Отменяется.) | |
Файлы копии и базы данных должны иметь различные имена. Исправьте имена и выполните заново | Length given for initial file (n) is less than minimum (jn) (Длина, указанная для начального файла (n), меньше минимума (m)) |
Недостаточное пространство было выделено для восстановления базы данных во множество файлов. Firebird автоматически увеличивает размер страницы до минимального значения. Не требуется никаких действий | Missing parameter for the number of bytes to be skipped ... (Отсутствует параметр для количества пропускаемых байтов) |
Multiple sources or destinations specified (Задано множество входных или выходных имен) | Только имя одного устройства может быть указано для входа или выхода |
No table name for data (He задана таблица для данных) | База данных содержит данные, которые не относятся ни к какой таблице. Используйте gfix для проверки или починки базы данных |
Page size is allowed only on restore or create (Размер страницы допустим только для восстановления или создания) | Режим -page size был использован при копировании вместо восстановления |
Page size parameter missing (Отсутствует параметр размера страницы) | Режим -page_size требует числового аргумента |
Page size specified (n bytes) rounded up to in bytes (Заданный размер страницы (n байтов) округляется до m байтов) | Не фатальная ошибка. Неверный размер страницы округляется до величины 1024, 2048, 4096, 8192 или 16 384 - которая ближе к указанной |
Page size specified (n) greater than limit (16 384 bytes) (Указанный размер страницы (n) больше максимального значения (16 384 байт)) | Задайте размер страницы 1024, 2048, 4096, 8192 или 16 384 |
Password parameter missing (Отсутствует параметр пароль) | Копирование или восстановление обращается к удаленному серверу. Используйте переключатель -password и задайте пароль |
Protection is not there yet (Запита пока не существует) | Используется нереализованный режим |
– unprotected | Redirect location for output is not specified (Перенаправление размещения для вывода не задано) |
Вы задали режим, зарезервированный для будущего использования в Firebird | REPLACE specified, but the first file <Jstring> is a database (Задано REPLACE, но первым файлом <строка> является база данных) |
Проверьте, чтобы именем файла, следующим за режимом -replace, был файл копии, а не базы данных | Requires both input and output file names (Требуются имена как входного, так и выходного файла) |
Задайте входной и выходной файл при копировании и восстановлении | RESTORE: decompression length error (RESTORE: ошибка длины декомпрессии) |
Возможна несовместимость версии gbak, используемой для копирования и gbak, используемой для восстановления. Проверьте, был ли режим -expand задан при копировании | |
Restore failed for record in table <string> (Ошибка при восстановлении для записи из таблицы <строка>) | Возможно разрушение данных в указанной таблице |
Skipped n bytes after reading a bad attribute n . . . (Пропущено n байт после чтения неверного атрибута т) | Не фатально |
Skipped n bytes looking for next valid attribute, encountered attribute m ... (Пропущено n байт при поиске следующего верного атрибута, встречен атрибут m) | Не фатально |
Trigger <string> is invalid . . . (Триггер <строка> неверен) | |
Unexpected end of file on backup file (Непредвиденное завершение копируемого файла) | Восстановление файла копии завершилось с ошибкой; видимо процедура копирования, которая создала этот файл копии, завершилась ненормально. Если возможно, создайте новый файл копии и используйте его для восстановления базы данных |
Unexpected I/O error while accessing <string> backup file (Непредвиденная ошибка ввода/вывода при обращении к файлу копии <строка>) | Вероятно, возникла ошибка диска или другого оборудования при выполнении копирования или восстановления |
Unknown switch <string> (Неизвестный переключатель <строка>) | Был задан нераспознанный утилитой gbak режим |
User name parameter missing (Отсутствует параметр имя пользователя) | Копирование или восстановление обращается к удаленной машине. Задайте имя пользователя переключателем -user |
Validation error on column in table <string> (Ошибка проверки столбца в таблице <строка>) | База данных не может быть восстановлена, потому что содержит данные, которые нарушают ограничение целостности. Попытайтесь удалить ограничения из метаданных, указав при восстановлении -no_validity |
Warning - record could not be restored (Предупреждение - запись не может быть восстановлена) | Возможно разрушение указанных данных |
Wrong length record, expected n encountered m . . . (Неверная длина записи, ожидается n, встретилась m) |
Утилита gbak имеет большое значение для поддержания базы данных в работоспособном состоянии и для устранения некоторых типов разрушения данных. Другим инструментом, который вы можете использовать для выполнения задач администрирования, ведения и восстановления базы данных, является программа gfix, обсуждаемая дальше. Комбинированное использование gfix и gbak для анализа и иногда починки разрушенной базы данных описывается в приложении 4.