Задача Msbuild для восстановления базы данных SQL Server - PullRequest
2 голосов
/ 07 января 2009

Что такое быстрый пример / демонстрация задачи msbuild для удаления, восстановления, а также, возможно, запуска любых файлов .sql для восстановленной базы данных?

Ответы [ 4 ]

3 голосов
/ 07 января 2009

Используйте ExecTask и вызовите sqlcmd.exe или сценарий cmd, чтобы сделать то, что вы хотите с вашей базой данных.

2 голосов
/ 05 мая 2009

Я использую пакет расширений MSBuild Пакет расширений MSBuild для изменения файлов конфигурации, создания пулов приложений и даже отправки электронных писем.

2 голосов
/ 26 января 2009

Вот схема задачи 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

2 голосов
/ 07 января 2009

Мы используем 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"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...