[sql-server] SQL Server : 데이터베이스가 “복원”상태에서 멈춤

데이터베이스를 백업했습니다.

BACKUP DATABASE MyDatabase
TO DISK = 'MyDatabase.bak'
WITH INIT --overwrite existing

그런 다음 복원하려고했습니다.

RESTORE DATABASE MyDatabase
   FROM DISK = 'MyDatabase.bak'
   WITH REPLACE --force restore over specified database

이제 데이터베이스가 복원 상태에 빠졌습니다.

일부 사람들은 백업에 로그 파일이 없기 때문에 다음을 사용하여 롤 포워드해야한다고 이론화했습니다.

RESTORE DATABASE MyDatabase
WITH RECOVERY 

물론 그것을 제외하고는 실패합니다.

Msg 4333, Level 16, State 1, Line 1
The database cannot be recovered because the log was not restored.
Msg 3013, Level 16, State 1, Line 1
RESTORE DATABASE is terminating abnormally.

그리고 치명적인 상황에서 정확히 원하는 것은 작동하지 않는 복원입니다.


백업에는 데이터와 로그 파일이 모두 포함됩니다.

RESTORE FILELISTONLY
FROM DISK = 'MyDatabase.bak'

Logical Name    PhysicalName
=============   ===============
MyDatabase    C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\MyDatabase.mdf
MyDatabase_log  C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\MyDatabase_log.LDF



답변

복원 프로세스의 일부로 데이터베이스를 온라인 상태로 만들려면 데이터베이스 명령 WITH RECOVERY과 함께이 옵션 을 사용해야합니다 RESTORE.

이것은 트랜잭션 로그 백업을 복원하지 않으려는 경우에만 해당됩니다. 즉, 데이터베이스 백업 만 복원 한 다음 데이터베이스에 액세스 할 수 있어야합니다.

당신의 명령은 다음과 같아야합니다.

RESTORE DATABASE MyDatabase
   FROM DISK = 'MyDatabase.bak'
   WITH REPLACE,RECOVERY

SQL Server Management Studio에서 데이터베이스 복원 마법사를 사용하면 더 성공할 수 있습니다. 이 방법으로 특정 파일 위치, 덮어 쓰기 옵션 및 WITH 복구 옵션을 선택할 수 있습니다.


답변

이 상황에서 Symantec Backup Exec 11d를 사용하여 데이터베이스를 SQL Server 2005 Standard Edition 인스턴스로 복원했습니다. 복원 작업이 완료된 후 데이터베이스는 “복원 중”상태로 유지되었습니다. 디스크 공간 문제가 없었습니다. 데이터베이스가 단순히 “복원”상태에서 나오지 않았습니다.

SQL Server 인스턴스에 대해 다음 쿼리를 실행하고 데이터베이스를 즉시 사용할 수 있음을 발견했습니다.

RESTORE DATABASE <database name> WITH RECOVERY


답변

방법은 다음과 같습니다.

  1. 서비스를 중지하십시오 (MSSQLSERVER).
  2. 데이터베이스 및 로그 파일 (C : \ Program Files \ Microsoft SQL Server \ MSSQL.1 \ MSSQL \ Data …)의 이름을 바꾸거나 파일이있는 위치
  3. 서비스를 시작하십시오 (MSSQLSERVER).
  4. 문제가있는 데이터베이스를 삭제하십시오.
  5. 데이터베이스를 다시 복원하십시오.

답변

로그 전달 보조 서버를 중지하는 것과 비슷한 사고가 발생했습니다. 로그 전달에서 서버를 제거하고 기본 서버에서 로그 전달을 중지하는 명령 후 명령 후 보조 서버의 데이터베이스가 복원 상태로 멈췄습니다.

RESTORE DATABASE <database name> WITH RECOVERY

데이터베이스 메시지 :

RESTORE DATABASE가 18.530 초 (0.000MB / 초)에서 0 페이지를 성공적으로 처리했습니다.

18 초 후에 데이터베이스를 다시 사용할 수있었습니다.


답변

SQL Management Studio를 사용하여 복원하는 데 비슷한 문제가 있습니다. 데이터베이스 백업을 다른 이름의 새 데이터베이스로 복원하려고했습니다. 처음에는 이것이 실패했고 새로운 데이터베이스의 파일 이름을 수정 한 후에는 성공적으로 수행되었습니다. 따라서 복원 후 원래 데이터베이스는 이름 옆에 (복원 중 …)으로 남아있었습니다. 위의 포럼 (Bhusan ‘s)의 답변을 고려하여 다음과 같은 측면에서 쿼리 편집기에서 실행을 시도했습니다.

RESTORE DATABASE "[NAME_OF_DATABASE_STUCK_IN_RESTORING_STATE]"

문제가 해결되었습니다. 특수 문자가 포함 된 데이터베이스 이름으로 인해 처음에 문제가 발생했습니다. 큰 따옴표를 추가하여이 문제를 해결했습니다. 작은 따옴표는 “Incorrect syntax near …”오류가 발생하지 않습니다.

이것은이 문제를 해결하려고 시도한 최소한의 솔루션 (데이터베이스를 복원하는 상태로 멈춤)이며 더 많은 경우에 적용 할 수 있기를 바랍니다.


답변

좋아, 나는 비슷한 문제가 있으며 Pauk의 경우와 마찬가지로 복원하는 동안 서버의 디스크 공간이 부족하여 영구적으로 복원되는 상태가되었습니다. SQL Server 서비스를 중지하지 않고이 상태를 끝내는 방법은 무엇입니까?

나는 해결책을 찾았다 🙂

Drop database *dbname*


답변

WITH RECOVERY 옵션은 RESTORE DATABASE / RESTORE LOG 명령이 실행될 때 기본적으로 사용됩니다. “복원”프로세스가 중단 된 경우 다음을 실행하여 데이터베이스를 온라인 상태로 되돌릴 수 있습니다.

RESTORE DATABASE YourDB WITH RECOVERY
GO

여러 파일을 복원해야하는 경우 CLI 명령에는 각각 WITH NORECOVERY 및 WITH RECOVERY가 필요합니다. 명령의 마지막 파일에만 WITH RECOVERY가 있어야 데이터베이스를 온라인으로 되돌릴 수 있습니다.

RESTORE DATABASE YourDB FROM DISK = 'Z:\YourDB.bak'
WITH NORECOVERY
GO
RESTORE LOG YourDB FROM DISK = 'Z:\YourDB.trn'
WITH RECOVERY
GO

SQL Server Management Studio 마법사를 사용할 수도 있습니다.

여기에 이미지 설명을 입력하십시오

가상 복원 프로세스도 있지만 타사 솔루션을 사용해야합니다. 일반적으로 데이터베이스 백업을 라이브 온라인 데이터베이스로 사용할 수 있습니다. ApexSQL과 Idera는 자체 솔루션을 가지고 있습니다. ApexSQL 복원에 대해 SQL Hammer 검토합니다 . 많은 수의 백업을 처리하는 경우 가상 복원이 좋은 솔루션입니다. 복원 프로세스가 훨씬 빠르며 디스크 드라이브의 공간을 많이 절약 할 수 있습니다. 여기서 비교를 위해 인포 그래픽을 살펴볼 수 있습니다 .