资源描述:
《sqlserver数据库的备份与恢复sql实现.docx》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、利用T-SQL语句,实现数据库的备份与还原的功能 体现了SQLServer中的四个知识点: 1.获取SQLServer服务器上的默认目录 2.备份SQL语句的使用 3.恢复SQL语句的使用,同时考虑了强制恢复时关闭其他用户进程的处理 4.作业创建SQL语句的使用 /*1.--得到数据库的文件目录 @dbname指定要取得目录的数据库名如果指定的数据不存在,返回安装SQL时设置的默认数据目录如果指定NULL,则返回默认的SQL备份目录名*/ /*--调用示例select数据库文件目录=dbo.f_get
2、dbpath('tempdb'),[默认SQLSERVER数据目录]=dbo.f_getdbpath(''),[默认SQLSERVER备份目录]=dbo.f_getdbpath(null)--*/ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[f_getdbpath]')andxtypein(N'FN',N'IF',N'TF'))dropfunction[dbo].[f_getdbpath]GO createfunctionf_ge
3、tdbpath(@dbnamesysname)returnsnvarchar(260)asbegindeclare@renvarchar(260)if@dbnameisnullordb_id(@dbname)isnullselect@re=rtrim(reverse(filename))frommaster..sysdatabaseswherename='master'elseselect@re=rtrim(reverse(filename))frommaster..sysdatabaseswherena
4、me=@dbname if@dbnameisnullset@re=reverse(substring(@re,charindex('/',@re)+5,260))+'BACKUP'elseset@re=reverse(substring(@re,charindex('/',@re),260))return(@re)endgo /*2.--备份数据库*/ /*--调用示例 --备份当前数据库execp_backupdb@bkpath='c:/',@bkfname='db_/DATE/_db.bak' --
5、差异备份当前数据库execp_backupdb@bkpath='c:/',@bkfname='db_/DATE/_df.bak',@bktype='DF' --备份当前数据库日志execp_backupdb@bkpath='c:/',@bkfname='db_/DATE/_log.bak',@bktype='LOG' --*/ ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[p_backupdb]')andOBJECTPROPERT
6、Y(id,N'IsProcedure')=1)dropprocedure[dbo].[p_backupdb]GO createprocp_backupdb@dbnamesysname='',--要备份的数据库名称,不指定则备份当前数据库@bkpathnvarchar(260)='',--备份文件的存放目录,不指定则使用SQL默认的备份目录@bkfnamenvarchar(260)='',--备份文件名,文件名中可以用/DBNAME/代表数据库名,/DATE/代表日期,/TIME/代表时间@bktypenv
7、archar(10)='DB',--备份类型:'DB'备份数据库,'DF'差异备份,'LOG'日志备份@appendfilebit=1--追加/覆盖备份文件asdeclare@sqlvarchar(8000)ifisnull(@dbname,'')=''set@dbname=db_name()ifisnull(@bkpath,'')=''set@bkpath=dbo.f_getdbpath(null)ifisnull(@bkfname,'')=''set@bkfname='/DBNAME/_/DATE/_
8、/TIME/.BAK'set@bkfname=replace(replace(replace(@bkfname,'/DBNAME/',@dbname),'/DATE/',convert(varchar,getdate(),112)),'/TIME/',replace(convert(varchar,getdate(),108),':',''))set@sql='backup'+case@bktypewhen'LOG'then'