SQL Server에서 트랜잭션 로그 백업을 복원하는 방법

SQL Server에서 트랜잭션 로그 백업을 복원하는 방법

SQL Server에서 트랜잭션 로그 백업 복원은 데이터베이스 복구의 중요한 단계입니다. 특정 시점으로 변경 사항을 전달할 수 있습니다. 실패, 데이터 마이그레이션 또는 테스트 시나리오에서 복구하든 트랜잭션 로그 복원 프로세스는 특정 시점까지 커밋 된 트랜잭션을 적용하여 데이터 일관성을 보장합니다.

이 기사에서는 SQL Server의 트랜잭션 로그 백업을 성공적으로 복원하기위한 주요 단계, 일반적인 오류 및 모범 사례를 학습합니다.

먼저 SQL Server에서 지원되는 다양한 유형의 백업을 이해해 보겠습니다.

SQL Server 백업 유형 이해

SQL Server는 5 가지 유형의 백업을 지원합니다.

전체 백업

전체 백업에는 특정 시점에서 데이터 및 데이터베이스 개체를 포함한 전체 데이터베이스가 포함됩니다. 다른 모든 백업 유형의 기초로 사용할 수 있습니다. 즉, 차동 백업 및 트랜잭션 로그 백업을 복원하려면 전체 백업이 필요합니다.

차동 백업

차동 백업에는 마지막 백업 후 발생한 데이터 및 객체 변경이 포함되어 있습니다. 차동 백업은 더 작으며 완료하는 데 시간이 덜 걸립니다.

트랜잭션 로그 백업

트랜잭션 로그 백업은 마지막 전체 또는 차동 백업 후에 발생한 모든 변경 사항을 캡처합니다. 트랜잭션 로그 백업의 크기는 매우 작으며 일반적으로 매우 빠르게 완료됩니다. 트랜잭션 로그 백업은 데이터베이스가 전체 복구 모델에있을 때만 수행됩니다.

트랜잭션 로그 백업은 데이터베이스 복구 프로세스에서 중요한 역할을합니다. 다음은 트랜잭션 로그 백업에 대한 몇 가지 중요한 메모입니다.

  1. 트랜잭션 로그 백업은 데이터베이스에서 발생한 모든 변경 사항을 캡처하여 전체 또는 차동 백업간에 데이터 손실이 없음을 보장합니다.
  2. 트랜잭션 로그 백업을 사용하면 데이터베이스를 정확한 시점으로 복구하는 데 도움이되므로 데이터 손상 또는 우발적 인 삭제 전에 데이터베이스를 복구 할 수 있습니다.
  3. 데이터베이스가 전체 복구 모델에 있으면 큰 트랜잭션으로 인해 트랜잭션 로그 파일이 커지면 잠재적 인 문제가 발생할 수 있습니다. 트랜잭션 로그 파일을 백업하면 트랜잭션 로그 파일에 로그인 된 모든 변경 사항을 자르고 트랜잭션 로그 파일의 크기를 원래 크기로 유지합니다.

복사 전용 백업

사본 전용 백업은 전체 백업과 같으며, 시점에서 데이터베이스의 데이터와 구조가 포함되어 있습니다. 유일한 차이점은 전체 백업이 복구 체인을 깨뜨리지 않는다는 것입니다. 이는 전체 복구 모델을 사용할 때 매우 중요합니다. 데이터베이스가 전체 복구 모델에 있고 전체 백업을 실행하면 복구 체인을 재설정하여 이전 백업을 무효화합니다.

파일 그룹 백업

파일/파일 그룹 백업은 특정 데이터 파일 또는 파일 그룹을 백업하는 데 사용됩니다. 이 백업은 읽기 전용 파일 그룹을 백업하려는 경우 유용합니다.

트랜잭션 로그 백업을 복원하기위한 전제 조건

트랜잭션 로그 백업을 복원하기 전에 데이터베이스 서버에서 해당 버전, 시스템 리소스 및 액세스 가능한 데이터베이스 백업 파일을 확인해야합니다. 전제 조건 검사는 실패하면 복구 프로세스를 방해하고 지연되므로 필수 조건이 중요합니다. 다음은 복구 프로세스를 시작하기 전에 확인 해야하는 항목 목록입니다.

서버 에디션 및 버전을 확인하십시오

특히 SQL Server의 다른 버전이나 판에서 촬영 한 백업을 복원 할 때는 항상 서버 버전을 확인하십시오. 더 높은 버전에서 하위 버전으로 가져온 백업을 복원 할 수 없습니다. 예를 들어 SQL Server 2019 데이터베이스에서 SQL Server 2022의 백업을 복원 할 수 없습니다.

SQL Server 버전을 확인하기 위해 다음 쿼리를 실행할 수 있습니다.

위의 쿼리는 SQL Server 버전 및 에디션의 세부 사항을 제공합니다.

스토리지 및 시스템 리소스를 점검하십시오

다음으로, 전체 및 차동 백업을 복원 한 후 적절한 공간을 사용할 수 있는지 확인해야합니다. 때때로 우리는 사용 가능한 스토리지를 확인하지 않고 순서대로 복원 스크립트를 실행합니다. 이러한 상황에서 복원 프로세스가 중단되어 다운 타임이 더 길어집니다. 또한 SQL Server 계정에 백업 파일을 읽는 데 필요한 권한이 있는지 확인해야합니다.

백업 시퀀스를 확인하십시오

SQL Server의 데이터베이스를 복원 할 때 복원 될 백업 시퀀스를 유지해야합니다. SQL Server는 항상 로그 시퀀스 번호를 사용하여 트랜잭션 로그의 변경 사항을 추적합니다. 백업을 유효하지 않은 순서로 복원하면 LSN 체인이 깨지고 후속 백업을 복원하는 것은 불가능합니다.

항상 다음 순서를 유지합니다.

  1. 먼저, 전체 백업을 복원하십시오 NORECOVERY 옵션.
  2. 둘째, 차등 백업을 복원하십시오 NORECOVERY 옵션.
  3. 마지막으로, 전체 또는 차동 백업 후에 취한 모든 트랜잭션 로그 백업을 복원하십시오. 사용하십시오 RESTORE WITH RECOVERY 옵션.

적절한 백업 파일을 확인하려면 RESTORE HEADERONLY 명령. 구문은 다음과 같습니다.

RESTORE HEADERONLY FROM DISK = 'C:\Backups\YourBackup.bak' 

명령은 다음 주요 정보를 제공합니다.

  1. 백업 유형: 백업 유형을 보여줍니다 (전체, 차동 또는 트랜잭션 로그).
  2. 위치: 지정된 백업 파일 내에서 백업 세트의 위치를 ​​보여줍니다.
  3. 첫 번째 LSN 및 마지막 LSN: 백업의 로그 시퀀스 번호가 표시됩니다.

당신은 또한 사용할 수 있습니다 RESTORE FILELISTONLY 명령 데이터베이스 파일 목록을 확인합니다. 다음은 명령의 구문입니다.

RESTORE FILELISTONLY FROM DISK = 'C:\Backups\YourDatabase.bak' 

명령은 다음 정보를 제공합니다.

  1. 논리적 이름: 파일의 논리 이름을 제공합니다.
  2. 물리적 이름: 파일의 실제 이름을 제공합니다.
  3. 유형: 파일이 로그 파일인지 데이터 파일인지 보여줍니다.

이제 트랜잭션 로그 백업을 복원하는 방법을 이해해 보겠습니다.

트랜잭션 로그 백업을 복원하기위한 단계별 안내서

이제 트랜잭션 로그 백업을 복원하는 방법을 이해해 보겠습니다. 시연을 위해, 우리는 그것을 복원 할 것입니다 stackoverflow2010 데이터 베이스. T-SQL 쿼리를 사용하여 트랜잭션 로그 백업을 복원합니다.

프로덕션 데이터베이스의 모든 데이터를 포함하는 별도의 서버에서 데이터베이스를 복원하려고한다고 가정하십시오. 서버에는 세 가지 백업 작업이 있습니다. 전체 백업 작업은 매일 밤 백업을합니다. 차등 백업 작업은 12 시간마다 실행되며 트랜잭션 로그 백업은 매시간 실행됩니다.

개발 서버에서 클론을 복원하려면 다음 순서로 데이터베이스를 복원해야합니다.

  1. 로 전체 백업을 복원하십시오 NORECOVERY 옵션.
  2. 차동 백업을 복원하십시오 NORECOVERY 옵션.
  3. 마지막 차동 백업 후에 취한 모든 트랜잭션 로그 백업을 복원하십시오.

T-SQL 스크립트를 사용하여 데이터베이스를 복원 할 예정입니다. 클론 데이터베이스의 이름은 다음과 같습니다 Stackoverflow2010_Clone. 먼저 전체 백업을 복원해야합니다. 다음은 명령입니다.

USE [master]

Go

RESTORE DATABASE [StackOverflow2010_Clone] FROM DISK = N'D:\MS_SQL\Backup\StackOverflow2010_Full_Backup.bak'

WITH FILE = 1,

MOVE N'StackOverflow2010' TO N'D:\MS_SQL\Data\StackOverflow2010_Clone.mdf',

MOVE N'StackOverflow2010_log' TO N'D:\MS_SQL\Log\StackOverflow2010_Clone_log.ldf',

NORECOVERY, NOUNLOAD, STATS = 5

GO 

위의 스크린 샷에서 볼 수 있듯이 우리는 MOVE 복원 데이터베이스의 조항. 그 이유는 클론 서버의 데이터 파일 위치 및 로그 파일 위치가 프로덕션 서버의 위치와 다르기 때문입니다. 따라서, 우리는 그것을 사용하여 물리적 위치를 변경해야합니다 MOVE 예어.

당신은 더 자세한 내용을 읽을 수 있습니다 RESTORE DATABASE 여기에 명령. 전체 백업은 NORECOVERY 차동 및 로그 백업을 나중에 적용 할 수 있도록 옵션. 백업이 복원되면 데이터베이스가 RESTORING 상태. 데이터베이스의 상태를 볼 수 있도록 SQL 쿼리를 실행할 수 있습니다.

select

name [Database Name],

create_date [Database create Date],

state_desc [Database State],

user_access_desc [User access status]

from sys.databases where name="StackOverflow2010_Clone" 

쿼리 출력 :



다음으로 차동 백업을 복원합니다. 그렇게하려면 다음 명령을 실행하십시오.

RESTORE DATABASE [StackOverflow2010_Clone] FROM

DISK = N'D:\MS_SQL\Backup\StackOverflow2010_Diff_Backup.bak'

WITH FILE = 1, NORECOVERY, NOUNLOAD, STATS = 5

차동 백업이 복원되면 트랜잭션 로그 백업을 복원합니다. 그렇게하기 위해 우리는 사용할 것입니다 RESTORE LOG 명령. 다음은 쿼리입니다.

RESTORE LOG [StackOverflow2010_Clone] FROM DISK = N'D:\MS_SQL\Backup\StackOverflow2010_log_Backup_1.trn' WITH FILE = 1, NORECOVERY, NOUNLOAD, STATS = 5

RESTORE LOG [StackOverflow2010_Clone] FROM DISK = N'D:\MS_SQL\Backup\StackOverflow2010_log_Backup_2.trn' WITH FILE = 1, NORECOVERY, NOUNLOAD, STATS = 5

RESTORE LOG [StackOverflow2010_Clone] FROM DISK = N'D:\MS_SQL\Backup\StackOverflow2010_log_Backup_3.trn' WITH FILE = 1, NOUNLOAD, RECOVERY, STATS = 5 

마지막 로그 백업을 RECOVERY 옵션. 이렇게하면 데이터베이스가 온라인으로 만들어지며 더 이상 백업을 데이터베이스로 복원 할 수 없습니다. 데이터베이스가 복원되면 다음 쿼리를 실행하여 데이터베이스 상태를 확인할 수 있습니다.

select

name [Database Name],

create_date [Database create Date],

state_desc [Database State],

user_access_desc [User access status]

from sys.databases where name="StackOverflow2010_Clone"

쿼리 출력 :

보시다시피 Stackoverflow2010_Clone 데이터베이스가 성공적으로 복원됩니다.

일반적인 오류 및 문제 해결 팁

여러 가지 이유로 인해 트랜잭션 로그 복원이 실패 할 수 있습니다. 트랜잭션 로그 백업을 복원하는 동안 직면 할 수있는 알려진 몇 가지 문제가 있습니다.

오류: “이 백업 세트의 로그인은 LSN에서 시작됩니다 …”

일반적 으로이 오류는 트랜잭션 로그 체인 (LSN 시퀀스)이 고장날 때 발생합니다. 이는 전체 또는 차동 백업이 누락되거나 백업이 시퀀스되지 않기 때문에 발생할 수 있습니다.

이러한 문제가 발생하지 않도록하려면 트랜잭션 로그 백업을 복원하기 전에 항상 백업 시퀀스를 확인하십시오. 다음 쿼리를 사용하여 백업 기록을 확인할 수 있습니다.

SELECT * FROM msdb.dbo.backupset

WHERE database_name="YourDB"

ORDER BY backup_start_date DESC; 

먼저, 가장 최근의 전체 백업을 복원 한 다음 모든 후속 차이 및 트랜잭션 로그 백업을 복원하십시오.

오류: “데이터베이스가 사용 중입니다.”

이 오류는 사용자 프로세스가 복원중인 데이터베이스에 연결될 때 발생합니다.

오류를 바로 잡으려면 아래 단계를 따르십시오.

1. 데이터베이스를 단일 사용자 모드로 설정하십시오

ALTER DATABASE YourDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE;

-- Perform backup/restore

ALTER DATABASE YourDB SET MULTI_USER; 

2. 활성 세션을 죽이십시오

-- Generate kill commands for all active connections

SELECT 'KILL ' + CAST(session_id AS VARCHAR(10)) + ';'

FROM sys.dm_exec_sessions

WHERE database_id = DB_ID('YourDB');

3. Simpliced_User 옵션을 사용하여 트랜잭션 로그를 복원하십시오

RESTORE DATABASE YourDB FROM DISK = 'path' WITH RESTRICTED_USER; 

결론

이 기사에서는 다양한 유형의 백업과 트랜잭션 로그 백업을 복원하여 데이터베이스를 복제하는 방법을 이해합니다. 또한 트랜잭션 로그를 복원 할 때 발생하는 일반적인 문제와이를 해결하는 방법에 대해서도 배웁니다.

기본 SQL 백업 및 트랜잭션 로그 백업을 복원하여 손상된 데이터베이스를 복구하는 프로세스는 간단하고 간단한 프로세스입니다. 그러나 LSN 체인이 파손 된 상황이 있고 호환 가능한 전체 백업이없는 경우 데이터 손실이 임박합니다. 그러한 상황에서는 데이터베이스를 수리하기위한 타사 도구를 고려해야합니다. 여기에서는 Data Recovery 도구 인 MS SQL 용 Stellar Repair를 추천하고 싶습니다. 이는 손상된 데이터베이스를 복구 할 수있는 많은 옵션을 제공합니다.

출처 참조

Post Comment

당신은 놓쳤을 수도 있습니다