繁体   English   中英

恢复SQL Server数据库的问题

[英]Problems with restoring SQL Server database

我已经工作了几个小时,试图弄清楚为什么我不能让我的C#应用​​程序来恢复SQL Server 2008数据库。 我使用以下代码:

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中的对象时没有真正的调试功能,例如异常。

  • 首先,尝试使用管理工作室选项恢复数据库,使用相同的身份验证信息和相同的.BAK。 如果它不起作用,问题不在你的代码上。
  • 如果第一个实验工作正常,并且已经创建了数据库,请确保在启动还原之前没有人连接到该数据库。 您可以在Sql Server中执行指令sp_who2以确保没有与该数据库的连接。

如果您愿意,也可以滚动自己的代码。 我在一些集成测试中使用它来将数据库恢复到干净状态。 我将数据库重置为单用户模式,因此如果有人连接到它 - 它将启动它们以便我可以恢复它。

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命令对象,并将字符串生成器的结果作为命令文本传递并执行。

这可能是一些权限问题,因此有时也不会发生恢复。 尝试首先使用您的本地数据库恢复“.bak”文件,该数据库可以使用您的用户名和密码访问。 有关如何使用C#.net访问Sql BackupRestore站点以获取有关Sql Backup的更多详细信息。 希望它会对你有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM