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

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

Ошибка "The requested lookup key was not found in any active activation context"

MS SQL 2000 (32 бит) на Win 2003 r2 (64 бит) + symantec netbackup (у меня - 7.5.0.6)
Решение есть по ссылке http://blogs.msdn.com/b/psssql/archive/2009/02/26/you-encounter-error-message-the-system-cannot-find-the-file-specified-when-attempting-to-perform-backups-using-sqlvdi.aspx.
 У меня:
  •  x86 библиотека  - версия 2000.85.1054.0, размер 119 296 байт
  • x64 библиотека - версия 2000.85.1054.0, размер 156 160 байт
 С x86 библиотекой после установки SP4 ( версия 2000.80.2039.0, размер 43 008 байт ) не заработало.
Перезагрузка не нужна.

Предварительное создание файлов БД при восстановлении 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 файл лога обнуляется, а основной файл нет. В моем случае время начала заливки данных сократилась с нескольких часов до пары минут.