-- Get year & month &day fromat of the day before yesterday -- SET @year1 = substring(convert(varchar,datepart(yyyy,getdate()-2)),3,2) SET @month1 =substring(convert(varchar,datepart(mm,getdate())),1,2) SET @day1=substring(convert(varchar,datepart(dd,getdate())),1,2) -- if len(@month1)<2 set @month1 = '0' + @month1 /* 不足两位的前面加零 */ -- if len(@day1)<2 set @day1 = '0' + @day1
set @sqlstr='dir '+@filepath+@databaseName+'_'+@month1+'-'+@day1 EXEC @proc_result = master..xp_cmdshell @sqlstr,no_output
if (@proc_result<>0) /**//*系统存储过程xp_cmdshell返回代码值:0(成功)或1(失败)*/ begin set @createdir='md '+@filepath+@databaseName+'_'+@month1+'-'+@day1 /**//*建立文件备份的目录*/ EXEC master..xp_cmdshell @createdir,no_output set @sqlstr='backup database '+@databaseName+' to disk='''+@filepath+@databaseName+'_'+@month1+'-'+@day1+''+@databaseName+'.bak''' --+' with init' Execute (@sqlstr) /**//* 备份databaseName数据 */
set @sqlstr='backup database master to disk='''+@filepath+@databaseName+'_'+@month1+'-'+@day1+'master.bak''' Execute (@sqlstr) /**//* 备份 master 数据 */
set @sqlstr='backup database msdb to disk='''+@filepath+@databaseName+'_'+@month1+'-'+@day1+'msdb.bak''' Execute (@sqlstr) /**//* 备份 msdb 数据 */ set @flag='Backup database successful.' end else set @flag='The directory "'+@databaseName+'_'+@month1+'-'+@day1+'" has been in, backup database unsuccessful.' print @flag END END GO 作业:delete_db_backupfile2pc @databaseName='databaseName',@filepath='filepath'CREATE PROCEDURE dbo.delete_db_backupfile2pc@databaseName nvarchar(100)=null, @filepath nvarchar(125)=nullAS DECLARE @year1 varchar(4), @month1 varchar(2), @day1 varchar(2), @sqlstr varchar(2000), @flag varchar(255), @proc_result tinyint /**//*返回系统存储过程xp_cmdshell运行结果*/ begin if @databaseName = null or @filepath = null set @flag='Variable Error!' else begin --保存7天的数据 SET @month1 =substring(convert(varchar,datepart(mm,getdate()-7)),1,2) SET @day1=substring(convert(varchar,datepart(dd,getdate()-7)),1,2) -- if len(@month1)<2 set @month1 = '0' + @month1 /* 不足两位的前面加零 */ -- if len(@day1)<2 set @day1 = '0' + @day1 set @sqlstr='dir '+@filepath+@databaseName+'_'+@month1+'-'+@day1 EXEC @proc_result = master..xp_cmdshell @sqlstr,no_output if (@proc_result=0) /**//*系统存储过程xp_cmdshell返回代码值:0(成功)或1(失败)*/ begin set @sqlstr='del '+@filepath+@databaseName+'_'+@month1+'-'+@day1+' /q' exec master..xp_cmdshell @sqlstr,no_output --删除目录下的文件 set @sqlstr='rd '+@filepath+@databaseName+'_'+@month1+'-'+@day1 exec master..xp_cmdshell @sqlstr,no_output --删除目录 set @flag='Delete file successful!' end else set @flag='Can not find "'+@filepath+@databaseName+'_'+@month1+'-'+@day1+'" file!' end print @flag end GO
参考一下这个,也是远程备份。: 有A数据库服务器,B本机; 我现在想通过在B机器上通过代码调用SQL来执行A数据库的备份到B机器上 调用的SQL语句为:Backup Database MYDATABASE To Disk='D:/test.bak',这样备份的目录是数据库服务器A的D盘下; 怎么才能备份到A的D盘下呢? 请各位给予建议,谢谢! ----------------------------------------------------------------------------------------------------要用远程数据库可以备份本地。 本地数据库也可以备份到远程。 --备份环境:把数据库服务器(192.168.1.8)的数据库(TEST)备份到(192.168.1.145)的C$下 --首先,做一个与客户端的映射 exec master..xp_cmdshell 'net use z: \\192.168.1.145\c$ "密码" /user:192.168.1.145\administrator' /*--说明: z: 是映射网络路径对应本机的盘符,与下面的备份对应 \\192.168.1.145\c$ 是要映射的网络路径 192.168.1.145\administrator 192.168.1.145是远程的计算机名,administrator是登陆的用户名 密码 上面指定的administrator用户的密码 --*/ --其次,进行数据库备份 backup database TEST to disk='z:\Test.bak' --最后.备份完成后删除映射 exec master..xp_cmdshell 'net use z: /delete' --来自网络
环境:win2k+sqlserver 2K SP3
backup database msdb to disk=’computer estfilename.bak’ --(注意大小写)
如果SQL异地备份失败,归根结底是权限问题! H 那么你的SQLServer的启动用户必须在FileServer上有足够的权限! 1、SQLServer上新建一SQLUser用户权限大一点。 2、FileServer上建同一用户对某一文件夹有足够权限,就是在两台机器上建相同的用户名和密码,然后与这个用户名登入电脑。 3、两机的SQLUser密码相同(方便一点)
4、将SQLServer改为SQLUser启动
(管理工具-->服务-->mssql项-->属性-->指定用户及密码,是计算机的登入用户名) 5、backup database 数据库 to disk=’192.168.*.*文件夹ShareBak.Bak’就可以了。作业:db_backup2pc @databaseName='databaseName',@filepath='filepath'CREATE PROCEDURE dbo.db_backup2pc@databaseName nvarchar(100) = null, --数据库名
@filepath nvarchar(125) = null --文件保存路径(IP+隐藏共享+)AS
BEGIN
DECLARE
@year1 varchar(4),
@month1 varchar(2),
@day1 varchar(2),
@flag varchar(255),
@proc_result tinyint, /**//*返回系统存储过程xp_cmdshell运行结果*/
@sqlstr varchar(2000),
@createdir varchar(255) /**//*建立文件备份的目录*/begin
-- Get year & month &day fromat of the day before yesterday
-- SET @year1 = substring(convert(varchar,datepart(yyyy,getdate()-2)),3,2)
SET @month1 =substring(convert(varchar,datepart(mm,getdate())),1,2)
SET @day1=substring(convert(varchar,datepart(dd,getdate())),1,2)
-- if len(@month1)<2 set @month1 = '0' + @month1 /* 不足两位的前面加零 */
-- if len(@day1)<2 set @day1 = '0' + @day1
set @sqlstr='dir '+@filepath+@databaseName+'_'+@month1+'-'+@day1
EXEC @proc_result = master..xp_cmdshell @sqlstr,no_output
if (@proc_result<>0) /**//*系统存储过程xp_cmdshell返回代码值:0(成功)或1(失败)*/
begin
set @createdir='md '+@filepath+@databaseName+'_'+@month1+'-'+@day1 /**//*建立文件备份的目录*/
EXEC master..xp_cmdshell @createdir,no_output set @sqlstr='backup database '+@databaseName+' to disk='''+@filepath+@databaseName+'_'+@month1+'-'+@day1+''+@databaseName+'.bak''' --+' with init'
Execute (@sqlstr) /**//* 备份databaseName数据 */
set @sqlstr='backup database master to disk='''+@filepath+@databaseName+'_'+@month1+'-'+@day1+'master.bak'''
Execute (@sqlstr) /**//* 备份 master 数据 */
set @sqlstr='backup database msdb to disk='''+@filepath+@databaseName+'_'+@month1+'-'+@day1+'msdb.bak'''
Execute (@sqlstr) /**//* 备份 msdb 数据 */ set @flag='Backup database successful.'
end
else
set @flag='The directory "'+@databaseName+'_'+@month1+'-'+@day1+'" has been in, backup database unsuccessful.' print @flag
END
END
GO 作业:delete_db_backupfile2pc @databaseName='databaseName',@filepath='filepath'CREATE PROCEDURE dbo.delete_db_backupfile2pc@databaseName nvarchar(100)=null,
@filepath nvarchar(125)=nullAS
DECLARE
@year1 varchar(4),
@month1 varchar(2),
@day1 varchar(2),
@sqlstr varchar(2000),
@flag varchar(255),
@proc_result tinyint /**//*返回系统存储过程xp_cmdshell运行结果*/
begin if @databaseName = null or @filepath = null
set @flag='Variable Error!'
else
begin --保存7天的数据
SET @month1 =substring(convert(varchar,datepart(mm,getdate()-7)),1,2)
SET @day1=substring(convert(varchar,datepart(dd,getdate()-7)),1,2) -- if len(@month1)<2 set @month1 = '0' + @month1 /* 不足两位的前面加零 */
-- if len(@day1)<2 set @day1 = '0' + @day1 set @sqlstr='dir '+@filepath+@databaseName+'_'+@month1+'-'+@day1
EXEC @proc_result = master..xp_cmdshell @sqlstr,no_output if (@proc_result=0) /**//*系统存储过程xp_cmdshell返回代码值:0(成功)或1(失败)*/
begin
set @sqlstr='del '+@filepath+@databaseName+'_'+@month1+'-'+@day1+' /q'
exec master..xp_cmdshell @sqlstr,no_output --删除目录下的文件
set @sqlstr='rd '+@filepath+@databaseName+'_'+@month1+'-'+@day1
exec master..xp_cmdshell @sqlstr,no_output --删除目录
set @flag='Delete file successful!'
end
else
set @flag='Can not find "'+@filepath+@databaseName+'_'+@month1+'-'+@day1+'" file!'
end
print @flag
end
GO
有A数据库服务器,B本机; 我现在想通过在B机器上通过代码调用SQL来执行A数据库的备份到B机器上 调用的SQL语句为:Backup Database MYDATABASE To Disk='D:/test.bak',这样备份的目录是数据库服务器A的D盘下; 怎么才能备份到A的D盘下呢? 请各位给予建议,谢谢!
----------------------------------------------------------------------------------------------------要用远程数据库可以备份本地。
本地数据库也可以备份到远程。 --备份环境:把数据库服务器(192.168.1.8)的数据库(TEST)备份到(192.168.1.145)的C$下 --首先,做一个与客户端的映射
exec master..xp_cmdshell
'net use z: \\192.168.1.145\c$ "密码" /user:192.168.1.145\administrator'
/*--说明:
z: 是映射网络路径对应本机的盘符,与下面的备份对应
\\192.168.1.145\c$ 是要映射的网络路径
192.168.1.145\administrator
192.168.1.145是远程的计算机名,administrator是登陆的用户名
密码 上面指定的administrator用户的密码
--*/
--其次,进行数据库备份
backup database TEST to disk='z:\Test.bak' --最后.备份完成后删除映射
exec master..xp_cmdshell 'net use z: /delete'
--来自网络