MSSQL备份和恢复存储过程

<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

ifexists(
 select*fromsysobjects
 wherename='pr_backup_db'andxtype='p'
 )
begin
 dropprocpr_backup_db
end
go
/*备份数据库*/
createprocpr_backup_db
@flagvarchar(10)out,
@backup_db_namevarchar(128),
@filenamevarchar(1000) --路径+文件名字
as
declare@sqlnvarchar(4000),@parnvarchar(1000)
select@par='@filenamevarchar(1000)'
select@sql='BACKUPDATABASE'+@backup_db_name+'todisk=@filenamewithinit'
executesp_executesql@sql,@par,@filename
select@flag='ok'
go

 ifexists(
 select*fromsysobjects
 wherename='fn_GetFilePath'andxtype='fn'
 )
begin
 dropfunctionfn_GetFilePath
end
go
/*创建函数,得到文件得路径*/
createfunctionfn_GetFilePath(@filenamenvarchar(260))
returnsnvarchar(260)  
as
begin
 declare@file_pathnvarchar(260)
 declare@filename_reversenvarchar(260)
 select@filename_reverse=reverse(@filename)
 select@file_path=substring(@filename,1,len(@filename)+1-charindex('/',@filename_reverse))
 return@file_path
end

go

ifexists(
 select*fromsysobjects
 wherename='pr_restore_db'andxtype='p'
 )
begin
 dropprocpr_restore_db
end
go
createprocpr_restore_db   /*恢复数据库*/
@flagvarchar(20)out,   /*过程运行的状态标志,是输入参数*/     
@restore_db_namenvarchar(128), /*要恢复的数据名字*/
@filenamenvarchar(260)        /*备份文件存放的路径+备份文件名字*/
as
declare@proc_resulttinyint /*返回系统存储过程xp_cmdshell运行结果*/
declare@loop_timesmallint /*循环次数*/
declare@max_idssmallint   /*@tem表的ids列最大数*/
declare@file_bak_pathnvarchar(260) /*原数据库存放路径*/
declare@flag_filebit  /*文件存放标志*/
declare@master_pathnvarchar(260) /*数据库master文件路径*/
declare@sqlnvarchar(4000),@parnvarchar(1000)
declare@sql_subnvarchar(4000)
declare@sql_cmdnvarchar(4000)
/*
判断参数@filename文件格式合法性,以防止用户输入类似d:或者c:/a/等非法文件名
参数@filename里面必须有'/'并且不以'/'结尾
*/
ifright(@filename,1)<>'/'andcharindex('/',@filename)<>0
begin
 select@sql_cmd='dir'+@filename
 EXEC@proc_result=master..xp_cmdshell@sql_cmd,no_output
 IF(@proc_result<>0) /*系统存储过程xp_cmdshell返回代码值:0(成功)或1(失败)*/
 begin
 select@flag='notexist'  /*备份文件不存在*/
 return /*退出过程*/
 end
 /*创建临时表,保存由备份集内包含的数据库和日志文件列表组成的结果集*/
 createtable#tem(
    LogicalNamenvarchar(128),/*文件的逻辑名称*/
    PhysicalNamenvarchar(260),/*文件的物理名称或名称*/
    Typechar(1), /*数据文件(D)或日志文件(L)*/
    FileGroupNamenvarchar(128),/*包含文件的文件组名称*/
    [Size]numeric(20,0), /*当前大小(以字节为单位)*/
    [MaxSize]numeric(20,0) /*允许的最大大小(以字节为单位)*/1

<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值