Создание копии информационной базы — одна из самых частых задач администратора 1С. Это требуется для тестирования обновлений, разработки нового функционала или анализа данных без риска для «боевой» системы. Однако при работе с MS SQL Server процедура восстановления из бэкапа имеет свои нюансы. Если просто запустить восстановление «по умолчанию», можно случайно повредить рабочую базу. В этой статье мы подробно разберем, как сделать копию правильно, и что делать, если что-то пошло не так.
Рассмотрим наиболее эффективный метод создания копии — использование SQL-запроса. Проанализируем ситуацию: у нас есть файл бэкапа OldBase.bak и мы хотим создать на его основе базу NewBase. Главная сложность заключается в том, что внутри бэкапа хранятся пути к физическим файлам оригинальной базы. Если их не изменить, SQL Server попытается перезаписать файлы работающей базы, что приведет к ошибке или потере данных.
Разберем по шагам структуру правильного скрипта:
RESTORE DATABASE [NewBase]
FROM DISK = N'C:\Backup\OldBase.bak'
WITH
FILE = 1,
MOVE N'OldBase_Data' TO N'D:\SQLData\NewBase_Data.mdf',
MOVE N'OldBase_log' TO N'D:\SQLData\NewBase_log.ldf',
NOUNLOAD,
REPLACE
Проанализируем параметры этого запроса:
OldBase_Data) и принудительно направляем его в новый физический файл (NewBase_Data.mdf). Если этого не сделать, SQL Server попытается записать данные в файлы оригинальной базы.Если вы предпочитаете работать мышкой, рассмотрим, как выполнить ту же операцию в SQL Server Management Studio. Посмотрим на алгоритм действий:
.bak файлу.Work_Copy)..mdf и .ldf в этой колонке ОБЯЗАТЕЛЬНО должны отличаться от имен файлов оригинальной базы.Выясним причину типичной ошибки: иногда после неудачной попытки создания копии основная база «зависает» в состоянии In Recovery или Restoring. Это происходит, когда SQL Server начал процесс восстановления, но не смог его завершить (например, из-за конфликта имен файлов), и база осталась заблокированной для транзакций.
Если вы случайно «задели» рабочую базу и она стала недоступна, не паникуйте. Попробуем вывести ее из этого состояния командой:
RESTORE DATABASE [Имя_Вашей_Рабочей_Базы] WITH RECOVERY
Эта команда заставляет сервер завершить цикл отката транзакций и перевести базу в режим Online. Это сработает, если данные физически не были повреждены в процессе неудачного восстановления.
После того как SQL-часть выполнена, нам необходимо правильно подключить базу в кластер 1С. Рассмотрим действия, которые уберегут вас от проблем с данными:
1. Блокировка регламентных заданий. В копии базы могут быть настроены автоматические обмены, рассылки или выгрузки в банк. Если копия запустит эти процессы, она может отправить старые или некорректные данные реальным контрагентам. Чтобы этого избежать, при добавлении базы в консоли администрирования 1С установите флаг «Блокировка регламентных заданий включена».
2. Ответ на запрос системы при входе. При первом запуске копии 1С:Предприятие обнаружит изменение параметров SQL и выдаст диалоговое окно. Мы всегда должны выбирать вариант «Информационная база перемещена» (или «Это копия информационной базы» в новых версиях). Это действие автоматически отключит внутри базы регламентные задания, внешние источники данных и другие опасные механизмы связи с внешним миром.
3. Проблема «осиротевших» пользователей. Часто после восстановления базы на другом сервере пользователь базы данных теряет связь с логином SQL. Проанализируем ситуацию: в списке Users базы пользователь есть, а зайти под ним нельзя. Чтобы исправить это, воспользуемся командой:
ALTER USER [ИмяПользователя] WITH LOGIN = [ИмяЛогина];
Это восстановит связь между учетной записью в базе и глобальным логином сервера SQL.
Рассмотрим еще один важный момент, упомянутый в обсуждении. Технически SQL Server позволяет иметь файлы с одинаковыми внутренними (логическими) именами в разных базах. Однако для удобства администрирования мы рекомендуем менять и их. Если в базе Base_Work логический файл называется Base_Data, то в копии Base_Test лучше переименовать его в Base_Test_Data. Это поможет избежать путаницы при чтении отчетов о дисковом пространстве или при написании скриптов обслуживания IndexOptimize и DatabaseBackup.
Используя эти методы, мы сможем создавать любое количество копий баз 1С быстро и безопасно. Главное — всегда проверять пути к файлам на вкладке Files или в секции MOVE вашего скрипта.