public void DbRestore()
{
SQLDMO.Restore oRestore = new SQLDMO.RestoreClass();
SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
try
{
oSQLServer.LoginSecure = false;
oSQLServer.Connect("localhost\\sqlexpress", "sa", "sa");
SQLDMO.QueryResults qr = oSQLServer.EnumProcesses(-1);//oSQLServer.ExecuteWithResults("select spid from master..sysprocesses where dbid=db_id('mm_gis_intmap')", 0);//查询该数据库正在连接的进程
//if (qr.Rows > 0)
//{
// for (int i = 1; i < qr.Rows; i++)
// {
// oSQLServer.ExecuteImmediate("kill " + qr.GetColumnLong(i, 1).ToString(), SQLDMO.SQLDMO_EXEC_TYPE.SQLDMOExec_Default, 0);//关才连接
// }
//}
int iColPIDNum = -1;
int iColDbName = -1;
for (int i = 1; i <= qr.Columns; i++)
{
string strName = qr.get_ColumnName(i);
if (strName.ToUpper().Trim() == "SPID")
{
iColPIDNum = i;
}
else if (strName.ToUpper().Trim() == "DBNAME")
{
iColDbName = i;
}
if (iColPIDNum != -1 && iColDbName != -1)
break;
}
for (int i = 1; i <= qr.Rows; i++)
{
int IPID = qr.GetColumnLong(i, iColPIDNum);
string strDbName = qr.GetColumnString(i, iColDbName);
if (strDbName.ToUpper().Trim() == "mm_gis_intmap".ToUpper())
{
oSQLServer.KillProcess(IPID);
}
} oRestore.Action = SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;
oRestore.Database = "mm_gis_intmap";
oRestore.Files = @"C:\mm_gis_intmap\mmgt_a.bak";
oRestore.FileNumber = 1;
oRestore.ReplaceDatabase = true;
oRestore.SQLRestore(oSQLServer);
}
catch
{
throw;
}
finally
{
oSQLServer.DisConnect();
}
}
上面是还原的代码,如果oRestor.Files赋值的是完全备份的文件,即还原可以成功,但如果是差异备份的文件,即出现以下异常:[Microsoft][ODBC SQL Server Driver][SQL Server]无法还原日志备份或差异备份,因为没有文件可用于前滚。
[Microsoft][ODBC SQL Server Driver][SQL Server]RESTORE DATABASE 正在异常终止。小弟对数据备份不怎么熟悉,请问如果我想还原差异备份,应该怎么做
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货