Дамп содержимого базы данных

From SunFlurry wiki
Jump to: navigation, search

Дамп содержимого базы данных является универсальным способом перевода базы данных из формата одной СУБД в другую с сохранением всех таблиц их столбцов и строк. Формат хранения дампа является бинарным, все ячейки базы данных сохранены в виде текста в формате UTF-16, однако, файл содержит не только текст. Не рекомендуется использование функции дампа для создания резервной копии базы данных. Во-первых, создание дампа происходит медленнее. Во вторых, для его создания требуется остановка сервера, а во время создания резервной копии базы данных, пользователи могут продолжать работать (хотя работа может быть замедлена). Для информации по резервному копированию, см. описание функции InitiateBackupCreation и статью Установки сервера.

Важно также понимать отличие дампа базы данных от резервной копии оной. Дамп, который используется в основном для перехода от одной СУБД к другой, имеет формат, не зависящий от какого либо сервера СУБД (внутренний формат сервера системы). Резервное копирование же выполняется непосредственно ПО СУБД и создает файлы с форматом, совместимым только с СУБД, создавшей данную резервную копию. Это ограничение не является критичным для создания резервных копий, так как, при необходимости ее разворачивания, это делается на том же самом сервере (или его копии) и той же самой СУБД.

Дамп базы данный инициируется после остановки сервера из командной строки с особым ключом для дампа, обычно для создания дампа используется следующая командная строка: sfsrv.exe locallogin "-DUMPDATABASE=<Путь>\<Имя файла>.dump". Сервер должен быть выключен до его запуска в подобном режиме, так как дамп всегда создается в эксклюзивном режиме (режиме одного пользователя), это позволяет избежать противоречивого состояния базы данных, т.е. исключает вероятность того, что во время создания дампа в базе данных будут производиться изменения. После успешного создания дампа сервер автоматически останавливается. Если в процессе создания дампа произошла ошибка, она будет выведена в командную строку. При наличии ошибки, файл дампа необходимо удалить, так как он не может быть использован для восстановление корректной базы данных.

Для разворачивания дампа базы данных, желательно создать новую пустую базу данных в СУБД (способ создания пустой базы данных зависит от конкретной СУБД). Если при разворачивании, сервер будет адресовать заполненную базу данных (к примеру, текущую рабочую), вся информация в этой базе данных перед разворачиванием дампа будет удалена. Внимание: при разворачивании дампа базы данных, убедитесь, что рабочая база данных не используется сервером, на котором разворачивается дамп, иначе все данные в ней будут утеряны! Так как в этом режиме сервер не создает новый файл базы данных, а только очищает содержимое таблиц БД, испорченная бинарная структура БД не будет исправлена! Поэтому, рекомендуется восстанавливать дамп в пустую базу данных. Для разворачивания дампа, сервер необходимо остановить и запустить в режиме приложения со следующими ключами: sfsrv.exe locallogin "-RESTOREDATABASEDUMP=<Путь>\<Имя файла дампа>". После успешного разворачивания дампа сервер автоматически останавливается, и его можно запустить в обычно рабочем режиме без ключа RESTOREDATABASEDUMP. Если в процессе разворачивания дампа произошла ошибка, она будет выведена в командную строку. База данных, при наличии такой ошибки, не была развернула корректно и не является копией базы данных дампа. Ее необходимо удалить и попытаться развернуть дамп повторно, если это необходимо. Файл дампа разворачивается с заметно меньшей скоростью, чем файл резервного копирования базы данных. Это связано с тем, что файл резервного копирования разворачивается из внутреннего формата СУБД совместно со всеми индексами и внутренними переменными, тогда как файл дампа заполняет базу данных с помощью обращений на языке СУБД, которые требуют трансляции, также тратится время на создание индексов и т.п.