declare @strsql varchar(1000), --执行语句
@strdirname varchar(50),--建立文件夹名
@strcmd varchar(50), --执行命令名
@strsend varchar(1000), --邮件发送语句
@strdate varchar(50) --邮件发送日期
set @strsql=\'backup database pubs to disk=\'\'d:\backup\erp\\'
set @strdirname=replace(substring(convert(varchar(20),getdate(),120),1,10),\'-\',\'\')
set @strcmd=\'md d:\backup\erp\\'
set @strcmd=@strcmd+@strdirname
--取得当天日期,格式为yyyy-mm-dd
set @strdate=substring(convert(varchar(50),getdate(),120),1,10)
set @strsend=\'sys_sendmail \'\'1000@hm.com\'\',\'\'213@hm.com\'\',\'\'www\'\',\'\'备份通知\'\',\'\'\'+@strdate+\'日数据库备份成功,感谢您的使用!\'\'\'
exec xp_cmdshell @strcmd
set @strsql=@strsql+@strdirname+\'\pubs.dat\'\'with init,nounload,noskip,noformat\'
print @strsql
exec (@strsql)
backup database pubs to disk=\'d:\backup\erp\pubs.dat\' with init,nounload,noskip,noformat
--用FTP上传到ERP服务器
exec xp_cmdshell \'ftp -s:"D:\backup\erp\ftp.txt"\'
--操作成功后发送邮件
exec(@strsend)
if @@error <> 0
begin
raiserror(\'数据库备份发生错误,请检查设置\',16,1)
set @strsend=\'sys_sendmail \'\'1000@hm.com\'\',\'\'213@hm.com\'\',\'\'www\'\',\'\'备份通知\'\',\'\'\'+@strdate+\'日数据库备份失败,请检查设置!\'\'\'
exec (@strsend)
end
-----------------------------------------------------------------------------------------------------------
下面还有个使用C#来实现备份的
///<summary> ///备份数据库到本地磁盘
///</summary>
public bool BackUp(string BackUpFile)
{
try
{
//第一步:在服务器上创建临时文件夹
ExecuteSql(@"master..xp_cmdshell \'md C:\temp\'");
ExecuteSql(@"master..xp_cmdshell \'del C:\temp\*.* /q\'");
//第二步:备份数据库到服务器目录
ExecuteSql(@"backup database " + DataBaseName() + @" to disk=\'C:\temp\HSSY\'");
//第三步:共享服务器的备份目录
ExecuteSql(@"master..xp_cmdshell \'net share SQLDATABACK=C:\temp\'");
//第四步:复制服务器上的备份文件到本地
File.Copy(@"\\" + ServerIP() + @"\SQLDATABACK\HSSY", BackUpFile,true);
return true;
}
catch (System.Data.SqlClient.SqlException E)
{
throw new Exception(E.Message);
}
finally
{
//第五步:取消服务器共享目录的共享
ExecuteSql(@"master..xp_cmdshell \'net share SQLDATABACK /delete\'");
}
}
/// <summary>
/// 从本地磁盘恢复数据库
/// </summary>
public bool Restore(string RestoreFile)
{
try
{
//第零步:关闭用户进程,防止其它用户正在使用数据库,导致数据恢复失败
KillServerUser();
//第一步:在服务器上创建临时文件夹
ExecuteSql(@"master..xp_cmdshell \'md C:\temp\'");
ExecuteSql(@"master..xp_cmdshell \'del C:\temp\*.* /q\'");
//第二步:共享服务器的恢复目录
ExecuteSql(@"master..xp_cmdshell \'net share SQLRESTORE=C:\temp\'");
//第三步:复制服务器上的备份文件到本地
File.Copy(RestoreFile, @"\\" + ServerIP() + @"\SQLRESTORE\HSSY",true);
//第四步:取消服务器共享目录的共享
ExecuteSql(@"master..xp_cmdshell \'net share SQLDATABACK /delete\'");
//第五步:恢复数据库到服务器目录
ExecuteSql(@"restore database " + DataBaseName()+ @" from disk=\'C:\temp\HSSY\'");
return true;
}
catch (System.Data.SqlClient.SqlException E)
{
throw new Exception(E.Message);
}
finally
{
//第六步:取消服务器共享目录的共享
//DbHelperSQL.ExecuteSql(@"master..xp_cmdshell \'net share SQLDATABACK /delete\'");
}
}