為了減少資料庫伺服器出問題導致資料掉失,一般都要對資料庫進行備份,視對資料的重要性和效能的折中採用不同的備份方案。
一般備份方案為:
完全備份(一周一次)+差異備份(一天一次)+交易記錄備份(兩小時一次,視對資料的重視情況而選擇)
這樣的話即使出現問題,資料掉失的範圍是兩個小時。
首先來分別闡述Database Backup的類型:
1、完全備份
這是大多數人常用的方式,它可以備份整個資料庫,包含使用者表、系統資料表、索引、視圖和預存程序等所有資料庫物件。但它需要花費更多的時間和空間,所以,一般推薦一周做一次完全備份。
代碼
--weekly full backup
--the back up file looks like this:Test_200912151512_weekly.bak
declare @filename nvarchar(100)
set @filename='D:\\DBBackup\Test_'+replace(replace(replace(replace(CONVERT(char(16), getdate(), 120 ),'-',''),'
',''),':',''),' ','') +'_weekly.bak'
declare @dbname nvarchar(50)
declare @SQL nvarchar(500)
set @dbname='Test'
set @SQL='BACKUP DATABASE '+ @dbname +' TO DISK = '''+@filename+''' WITH NOINIT , NOUNLOAD , NOSKIP , STATS = 10, NOFORMAT'
exec(@SQL)
2、交易記錄備份
交易記錄是一個單獨的檔案,它記錄資料庫的改變,備份的時候只需要複製自上次備份以來對資料庫所做的改變,所以只需要很少的時間。為了使資料庫具有魯棒性,推薦每小時甚至更頻繁的備份交易記錄。
代碼
--hourly log backup
-- the backup file looks liek this:Test_Log_200912151547_hourly.bak
declare @filename nvarchar(100)
set @filename='D:\\DBBackup\Test_Log_'+replace(replace(replace(replace(CONVERT(char(16), getdate(), 120 ),'-',''),'
',''),':',''),' ','') +'_hourly.bak'
declare @dbname nvarchar(50)
declare @SQL nvarchar(500)
set @dbname='Test'
set @SQL='BACKUP Log '+ @dbname +' TO DISK = '''+@filename+''' With No_Truncate'
exec(@SQL)
3、差異備份
它是只備份資料庫一部分的另一種方法,它不使用交易記錄,相反,它使用整個資料庫的一種新映象。它比最初的完全備份小,因為它只包含自上次完全備份以來所改變的資料庫。它的優點是儲存和恢複速度快。推薦每天做一次差異備份。
代碼
--daily differential backup
--the backup file looks like this:Test_200912151543_daily.bak
declare @filename nvarchar(100)
set @filename='D:\\DBBackup\Test_'+replace(replace(replace(replace(CONVERT(char(16), getdate(), 120 ),'-',''),'
',''),':',''),' ','') +'_daily.bak'
declare @dbname nvarchar(50)
declare @SQL nvarchar(500)
set @dbname='Test'
set @SQL='BACKUP DATABASE '+ @dbname +' TO DISK = '''+@filename+''' WITH NOINIT , NOUNLOAD , NOSKIP , STATS = 10, NOFORMAT'
exec(@SQL)
4、檔案備份
資料庫可以由硬碟上的許多檔案構成。如果這個資料庫非常大,並且一個晚上也不能將它備份完,那麼可以使用檔案備份每晚備份資料庫的一部分。由於一般情況下資料庫不會大到必須使用多個檔案儲存體,所以這種備份不是很常用。