网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 交易代码 > SQL语法 > 正文

T-SQL恢复数据库

论文降重修改服务、格式排版等 获取论文 论文降重及排版 论文发表 相关服务

【网学网提醒】:文章导读:在新的一年中,各位网友都进入紧张的学习或是工作阶段。网学会员整理了T-SQL恢复数据库的相关内容供大家参考,祝大家在新的一年里工作和学习顺利!


    /*3.--恢复数据库
    */
    /*--调用示例
    --完整恢复数据库
    execp_RestoreDb@bkfile='c:\db_20031015_db.bak',@dbname='db'
    --差异备份恢复
    execp_RestoreDb@bkfile='c:\db_20031015_db.bak',@dbname='db',@retype='DBNOR'
    execp_backupdb@bkfile='c:\db_20031015_df.bak',@dbname='db',@retype='DF'
    --日志备份恢复
    execp_RestoreDb@bkfile='c:\db_20031015_db.bak',@dbname='db',@retype='DBNOR'
    execp_backupdb@bkfile='c:\db_20031015_log.bak',@dbname='db',@retype='LOG'
    --*/
    ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[p_RestoreDb]')andOBJECTPROPERTY(id,N'IsProcedure')=1)
    dropprocedure[dbo].[p_RestoreDb]
    GO
    createprocp_RestoreDb
    @bkfilenvarchar(1000)='c:\hotelfundb.bak',--定义要恢复的备份文件名
    @dbnamesysname='hotelfundb',--定义恢复后的数据库名,默认为备份的文件名
    @dbpathnvarchar(260)='D:\ProgramFiles\MicrosoftSQLServer\MSSQL\Data\',--恢复后的数据库存放目录,不指定则为SQL的默认数据目录
    @retypenvarchar(10)='DB',--恢复类型:'DB'完事恢复数据库,'DBNOR'为差异恢复,日志恢复进行完整恢复,'DF'差异备份的恢复,'LOG'日志恢复
    @filenumberint=1,--恢复的文件号
    @overexistbit=1,--是否覆盖已经存在的数据库,仅@retype为
    @killuserbit=1--是否关闭用户使用进程,仅@overexist=1时有效
    as
    declare@sqlvarchar(8000)
    --得到恢复后的数据库名
    ifisnull(@dbname,'')=''
    select@sql=reverse(@bkfile)
    ,@sql=casewhencharindex('.',@sql)=0then@sql
    elsesubstring(@sql,charindex('.',@sql)+1,1000)end
    ,@sql=casewhencharindex('\',@sql)=0then@sql
    elseleft(@sql,charindex('\',@sql)-1)end
    ,@dbname=reverse(@sql)
    --得到恢复后的数据库存放目录
    ifisnull(@dbpath,'')=''set@dbpath=dbo.f_getdbpath('')
    --生成数据库恢复语句
    set@sql='restore'+case@retypewhen'LOG'then'log'else'database'end+@dbname
    +'fromdisk='''+@bkfile+''''
    +'withfile='+cast(@filenumberasvarchar)
    +casewhen@overexist=1and@retypein('DB','DBNOR')then',replace'else''end
    +case@retypewhen'DBNOR'then',NORECOVERY'else',RECOVERY'end
    print@sql
    --添加移动逻辑文件的处理
    if@retype='DB'or@retype='DBNOR'
    begin
    --从备份文件中获取逻辑文件名
    declare@lfnnvarchar(128),@tpchar(1),@iint
    --创建临时表,保存获取的信息
    createtable#tb(lnnvarchar(128),pnnvarchar(260),tpchar(1),fgnnvarchar(128),sznumeric(20,0),Msznumeric(20,0))
    --从备份文件中获取信息
    insertinto#tbexec('restorefilelistonlyfromdisk='''+@bkfile+'''')
    declare#fcursorforselectln,tpfrom#tb
    open#f
    fetchnextfrom#finto@lfn,@tp
    set@i=0
    while@@fetch_status=0
    begin
    select@sql=@sql+',move'''+@lfn+'''to'''+@dbpath+@dbname+cast(@iasvarchar)
    +case@tpwhen
    'D'then'.mdf'''else'.ldf'''end
    ,@i=@i+1
    fetchnextfrom#finto@lfn,@tp
    end
    close#f
    deallocate#f
    end
    --关闭用户进程处理
    if@overexist=1and@killuser=1
    begin
    declare@spidvarchar(20)
    declare#spidcursorfor
    selectspid=cast(spidasvarchar(20))frommaster..sysprocesseswheredbid=db_id(@dbname)
    open#spid
    fetchnextfrom#spidinto@spid
    while@@fetch_status=0
    begin
    exec('kill'+@spid)
    fetchnextfrom#spidinto@spid
    end
    close#spid
    deallocate#spid
    end
    --恢复数据库
    exec(@sql)
    go
    execp_RestoreDb
    
  • 上一篇资讯: T-SQL技巧集锦
  • 下一篇资讯: T-SQL常用语法
  • 设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
    版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师