asp.Netバックアップリストアデータベース
4172 ワード
ネットで探してみると、SQLDMOで実現しているので、SQLDMOリファレンスを追加すればいいのですが、次のクラスの方法で実現できます.
私は原作者のクラスを拡張して、自動的にwebを識別することができます.configのデータベース接続文字列は、変数設定で復元された情報を復元できます.
注意が必要な場合はリストアし、リストア時に最も問題が発生し、他のユーザーがデータベースを使用している場合はリストアできません.解決策はMASTERデータベースにストレージ・プロシージャを追加することです.
リストアする前にこのストレージ・プロシージャを実行するには、dbname、つまりデータベースの名前を渡す必要があります.下はクラスの元のコードです:(web.configのデータベース接続文字列はconstrです)
ソースドキュメント
私は原作者のクラスを拡張して、自動的にwebを識別することができます.configのデータベース接続文字列は、変数設定で復元された情報を復元できます.
注意が必要な場合はリストアし、リストア時に最も問題が発生し、他のユーザーがデータベースを使用している場合はリストアできません.解決策はMASTERデータベースにストレージ・プロシージャを追加することです.
create proc killspid (@dbnamevarchar(20))
as
begin
declare @sql nvarchar(500)
declare @spid int
set @sql='declare getspidcursor for
select spid from sysprocesseswhere dbid=db_id('''+@dbname+''')'
exec (@sql)
open getspid
fetch next from getspid into@spid
while@@fetch_status<>-1
begin
exec('kill '+@spid)
fetch next from getspid into@spid
end
close getspid
deallocate getspid
end
GO
リストアする前にこのストレージ・プロシージャを実行するには、dbname、つまりデータベースの名前を渡す必要があります.下はクラスの元のコードです:(web.configのデータベース接続文字列はconstrです)
using System;
using System.Configuration;
using System.Data.SqlClient;
using System.Data;
namespace web.base_class
{
/// <summary>
/// DbOper , SQLDMO MicrosoftSQL Server
/// </summary>
public class DbOper
{
private string server;
private string uid;
private string pwd;
private string database;
private string conn;
/// <summary>
/// DbOper
/// </summary>
public DbOper()
{
conn=System.Configuration.ConfigurationSettings.AppSettings["constr"].ToString();
server=cut(conn,"server=",";");
uid=cut(conn,"uid=",";");
pwd=cut(conn,"pwd=",";");
database=cut(conn,"database=",";");
}
public string cut(stringstr,string bg,string ed)
{
string sub;
sub=str.Substring(str.IndexOf(bg)+bg.Length);
sub=sub.Substring(0,sub.IndexOf(";"));
return sub;
}
/// <summary>
///
/// </summary>
public bool DbBackup(stringurl)
{
SQLDMO.Backup oBackup = newSQLDMO.BackupClass();
SQLDMO.SQLServer oSQLServer =new SQLDMO.SQLServerClass();
try
{
oSQLServer.LoginSecure =false;
oSQLServer.Connect(server,uid,pwd);
oBackup.Action =SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database;
oBackup.Database = database;
oBackup.Files =url;//"d:\Northwind.bak";
oBackup.BackupSetName =database;
oBackup.BackupSetDescription= " ";
oBackup.Initialize = true;
oBackup.SQLBackup(oSQLServer);
return true;
}
catch
{
return false;
throw;
}
finally
{
oSQLServer.DisConnect();
}
}
/// <summary>
///
/// </summary>
public stringDbRestore(string url)
{
if(exepro()!=true)//
{
return " ";
}
else
{
SQLDMO.Restore orestore = newSQLDMO.RestoreClass();
SQLDMO.SQLServer oSQLServer =new SQLDMO.SQLServerClass();
try
{
oSQLServer.LoginSecure =false;
oSQLServer.Connect(server,uid, pwd);
orestore.Action =SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;
orestore.Database = database;
orestore.Files =url;//@"d:\Northwind.bak";
orestore.FileNumber = 1;
orestore.ReplaceDatabase =true;
orestore.SQLRestore(oSQLServer);
return "ok";
}
catch(Exception e)
{
return " ";
throw;
}
finally
{
oSQLServer.DisConnect();
}
}
}
private bool exepro()
{
SqlConnection conn1 = newSqlConnection("server="+server+";uid="+uid+";pwd="+pwd+";database=master");
SqlCommand cmd = newSqlCommand("killspid",conn1);
cmd.CommandType =CommandType.StoredProcedure;
cmd.Parameters.Add("@dbname","port");
try
{
conn1.Open();
cmd.ExecuteNonQuery();
return true;
}
catch(Exception ex)
{
return false;
}
finally
{
conn1.Close();
}
}
}
}
ソースドキュメント