2011-08-30 5 views
0

SQL Server 2008 데이터베이스를 복원하기 위해 C# 응용 프로그램을 가져올 수없는 이유를 지금 몇 시간 동안 연구 해 왔습니다. 나는 다음과 같은 코드를 사용 : 나는 코드 아무 일도 발생하지 않습니다 실행하면SQL Server 데이터베이스 복원 문제

var conn = new SqlConnection("SERVER=Server;DATABASE=master;User ID=sa;Pwd=Password"); 
var srvConn = new ServerConnection(conn); 
var srv = new Server(srvConn); 

Restore res = new Restore(); 
res.Database = "RestoredDatabase"; 
res.Action = RestoreActionType.Database; 
res.Devices.AddDevice("Path to .bak-file", DeviceType.File); 
res.ReplaceDatabase = false; 
res.SqlRestore(srv); 

합니다. 오류나 예외가 발생하지 않습니다! 나는 해결책을 찾기 위해 웹을 둘러 보았지만 모든 예제는 정확히 동일하므로 도움은 필요 없다.

연결에 문제가 있거나 .bak 파일에 문제가있을 수 있습니까?

Microsoft.SqlServer.Management.Smo에서 개체를 사용할 때 예외와 같은 실제 디버깅 기능이 없다는 것에 놀랍니다.

+1

SQL을 사용하여 복원하려고 했습니까? Restore 클래스는 어떤 클래스입니까? 네임 스페이스? – TomTom

+1

'ReplaceDatabase = true'를 사용해보십시오 - 데이터베이스가 아직 없으면 아무렇지도 않게 해줄 것입니다 ... –

+0

체크 아웃하고 싶을 수도 있습니다 : http://www.codeproject.com/KB/database/ BackupRestoreWithSmo.aspx –

답변

0

일부 권한 문제 일 수 있습니다. 이로 인해 때때로 복원이 수행되지 않을 수도 있습니다. 먼저 사용자 이름과 비밀번호로 액세스 할 수있는 로컬 데이터베이스를 사용하여 ".bak"파일을 복원 해보십시오. C# .net을 사용하여 Sql Backup에 대한 자세한 내용은 Sql BackupRestore 사이트를 방문하십시오. 희망이 당신을 도울 것입니다.

+0

동일한 네임 스페이스/클래스를 사용하여 동일한 사용자/권한으로 .bak 파일을 만듭니다. 응용 프로그램은 데이터베이스와 동일한 시스템에서 실행되지 않지만 .bak 파일은 "DB 시스템"에 있습니다. –

+0

데이터베이스 백업을 수행 한 후에는 SQL Server Management Studio를 통한 SQL Server 연결 스튜디오가 닫혀 있는지 확인하십시오. 닫히지 않으면 복원 코드도 작동하지 않습니다. –

1
  • 먼저 동일한 인증 정보와 동일한 .BAK를 사용하여 관리 스튜디오 옵션을 사용하여 데이터베이스를 복원 해보십시오. 작동하지 않으면 문제가 코드에 없습니다.
  • 첫 번째 실험이 제대로 작동하고 데이터베이스가 이미 만들어져있는 경우 복원을 시작하기 전에 아무도 데이터베이스에 연결되어 있지 않은지 확인하십시오. SQL Server에서 sp_who2 명령을 실행하여 해당 데이터베이스에 대한 연결이 없는지 확인할 수 있습니다.
1

원한다면 직접 코드를 굴릴 수도 있습니다. 일부 통합 테스트에서 데이터베이스를 정상 상태로 복원하는 데 사용합니다. 데이터베이스를 단일 사용자 모드로 재설정하여 누군가가 연결되어있는 경우 데이터베이스를 복원하여 복원 할 수 있습니다.

StringBuilder sb = new StringBuilder(); 
sb.Append("ALTER DATABASE "); 
sb.Append(" ["); 
sb.Append(databasename); 
sb.Append("] "); 
sb.Append(" SET SINGLE_USER WITH ROLLBACK IMMEDIATE;"); 
sb.Append("RESTORE DATABASE "); 
sb.Append(" ["); 
sb.Append(databasename); 
sb.Append("] "); 
sb.Append(@" FROM DISK = N'D:\SQLBACKUPS\AUTOMATION\"); 
sb.Append(backupfilename); 
sb.Append("' WITH FILE=1, NOUNLOAD, REPLACE, STATS=10"); 
return sb.ToString(); 

그런 다음 sql 명령 개체를 만들고 문자열 작성기의 결과를 명령 텍스트로 전달하고 실행하십시오.

관련 문제