Создание тестовой или аналитической копии базы данных из резервной копии рабочей системы — стандартная задача администратора 1С и СУБД. Однако при работе с графической консолью SQL Server Management Studio (SSMS) нередко возникает путаница с сопоставлением путей, логическими именами файлов и параметрами перезаписи. Разберем по шагам, как безопасно развернуть копию базы данных из архива .bak, не затронув продуктивный контур, и какие настройки необходимо выполнить на стороне 1С:Предприятия.
В резервной копии .bak жестко прописаны пути к физическим файлам данных (.mdf/.ndf) и журнала транзакций (.ldf), в которых они находились в момент создания архива. Если восстанавливать резервную копию под новым именем базы без корректировки путей, SQL Server по умолчанию попытается положить файлы по старым адресам. Рассмотрим, к чему это может привести:
Именно для исключения подобных ситуаций используется флажок «Relocate all files to folder» («Переместить все файлы в папку»). Когда мы устанавливаем этот параметр, SSMS автоматически перенаправляет создаваемые файлы в указанный каталог и формирует для них пути с учетом нового имени базы (или добавляет уникальные суффиксы). Если эта опция не используется, необходимо вручную проверить и скорректировать пути в таблице файлов в колонке «Restore As» («Восстановить как»), указав уникальные имена файлов, например: TestBase.mdf и TestBase_log.ldf.
Проанализируем структуру файлов внутри базы данных. У каждого файла базы в SQL Server есть два имени:
D:\SQLData\Base_Data.mdf).При восстановлении базы под новым именем логические имена файлов не изменяются автоматически. Они остаются точно такими же, какими были в исходной базе-источнике бэкапа. Это нормальное штатное поведение SQL Server. Несовпадение логического имени файла с именем базы никак не влияет на производительность и стабильность работы «1С:Предприятия». Если по соображениям эстетики или регламентов компании требуется привести логические имена в соответствие с новым именем базы, выполним следующую команду в окне запросов SSMS:
USE [master];
ALTER DATABASE [ИмяБазыКопии]
MODIFY FILE (NAME = N'СтароеЛогическоеИмя_Data', NEWNAME = N'НовоеЛогическоеИмя_Data');
ALTER DATABASE [ИмяБазыКопии]
MODIFY FILE (NAME = N'СтароеЛогическоеИмя_Log', NEWNAME = N'НовоеЛогическоеИмя_Log');
На вкладке параметров при восстановлении в уже существующую пустую или тестовую базу критически важно обратить внимание на два пункта:
SINGLE_USER WITH ROLLBACK IMMEDIATE, принудительно сбрасывает все сеансы и позволяет выполнить операцию.Сведем правильную последовательность действий в единую инструкцию:
.bak..mdf) и журнала (.ldf), чтобы они не пересекались с рабочей базой.Использование T-SQL скрипта полностью исключает ошибки интерфейса и наглядно фиксирует перенаправление файлов. Выполним восстановление через скрипт по шагам:
RESTORE FILELISTONLY FROM DISK = N'D:\Backup\WorkBase.bak';
MOVE:
USE [master];
-- Если база уже существовала, сбрасываем сеансы
IF DB_ID('TestBase') IS NOT NULL
ALTER DATABASE [TestBase] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
RESTORE DATABASE [TestBase]
FROM DISK = N'D:\Backup\WorkBase.bak'
WITH
MOVE N'WorkBase_Data' TO N'D:\SQLData\TestBase.mdf',
MOVE N'WorkBase_Log' TO N'D:\SQLLog\TestBase_log.ldf',
REPLACE,
RECOVERY;
-- Возвращаем многопользовательский режим
ALTER DATABASE [TestBase] SET MULTI_USER;
Рабочие базы «1С:Предприятия» чаще всего функционируют в модели восстановления Full (Полная) для возможности восстановления на точку во времени. Развернутая из бэкапа тестовая база наследует эту модель. Если в тестовой базе не настроено регулярное резервное копирование журнала транзакций, файл .ldf быстро разрастется и займет все свободное дисковое пространство. Сразу после восстановления переведем копию в простую модель восстановления:
ALTER DATABASE [TestBase] SET RECOVERY SIMPLE;
После того как база на уровне СУБД готова, подключим ее к кластеру серверов 1С. Здесь нас подстерегает главная опасность: тестовая база содержит все настройки продуктивной системы. Если не предпринять защитных мер, база может автоматически начать отправлять реальные письма клиентам, выгружать данные в банк-клиент или запускать синхронизацию с рабочими сайтами и внешними сервисами.