Инструменты пользователя

Инструменты сайта


repair

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
repair [2014/05/26 20:28]
sd
repair [2020/04/07 16:18] (текущий)
Строка 1: Строка 1:
-'''ВАЖНО! Перед началом восстановления убедитесь что все пользователи отключены от сервера и сделайте копию файла базы данных. Если нет доступа ко всем компьютерам в сети на которых запущены приложения подключенные к базе данных, то на сервере запретите (сделайте неактивным) сетевое подключение или просто достаньте сетевой кабель из розетки на системном блоке. Подождите несколько минут пока сервер не закроет все неактивные коннекты и перезагрузите операционную систему.'''+Восстановление поврежденной базы данных Firebird
  
-Войдите в каталог Bin в папкекуда был установлен сервер Interbase/Firebird/Yaffil<ref>По умолчанию, сервер Yaffil устанавливается в папку C:/Program Files/Yaffil.</ref>. Для того, чтобы не работать с "голым" окном командной строки, рекомендуется использовать любую файловую утилиту вроде Far или Total Commander.+<WRAP center round important 100%> 
 +ВАЖНО! Перед началом восстановления убедитесь что все пользователи отключены от сервера и сделайте копию файла базы данных. Если нет доступа ко всем компьютерам в сети на которых запущены приложения подключенные к базе данныхто на сервере запретите (сделайте неактивным) сетевое подключение или просто достаньте сетевой кабель из розетки на системном блоке. Подождите несколько минут пока сервер не закроет все неактивные коннекты и перезагрузите операционную систему. 
 +</WRAP> 
 + 
 + 
 +Войдите в каталог Bin в папке, куда был установлен сервер Firebird. Для того, чтобы не работать с "голым" окном командной строки, рекомендуется использовать любую файловую утилиту вроде Far или Total Commander.
  
 Проверим базу данных на наличие повреждений: Проверим базу данных на наличие повреждений:
  
- gfix -v -full -user SYSDBA -pas masterkey database.gdb+**''gfix -v -full -user SYSDBA -pas masterkey a4on_db.fdb''**
  
 вместо gdbase.gdb укажите полный путь к своему файлу базы данных (хорошая идея: для того чтобы не обременять себя вводом длинного пути, скопировать файл базы данных непосредственно в каталог BIN). Имя сервера указывать не надо! вместо gdbase.gdb укажите полный путь к своему файлу базы данных (хорошая идея: для того чтобы не обременять себя вводом длинного пути, скопировать файл базы данных непосредственно в каталог BIN). Имя сервера указывать не надо!
Строка 13: Строка 18:
 Если есть повреждения, то попытаемся исправить их: Если есть повреждения, то попытаемся исправить их:
  
- gfix -mend -full -ignore -user SYSDBA -pas masterkey database.gdb+**''gfix -mend -full -ignore -user SYSDBA -pas masterkey a4on_db.fdb''**
  
 Проверим, исправились ли все повреждения: Проверим, исправились ли все повреждения:
  
- gfix -v -full -user SYSDBA -pas masterkey database.gdb+''gfix -v -full -user SYSDBA -pas masterkey a4on_db.fdb''
  
 Если повреждения остались, то запишем информацию в Bak-файл, а потом восстановим в другой новой базе данных. Для этого последовательно выполним команды: Если повреждения остались, то запишем информацию в Bak-файл, а потом восстановим в другой новой базе данных. Для этого последовательно выполним команды:
  
- gbak -b -v -ig -g -user SYSDBA -pas masterkey server:database.gdb database.gbk+''gbak -b -v -ig -g -user SYSDBA -pas masterkey a4on_db.fdb db.fbk''
  
 Здесь применены следующие ключи: Здесь применены следующие ключи:
  
--b -- создавать архивную копию базы; +    -b -- создавать архивную копию базы; 
--v -- выводить на экран подробный лог; +    -v -- выводить на экран подробный лог; 
--ig -- игнорировать ошибки в данных; +    -ig -- игнорировать ошибки в данных; 
--g -- запретить сборку мусора при чтении из базы. +    -g -- запретить сборку мусора при чтении из базы. 
  
- gbak -c -v -user SYSDBA -pas masterkey database.gbk server:new.gdb +''gbak -c -v -user SYSDBA -pas masterkey db.fbk a4on_new.fdb''
- +
-Обратите внимание, что при указании имени базы данных необходимо указать имя сервера и через двоеточие полный путь к файлу базы данных на сервере (обратите внимание, что если вы даже скопировали файл базы данных в одну папку с утилитой резервного копирования все равно необходимо указать полный путь к файлу). При указании имени архива следует указать только полный путь к файлу без указания имени сервера.+
  
 При серьезных повреждениях базы данных в некоторых таблицах могут пропасть записи из-за чего не восстановятся внешние ссылки на эти таблицы. Или наоборот, появятся "фантомные" записи, нарушающие условия уникальности первичного ключа. В таких случаях на стадии восстановления базы данных из архива на экране будут отображены сообщения об ошибках и процесс восстановления прервется. При серьезных повреждениях базы данных в некоторых таблицах могут пропасть записи из-за чего не восстановятся внешние ссылки на эти таблицы. Или наоборот, появятся "фантомные" записи, нарушающие условия уникальности первичного ключа. В таких случаях на стадии восстановления базы данных из архива на экране будут отображены сообщения об ошибках и процесс восстановления прервется.
Строка 38: Строка 41:
 Спасти базу можно следующим образом: сначала восстановить ее без внешних ссылок (индексов) с помощью команды: Спасти базу можно следующим образом: сначала восстановить ее без внешних ссылок (индексов) с помощью команды:
  
- gbak -c -i -user SYSDBA -pas masterkey database.gbk server:new.gdb+''gbak -c -i -user SYSDBA -pas masterkey db.fdb a4on_new.fdb''
  
-Затем, с помощью любой оболочки, например IBExpert, один за одним [[Ручное_восстановление_индексов|активизировать внешние ключи]] с целью выявить поврежденные таблицы. По мере выявления следует, либо удалить записи которые содержат ссылки на несуществующие записи, либо добавить несуществующие записи, либо обнулить ссылки. Здесь, хорошим подспорьем может стать наличие пусть и устаревшего, но неповрежденного архива этой же базы.+Затем, с помощью любой оболочки, например IBExpert, один за одним активизировать внешние ключи с целью выявить поврежденные таблицы. По мере выявления следует, либо удалить записи которые содержат ссылки на несуществующие записи, либо добавить несуществующие записи, либо обнулить ссылки. Здесь, хорошим подспорьем может стать наличие пусть и устаревшего, но неповрежденного архива этой же базы.
  
 Если база повреждена настолько, что одной деактивации индексов недостаточно, то можно попробовать ключи -n (отключение проверок целостности данных) и -o (комит данных после каждой таблицы при восстановлении). Если база повреждена настолько, что одной деактивации индексов недостаточно, то можно попробовать ключи -n (отключение проверок целостности данных) и -o (комит данных после каждой таблицы при восстановлении).
Строка 46: Строка 49:
 Пример команды с вышеупомянутыми ключами: Пример команды с вышеупомянутыми ключами:
  
- gbak -c -i -n -o -user SYSDBA -pas masterkey database.gbk server:new.gdb +''gbak -c -i -n -o -user SYSDBA -pas masterkey db.fdb a4on_new.fdb''
- +
-Как и в предыдущем случае, после разархивирования базы и ручного восстановления целостности данных базу следует еще раз сархивировать и восстановить из архива уже с обычным набором ключей. +
- +
-====Примечания====+
  
-<references/>+Как и в предыдущем случае, после разархивирования базы и ручного восстановления целостности данных базу следует еще раз архивировать и восстановить из архива уже с обычным набором ключей.
  
 +Дополнительно о восстановлении базы можно почитать на сайте IBase.ru [[http://www.ibase.ru/devinfo/db_repair.htm|Как починить базу данных Interbase или Firebird]]
  
repair.1401121715.txt.gz · Последнее изменение: 2020/04/07 16:18 (внешнее изменение)