2014-05-18 1 views
-1

SQL Server Management Studio 2012를 사용하여 로컬 데이터베이스 복사본을 만들려고합니다. 솔루션의 몇 가지 변종을 발견했습니다. 그 중 하나 - 데이터베이스를 새로운 것으로 백업 및 복원 - HERE.백업 및 복원을 사용하여 데이터베이스 복사본을 만드는 방법

현재 데이터베이스 이름은 Rewards2_bak입니다. 시스템 카탈로그에있는 파일 위치의이 사본 C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup\

enter image description here

다음 단계 - I 백업을하지 않아도, 기존

GO 
use master 
RESTORE FILELISTONLY 
    FROM Rewards2_bak 

RESTORE DATABASE Rewards2_Copy 
    FROM Rewards2_bak 
    WITH RECOVERY, 
    MOVE 'Rewards2_data' TO 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\Rewards2_copy.mdf', 
    MOVE 'Rewards2_log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\Rewards2_log_copy.ldf' 
GO 

있어 오류의 복사본으로 데이터베이스를 복원하는 쿼리를 만들 장치 Rewads2_backup. 나는이 장치에서 파일을 사용할 수 있고 파일 위치를 사용할 수 있다는 것을 이해합니다. 뭔가 백업 사용 다음 질의 (모든 OK) 또한

USE Rewards2; 
GO 
BACKUP DATABASE Rewards2 
TO DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup\Rewards2_bak.bak' 
    WITH FORMAT, 
     MEDIANAME = 'SQLServerBackups', 
     NAME = 'Full Backup of Rewards2'; 
GO 

SQL 서버 2012 Task --> BackupTask --> Restore에서 도구를 사용하려고를 만들기위한 ...

누락 생각하지만, 오류가 발생했습니다 - 백업을 만들 수 없습니다. (관리자 권한으로 시작된 프로그램)

이것은 내가

enter image description here

을 복사 복원 config (설정) 그러나 나는 데이터베이스 파일 Rewards2을 덮어 쓸 수 없다는 오류를 얼마나 화면입니다. 그리고 이것은 질문입니다 - 데이터베이스 Rewards2_copy의 새 이름을 넣으면 Rewards2을 덮어 쓰려고하는 이유는 무엇입니까? 아니면 내가 잘못 알고있어?

enter image description here

슈어는, 그 THER은 몇 가지 더 가능한 데이터베이스의 복사본을 만들기위한 변형,하지만이 솔루션에 대한 문제를 찾을 정말 whant입니다. 내가 실수를하거나 내가 잊어 버렸거나 이해하지 못하는 부분.

답변

3

백업에서 데이터베이스를 복원 할 때 원본 데이터베이스와 동일한 파일 이름을 사용합니다. 복원 중에 이러한 파일 이름을 변경해야합니다.

복원 창에서 Files 탭으로 이동하십시오. 이 창에는 Restore As이라는 열이 있습니다. 열의 경로 끝에있는 파일 이름을 변경하여 표시되는 각 파일의 이름으로 복원하십시오.

1

당신이 복사하려고하는 데이터베이스의 논리적 파일 이름을 덮어 쓰려고한다고 생각합니다. 조금 추측 해 보시고 시도해보십시오. 지금 당장 스크립트 할 필요가 없다면 SSMS에서 시도하십시오 :

  1. 백업 복사 할 데이터베이스가

내가 기억

  • Rewards2_bak.bak
  • 을 사용 Rewards2_copy로 복원
  • 새 데이터베이스 (Rewards2_copy) 만들기 (Rewards2_bak.bak 괜찮습니다) 옵션 탭에서 논리 파일 이름을 변경하려면 3 번을 가리 키십시오. 그렇지 않으면 Rewards2 파일을 시도하고 덮어 씁니다.

    가이드의 많은 주위 있습니다 FILELISTONLY

    restore filelistonly from disk='enter backup file path here' 
    
    :

    통해 SQL이 사용할 수있는 논리적 파일 이름을 결정하기 위해

    그런 다음 이미보고있는 것처럼 파일 이름을보고 복원 쿼리를 작성하십시오.

  • +0

    단계적으로 수행하십시오.이 작업 후에도 이름이 다른 새 데이터베이스가 첨부됩니다. 덕분에 – gbk

    +0

    내가 잘 모르겠다. 위의 시도 했습니까? –

    0

    여기에 DB를 백업하고 다른 서버에 복원하는 VBS 스크립트가 있습니다. 각 서버에 "백업"파일 공유가 있다고 가정합니다. 스크립트는 어느 위치에서나 실행할 수 있습니다.

    sFrom = "\\server1\Backup" 
    sTo = "\\server2\Backup" 
    Set fso = CreateObject("Scripting.FileSystemObject") 
    
    CopyDb "Db1" 
    CopyDb "Db2" 
    
    MsgBox "Done!" 
    
    Sub CopyDb(sDB) 
    
        If fso.FileExists(sFrom & "\" & sDB & ".bak") Then 
        fso.DeleteFile sFrom & "\" & sDB & ".bak" 
        End If 
    
        ExecuteSql "server1", "BACKUP DATABASE " & sDB & " TO DISK = '" & sFrom & "\" & sDB & ".bak'" 
    
        fso.CopyFile sFrom & "\" & sDB & ".bak", sTo & "\" & sDB & ".bak" 
    
        ExecuteSql "server2", "ALTER DATABASE " & sDB & " SET SINGLE_USER WITH ROLLBACK IMMEDIATE" 
        ExecuteSql "server2", "RESTORE DATABASE " & sDB & " FROM DISK = N'" & sTo & "\" & sDB & ".bak'" 
        ExecuteSql "server2", "EXEC " & sDB & ".dbo.sp_change_users_login 'Update_One', 'user1', 'user1'" 
    End Sub 
    
    Sub ExecuteSql(sServer, sSql) 
        Set cn = CreateObject("ADODB.Connection") 
        cn.Open "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Data Source=" & sServer 
        cn.Execute sSql 
        cn.Close 
    End Sub