异机备份 --在sql中映射一下就可以了 exec master..xp_cmdshell 'net use z: \\yizhi\D$ "module" /user:yizhi\administrator'/*--说明: exec master..xp_cmdshell 'net use z: \\xz\c$ "密码" /user:xz\administrator'z:是映射网络路径对应本机的盘符,与下面的备份对应 \\xz\c$是要映射的网络路径xz\administrator xz是远程的计算机名, administrator是登陆的用户名 密码 面指定的administrator用户的密码 --*/--备份;with init覆盖|noinit添加 backup database holytron to disk='E:\H_BACKUP.bak' with init--COPY exec master..xp_cmdshell 'copy E:\H_BACKUP.bak z:'--完成后删除映射 exec master..xp_cmdshell 'net use z: /delete'——————————————————————————————————参考:(局域网内)--在sql中映射一下就可以了 exec master..xp_cmdshell 'net use z: \\yizhi\D$ "密码" /user:yizhi\administrator'/*--说明: exec master..xp_cmdshell 'net use z: \\xz\c$ "密码" /user:xz\administrator'z:是映射网络路径对应本机的盘符,与下面的备份对应 \\xz\c$是要映射的网络路径xz\administrator xz是远程的计算机名, administrator是登陆的用户名 密码 面指定的administrator用户的密码 --*/--备份;with init覆盖|noinit添加 backup database 库名 to disk='E:\H_BACKUP.bak' with init--COPY exec master..xp_cmdshell 'copy E:\H_BACKUP.bak z:'--删除(这句可以去掉) --exec master..xp_cmdshell 'del E:\H_BACKUP.bak'--完成后删除映射 exec master..xp_cmdshell 'net use z: /delete' ———————————————————————————————————— 自动完成异地备份1、共享本地文件夹 D:\temp 共享名为 test net share test = D:\temp2、执行SQL在数据库服务器上创建映射 z: exec master..xp_cmdshell 'net use z: \\server\test 密码 /user:administrator'3、执行备份 backup database Northwind to disk = 'z:\\Northwind_20060101.bak'4、删除数据库服务器上的映射 z: exec master..xp_cmdshell 'net use z: /delete'5、取消本机共享文件夹 test net share test /delete
MSSQL的异地远程存储,SQLServer备到FileServer上 环境: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)=null AS 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
--在sql中映射一下就可以了
exec master..xp_cmdshell 'net use z: \\yizhi\D$ "module" /user:yizhi\administrator'/*--说明:
exec master..xp_cmdshell 'net use z: \\xz\c$ "密码" /user:xz\administrator'z:是映射网络路径对应本机的盘符,与下面的备份对应
\\xz\c$是要映射的网络路径xz\administrator
xz是远程的计算机名,
administrator是登陆的用户名
密码 面指定的administrator用户的密码
--*/--备份;with init覆盖|noinit添加
backup database holytron to disk='E:\H_BACKUP.bak' with init--COPY
exec master..xp_cmdshell 'copy E:\H_BACKUP.bak z:'--完成后删除映射
exec master..xp_cmdshell 'net use z: /delete'——————————————————————————————————参考:(局域网内)--在sql中映射一下就可以了
exec master..xp_cmdshell 'net use z: \\yizhi\D$ "密码" /user:yizhi\administrator'/*--说明:
exec master..xp_cmdshell 'net use z: \\xz\c$ "密码" /user:xz\administrator'z:是映射网络路径对应本机的盘符,与下面的备份对应
\\xz\c$是要映射的网络路径xz\administrator
xz是远程的计算机名,
administrator是登陆的用户名
密码 面指定的administrator用户的密码
--*/--备份;with init覆盖|noinit添加
backup database 库名 to disk='E:\H_BACKUP.bak' with init--COPY
exec master..xp_cmdshell 'copy E:\H_BACKUP.bak z:'--删除(这句可以去掉)
--exec master..xp_cmdshell 'del E:\H_BACKUP.bak'--完成后删除映射
exec master..xp_cmdshell 'net use z: /delete'
————————————————————————————————————
自动完成异地备份1、共享本地文件夹 D:\temp 共享名为 test
net share test = D:\temp2、执行SQL在数据库服务器上创建映射 z:
exec master..xp_cmdshell 'net use z: \\server\test 密码 /user:administrator'3、执行备份
backup database Northwind to disk = 'z:\\Northwind_20060101.bak'4、删除数据库服务器上的映射 z:
exec master..xp_cmdshell 'net use z: /delete'5、取消本机共享文件夹 test
net share test /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)=null AS
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