这几天在做B/S结构的毕业设计
弄了一天的数据还原,碰到几个问题想请教一下各位:
1、数据还原的时候无法用kill杀掉自己的进程
2、考虑到上面那个问题,我在网上找到思路以及在数据库返回的建议中都指出到master下执行还原操作。那么我想请问:
首先,假如我要恢复的数据库名为:db_Test,那么我在这个db_Test下创建了一个恢复数据库的存储过程proc_dbRe,
那么我在这个存储过程中定义了一个参数,定义如下:
declare @sql varchar(8000)
set @sql='restore database '+@dbname+' from disk='''+@bkpath+@bkfile+''''+' with '+ 'replace' + ',RECOVERY'
按照正常的应该是在下面最后接下来的语句就是exec(@sql),到此处我想应该没问题,但是上面第二点提到,需要转换到
master下执行,那么我用exec('use master ...'),问题又出来了,我的@sql没法传过去(不是没法,是我不会...),我
该怎么样解决这个问题呢?
第二个问题就是:跳转到master成功,以及执行完kill后需要设置数据库当前模式为单用户模式吗?为什么?
最后一个问题就是:kill是不是不是强制杀进程的?我看帮助文档的时候,上面有写到在数据库正在提交或者***(省略内容)
的时候就会中断执行。以上几个小问题,呵呵,谢谢各位。关于分数我也不知道我有多少分,我先试着拿出50分,好像少了点,以后有分了我就追加。
=============================================
这是一个悖论。呵呵
private void BtnRestore_Click(object sender, EventArgs e)
{ //还原数据库
try
{
string connectionString = "Data Source = " + server.DBServer + ";user id = " + server.DBUser + ";password = " + server.DBPwd;
SqlConnection conn = new SqlConnection();
SqlCommand cmd;
string sql = "RESTORE FILELISTONLY FROM DISK ='" + dire
+ "' RESTORE DATABASE " + server.DBName + " FROM DISK = '" + dire + "' " +
"WITH MOVE '" + server.DBName + "_dat' TO '" + dire+ ".mdf',MOVE '" +
server.DBName + "_log' TO '" + dire + "_log.ldf '";
conn.ConnectionString = connectionString;
conn.Open();
cmd = new SqlCommand(sql, conn);
int num= cmd.ExecuteNonQuery();
if(num>0)
{
this.label3.Text = "数据库还原成功!";
}
else
{ this.label3.Text ="数据库还原失败!";
}
}
catch (Exception es)
{
this.label3.Text = "数据库还原过程中出现异常!";
this.txtDataBaseName.Text = "";
this.BakFilePath.Text = "";
this.BtnException.Visible = true;
ExceptionString = es.ToString();
}
}