문제

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

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의 복원 데이터베이스 마법사를 사용하여 더 많은 성공을 거둘 수 있습니다. 이렇게하면 특정 파일 위치, 덮어 쓰기 옵션 및 복구 옵션을 선택할 수 있습니다.

다른 팁

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

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. 데이터베이스를 다시 복원하십시오.

로그 배송 보조 서버를 중지하는 것과 비슷한 사건이있었습니다. 명령 후 로그 배송에서 서버를 제거하고 기본 서버에서 로그 배송을 중지 한 후 2 차 서버의 데이터베이스가 명령 후 상태 복원 상태에 갇히게되었습니다.

RESTORE DATABASE <database name> WITH RECOVERY

데이터베이스 메시지 :

복원 데이터베이스는 18.530 초 (0.000 mb/sec)에 0 페이지를 성공적으로 처리했습니다.

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

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

RESTORE DATABASE "[NAME_OF_DATABASE_STUCK_IN_RESTORING_STATE]"

문제가 해결되었습니다. 특수 문자가 포함 된 데이터베이스 이름 때문에 처음에는 문제가있었습니다. 주위에 이중 인용문을 추가하여 이것을 해결했습니다. 단일 따옴표는 "잘못된 구문 근처"오류를 제공하지 않습니다.

이것은 내가이 문제를 해결하려고 시도한 최소한의 솔루션 (회복 상태에서 스멸 데이터베이스)이며 더 많은 사례에 적용될 수 있기를 바랍니다.

좋아, 나는 비슷한 문제가 있으며 Pauk의 경우와 정확히 정확히 그렇습니다. 복원하는 동안 서버가 디스크 공간이 부족하여 영구적 인 복원 상태를 일으켰습니다. SQL Server 서비스를 중지하지 않고이 상태를 종료하는 방법은 무엇입니까?

나는 해결책을 찾았다 :)

Drop database *dbname*

복구 옵션은 복원 데이터베이스/복원 로그 명령이 실행될 때 기본적으로 사용됩니다. "복원"프로세스에 갇힌 경우 실행하여 데이터베이스를 온라인 상태로 다시 가져올 수 있습니다.

RESTORE DATABASE YourDB WITH RECOVERY
GO

여러 파일 복원이 필요한 경우 CLI 명령은 각각 NoreCovery 및 복구를 위해 필요합니다. 명령의 마지막 파일 만 데이터베이스를 온라인으로 가져 오려면 복구해야합니다.

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 Wizard를 사용할 수도 있습니다.

enter image description here

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

이것은 상당히 분명할지 모르지만 지금은 나를 넘어 뜨렸다.

Tail -Log 백업을 수행하는 경우이 문제는 SSMS 복원 마법사 에서이 옵션을 확인하여 발생할 수 있습니다.

enter image description here

나는 이유를 알아 냈다.

발행 한 고객 인 경우 RESTORE DATABASE 명령 연결이 연결되면 복원 중에 복원이 멈 춥니 다.

클라이언트 연결을 통해 데이터베이스를 복원하라는 지시를 할 때 클라이언트가 전체 시간을 연결하지 않으면 서버가 복원을 완료하지 않는 것이 이상합니다.

이것은 효과가있었습니다 :

http://social.msdn.microsoft.com/forums/en/sqldatabaseengine/thread/8dd1b91d-3e14-4486-abe6-e3a550bfe457

데이터베이스가 복원 상태를 보여 주었고 쿼리를 실행할 수 없었고 소프트웨어와 연결할 수없는 상황이있었습니다.

이 상황에서 벗어나기 위해 한 일은 다음과 같습니다.

  1. Windows 서비스에서 모든 SQL 관련 서비스를 중지하십시오.

  2. LDF 및 MDF 파일이 SQL 디렉토리에 상주하는 데이터 폴더를 열었습니다. 일반적으로 "C : Program Files *********** MSSQL DATA

  3. 그런 다음 데이터베이스의 LDF 및 MDF 파일을 모두 복사했습니다 : [db name] .mdf 및 [db name] _log.ldf

이 두 파일을 다른 폴더에 복사했습니다.

  1. 그런 다음 Windows Services에서 모든 SQL 관련 서비스 (1 단계)를 다시 시작했습니다.

  2. 정상적인 로그인으로 MS SQL Management Studio를 시작했습니다.

  3. 범인 데이터베이스를 마우스 오른쪽 버튼으로 클릭하고 삭제를 누르십시오 (데이터베이스를 전혀 삭제하려면).

  4. 이 데이터베이스와 관련된 모든 LDF 및 MDF 파일은 데이터 폴더에서 나왔습니다 (2 단계에서 언급).

  5. 동일한 이름 (6 단계에서 삭제 한 이름의 동일한 이름 - 범인 데이터베이스)을 가진 새 데이터베이스를 만들었습니다.

  6. 그런 다음 [데이터베이스 이름] -> 마우스 오른쪽 버튼을 클릭하십시오 -> 작업 -> 오프라인으로 이동합니다.

  7. 그런 다음 두 파일 (3 단계에서)을 데이터 폴더 (2 단계)로 복사했습니다.

  8. 데이터베이스 이름] -> 마우스 오른쪽 버튼을 클릭하십시오 -> 작업 -> 온라인으로 가져옵니다.

나는 가졌다. 내 데이터베이스 이름에서 쿼리가 작동하지 않았기 때문에 (잘못된 구문을 근처에 말하고 있습니다. ') 그런 다음 이름에 대한 브래킷이 필요하다는 것을 깨달았습니다.

RESTORE DATABASE [My.DB.Name] WITH RECOVERY

제 경우에는 충분했습니다 데이터베이스를 삭제하십시오 상태에 매달려있었습니다 "복원 ..." SQL 명령으로

 drop database <dbname> 

쿼리 창에서.

그런 다음 마우스 오른쪽 버튼을 클릭했습니다 데이터베이스 그리고 선택되었습니다 새로 고치다 관리 스튜디오에서 항목을 제거했습니다. 그 후 나는 정상적으로 작동하는 새로운 복원을했다 (오프라인으로 가져 오는 것은 작동하지 않았고, SQL 서비스의 재시작은 작동하지 않았으며 서버 재부팅도 작동하지 않았다).

이벤트 로그에서 TCP 오류를 받았을 때이 문제가 발생했습니다.

SQL로 DB를 떨어 뜨리거나 관리자 "삭제"에서 마우스 오른쪽 버튼을 클릭하고 다시 복원하십시오.

실제로 기본적 으로이 작업을 시작했습니다. DB 드롭을 스크립트하고 재현 한 다음 복원하십시오.

기본적으로 모든 RESTORE DATABASE 함께 제공됩니다 RECOVERY 설정. 'NoreCovery'옵션은 기본적으로 SQL 서버에 데이터베이스가 더 많은 복원 파일을 기다리고 있음을 알려줍니다 ( 차이 파일 및 통나무 파일 및 가능한 경우 테일 로그 백업 파일이 포함될 수 있습니다). '복구'옵션은 모든 트랜잭션을 완료하고 데이터베이스가 트랜잭션을 수행 할 수 있도록합니다.

그래서:

  1. 데이터베이스가 설정된 경우 단순한 복구 모델, 만 수행 할 수 있습니다 가득한 함께 복원하십시오 NORECOVERY 옵션, 당신이있을 때 차이 지원. 아니 통나무 백업이 허용됩니다 단순한 복구 모델 데이터베이스.
  2. 그렇지 않으면 데이터베이스가 설정된 경우 가득한 또는 벌크 로그 복구 모델, 당신은 a를 수행 할 수 있습니다 가득한 복원 후 NORECOVERY옵션, 다음을 수행합니다 차이 그 뒤에 NORECOVERY, 그리고 마침내 공연하십시오 통나무 함께 복원하십시오 RECOVERY 옵션.

기억하다, 마지막 복원 쿼리에는 있어야합니다 RECOVERY 옵션. 그것은 명백한 방법 일 수도 있고 그렇지 않을 수 있습니다. T-SQL의 열에서 상황 :

1.

 USE [master]
    GO
    RESTORE DATABASE Database_name 
    FROM DISK = N'\\path_of_backup_file.bak WITH FILE = 1, [REPLACE],NOUNLOAD, 
    RECOVERY -- This option could be omitted.
    GO

교체 옵션을 사용하면 데이터 손실로 이어질 수 있으므로주의해서 사용해야합니다.

또는 전체 및 Diff 백업을 수행하면이를 사용할 수 있습니다.

   USE [master]
    GO
    RESTORE DATABASE Database_name
      FROM DISK = N'\\path_of_backup_file.bak' WITH FILE = 1, 
       NOUNLOAD,NORECOVERY
    GO
    RESTORE DATABASE Database_name
      FROM DISK =N'\\path_of_**diff**backup_file.bak' WITH FILE = 1, 
     NOUNLOAD, RECOVERY
    GO

 2. USE [master]
    GO
   -- Perform a Tail-Log backup, if possible. 
   BACKUP LOG Database_name
   GO
   -- Restoring a FULL backup
   RESTORE DATABASE Database_name
    FROM DISK = N'\\path_of_backup_file.bak' WITH FILE = 1, 
     NOUNLOAD,NORECOVERY
  GO 
  -- Restore the last DIFF backup
  RESTORE DATABASE Database_name
    FROM DISK = N'\\path_of_DIFF_backup_file.bak' WITH FILE = 1,
     NORECOVERY,NOUNLOAD
  GO
  -- Restore a Log backup
  RESTORE LOG Database_name
    FROM DISK = N'path_of_LOG_backup_file.trn' WITH FILE = 2,
    RECOVERY, NOUNLOAD
  GO

물론 옵션으로 복원을 수행 할 수 있습니다. 통계 = 10 이는 SQL 서버가 완료된 10%마다보고하도록 지시합니다.

원하는 경우 프로세스를 관찰하거나 실시간 기반 쿼리로 복원 할 수 있습니다. 다음과 같이:

USE[master]
GO
SELECT session_id AS SPID, command, a.text AS Query, start_time, percent_complete, dateadd(second,estimated_completion_time/1000, getdate()) as estimated_completion_time 
    FROM sys.dm_exec_requests r CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) a 
        WHERE r.command in ('BACKUP DATABASE','RESTORE DATABASE')
GO

이 도움을 바랍니다.

스냅 샷이 활성화 된 경우 고정 데이터베이스를 삭제하는 데 문제가있을 수 있습니다. 나에게 이것은 효과가 있었다 :

  1. 먼저 나는 따라 갔다 Tipu Delacablu 단계 (몇 개의 게시물 읽기)
  2. run command : drop database [database], 스냅 샷 데이터베이스의 이름을 알려주는 오류가 제공됩니다.
  3. run command : drop database [snapshot database]를 다음 2 단계에서 명령을 다시 실행하십시오.

검증 만 실행 해 보셨습니까? 사운드 백업인지 확인하기 위해.

http://msdn.microsoft.com/en-us/library/ms188902.aspx

  1. 먼저 SQL 에이전트 서비스를 확인하고 실행하십시오.
  2. 다음 t-sql 사용 :

    master.sys.sysaltfiles에서 filename을 선택합니다.

  3. T-SQL 사용 지속적으로 사용 :

    디스크에서 데이터베이스 복원 = 'DB_PATH'가 다시 시작되면 교체;

이 도움을 바랍니다!

복구 기반 옵션이 모두 작동하지 않았습니다.

관리 스튜디오에서 완전한 복원을하는 것이 었습니다.

USE [master]
RESTORE DATABASE Sales_SSD
FROM  DISK = N'D:\databaseBackups02\Daily_Sales_20150309_0941.bak' 
WITH  FILE = 1,  
MOVE N'Sales_Data' TO N'C:\Data\SSD\Sales.mdf',  
MOVE N'Sales_Log' TO N'C:\Data\SSD\Sales_1.ldf',  
NOUNLOAD,  REPLACE,  STATS = 5

나는 같은 문제가 있었지만 ... 내 데이터베이스가 왜 내 드라이브가 가득 차 있지 않기 때문에이 문제를 경험했는지 모르겠지만 ... 그것은 부패한 것과 같은 것입니다. 나는 위의 모든 것을 시도하지 않았다. 특히 서비스를 중단하고 MDF 및 LDF 파일을 삭제하는 제안이 효과가 있다고 생각했지만 여전히 복원에서 얼어 붙었다.

언급 된대로 파일을 삭제 하여이 문제를 해결했지만 DB를 다시 복원하려고 시도하는 대신 Fresh .MDF 및 .LDF 파일을 복사하여 프론트 엔드 첨부 파일 마법사를 사용하여 첨부했습니다. 구호, 그것은 효과가 있었다 !!

가상 머신을 사용하는 데 새 파일을 복사하는 데 영원히 복사하는 데 시간이 걸렸습니다. 클립 보드를 사용하는 복사 및 붙여 넣기는 한 시간과 같이 걸렸으므로 마지막 시도로만 권장합니다.

나는 그것을 얻었다 mydbname (복원 ...) SQL Express 라이센스 제한으로 인해 사례.

로그 파일에서 나는 이것을 발견했다 :

데이터베이스 또는 데이터베이스 변경을 만듭니다 실패했기 때문입니다 결과 누적 데이터베이스 크기가 있습니다 라이센스 제한이 10240MB를 초과합니다데이터베이스 별.

따라서 더 큰 데이터베이스를 복원하려는 경우 SQL Express 서버를 개발자 에디션으로 전환해야합니다. 예를 들어.

나를 위해 고정 된 것은 무엇이었다

  1. 인스턴스 중지
  2. 데이터 폴더에서 .mdf 및 .ldf 파일의 백업 생성
  3. 인스턴스를 다시 시작하십시오
  4. 데이터베이스 고정 복원을 삭제합니다
  5. .mdf 및.ldf 파일을 데이터 폴더에 다시 넣습니다.
  6. 인스턴스를 .mdf 및 .ldf 파일에 첨부하십시오
RESTORE DATABASE {DatabaseName}
   FROM DISK = '{databasename}.bak'
   WITH REPLACE, RECOVERY
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top