设置单用户模式以还原备份 [英] Setting single user mode to restore backup

查看:150
本文介绍了设置单用户模式以还原备份的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我具有以下功能:

public void RestoreDatabase(String databaseName, String backUpFile, 
                            String serverName, String userName, String password)
{
    SqlConnection.ClearAllPools();
    ServerConnection connection = new ServerConnection
                                          (serverName, userName, password);
    Server sqlServer = new Server(connection);
    Restore rstDatabase = new Restore();
    rstDatabase.Action = RestoreActionType.Database;
    rstDatabase.Database = databaseName;
    BackupDeviceItem bkpDevice = new BackupDeviceItem
                                         (backUpFile, DeviceType.File);
    rstDatabase.Devices.Add(bkpDevice);
    rstDatabase.ReplaceDatabase = true;
    rstDatabase.SqlRestore(sqlServer);
}

在还原备份之前,我试图先将数据库设置为单用户模式.我尝试了这段代码:

I was trying to set the DB to single user mode first, before restoring the backup. I tried this code:

        private string singleUserCmd = "alter database db-name set SINGLE_USER";
        private string multiUserCmd = "alter database db-name  set MULTI_USER";

        private void SetSingleUser(bool singleUser, 
                                   SqlConnectionStringBuilder csb)
        {
            string v;
            if (singleUser)
            {
                v = singleUserCmd.Replace("db-name", csb.InitialCatalog);
            }
            else
            {
                v = multiUserCmd.Replace("db-name", csb.InitialCatalog);
            }
            SqlCommand cmd = new SqlCommand(v, new SqlConnection
                                                     (csb.ToString()));
            try
            {
                cmd.Connection.Open();
                cmd.ExecuteNonQuery();
            }
            finally
            {
                cmd.Connection.Close();
            }
        }

问题似乎是单用户模式用于该连接,从而阻止其他任何人执行任何操作.我需要它是用于还原备份的连接.

The problem seems to be that single user mode is for that connection, preventing anyone else from doing anything. I need it to be for the connection that restores the backup.

推荐答案

还原将需要在将数据库置于单用户模式的连接上进行,所以为什么不让您的SetSingleUser函数返回在其上执行的打开的SqlConnection,并然后使用您的还原代码并使用相同的打开的连接.

The restore would need to occur on the connection which placed the DB into single user mode, so why not make your SetSingleUser function return the opened SqlConnection it executed on and then have your Restore code take in and use the same opened connection.

private string singleUserCmd = "alter database db-name set SINGLE_USER";
private string multiUserCmd = "alter database db-name  set MULTI_USER";

private SqlConnection SetSingleUser(bool singleUser, SqlConnectionStringBuilder csb)
{
    string v;
    if (singleUser)
    {
        v = singleUserCmd.Replace("db-name", csb.InitialCatalog);
    }
    else
    {
        v = multiUserCmd.Replace("db-name", csb.InitialCatalog);
    }
    SqlConnection connection = new SqlConnection(csb.ToString());
    SqlCommand cmd = new SqlCommand(v, connection);

        cmd.Connection.Open();
        cmd.ExecuteNonQuery();

    return connection;
}

这篇关于设置单用户模式以还原备份的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆