SQL:
对于服务器数据的备份是比较麻烦的事情,如果每天或者经常要手工去备份自然是很痛苦的事情。这里我介绍一种通过sql server的作业调度来建立自动备份的方法:

  1、进入企业管理器中->管理->sql server代理->作业;

  2、新建作业,作业名称随便取,例如:data备份,所有者选择sa,当然你也可以选择其他用户,前提是该用户有执行作业的权限;

  3、点击步骤标签,进入步骤面板。新建步骤,步骤名可以随便填写,如步骤1,类型和数据库默认,不需要修改。命令中写入以下语句:

BACKUP DATABASE [数据库名] TO  DISK = N'F:\数据库备份' WITH  NOINIT ,  NOUNLOAD ,  NAME = N'数据库 备份',  NOSKIP ,  STATS = 10,  NOFORMAT

  注意:需要修改的地方,数据库名,DISK=(这里需要填写路径和你的数据库备份的名称)后面的Name=可以随便填写。

  4、点击调度标签,进入调度面板,新建调度,名称随便填写,选择反复出现,点更改可以选择你想要执行任务的随意调度。如每天,每2天,每星期,每月等。根据需要自己设置;

  5、确定后,不要忘记一件事情,在你刚才建立的工作上点右键,启动工作,如果你的工作没有问题,将会提示执行成功,并有相对应的备份文件在你的磁盘上出现;

  6、还有一个重要的问题就是你的sql server agent服务器已经启动。

  如果我们需要根据每天的日期来生成一个新的备份,以便我们区别备份文件。这时,我们需要修改一下刚才的sql语句。参考实例:

declare @filename nvarchar(100) set @filename='F:\数据库备份\RBdata'+convert(char(10),getdate(),112) print @filename BACKUP DATABASE [addin] TO DISK = @filename WITH NOINIT , NOUNLOAD , NAME = N' 备份', NOSKIP , STATS = 10, NOFORMAT

使用c#代码

方法一(不使用SQLDMO): 

/// 
///备份方法 
/// 

SqlConnection conn = new SqlConnection("Server=.;Database=master;User ID=sa;Password=sa;"); 

SqlCommand cmdBK 
= new SqlCommand(); 
cmdBK.CommandType 
= CommandType.Text; 
cmdBK.Connection 
= conn; 
cmdBK.CommandText 
= @"backup database test to disk='C:\ba' with init"

try 

conn.Open(); 
cmdBK.ExecuteNonQuery(); 
MessageBox.Show(
"Backup successed."); 
}
 
catch(Exception ex) 

MessageBox.Show(ex.Message); 
}
 
finally 

conn.Close(); 
conn.Dispose(); 
}
 


/// 
///还原方法 
/// 

SqlConnection conn = new SqlConnection("Server=.;Database=master;User ID=sa;Password=sa;Trusted_Connection=False"); 
conn.Open(); 

//KILL DataBase Process 
SqlCommand cmd = new SqlCommand("SELECT spid FROM sysprocesses ,sysdatabases WHERE sysprocesses.dbid=sysdatabases.dbid AND sysdatabases.Name='test'", conn); 
SqlDataReader dr; 
dr 
= cmd.ExecuteReader(); 
ArrayList list 
= new ArrayList(); 
while(dr.Read()) 

list.Add(dr.GetInt16(
0)); 
}
 
dr.Close(); 
for(int i = 0; i < list.Count; i++

cmd 
= new SqlCommand(string.Format("KILL {0}", list[i]), conn); 
cmd.ExecuteNonQuery(); 
}
 

SqlCommand cmdRT 
= new SqlCommand(); 
cmdRT.CommandType 
= CommandType.Text; 
cmdRT.Connection 
= conn; 
cmdRT.CommandText 
= @"restore database test from disk='C:\ba'"

try 

cmdRT.ExecuteNonQuery(); 
MessageBox.Show(
"Restore successed."); 
}
 
catch(Exception ex) 

MessageBox.Show(ex.Message); 
}
 
finally 

conn.Close(); 
}
 

方法二(使用SQLDMO): 

/// 
///备份方法 
/// 

SQLDMO.Backup backup = new SQLDMO.BackupClass(); 
SQLDMO.SQLServer server 
= new SQLDMO.SQLServerClass(); 
//显示进度条 
SQLDMO.BackupSink_PercentCompleteEventHandler progress = new SQLDMO.BackupSink_PercentCompleteEventHandler(Step); 
backup.PercentComplete 
+= progress; 

try 

server.LoginSecure 
= false
server.Connect(
".""sa""sa"); 
backup.Action 
= SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database; 
backup.Database 
= "test"
backup.Files 
= @"D:\test\myProg\backupTest"
backup.BackupSetName 
= "test"
backup.BackupSetDescription 
= "Backup the database of test"
backup.Initialize 
= true
backup.SQLBackup(server); 
MessageBox.Show(
"Backup successed."); 
}
 
catch(Exception ex) 

MessageBox.Show(ex.Message); 
}
 
finally 

server.DisConnect(); 
}
 
this.pbDB.Value = 0



/// 
///还原方法 
/// 

SQLDMO.Restore restore = new SQLDMO.RestoreClass(); 
SQLDMO.SQLServer server 
= new SQLDMO.SQLServerClass(); 
//显示进度条 
SQLDMO.RestoreSink_PercentCompleteEventHandler progress = new SQLDMO.RestoreSink_PercentCompleteEventHandler(Step); 
restore.PercentComplete 
+= progress; 

//KILL DataBase Process 
SqlConnection conn = new SqlConnection("Server=.;Database=master;User ID=sa;Password=sa;Trusted_Connection=False"); 
conn.Open(); 
SqlCommand cmd 
= new SqlCommand("SELECT spid FROM sysprocesses ,sysdatabases WHERE sysprocesses.dbid=sysdatabases.dbid AND sysdatabases.Name='test'", conn); 
SqlDataReader dr; 
dr 
= cmd.ExecuteReader(); 
ArrayList list 
= new ArrayList(); 
while(dr.Read()) 

list.Add(dr.GetInt16(
0)); 
}
 
dr.Close(); 
for(int i = 0; i < list.Count; i++

cmd 
= new SqlCommand(string.Format("KILL {0}", list[i]), conn); 
cmd.ExecuteNonQuery(); 
}
 
conn.Close(); 

try 

server.LoginSecure 
= false
server.Connect(
".""sa""sa"); 
restore.Action 
= SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database; 
restore.Database 
= "test"
restore.Files 
= @"D:\test\myProg\backupTest"
restore.FileNumber 
= 1
restore.ReplaceDatabase 
= true
restore.SQLRestore(server); 
MessageBox.Show(
"Restore successed."); 
}
 
catch(Exception ex) 

MessageBox.Show(ex.Message); 
}
 
finally 

server.DisConnect(); 
}
 
this.pbDB.Value = 0;
posted on 2006-11-14 13:39  过江  阅读(663)  评论(0)    收藏  举报