Sql server 用于还原SQL Server数据库的Msbuild任务
要删除然后还原数据库并可能对还原的数据库运行任何.sql文件的msbuild任务的快速示例/演示是什么?使用并调用sqlcmd.exe或cmd脚本,以对数据库执行任何操作。我们使用ExecTask和powershell脚本。相关Powershell代码如下所示:Sql server 用于还原SQL Server数据库的Msbuild任务,sql-server,msbuild,Sql Server,Msbuild,要删除然后还原数据库并可能对还原的数据库运行任何.sql文件的msbuild任务的快速示例/演示是什么?使用并调用sqlcmd.exe或cmd脚本,以对数据库执行任何操作。我们使用ExecTask和powershell脚本。相关Powershell代码如下所示: $Server = new-object ("Microsoft.SqlServer.Management.Smo.Server") $ServerName $Database = new-object ("Microsoft.SqlS
$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"/>
以下是我编写的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"/>
欢迎任何意见
Jan我使用MSBuild扩展包修改配置文件,创建应用程序池,甚至发送电子邮件 任务对象驻留在哪个库中?Microsoft.Build.Utilities.Task()-如何:谢谢!我能够让它工作,但有一些小的调整(我使用最新的cc.net,使用新的TaskBase类)。对不起,另一个问题。在配置中,我在哪里列出usingTask标记?有没有其他标签需要添加到我的配置中?实际上我不知道。我真的没说。最好是将此作为一个单独的新问题发布。