Показаны сообщения с ярлыком zero initialization. Показать все сообщения
Показаны сообщения с ярлыком zero initialization. Показать все сообщения

четверг, 19 февраля 2015 г.

Предварительное создание файлов БД при восстановлении ms sql 2000

При тестовых восстановлениях БД MS SQL 2000 через symantec netbackup получил несколько ошибок связанных с таймаутами:
  1. Created VDI object for SQL Server instance "instance". Connection timeout is "300" seconds.
  2. Client read timeout.
Обе ошибки были в принципе излечимы:
  1.  Установить VDITIMEOUTSECONDS в скрипте восстановления
  2. Установить нужный timeout в свойствах мастер сервера symantec netbackup.
Однако они не решали еще одной проблемы - восстановление идет очень долго. Причем большую часть времени занимает не запись данных из архива, а создание файлов БД и заполнение их нулями (zero initialization). Поскольку в sql 2000 нет возможности instant file initialization, то создание "пустышки" для 300 ГБт базы данных становилось оченььььь долгим делом. Ситуацию также усугубляло то, что разбалованный Windows 2008 R2, я в созданной виртуальной машине Windows 2003 не выровнял диски.
Существует однако простая замена instant file initialization на "педальном" приводе:
  1. Создаем пустые файлы для данных и логов нужного размера. Можно посмотреть текущие и сделать несколько больше (перед копированием данных они будут подрезаны в нужный размер). Я использовал для этого  fsutil file createnew filename length. Например: fsutil file createnew XXX_data.MDF 300000000000
  2. Запускаем задание восстановления с перемещением. Для symantec netbackup скрипт может выглядеть как то так
OPERATION RESTORE
OBJECTTYPE DATABASE
RESTORETYPE MOVE
DATABASE "XXX"
MOVE  "XXX_Data"
TO  "d:\DATA\XXX_data.MDF"
MOVE  "XXX_Log"
TO  "d:\DATA\XXX_Log.LDF"
#
# The following image is type: Full
NBIMAGE "srv-sql01.MSSQL7.SRV-SQL01.db.XXX.~.7.001of001.20150217180955..C"
SQLHOST "srv-stend12"
NBSERVER "SRV-BCK01"
BROWSECLIENT "srv-sql01"
MAXTRANSFERSIZE 6
BLOCKSIZE 7
RESTOREOPTION REPLACE
RECOVEREDSTATE NOTRECOVERED
NUMBUFS 2
ENDOPER TRUE

OPERATION RESTORE
OBJECTTYPE DATABASE
DUMPOPTION INCREMENTAL
RESTORETYPE MOVE
DATABASE "XXX"
# The following image is type: Full database differential
NBIMAGE "srv-sql01.MSSQL7.SRV-SQL01.inc.XXX.~.7.001of001.20150218180207..C"
SQLHOST "srv-stend12"
NBSERVER "SRV-BCK01"
BROWSECLIENT "srv-sql01"
MAXTRANSFERSIZE 6
BLOCKSIZE 7
RESTOREOPTION REPLACE
RECOVEREDSTATE RECOVERED
NUMBUFS 2
ENDOPER TRUE

 Где XXX_data.MDF, XXX_Log.LDF - созданные ранее файлы.

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