資源描述:
《sqlserver數(shù)據(jù)庫的備份與恢復(fù)sql實(shí)現(xiàn)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、利用T-SQL語句,實(shí)現(xiàn)數(shù)據(jù)庫的備份與還原的功能?體現(xiàn)了SQLServer中的四個(gè)知識(shí)點(diǎn):?1.獲取SQLServer服務(wù)器上的默認(rèn)目錄?2.備份SQL語句的使用?3.恢復(fù)SQL語句的使用,同時(shí)考慮了強(qiáng)制恢復(fù)時(shí)關(guān)閉其他用戶進(jìn)程的處理?4.作業(yè)創(chuàng)建SQL語句的使用???/*1.--得到數(shù)據(jù)庫的文件目錄?@dbname指定要取得目錄的數(shù)據(jù)庫名如果指定的數(shù)據(jù)不存在,返回安裝SQL時(shí)設(shè)置的默認(rèn)數(shù)據(jù)目錄如果指定NULL,則返回默認(rèn)的SQL備份目錄名*/?/*--調(diào)用示例select數(shù)據(jù)庫文件目錄=dbo.f_getdbpath('tempdb'),[默認(rèn)SQLSERVER數(shù)
2、據(jù)目錄]=dbo.f_getdbpath(''),[默認(rèn)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_getdbpath(@dbnamesysname)returnsnvarchar(260)asbegindeclare@re
3、nvarchar(260)if@dbnameisnullordb_id(@dbname)isnullselect@re=rtrim(reverse(filename))frommaster..sysdatabaseswherename='master'elseselect@re=rtrim(reverse(filename))frommaster..sysdatabaseswherename=@dbname?if@dbnameisnullset@re=reverse(substring(@re,charindex('/',@re)+5,260))+'BACKUP'
4、elseset@re=reverse(substring(@re,charindex('/',@re),260))return(@re)endgo??/*2.--備份數(shù)據(jù)庫*/?/*--調(diào)用示例?--備份當(dāng)前數(shù)據(jù)庫execp_backupdb@bkpath='c:/',@bkfname='db_/DATE/_db.bak'?--差異備份當(dāng)前數(shù)據(jù)庫execp_backupdb@bkpath='c:/',@bkfname='db_/DATE/_df.bak',@bktype='DF'?--備份當(dāng)前數(shù)據(jù)庫日志execp_backupdb@bkpath='c:/',@bk
5、fname='db_/DATE/_log.bak',@bktype='LOG'?--*/?ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[p_backupdb]')andOBJECTPROPERTY(id,N'IsProcedure')=1)dropprocedure[dbo].[p_backupdb]GO?createprocp_backupdb@dbnamesysname='',--要備份的數(shù)據(jù)庫名稱,不指定則備份當(dāng)前數(shù)據(jù)庫@bkpathnvarchar(260)='',--備份文件的存
6、放目錄,不指定則使用SQL默認(rèn)的備份目錄@bkfnamenvarchar(260)='',--備份文件名,文件名中可以用/DBNAME/代表數(shù)據(jù)庫名,/DATE/代表日期,/TIME/代表時(shí)間@bktypenvarchar(10)='DB',--備份類型:'DB'備份數(shù)據(jù)庫,'DF'差異備份,'LOG'日志備份@appendfilebit=1--追加/覆蓋備份文件asdeclare@sqlvarchar(8000)ifisnull(@dbname,'')=''set@dbname=db_name()ifisnull(@bkpath,'')=''set@bkpath
7、=dbo.f_getdbpath(null)ifisnull(@bkfname,'')=''set@bkfname='/DBNAME/_/DATE/_/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'
8、then'