BACKUP DATABASE educational to disk = '"+addr+"' WITH FORMAT
备份的路径存放在表backdate里,
id       name    time
1 e:\liu 2008-04-08
3 f:\aaa  2008-04-08
8 c:\567 2008-04-29
如何恢复这个备份,越简单越好!
用restore DATABASE educational from  disk = '"+addr+"' 恢复时报错:
服务器: 消息 3101,级别 16,状态 1,行 1
因为数据库正在使用,所以未能获得对数据库的排它访问权。
服务器: 消息 3013,级别 16,状态 1,行 1
RESTORE DATABASE 操作异常终止。
我是在java代码里执行的请问要如何改?谢谢,非常感谢!

解决方案 »

  1.   

    exec('restore DATABASE educational from  disk ='''+@addr+'''')
      

  2.   

    哦,看错了
    --关闭用户进程处理 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
      

  3.   

    restore 的语句前加:USE master如果还有用户连接, 试用2楼的 kill 用户进程处理
      

  4.   

    如果还有用户连接 kill 用户进程处理
    USE master
       
     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
      

  5.   

    必须声明变量 '@dbname' 
    是库名吗?改成我的库名不可以啊
      

  6.   

    @dbname这个是通用选项   对了要改为你的实例名字就可以了
      

  7.   

    改成你的库名是这样
    db_id('educational') 
      

  8.   

    在查询分析器里可以了,多谢诸位!
    如果要用java的jdbc调用,上面的代码要怎么执行呢,写成存贮过程吗?
      

  9.   

    use master
    restore DATABASE educational from  disk = '"+addr+"'
      

  10.   


    JDBC中能直接执行的只有select\delete\insert\update、exec吧这样的话写成存储过程!
      

  11.   

    发现最近sql 注入比较多,拿出来共享下,时长2小时。一次上传不了,分三次上传。免费共享。      
    《sql server 数据库的备份与恢复》   
    微软特约资深讲师 毛颉   
    http://topic.csdn.net/u/20080509/11/70ac59bd-d219-45c7-85ec-9d355398642c.html
      

  12.   

    关闭用户进程处理    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