Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

MSSQL_LOG_SHIPPING_SETUP 1С:Предприятие и СУБД

Настройка доставки журналов (Log Shipping) для теплого резерва в MSSQL

Обновлено: 26.08.2026 · Официальная документация ↗

Необходимость организации отказоустойчивой архитектуры Disaster Recovery с минимальным бюджетом:

  • Отсутствие редакции Enterprise для AlwaysOn и невозможность покупки одинакового оборудования под синхронный кластер;
  • Необходимость иметь теплую копию базы с задержкой восстановления (например, отставание на 2 часа для защиты от ошибочного удаления данных);
  • Снятие тяжелой аналитической нагрузки на сервер отчетов в режиме Standby.

1. Архитектура и компоненты Log Shipping

Доставка журналов состоит из трех независимых заданий Агента SQL Server:

  1. Backup Job: Делает бэкап лога на основном сервере (Primary);
  2. Copy Job: Копирует файлы логов по сети на резервный сервер (Secondary);
  3. Restore Job: Накатывает скопированные логи на резервную базу;
  4. Alert Job: Опциональный монитор задержки на третьем сервере.

2. Подготовка сетевого хранилища

Создайте две общие папки с правами на запись для учетных записей SQL Server Agent:

  • \\primary-server\LogShippingBackup (Каталог на мастере);
  • D:\LogShippingDestination (Локальный каталог на резервном сервере).

3. Конфигурация через T-SQL

Шаг 1: Первичный бэкап и инициализация базы на Secondary

BACKUP DATABASE [ERP_1C] TO DISK = N'\\primary-server\LogShippingBackup\ERP_1C_init.bak' WITH FORMAT;

-- Восстановление на Secondary в режиме NORECOVERY или STANDBY
RESTORE DATABASE [ERP_1C] 
FROM DISK = N'\\primary-server\LogShippingBackup\ERP_1C_init.bak'
WITH NORECOVERY, REPLACE;

Шаг 2: Настройка Log Shipping на Primary сервере

EXEC msdb.dbo.sp_add_log_shipping_primary_database 
    @database = N'ERP_1C', 
    @backup_directory = N'\\primary-server\LogShippingBackup', 
    @backup_share = N'\\primary-server\LogShippingBackup', 
    @backup_job_name = N'LSBackup_ERP_1C',
    @backup_retention_period = 4320;

Шаг 3: Настройка Secondary сервера

EXEC msdb.dbo.sp_add_log_shipping_secondary_database 
    @primary_server = N'PRIMARY-SQL', 
    @primary_database = N'ERP_1C', 
    @secondary_database = N'ERP_1C', 
    @restore_delay = 0, -- Задержка накатки в минутах (0 для максимальной скорости)
    @restore_mode = 1,  -- 0 = NORECOVERY, 1 = STANDBY (доступно для чтения)
    @disconnect_users = 1; -- Отключать пользователей при накатке лога
💡 Практика специалистов: Log Shipping — самое надежное и нетребовательное к каналам связи решение DR. Настройте задержку @restore_delay = 120 на одном из серверов-приемников, и вы получите гарантированную защиту от логических сбоев и вирусов-шифровальщиков.

Частые вопросы (FAQ)

В чем разница между режимами NORECOVERY и STANDBY на secondary сервере?

В режиме NORECOVERY база постоянно недоступна для пользователей и ожидает накатки логов. В режиме STANDBY база открыта в режиме Read-Only между восстановлениями логов, что позволяет строить по ней отчеты.

Что происходит при накатке нового лога, если к STANDBY базе подключены пользователи?

Если включен параметр @disconnect_users = 1, SQL Server принудительно завершит пользовательские сессии для восстановления лога. Если параметр выключен, задание Restore Job завершится ошибкой и повторит попытку по расписанию.

Поддерживается ли Log Shipping в бесплатной редакции SQL Server Express?

База в редакции Express может выступать в роли Secondary (приемника), но не может быть Primary (источником), так как в Express отсутствует служба SQL Server Agent.

Как выполнить ручной переход на резервный сервер (Manual Failover)?

Снимите финальный Tail-Log на Primary, скопируйте и восстановите его на Secondary с параметром WITH RECOVERY. База станет полностью доступна на запись.

Полезные материалы
Рекомендуем