--你是否有足够的权限?如果有足够的权限,可以备份到本机--如果有,可以用下面的方法,查询分析器中操作:-- 创建共享目录
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'

解决方案 »

  1.   

    --以下代码放在作业里做调度,自动备份、自动删除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 datebakfetch 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 ascexec (@del)exec(@s)
      

  2.   

    企业管理器
    --管理
    --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--属性--启动类型--选择"自动启动"--确定.
      

  3.   

    谢谢!你说这些我好像在网上也看到过,比较模糊。
    如:如果有,可以用下面的方法,查询分析器中操作:-- 创建共享目录
    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'为什么要在查询分析器里创建共享目录呀,那个ABC的共享目前我在异地的电脑上就共享过了,并且给了SQL电脑写入的权限。
    第二条进行数据备份这条语气我也用了,但是一直没有成功。
      

  4.   

    而且下面这话不是执行一个过程的吗?我根本没有创建过这个过程或?
    -- 创建共享目录 
    exec master.dbo.XP_cmdshell 'md c:\bak' 
    exec master.dbo.XP_cmdshell 'net share bak=c:\bak' 
      

  5.   

    --SQL如何备份到异机写成存储过程,建立作业定时备份~~~
    --在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'
      

  6.   

    administrator是登陆的用户名 
    一定要用本机管理员吗?域帐号不行吗?
    exec xtbom.dbo xp_cmdshell 'net use z: \\yidi\abc "123456" /user:work\beifen' 
    \\yidi\abc 是异地共享的有写权限的文件夹
    \\work\beifen是域用户组和登录SQL计算机的帐号
    123456是beifen此域帐户的密码
    执行时报如下的错误:
    服务器: 消息 170,级别 15,状态 1,行 1
    第 1 行: 'net use 'net use z: \\yidi\abc "123456" /user:work\beifen' 附近有语法错误。
      

  7.   

    感谢dawugui这么热的天中午不帮我顶贴!天气好闷哦,都没心工作,想睡觉了。
      

  8.   

    BACKUP DATABASE XTBOM TO  DISK = 'D:\abc\bf20080520' 
    不要加那个异地
      

  9.   

    哦作业是在本地数据库建的啊我以为是在异地建的
    这种情况就的像6楼写的那一种需要异地的系统组的用户和密码建立IPC$连接把异地的硬盘影射到本地你有异地的系统组用户和密码吗?
      

  10.   

    有的,建立IPC$连接 这个不太明白。我把异地的方件夹共享了,并且给了写入权限。
    谢谢先!
      

  11.   

    我异地备份的电脑主机名是:yidi,共享的文件夹是abc
    SQL 数据库所在的计算机名是:yuanSQL 用户口beifen;域用户组是worK
    beifen此域帐户的密码是:123456 
    在查询分析器里执行下面语句:
    exec xtbom.dbo xp_cmdshell 'net use z: \\yidi\abc "123456" /user:work\beifen'
    报错:
     服务器: 消息 170,级别 15,状态 1,行 1 
    第 1 行: 'net use 'net use z: \\yidi\abc "123456" /user:work\beifen' 附近有语法错误。
      

  12.   

    [code=BatchFile]net use Z: \\172.172.72.172\D:\yidi$ "admin" /user:"local\admin"[/code]
    exec master..xp_cmdshell 'net use Z: \\172.172.72.172\D:\yidi$ "admin" /user:"local\admin"'\\172.172.72.172\D:\yidi 指定远程的工作目录第一个admin是密码user:后面的是账户你看看能不能连上
    我刚才打不开你这个贴子了
      

  13.   

    http://blog.csdn.net/happyflystone/archive/2008/01/18/2051325.aspx
      

  14.   

    通俗点说(个人理解)共享了并不代表那个文件夹是你的用IPC$连上了(异地系统组用户) 映射到本地的硬盘就和你自己的硬盘一样个人理解,感觉不对就但我是妖言惑众吧哈哈
      

  15.   

    我直接用映射网络驱动器,也就直接将yidi\abc文件夹映射为网络驱动器,ABC文件夹共享时给他SQL数据库所在电脑写权限的,可一样还是不行。我映射的网络驱动器是J:,如下:
    BACKUP DATABASE XTBOM TO  DISK = 'J:\bf20080520' 
    可是却执行不成功。 
    你说的这种怎么做?
      

  16.   

    exec master..xp_cmdshell 'dir j:' 有结果吗?
    没有那就是权限问题
      

  17.   

    还是出错,如下。再说一个,那个用户名和密码是共享文件的那台电脑登录的用户名和密码,还是SQL数据所在电脑的用户名和密码?
    服务器: 消息 3201,级别 16,状态 1,行 1
    无法打开备份设备 '\\10.30.119.28\c:\abc$\2008052012\new_hisbackup.dat'。设备出现错误或设备脱机。详细信息请参阅 SQL Server 错误日志。
    服务器: 消息 3013,级别 16,状态 1,行 1
    BACKUP DATABASE 操作异常终止。
      

  18.   

    exec master..xp_cmdshell'net use \\192.168.0.136\tst PASSWORD /user:192.168.0.136\USERNAME'
    exec   master..xp_cmdshell 'bcp csdn_test.dbo.abc out "\\192.168.0.136\tst\temp.xls" -c -q -T 
    -S"192.168.0.136" -U"sa" -P""' 其中:PASSWORD, 是 USERNAME在 192.168.0.136上的用户,当为空时,用''''
          USERNAME 能访问这个目录 的用用户,比如administrator
    比如你192.168.0.136 机器上administrator,密码为:1234exec master..xp_cmdshell'net use \\192.168.0.136\tst 1234 /user:192.168.0.136\administrator'
    exec   master..xp_cmdshell 'bcp csdn_test.dbo.abc out "\\192.168.0.136\tst\temp.xls" -c -q -T 
    -S"192.168.0.136" -U"sa" -P""' 
    比如你192.168.0.136 机器上test,密码为:空exec master..xp_cmdshell'net use \\192.168.0.136\tst '''' /user:192.168.0.136\test'
    exec   master..xp_cmdshell 'bcp csdn_test.dbo.abc out "\\192.168.0.136\tst\temp.xls" -c -q -T 
    -S"192.168.0.136" -U"sa" -P""' 
      

  19.   

    有,可还是不行。下面的master是指数据库名吗?
      

  20.   

    “其中:PASSWORD, 是 USERNAME在 192.168.0.136上的用户,”也就是对192。168。0。136有管理员权限的帐户和密码喽,那我就没有错,可是用枪老大的还是出上面的错呀。
      

  21.   

    现在用的是IP
    服务器: 消息 3201,级别 16,状态 1,行 1
    无法打开备份设备 '\\10.30.119.28\c:\abc$\2008052012\new_hisbackup.dat'。设备出现错误或设备脱机。详细信息请参阅 SQL Server 错误日志。
    服务器: 消息 3013,级别 16,状态 1,行 1
    BACKUP DATABASE 操作异常终止。
      

  22.   

    哎呀,既然麻烦这么多,楼主你干脆就备份到本机上好了.如果要脱离使用就把它弄到USB盘中随时可以用,就是更新问题不是很好,要随时保存随时换.
      

  23.   

    顶楼上 如果楼主确实调试不好 可以考虑使用USB硬盘
      

  24.   

    \\10.30.119.28\c:\abc$\2008052012\new_hisbackup.dat'
    ---
    abc 是共享目录为什么 前面要加c:
    很显然你还是隐藏共享--try:
     \\10.30.119.28\abc$\2008052012\new_hisbackup.dat'
      

  25.   

    对于你的提问我一开始也是这么想的,搞不懂,并且我也不是隐藏共享,是直接共享给SQL数据库服务器,并且给了写入权限。我也用过你的方法试过,还是出一样的错。见下面的出错信息。
    服务器: 消息 3201,级别 16,状态 1,行 1
    无法打开备份设备 '\\10.30.119.28\abc\2008052112\new_hisbackup.dat'。设备出现错误或设备脱机。详细信息请参阅 SQL Server 错误日志。
    服务器: 消息 3013,级别 16,状态 1,行 1
    BACKUP DATABASE 操作异常终止。
      

  26.   

    看看我的BLOG吧,已经做好了,而且易于管理.
    http://blog.csdn.net/sczyq/archive/2008/05/08/2415225.aspx
      

  27.   

    同志们,我的问题解决了。恭喜我吧,不过也要谢谢大家。
    第一:\\10.30.119.28\abc$\2008052012\new_hisbackup.dat' 就改为\\10.30.119.28\c$\abc\2008052012\new_hisbackup.dat' 
    第二:我用的用户不是本机管理员administrator,而用的是具有本机管理员权限的域帐户。 
      

  28.   

    2楼写的蛮清楚了,可以调试成功的.(一直想做一个这个功能,今天参照了下,调试成功,非常感谢)
    只是有2处注意的地方,1) 他例子中用的映射盘符为W,在实际用的过程中,W盘符是否允许,如果不允许可以换一个(如我电脑上就不行,我用了H,Z都可以),至于可以不可以,用如下试下,将他例子中No_OutPut去掉,可以看到输出结果,有无成功.
    exec master..xp_cmdshell 'net use w: \DatabaseBackup$  "password"/user:Roy'
    2)例子中的代码,稍微有点问题,如下W:后面应该再加个斜杠,如'W:\',这样就对了.
    [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' 另外38楼说,能否实现多个备份,其实,2楼的例子已经实现了多个备份,例子中是备份除系统数据库外的所有数据库,那如果你要备份多个数据库,1,可以指定多个数据库,2可以参照同样的方法,将数据库名插入到一个表里面,通过游标实现.
      

  29.   

    不太明白你为什么要这样做。利用DTS功能,就可以实现数据的异地同步了。只要做一些设置就可以。我用DTS做过广域网的异地数据同步,都没有问题。lz你可以考虑一下。
      

  30.   

    个人认为楼上的方案可以,至于CMDSHELL一般的服务器都不会留这个存储过程的。