database db to disk='c:\data.dat'
database db to disk='\\share\copy.dat'

解决方案 »

  1.   

    backup database db to disk='c:\data.dat'
    backup database db to disk='\\share\copy.dat'
    go或:backup database db to disk='c:\data.dat'
    exec xp_cmdshell 'copy c:\data.dat \\share\copy.dat'
    go
      

  2.   

    注意权限问题
    如:
       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\.......
      

  3.   

    请问大力:
    那有没有远程恢复的呢?
    比如说我现在在本机上想恢复另外一台机子上的一个.bak文件。要怎么做?谢谢
      

  4.   

    我用这样的语句:restore database test from disk='\\btn5\setup\test.bak'
    出错提示是这样的:
    已处理 176 页,这些页属于数据库 'test' 的文件 'test_Data'(位于文件 1 上)。
    [Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionRead (WrapperRead()).
    服务器: 消息 11,级别 16,状态 1,行 0
    一般性网络错误。请检查网络文档。
    已处理 1 页,这些页属于数据库 'test' 的文件 'test_Log'(位于文件 1 上)。连接中断
    以前也有用过exec sp....这种远程恢复的。可是还是不行。我跟另外一台机子上的账号与密码是一样的,权限也是系统管理的权限!
      

  5.   

    backup database db to disk='c:\data.dat'
    backup database db to disk='\\share\copy.dat'
    go
      

  6.   

    --恢复
    restore database db from disk='c:\data.dat'
    restore database db from disk='\\share\copy.dat'
    go
      

  7.   

    注意权限问题后:restore database db from disk='\\share\copy.dat'
    go或:exec xp_cmdshell 'copy \\share\copy.dat c:\data.dat'
    restore database db from disk='c:\data.dat'
    go
      

  8.   

    /*--恢复数据库--邹建 2003.10--*//*--调用示例
    --完整恢复数据库
    exec p_RestoreDb @bkfile='c:\db_20031015_db.bak',@dbname='db'--差异备份恢复
    exec p_RestoreDb @bkfile='c:\db_20031015_db.bak',@dbname='db',@retype='DBNOR'
    exec p_backupdb @bkfile='c:\db_20031015_df.bak',@dbname='db',@retype='DF'--日志备份恢复
    exec p_RestoreDb @bkfile='c:\db_20031015_db.bak',@dbname='db',@retype='DBNOR'
    exec p_backupdb @bkfile='c:\db_20031015_log.bak',@dbname='db',@retype='LOG'--*/if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_RestoreDb]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
    drop procedure [dbo].[p_RestoreDb]
    GOcreate proc p_RestoreDb
    @bkfile nvarchar(1000), --定义要恢复的备份文件名
    @dbname sysname='',     --定义恢复后的数据库名,默认为备份的文件名
    @dbpath nvarchar(260)='', --恢复后的数据库存放目录,不指定则为SQL的默认数据目录
    @retype nvarchar(10)='DB', --恢复类型:'DB'完事恢复数据库,'DBNOR' 为差异恢复,日志恢复进行完整恢复,'DF' 差异备份的恢复,'LOG' 日志恢复
    @filenumber int=1, --恢复的文件号
    @overexist bit=1,        --是否覆盖已经存在的数据库,仅@retype为
    @killuser bit=1     --是否关闭用户使用进程,仅@overexist=1时有效
    as
    declare @sql varchar(8000)--得到恢复后的数据库名
    if isnull(@dbname,'')=''
    select @sql=reverse(@bkfile)
    ,@sql=case when charindex('.',@sql)=0 then @sql
    else substring(@sql,charindex('.',@sql)+1,1000) end
    ,@sql=case when charindex('\',@sql)=0 then @sql
    else left(@sql,charindex('\',@sql)-1) end
    ,@dbname=reverse(@sql)--得到恢复后的数据库存放目录
    if isnull(@dbpath,'')='' set @dbpath=dbo.f_getdbpath('')--生成数据库恢复语句
    set @sql='restore '+case @retype when 'LOG' then 'log ' else 'database ' end+@dbname
    +' from disk='''+@bkfile+''''
    +' with file='+cast(@filenumber as varchar)
    +case when @overexist=1 and @retype in('DB','DBNOR') then ',replace' else '' end
    +case @retype when 'DBNOR' then ',NORECOVERY' else ',RECOVERY' end
    print @sql
    --添加移动逻辑文件的处理
    if @retype='DB' or @retype='DBNOR'
    begin
    --从备份文件中获取逻辑文件名
    declare @lfn nvarchar(128),@tp char(1),@i int --创建临时表,保存获取的信息
    create table #tb(ln nvarchar(128),pn nvarchar(260),tp char(1),fgn nvarchar(128),sz numeric(20,0),Msz numeric(20,0))
    --从备份文件中获取信息
    insert into #tb exec('restore filelistonly from disk='''+@bkfile+'''')
    declare #f cursor for select ln,tp from #tb
    open #f
    fetch next from #f into @lfn,@tp
    set @i=0
    while @@fetch_status=0
    begin
    select @sql=@sql+',move '''+@lfn+''' to '''+@dbpath+@dbname+cast(@i as varchar)
    +case @tp when 'D' then '.mdf''' else '.ldf''' end
    ,@i=@i+1
    fetch next from #f into @lfn,@tp
    end
    close #f
    deallocate #f
    end--关闭用户进程处理
    if @overexist=1 and @killuser=1
    begin
    declare @spid varchar(20)
    declare #spid cursor for
    select spid=cast(spid as varchar(20)) from master..sysprocesses where dbid=db_id(@dbname)
    open #spid
    fetch next from #spid into @spid
    while @@fetch_status=0
    begin  
    exec('kill '+@spid)
    fetch next from #spid into @spid
    end  
    close #spid
    deallocate #spid
    end--恢复数据库
    exec(@sql)go
      

  9.   

    restore database test from disk='\\btn5\setup\test.bak'
    不能恢复,估计的原因是路径的问题,你可以用上面的存储过程恢复,也可以用下面的方法:restore database test from disk='\\btn5\setup\test.bak'
    with move 'test_data' to 'c:\test.mdf'
    ,move 'test_log' to 'c:\test.ldf'
      

  10.   

    我对“大力”下面的这句很满意,但只解决了我的50%的疑问,
    backup database db to disk='c:\data.dat'
    exec xp_cmdshell 'copy c:\data.dat \\share\copy.dat'
    go
      另50%的疑问是“如何使用多个文件备份如:backup database db to disk='c:\data.dat,disk='\\share\copy.dat'”这种方式实现多个文件备份,但还原时我希望只应用其中一个文件即可如:restore database db from disk='c:\data.dat'
    请问 大力、邹建及各位高手有何高招?