Transact-SQL 参考  
sp_addumpdevice 
将备份设备添加到 Microsoft® SQL Server™。语法
sp_addumpdevice [ @devtype = ] 'device_type' ,
    [ @logicalname = ] 'logical_name' ,
    [ @physicalname = ] 'physical_name'
    [ , { [ @cntrltype = ] controller_type
            | [ @devstatus = ] 'device_status' 
        } 
    ]参数
[@devtype =] 'device_type',备份设备的类型,device_type 的数据类型为 varchar(20),没有默认设置,可以是下列值之一。值 描述 
disk 硬盘文件作为备份设备。 
pipe 命名管道。 
tape 由 Microsoft Windows NT® 支持的任何磁带设备。如果 device 是 tape,则其默认值为 noskip。 
[@logicalname =] 'logical_name'备份设备的逻辑名称,该逻辑名称用于 BACKUP 和 RESTORE 语句中,logical_name 的数据类型为 sysname,没有默认值,并且不能为 NULL。[@physicalname =] 'physical_name'备份设备的物理名称。物理名称必须遵照操作系统文件名称的规则或者网络设备的通用命名规则,并且必须包括完整的路径。physical_name 的数据类型为 nvarchar(260),没有默认值,并且不能为 NULL。当创建远程网络位置上的备份设备时,请确保在其下启动 SQL Server 的名称对远程的计算机有适当的写入能力。如果要添加磁带设备,那么该参数必须是 Windows NT® 指派给本地磁带设备的物理名称,例如 \\.\TAPE0(对于计算机中的第一个磁带设备)。磁带设备必须连接到服务器计算机上,不能远程使用。如果名称包含非字母数字的字符,请用引号将其引起来。 [@cntrltype =] controller_type当创建备份设备时,该参数并不是必需的。为脚本提供该参数比较合适,然而 SQL Server 会将其忽略。controller_type 的数据类型为 smallint,默认值为 NULL,可以是下列值之一。值 描述 
2 当 device_type 为 disk 时使用。 
5 当 device_type 为 tape 时使用。 
6 当 device_type 为 pipe 时使用。 
[@devstatus =] 'device_status'指明是读取 (noskip) ANSI 磁带标签,还是忽略 (skip) 它。device_status 的数据类型为 varchar(40),默认值为 noskip。说明  可以指定 controller_type 或 device_status,但二者不要同时指定。 
返回代码值
0(成功)或 1(失败)结果集
无注释
sp_addumpdevice 将备份设备添加到 master.dbo.sysdevices 表。可以在 BACKUP 和 RESTORE 语句中对其进行逻辑引用。 所有关系和权限问题可能干扰磁盘或文件备份设备的使用。请确保对在其下启动 SQL Server 的帐户给予适当的文件权限。SQL Server 支持将磁带备份到 Windows NT 支持的磁带设备上。有关 Windows NT 支持的磁带设备的更多信息,请参见 Windows NT 的硬件兼容性列表。若要查看计算机上可用的磁带设备,请使用 SQL Server 企业管理器。对于特定的磁带驱动器,只应使用推荐的磁带(按驱动器厂商的建议)。若要使用 DAT 驱动器,请使用计算机级的 DAT 磁带 (Digital Data Storage-DDS)。 不能在事务内执行 sp_addumpdevice。权限
只有 sysadmin 和 diskadmin 固定服务器角色的成员才能执行该过程。示例
A. 添加磁盘转储设备
下面的示例添加一个名为 MYDISKDUMP 的磁盘备份设备,其物理名称为 C:\Dump\Dump1.bak。USE master
EXEC sp_addumpdevice 'disk', 'mydiskdump', 'c:\dump\dump1.bak'B. 添加网络磁盘备份设备
下面的示例显示一个远程磁盘备份设备。在其下启动 SQL Server 的名称必须对该远程文件拥有权限。USE master
EXEC sp_addumpdevice 'disk', 'networkdevice',
   '\\servername\sharename\path\filename.ext'C. 添加磁带备份设备
下面的示例添加 TAPEDUMP1 设备,其物理名称为 \\.\Tape0。USE master
EXEC sp_addumpdevice 'tape', 'tapedump1',
   '\\.\tape0'
请参见BACKUPRESTOREsp_dropdevicesp_helpdevice系统存储过程©1988-2000 Microsoft Corporation。保留所有权利。

解决方案 »

  1.   


    /***************  http://www.csdn.net/develop/article/21/21304.shtm 
    标题     使用SQLSERVER的扩展存储过程实现远程备份与恢复    happy_david(原作) 
      
    关键字     扩展存储过程,远程,备份,恢复 
      
    标题很长,但内容简单。。这是小弟的第一篇习作,写的不好,望大家海涵。   最近我在为公司的框架程序(以数据应用为导向的应用体系)做数据管理模块,这个模块的需求比较简单:备份、恢复和清理日志。我公司的软件基本上以C/S为基本架构,所以数据管理模块中两个主要的功能‘备份与恢复’都可能会在Client端操作,备份与恢复’的文件也都有可能存储在client端,因而这个数据管理模块就必须能够实现在远程备份与恢复数据库。  文章的前提阐述完了,就该说说如何具体实现吧。其实都很简单,我想写个远程备份的测试实例
    给大家看,就能够很清楚的描述吧!
      实例说明:
               环境:win2k+sqlserver 2K+查询分析器
               SQLSERVER服务实例名称:mainserver
               需要备份的数据库名称: msdb 
               本地机器名称(Client端):david
               本地用户:zf 密码:123
               本地域名:domain
               本地提供备份需求的文件夹:e:\test  第一步: 建立共享文件夹
         在程序代码中调用(或者CMD窗口)  net share test=e:\test
         或者用NetShareAdd这个API
         简要说明:
                net share     : 是WINDOWS内部的网络命令。
                                作用:建立本地的共享资源,显示当前计算机的共享资源信息。
                                语法:参见 net share /?  
      第二步: 建立共享信用关系
         master..xp_cmdshell 'net use  \\david\test 123 /user:domain\zf'
         简要说明:
               1:xp_cmdshell :是SQLSERVER的扩展存储过程。
                                作用,以操作系统命令行解释器的方式执行给定的命令字符串,
                                并以文本行方式返回任何输出。
                                语法:参见SQLSERVER联机帮助
               2:net use      : 是WINDOWS内部的网络命令。
                                作用,将计算机与共享资源连接或断开,或者显示关于计算机
                                连接的信息。该命令还控制持久网络连接。
                                语法:参见 net use /?  第三步:备份数据库
         backup database msdb to disk='\\david\test\msdb.bak'
         这个不需要说明吧,语法参见SQLSERVER联机帮助  第四步: 删除共享文件夹
         在程序代码中调用(或者CMD窗口)  net share test /delete
         或者用NetShareDel这个API
      结果:
          已处理 1376 页,这些页属于数据库 'msdb' 的文件 'MSDBData'(位于文件 1 上)。
          已处理 1 页,这些页属于数据库 'msdb' 的文件 'MSDBLog'(位于文件 1 上)。
          BACKUP DATABASE 操作成功地处理了 1377 页,花费了 3.653 秒(3.086 MB/秒)。  这样mainserver服务器上的msdb就备份到了david机器的E:\test\msdb.bak文件了,使用起来很简单吧?恢复数据库操作也是一样,只要将第三个步骤的语句改为'restore database msdb from disk='\\david\test\msdb.bak'就可以啦。。你看完了也可以试试呀?!(最简单的测试工具查询分析器+CMD窗口)备注:xp_cmdshell 这个扩展存储过程只能SA级别的用户调用,而且是SQLSERVER的安全隐患之
          一,许多DBA都喜欢将其删除或者禁用,所以开发人员使用时要倍加小心哦。
         文章中的例子只是简要的说明了应如何利用扩展存储过程实现远程备份与恢复,没有涉及安全以及其他方面的考虑,希望读者在代码中自行完善。 
    /**************************************************
    SQL异地备份失败,归根结底是权限问题!!!
    如:
       SQLServer备到FileServer上
       那你的SQLServer的启动用户必须在FileServer上有足够的权限!
    --------------------^^^---------------------------------
    1、SQLServer上新建一SQLUser用户权限大一点。
    2、FileServer上建同一用户对某一文件夹有足够权限。
    3、两机的SQLUser密码相同(方便一点)
    4、将SQLServer改为SQLUser启动
       (管理工具-->服务-->mssql项-->属性-->指定用户及密码)
    5、\\192.168.*.*\文件夹\ShareBak.Bak就可以了
    -----------------------------------------------------------
    简单一点就是:
    如果你两台都是windows2ks
    你的机器也用同样的Administrator密码,且sql服务器用administrator启动
    那你写设备时就可以写:\\ip\.......如果对方是98那你要完全共享一下!
    你写设备时就可以写:\\ip\.......
      

  2.   

    现在我已经用:
    http://www.csdn.net/develop/Read_Article.asp?Id=21304
    标题  使用SQLSERVER的扩展存储过程实现远程备份与恢复  happy_david(原作)  
    关键字     扩展存储过程,远程,备份,恢复 能够在局域网内远程备份了但是怎么把互联网上的数据库备份到本地我的计算机
    我的计算机ip我也不知道怎么说,反正是192.168.1.46,可能在网上没有固定ip地址,
    还有域名怎么写?
      

  3.   

    远程备份共有那几种方法?
    1。使用SQLSERVER的扩展存储过程实现远程备份与恢复    happy_david(原作)
    2。用dts把远程数据库导到本地再备份
    还有吗其他的方法吗?
    如果用2。会不会对远程数据库加锁,而导致远程数据库不能访问?
    我的目的是把网上的数据库备份到本地局域网,公司好像是用ADSL上网的!
      

  4.   

    1。把远程数据库对象导到本地然后备份本地数据库可以吗?导的时间很长会不会把
       数据库加锁,而导致远程数据库长时间不能访问?
       可以,不推荐。2。http://www.csdn.net/develop/Read_Article.asp?Id=21304
    标题  使用SQLSERVER的扩展存储过程实现远程备份与恢复  happy_david(原作)  
    关键字     扩展存储过程,远程,备份,恢复 
    我会用这种方法在局域网内远程备份,但是我想把互联网上的数据库备份到本地局域网,怎么写ip,域名等。我的机子要有固定ip吗?
      本机需外部IP3。用复制技术可以保证修改,删除操作也同样作用于订阅服务器吗?系统资源消耗大吗?
       大部分同步要求比较高的都用此办法
    4。我的目的就是把网上的数据库备份到本地。除了以上方法还有别的方法吗?
       可以先在远程备份,然后复制远程备份文件啊。