로그 전달(Log Shipping)이란?
Log Shipping은 트랜잭션 로그 백업을 주기적으로 Secondary 서버에 복원해 데이터를 동기화하는 SQL Server 내장 DR 솔루션입니다.
- Always On AG보다 구성 단순 (도메인/WSFC 불필요)
- 허용 지연 시간: 분 단위 (15분~1시간)
- 비용 효율: Standard 에디션에서도 사용 가능
- 여러 Secondary 구성 가능
3가지 SQL Agent 작업
| 작업 | 실행 서버 | 역할 |
|---|---|---|
| 백업 | Primary | 트랜잭션 로그 백업 생성 |
| 복사 | Secondary | 백업 파일을 로컬로 복사 |
| 복원 | Secondary | 로그 백업을 DB에 적용 |
환경 구성
| 서버 | IP | 역할 |
|---|---|---|
| SQL-Primary | 192.168.1.10 | Primary DB |
| SQL-Secondary | 192.168.1.11 | Secondary (DR) |
| 모니터 서버 | 192.168.1.12 | 선택 사항 |
공유 폴더: \\SQL-Primary\LogShipBackup
Step 1 — 공유 백업 폴더 설정 (Primary)
# 폴더 생성
New-Item -Path "C:\LogShipBackup" -ItemType Directory
# 공유 (Secondary 서버 컴퓨터 계정 허용)
New-SmbShare -Name "LogShipBackup" -Path "C:\LogShipBackup" `
-FullAccess "DOMAIN\SQL-Secondary$", "DOMAIN\sql_agent"Step 2 — 데이터베이스 복구 모드 확인
-- Primary에서
SELECT name, recovery_model_desc FROM sys.databases WHERE name = 'SalesDB';
-- FULL 이어야 함
-- SIMPLE이면 변경
ALTER DATABASE SalesDB SET RECOVERY FULL;
-- 전체 백업 (Log Shipping 초기화 전 필수)
BACKUP DATABASE SalesDB
TO DISK = '\\SQL-Primary\LogShipBackup\SalesDB_full.bak'
WITH FORMAT, COMPRESSION;Step 3 — SSMS로 Log Shipping 구성
- SSMS → Primary DB 우클릭 → 속성 → 트랜잭션 로그 전달 탭
- 이 데이터베이스를 로그 전달 구성의 주 데이터베이스로 설정 체크
- 백업 설정:
- 백업 폴더:
C:\LogShipBackup - 네트워크 경로:
\\SQL-Primary\LogShipBackup - 백업 간격: 15분
- 백업 보관 기간: 72시간
- 백업 폴더:
- Secondary 데이터베이스 추가:
- 서버: SQL-Secondary
- 초기화: 전체 백업에서 복원 선택
- 복사 간격: 15분
- 복원 간격: 15분
- 복원 모드: STANDBY (읽기 가능) 또는 NORECOVERY (읽기 불가)
T-SQL로 직접 구성 (선택)
Primary — 백업 작업
-- 로그 전달 Primary 등록
EXEC master.dbo.sp_add_log_shipping_primary_database
@database = N'SalesDB',
@backup_directory = N'C:\LogShipBackup',
@backup_share = N'\\SQL-Primary\LogShipBackup',
@backup_job_name = N'LSBackup_SalesDB',
@backup_retention_period = 4320, -- 72시간 (분 단위)
@backup_threshold = 60, -- 60분 초과 시 경고
@threshold_alert_enabled = 1,
@history_retention_period = 5760,
@backup_job_id = @LS_BackupJobID OUTPUT,
@primary_id = @LS_PrimaryId OUTPUT;
-- SQL Agent 백업 작업 스케줄 (15분마다)
EXEC msdb.dbo.sp_attach_schedule
@job_name = N'LSBackup_SalesDB',
@schedule_name = N'LS_15min';Secondary — 복사 및 복원 작업
EXEC master.dbo.sp_add_log_shipping_secondary_primary
@primary_server = N'SQL-Primary',
@primary_database = N'SalesDB',
@backup_source_directory = N'\\SQL-Primary\LogShipBackup',
@backup_destination_directory = N'C:\LogShipRestore',
@copy_job_name = N'LSCopy_SQL-Primary_SalesDB',
@restore_job_name = N'LSRestore_SQL-Primary_SalesDB',
@file_retention_period = 4320,
@copy_job_id = @LS_CopyJobID OUTPUT,
@restore_job_id = @LS_RestoreJobID OUTPUT,
@secondary_id = @LS_SecondaryId OUTPUT;
EXEC master.dbo.sp_add_log_shipping_secondary_database
@secondary_database = N'SalesDB',
@primary_server = N'SQL-Primary',
@primary_database = N'SalesDB',
@restore_delay = 0,
@restore_mode = 1, -- 1: STANDBY (읽기 가능), 0: NORECOVERY
@disconnect_users = 0,
@block_size = 512,
@buffer_count = 15,
@max_transfer_size = 1048576,
@restore_threshold = 45, -- 45분 초과 시 경고
@threshold_alert_enabled = 1,
@history_retention_period = 5760,
@secondary_id = @LS_SecondaryId;모니터링
-- Primary에서 Log Shipping 상태 확인
SELECT
primary_database,
last_backup_file,
last_backup_date,
DATEDIFF(MINUTE, last_backup_date, GETDATE()) AS minutes_since_backup
FROM msdb.dbo.log_shipping_monitor_primary;
-- Secondary에서 복원 상태 확인
SELECT
secondary_database,
last_restored_file,
last_restored_date,
last_restored_latency, -- 분 단위 지연
restore_threshold
FROM msdb.dbo.log_shipping_monitor_secondary;페일오버 절차
Primary 장애 시 Secondary를 운영 서버로 전환합니다.
-- Secondary에서: 마지막 로그까지 복원 후 RECOVERY
RESTORE DATABASE SalesDB WITH RECOVERY;
-- 이후 DB 상태: ONLINE (쓰기 가능)
-- 애플리케이션 연결 문자열을 SQL-Secondary IP로 변경Log Shipping vs Always On AG 비교
| 항목 | Log Shipping | Always On AG |
|---|---|---|
| 에디션 | Standard 가능 | Enterprise 필요 |
| 복구 시간 | 분 단위 (RPO ~15분) | 초 단위 |
| 자동 페일오버 | 불가 (수동) | 가능 (동기 모드) |
| 도메인 필요 | 불필요 | 필요 (WSFC) |
| 구성 복잡도 | 낮음 | 높음 |
| 읽기 오프로드 | STANDBY 모드 시 가능 | 항상 가능 |
이 가이드는 AI 도구를 활용해 초안을 구성하고 사람이 명령어·문맥을 검토해 발행했습니다. 운영체제와 도구 버전에 따라 결과가 달라질 수 있으므로 적용 전 공식 문서를 함께 확인하세요. 오류를 발견하시면 이메일로 제보해 주세요.
질문 & 답변 (Q&A)
이 가이드에 대해 궁금한 점을 질문해보세요. 확인 후 답변드립니다.