--你是否有足够的权限?如果有足够的权限,可以备份到本机
--如果有,可以用下面的方法,查询分析器中操作:
-- 创建共享目录
exec master.dbo.XP_cmdshell 'md c:/bak'
exec master.dbo.XP_cmdshell 'net share bak=c:/bak'
--进行数据备份
backup database 数据库 to disk='c:/bak/备份.bak'
/*--以下操作在我的电脑中进行:
打开我的电脑,地址栏中输入:
//SQL服务器的计算机名/bak/
复制里面的备份.bak到你的电脑就行了
--我的电脑中的操作结束--*/
--删除备份生成的文件
exec master..xp_cmdshell 'del c:/bak/备份.bak'
--删除共享
exec master.dbo.XP_cmdshell 'net share c:/bak /delete /y'
exec master.dbo.XP_cmdshell 'rd c:/bak'
--否则,你还是完全共享你本机的目录,用下面的方法备份:
backup database 数据库 to disk='//你的计算机名/共享目录名/备份文件名'
---或通过映射网络驱动器(这样可以解决权限问题)
--1.映射
exec master..xp_cmdshell 'net use z: //xz/c$ "密码" /user:xz/administrator'
/*--说明:
z: 是映射网络路径对应本机的盘符,与下面的备份对应
//xz/c$ 是要映射的网络路径
xz/administrator xz是远程的计算机名,administrator是登陆的用户名
密码 上面指定的administrator用户的密码
--*/
--2.进行数据库备份
backup database 数据库名 to disk='z:/备份文件名'
--3.备份完成后删除映射
exec master..xp_cmdshell 'net use z: /delete'
SQL code
-- 以下代码放在作业里做调度,自动备份、自动删除4天前备份 -- 创建映射 exec master..xp_cmdshell ' net use w: /DatabaseBackup$ "password"/user:Roy ' ,NO_OUTPUT go -- ---2000用游标: declare @s nvarchar ( 200 ), @del nvarchar ( 200 ) select @s = '' , @del = '' declare datebak cursor for select [ bak ] = ' backup database ' + quotename (Name) + ' to disk = '' w: ' + Name + ' _ ' + convert ( varchar ( 8 ), getdate (), 112 ) + ' .bak '' with init ' , [ del ] = ' exec master..xp_cmdshell '' del w: ' + Name + ' _ ' + convert ( varchar ( 8 ), getdate () - 4 , 112 ) + ' .bak '' , no_output ' from master..sysdatabases where dbid > 4 -- 不备份系统数据库 open datebak fetch next from datebak into @s , @del while @@fetch_status = 0 begin exec ( @del ) exec ( @s ) fetch next from datebak into @s , @del end close datebak deallocate datebak go -- 删除映射 exec master..xp_cmdshell ' net use w: /delete ' go -- 2005用max支持2G的字符串 declare @s nvarchar ( max ), @del nvarchar ( max ) select @s = '' , @del = '' select @s = @s + char ( 13 ) + ' backup database ' + quotename (Name) + ' to disk = '' w: ' + Name + ' _ ' + convert ( varchar ( 8 ), getdate (), 112 ) + ' .bak '' with init ' , @del = @del + char ( 13 ) + ' exec master..xp_cmdshell '' del w: ' + Name + ' _ ' + convert ( varchar ( 8 ), getdate () - 4 , 112 ) + ' .bak '' , no_output ' from master..sysdatabases where dbid > 4 order by dbid asc exec ( @del ) exec ( @s )
SQL code
企业管理器 -- 管理 -- SQL Server代理 -- 右键作业 -- 新建作业 -- "常规"项中输入作业名称 -- "步骤"项 -- 新建 -- "步骤名"中输入步骤名 -- "类型"中选择"Transact-SQL 脚本(TSQL)" -- "数据库"选择执行命令的数据库 -- "命令"中输入要执行的语句: declare @strsql varchar ( 1000 ) declare @strdirname varchar ( 50 ) declare @strcmd varchar ( 50 ) declare @strsend varchar ( 1000 ) declare @strdate varchar ( 50 ) exec master..xp_cmdshell ' net use //192.168.0.151/d$ Password /user:192.168.0.151/administrator ' set @strsql = ' backup database new_his to disk= '' //192.168.0.151/d$/serverd/ ' set @strdirname = replace ( substring ( convert ( varchar ( 20 ), getdate (), 120 ), 1 , 10 ), ' - ' , '' ) + ' 12 ' set @strcmd = ' md //192.168.0.151/d$/serverd/ ' set @strcmd = @strcmd + @strdirname exec master..xp_cmdshell @strcmd -- print @strsql set @strsql = @strsql + @strdirname + ' /new_hisbackup.dat '' with init,nounload,noskip,noformat ' -- print @strsql exec ( @strsql ) -- --其中写的IP地址及共享目录,网友自行修改,Password一定要正确 -- 确定 -- "调度"项 -- 新建调度 -- "名称"中输入调度名称 -- "调度类型"中选择你的作业执行安排 -- 如果选择"反复出现" -- 点"更改"来设置你的时间安排 然后将SQL Agent服务启动,并设置为自动启动,否则你的作业不会被执行 设置方法: 我的电脑 -- 控制面板--管理工具--服务--右键 SQLSERVERAGENT--属性--启动类型--选择"自动启动"--确定.