sqlserver数据库的备份与恢复sql实现.docx
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《sqlserver数据库的备份与恢复sql实现.docx》由会员分享,可在线阅读,更多相关《sqlserver数据库的备份与恢复sql实现.docx(11页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、利用T-SQL语句,实现数据库的备份与还原的功能体现了SQL Server中的四个知识点:1 获取SQL Server服务器上的默认目录2 备份SQL语句的使用3 恢复SQL语句的使用,同时考虑了强制恢复时关闭其他用户进程的处理4 作业创建SQL语句的使用/*1.-得到数据库的文件目录dbname 指定要取得目录的数据库名如果指定的数据不存在,返回安装SQL时设置的默认数据目录如果指定NULL,则返回默认的SQL备份目录名*/*-调用示例select 数据库文件目录=dbo.f_getdbpath(tempdb),默认SQL SERVER数据目录=dbo.f_getdbpath(),默认SQL
2、 SERVER备份目录=dbo.f_getdbpath(null)-*/if exists (select * from dbo.sysobjects where id = object_id(Ndbo.f_getdbpath) and xtype in (NFN, NIF, NTF)drop function dbo.f_getdbpathGOcreate function f_getdbpath(dbname sysname)returns nvarchar(260)asbegindeclare re nvarchar(260)if dbname is null or db_id(dbna
3、me) is nullselect re=rtrim(reverse(filename) from master.sysdatabases where name=masterelseselect re=rtrim(reverse(filename) from master.sysdatabases where name=dbnameif dbname is nullset re=reverse(substring(re,charindex(/,re)+5,260)+BACKUPelseset re=reverse(substring(re,charindex(/,re),260)return(
4、re)endgo/*2.-备份数据库*/*-调用示例-备份当前数据库exec p_backupdb bkpath=c:/,bkfname=db_/DATE/_db.bak-差异备份当前数据库exec p_backupdb bkpath=c:/,bkfname=db_/DATE/_df.bak,bktype=DF-备份当前数据库日志exec p_backupdb bkpath=c:/,bkfname=db_/DATE/_log.bak,bktype=LOG-*/if exists (select * from dbo.sysobjects where id = object_id(Ndbo.p_
5、backupdb) and OBJECTPROPERTY(id, NIsProcedure) = 1)drop procedure dbo.p_backupdbGOcreate proc p_backupdbdbname sysname=, -要备份的数据库名称,不指定则备份当前数据库bkpath nvarchar(260)=, -备份文件的存放目录,不指定则使用SQL默认的备份目录bkfname nvarchar(260)=, -备份文件名,文件名中可以用/DBNAME/代表数据库名,/DATE/代表日期,/TIME/代表时间bktype nvarchar(10)=DB, -备份类型:DB备
6、份数据库,DF 差异备份,LOG 日志备份appendfile bit=1 -追加/覆盖备份文件asdeclare sql varchar(8000)if isnull(dbname,)= set dbname=db_name()if isnull(bkpath,)= set bkpath=dbo.f_getdbpath(null)if isnull(bkfname,)= set bkfname=/DBNAME/_/DATE/_/TIME/.BAKset bkfname=replace(replace(replace(bkfname,/DBNAME/,dbname),/DATE/,conver
7、t(varchar,getdate(),112),/TIME/,replace(convert(varchar,getdate(),108),:,)set sql=backup +case bktype when LOG then log else database end +dbname+ to disk=+bkpath+bkfname+ with +case bktype when DF then DIFFERENTIAL, else end+case appendfile when 1 then NOINIT else INIT endprint sqlexec(sql)go/*3.-恢
8、复数据库*/*-调用示例-完整恢复数据库exec p_RestoreDb bkfile=c:/db_db.bak,dbname=db-差异备份恢复exec p_RestoreDb bkfile=c:/db_db.bak,dbname=db,retype=DBNORexec p_backupdb bkfile=c:/db_df.bak,dbname=db,retype=DF-日志备份恢复exec p_RestoreDb bkfile=c:/db_db.bak,dbname=db,retype=DBNORexec p_backupdb bkfile=c:/db_log.bak,dbname=db,
9、retype=LOG-*/if exists (select * from dbo.sysobjects where id = object_id(Ndbo.p_RestoreDb) and OBJECTPROPERTY(id, NIsProcedure) = 1)drop procedure dbo.p_RestoreDbGOcreate proc p_RestoreDbbkfile nvarchar(1000), -定义要恢复的备份文件名dbname sysname=, -定义恢复后的数据库名,默认为备份的文件名dbpath nvarchar(260)=, -恢复后的数据库存放目录,不指定
10、则为SQL的默认数据目录retype nvarchar(10)=DB, -恢复类型:DB完事恢复数据库,DBNOR 为差异恢复,日志恢复进行完整恢复,DF 差异备份的恢复,LOG 日志恢复filenumber int=1, -恢复的文件号overexist bit=1, -是否覆盖已经存在的数据库,仅retype为killuser bit=1 -是否关闭用户使用进程,仅overexist=1时有效asdeclare sql varchar(8000)-得到恢复后的数据库名if isnull(dbname,)=select sql=reverse(bkfile),sql=case when ch
11、arindex(.,sql)=0 then sqlelse substring(sql,charindex(.,sql)+1,1000) end,sql=case when charindex(/,sql)=0 then sqlelse 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 datab
12、ase 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 endprint sql-添加移动逻辑文件的处理if retype=DB or retype=DBNORbegin-从备份文件中获取逻辑文件名declare lfn nvarchar(128),tp ch
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- sqlserver 数据库 备份 恢复 sql 实现
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内