1我們通常備份資料庫時,需要登入資料庫伺服器去備份和恢複,這樣很不方便,其實SQL SERVER內建的命令可能讓我們很簡單地實現遠程通過Asp.Net備份和恢複資料庫。
2BACKUP DATABASE '被備份的資料庫名' TO DISK = '備份檔案路徑';
3ALTER DATABASE '被恢複的資料庫名' SET OFFLINE WITH ROOLBACK IMMEDIATE;
4RESTORE DATABASE '被恢複的資料庫名' FROM DISK = '備份檔案路徑';
5ALTER DATABASE '被恢複的資料庫名' SET ONLINE WITH ROOLBACK IMMEDIATE;
6
7 簡單幾條命令就可以完成資料庫的備份和恢複,在Asp.Net中,可以像調用Sql語句一樣調用這四條語句,輕輕鬆鬆實現SQL SERVER資料庫的備份和恢複。
8
9 例子(以Northwind為例):
10 1、備份Northwind資料庫到C盤根目錄下,以'Northwind.bak'為名:
11 BACKUP DATABASE 'Northwind' TO DISK = 'C:\Northwind.bak';
12
13 2、恢複Northwind資料庫,C盤根目錄下的'Northwind.bak'備份檔案:
14 a、將資料庫置於離線狀態
15 ALTER DATABASE 'Northwind' SET OFFLINE WITH ROOLBACK IMMEDIATE;
16 b、恢複Northwind資料庫
17 RESTORE DATABASE 'Northwind' FROM DISK = 'C:\Northwind.bak';
18 c、將資料庫置於線上狀態
19 ALTER DATABASE 'Northwind' SET ONLINE WITH ROOLBACK IMMEDIATE;
20
21使用預存程序:
22create proc BackupDB
23@dbname sysname='', --要備份的資料庫名稱,不指定則備份當前資料庫
24@bkpath nvarchar(260)='', --備份檔案的存放目錄,不指定則使用SQL預設的備份目錄
25@bkfname nvarchar(260)='', --備份檔案名,檔案名稱中可以用\DBNAME\代表資料庫名,\DATE\代表日期,\TIME\代表時間
26@bktype nvarchar(10)='DB', --備份類型:'DB'備份資料庫,'DF' 差異備份,'LOG' 記錄備份
27@appendfile bit=1 --追加/覆蓋備份檔案
28as
29 declare @sql varchar(8000)
30 if isnull(@dbname,'')='' set @dbname=db_name()
31 if isnull(@bkpath,'')='' set @bkpath=dbo.f_getdbpath(null)
32 if isnull(@bkfname,'')='' set @bkfname='\DBNAME\_\DATE\_\TIME\.BAK'
33 set @bkfname=replace(replace(replace(@bkfname,'\DBNAME\',@dbname)
34 ,'\DATE\',convert(varchar,getdate(),112))
35 ,'\TIME\',replace(convert(varchar,getdate(),108),':',''))
36 set @sql='backup '+case @bktype when 'LOG' then 'log ' else 'database ' end +@dbname
37 +' to disk='''+@bkpath+@bkfname
38 +''' with '+case @bktype when 'DF' then 'DIFFERENTIAL,' else '' end
39 +case @appendfile when 1 then 'NOINIT' else 'INIT' end
40 print @sql
41 exec(@sql)
42
43
44GO
45
46