什么是msbuild任务的快速示例/演示删除然后恢复数据库,也可能运行任何.sql文件对恢复的数据库?Msbuild任务还原SQL Server数据库
2
A
回答
3
使用ExecTask并调用sqlcmd.exe或cmd脚本来完成对数据库的任何操作。
2
我们使用ExecTask和powershell脚本。相关PowerShell代码是在这里:
$Server = new-object ("Microsoft.SqlServer.Management.Smo.Server") $ServerName
$Database = new-object ("Microsoft.SqlServer.Management.Smo.Database") ($Server, $DatabaseName)
function RestoreDb([string] $BackupFile = $(throw "Backup file required."))
{
write-host "Taking db offline"
$Database.SetOffline()
$restore = new-object ('Microsoft.SqlServer.Management.Smo.Restore')
$fil=new-object "Microsoft.SqlServer.Management.Smo.BackupDeviceItem"
$fil.DeviceType='File'
$fil.Name= $BackupFile
$restore.Action="Database"
$restore.Devices.Add($fil)
$restore.Database=$DatabaseName
$restore.ReplaceDatabase = $true
$restore.Restart = $true
write-host "Restoring database $DatabaseName on $ServerName from file $BackupFile"
$restore.SqlRestore($Server)
write-host "Taking db online"
$Database.SetOnline()
}
及相关的MSBuild
<Exec WorkingDirectory="$(BuildRoot)" Command="powershell -command .\run_migration.ps1"/>
2
下面是一个MSBuild任务的我写了这样做的轮廓:
public class RestoreDb : Task
{
#region RequiredParameters
[Required]
public string ServerName
{
get
{
return m_ServerName;
}
set
...
}
[Required]
public string DbName
...
public string BackupFileName
...
#endregion
public override bool Execute()
{
try
{
SqlConnectionStringBuilder connectionStringBuilder = new SqlConnectionStringBuilder();
connectionStringBuilder.IntegratedSecurity = true;
connectionStringBuilder.DataSource = ServerName;
SqlConnection connection = new SqlConnection(connectionStringBuilder.ToString());
connection.Open();
Server server = new Server(new ServerConnection(connection));
if (server.Databases[DbName] != null)
{
Log.LogMessage("Dropping existing " + DbName + " on " + ServerName);
server.Databases[DbName].Drop();
}
else
{
Log.LogMessage(DbName + " on " + ServerName + " doesn't exist.");
}
Log.LogMessage(MessageImportance.High, "Restoring " + DbName + " on " + ServerName);
Database newDb = new Database(server, DbName);
Restore rs = new Restore();
rs.NoRecovery = false;
FileInfo fi = new FileInfo(server.Settings.BackupDirectory + "\\" + BackupFileName);
BackupDeviceItem bdi = new BackupDeviceItem(fi.FullName, DeviceType.File);
rs.Devices.Add(bdi);
rs.Database = DbName;
rs.Action = RestoreActionType.Database;
rs.SqlRestore(server);
Log.LogMessage(MessageImportance.High, "Restoring done.");
}
catch(Exception exc)
{
Log.LogErrorFromException(exc);
}
return !Log.HasLoggedErrors;
}
private string m_DbName;
...
}
}
用作:
<UsingTask AssemblyFile="bin\Release\MyTask.dll" TaskName="RestoreDb" />
<RestoreDb ServerName="localhost\sql2005" DbName="myDb" BackupFileName="myDb.bak"/>
任何和所有的COM欢迎!
月
2
我使用的MSBuild扩展包MSBuild extension pack修改配置文件,创建应用程序池,甚至是发送电子邮件。
相关问题
- 1. sql server还原数据库
- 2. 还原SQL Server数据库的问题
- 3. 在SQL Server 2008上还原数据库
- 4. 使用SQL Server 2005还原数据库
- 5. 将SQL Server 2008数据库还原到SQL Server 2000
- 6. 将数据库从SQL Server 2008还原到SQL Server 2005
- 7. 还原Sql Server 2005数据库备份到Sql Server 2000
- 8. 无法将SQL Server数据库还原到其他服务器
- 9. 从另一个数据库直接还原SQL Server数据库
- 10. SQL Server 2005:查询数据库上次还原时的T-SQL?
- 11. 只用SQL Server 2008还原数据
- 12. 我可以还原还原吗? SQL Server
- 13. 如何将完整数据库从SQL Server 2012还原到SQL Server 2008 R2?
- 14. 将数据库还原到SQL Server 2008时剩余的SQL Server 2000对象
- 15. 使用C#还原SQL Server 2005数据库。回滚问题
- 16. 在还原SQL Server数据库之前比较模式
- 17. 还原SQL Server数据库 - 主密钥未打开
- 18. 在SQL Server上还原网络数据库而不复制它
- 19. 无法还原SQL Server 2008 R2数据库
- 20. 如何备份和还原到SQL Server数据库
- 21. SQL Server 2008 - 用户无法访问还原的数据库
- 22. SQL Server Management Studio还原数据库一次只恢复一个数据库
- 23. 备份和还原SQL数据库
- 24. 按计划还原Azure SQL数据库
- 25. 还原数据库“服务器'xxx'的还原失败”“
- 26. 将生产数据库还原到多个测试数据库SQL服务器
- 27. 数据流任务不从Oracle数据库更新SQL Server表
- 28. 在Azure SQL数据仓库上还原数据库
- 29. 备份和还原SQL Server数据以更改数据库结构
- 30. 将数据库还原为
Task对象驻留在什么库? – 2012-07-13 21:57:18