一,備份數據庫
/// 備份數據庫
/// </summary >
/// <param name="databasename" >數據庫名稱</param >
/// <param name="filepath" >備份地址</param >
/// <param name="istype" >1 完整數據庫 2僅備份日誌</param >
public static void BackUp(string databasename, string filepath, string backupname, byte istype, bool isFormat)
{
StringBuilder sql = new StringBuilder();
switch (istype)
{
case 1:
sql.Append("backup database " + databasename + " to disk=N'" + filepath + "' with STATS = 10");
break;
case 2:
sql.Append("backup log " + databasename + " to disk=N'" + filepath + "' with STATS = 10");
break;
case 3:
sql.Append("backup database " + databasename + " to disk=N'" + filepath + "' with differential, STATS = 10");
break;
default: break;
}
sql.Append(", name=N'" + backupname + "'");
if (isFormat)
sql.Append(",format");
using (SqlConnection conn = SqlConn())
{
conn.Open();
using (SqlCommand cmd = new SqlCommand())
{
cmd.Connection = conn;
cmd.CommandText = sql.ToString();
cmd.CommandType = CommandType.Text;
cmd.ExecuteNonQuery();
}
}
}
上面代碼中的C#代碼就不用解釋了,都是一些對sql server最基礎的操作,解釋一下sql:
backup database '要備份的數據庫名稱'--備份指定的數據庫
to disk--備份文件存放的位置
stats--備份完成指定的百分比後就返回一條消息,比如這裏stats=10就是當備份完成10%就返回一條消息,這個也是默認值,如果我們不設置stats,默認就是10.
differential--僅備份與上次完整備份有差異的部分,也就是備份差異數據庫,默認情況下是備份完整數據庫
format--是否格式化備份介質,如果設置該項,則備份文件會格式化選中的備份文件,否則會在選中的備份文件上累加。
backup log '要備份的數據庫名稱'--備份指定數據庫日誌文件
二、還原數據庫
/// 還原數據庫
/// </summary >
/// <param name="databasename" >數據庫名稱</param >
/// <param name="filepath" ></param >
public static void ReStore(string databasename, string filepath)
{
try
{
string sql = @"use master
declare @dbname varchar(50)
set @dbname='" + databasename + "'";
sql = string.Concat(sql, @"declare @sql varchar(50)
declare cs_result cursor local for select 'kill '+cast(spid as varchar(50)) from sys.sysprocesses
where db_name(dbid)=@dbname
open cs_result
fetch next from cs_result into @sql
while @@fetch_status=0
begin
execute(@sql)
fetch next from cs_result into @sql
end
close cs_result
deallocate cs_result
");
sql = string.Concat(sql, @" restore database " + databasename + " from disk='" + filepath + "' with replace");
using (SqlConnection conn = SqlConn())
{
conn.Open();
using (SqlCommand cmd = new SqlCommand())
{
cmd.Connection = conn;
cmd.CommandText = sql;
cmd.CommandType = CommandType.Text;
cmd.ExecuteNonQuery();
}
}
}
catch (SqlException ex)
{
throw ex;
}
}
解釋一下上面的sql:
declare @sql varchar(50)
declare cs_result cursor local for select 'kill '+cast(spid as varchar(50)) from sys.sysprocesses where db_name(dbid)=@dbname
open cs_result
fetch next from cs_result into @sql
while @@fetch_status=0
begin
execute(@sql)
fetch next from cs_result into @sql
end
close cs_result
deallocate cs_result
該段sql是中止所有正在使用要還原數據庫的進程,因爲還原數據庫要求對該數據庫擁有獨佔權限。
restore database '要還原的數據庫名稱'--還原數據庫
from disk--備份文件的地址
replace--是否覆蓋原有數據庫,這個選項與我們在SQL Server Management Studio中還原數據的"覆蓋現有數據庫"選項功能一樣。
注意:由 SQL Server 的較新版本創建的備份將無法在 SQL Server 的早期版本中還原
兩個方法就寫完了,怎麼樣,備份與還原數據庫還是挺簡單的吧。