--注意:异地备份数据库,需要先开启备份文件夹的网络共享,数据库选择master
--打开允许执行xp_cmdshell EXEC sp_configure \'xp_cmdshell\',1 exec master..xp_cmdshell \'net use \\192.168.0.139\DatabaseBackup password /user:192.168.0.139\administrator\' backup database myDatabase to disk=\'\\192.168.0.139\DatabaseBackup\myDatabase_04_05.bak\' with init exec master..xp_cmdshell \'net use \\192.168.0.139\DatabaseBackup /delete\' --关闭允许执行xp_cmdshell EXEC sp_configure\'xp_cmdshell\', 0
如果提示无权限错误,请先执行以下脚本,注意数据库要选master
EXEC sp_configure \'show advanced options\', 1 GO RECONFIGURE WITH OVERRIDE GO
备份数据库存储过程
USE [master] GO /****** Object: StoredProcedure [dbo].[Pr_BackupDatabase] Script Date: 04/05/2014 21:23:32 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: 王再华 -- Create date: 2014.04.05 -- Description: 备份数据库服务器的所有数据库到映射文件夹 -- ============================================= ALTER PROCEDURE [dbo].[Pr_BackupDatabase] AS BEGIN SET NOCOUNT ON; declare @TargetIP varchar(20) declare @backup varchar(20) declare @username varchar(20) declare @password varchar(20) set @TargetIP=\'192.168.1.139\' --要备份到的服务器IP地址 set @backup=\'myDatabase\' --共享文件夹 set @username=\'administrator\' --用户名 set @password=\'password\'--密码 --1.打开允许执行xp_cmdshell EXEC sp_configure \'xp_cmdshell\',1 declare @sql1 varchar(2000) set @sql1=\'master..xp_cmdshell \'\'net use \\\'+@TargetIP+\'\\'+@backup+\' \'+@password+\' /user:\'+@TargetIP+\'\\'+@username+\'\'\'\' --2.建立共享关系 exec master..xp_cmdshell \'net use \\192.168.0.139\DatabaseBackup password /user:192.168.0.139\administrator\' exec(@sql1) declare @sql varchar(2000) /*************************** 循环备份数据库 START ***************************/ declare my_cursor cursor scroll dynamic for select name from sysdatabases open my_cursor declare @name sysname fetch next from my_cursor into @name while(@@fetch_status=0) begin if(@name<>\'master\' and @name<>\'model\' and @name<>\'msdb\' and @name<>\'tempdb\' and @name<>\'ReportServer\' and @name<>\'ReportServerTempDB\') begin --3.执行备份 --backup database myDatabase to disk=\'\\192.168.0.139\DatabaseBackup\myDatabase_04_05.bak\' with init set @sql=\'backup database \'+@name+\' to disk=\'\'\\\'+@TargetIP+\'\\'+@backup+\'\\'+@name+\'_\'+CONVERT(varchar(100), GETDATE(), 23)+\'.bak\'\' with init\' exec(@sql) end fetch next from my_cursor into @name end fetch first from my_cursor into @name close my_cursor deallocate my_cursor /*************************** 循环备份数据库 END ***************************/ declare @sql2 varchar(2000) set @sql2=\'master..xp_cmdshell \'\'net use \\\'+@TargetIP+\'\\'+@backup+\' /delete\'\'\' --4.删除共享关系 exec master..xp_cmdshell \'net use \\192.168.1.222\backup /delete\' exec(@sql2) --5.关闭允许执行xp_cmdshell EXEC sp_configure\'xp_cmdshell\', 0 END