SQL Server提供了方便的圖形化管理,只需要采用圖形化的方式,一步步進行操作,便能完成數(shù)據(jù)庫的備份。
在SQL Server Manage ment Studio管理界面中,右鍵單擊需要備份的數(shù)據(jù)庫,在彈出的快捷菜單中,選擇“任務(wù)”→“備份”,彈出備份窗口,在備份窗口界面中,采用默認方式是備份到本地,“備份類型”下拉列表有三個選項,即“完整、“差異”和“事務(wù)”,它們之間的差別是:
完整:指完全備份選定的數(shù)據(jù)庫。
差異:差異備份是針對完整備份,即只備份上一次完整備份后變化的數(shù)據(jù)。
事務(wù)日志:指包含創(chuàng)建最后一個備份(可以是完整備份也可以是差異備份)之后對數(shù)據(jù)庫進行的更改。因此,在進行事務(wù)日志備份前,需要對數(shù)據(jù)庫進行一次完整的數(shù)據(jù)庫備份。
在首次備份時,采用“完整”備份的方式。單擊“添加”按鈕,在彈出的“選擇備份目標”窗口中,輸入備份的文件名后,在備份窗口中,單擊“確定”按鈕,完成數(shù)據(jù)庫的完整備份。
實際上,在備份窗口中,可以更加詳細指定備份的方式,讀者可以單擊“介質(zhì)選項”和“備份選項”查看。
一般來講,完整備份的方式適合首次備份數(shù)據(jù)庫,其它備份方式多數(shù)都是依賴在完整備份的基礎(chǔ)上進行備份。如果對于存在大數(shù)據(jù)集的數(shù)據(jù)庫來講,一次完整的備份是比較耗時的,如果每次都完全備份,則這種方式不適合于實時性要求強的網(wǎng)站或應(yīng)用。所以,一般在首次采用完整備份后,以后的備份會采用其他方式進行,比如差異備份或事務(wù)日志等,這樣只是備份了變化的數(shù)據(jù)或文件,所以備份速度更快。
在SQL Server Manage ment Studio管理界面中,右鍵單擊“數(shù)據(jù)庫”節(jié)點,在彈出的快捷菜單中,選擇“還原數(shù)據(jù)庫”,彈出還原窗口;或右鍵單擊需要還原的數(shù)據(jù)庫,在彈出的快捷菜單中,選擇“任務(wù)”→“還原”→“數(shù)據(jù)庫”。
在“源”中,選擇需要還原的備份數(shù)據(jù),兩種方式:一種是“數(shù)據(jù)庫”方式,即在本地備份的數(shù)據(jù)庫,都會列在“數(shù)據(jù)庫”下拉列表中,這種方式適合快速還原本地備份的數(shù)據(jù)庫;另一種方式“設(shè)備”方式,這種方式可以直接指定需要還原的備份文件,比如從其他數(shù)據(jù)庫移植到本地的備份文件。當選擇需要還原的“源”后,將在“要還原的備份集”中列出還原列表。選擇具體還原的備份集后,同時,輸入目標“數(shù)據(jù)庫”名稱,單擊“確定”,完成數(shù)據(jù)庫的還原。
需要注意的是,當還原的數(shù)據(jù)庫存在時,需要確定覆蓋已存在的數(shù)據(jù)庫,否則恢復(fù)將不成功。更高級的用法,單擊“文件”和“選項”查看。
T-SQL(Transact-SQL),是SQL在Microsoft SQL Server上的增強版,其提供了標準SQL的DDL和DML功能,還有延伸的函數(shù)、系統(tǒng)預(yù)存程序以及程式設(shè)計結(jié)構(gòu)。
使用圖形化界面?zhèn)浞輸?shù)據(jù)庫,可以直觀完成整個數(shù)據(jù)庫的備份過程。但作為程序員和高級的網(wǎng)絡(luò)管理員,還是喜歡使用T-SQL備份語句完成數(shù)據(jù)庫的備份,其一,可以使用任何編程語言采用遠程連接的方式快速完成數(shù)據(jù)庫的備份,其二,不用每次都點擊繁瑣的鼠標操作,其三,靈活性更強。
完整備份數(shù)據(jù)庫的T-SQL語句如下:
backup database DBName to disk='d:db.bak' WITH FORMAT;
以上備份語句將數(shù)據(jù)庫DBName備份到本地文件“d:db.bak”中。而下面語句使用了壓縮方式備份數(shù)據(jù)庫:
BACKUP DATABASE DBName TO DISK=' d:db.bak ' WITH FORMAT,COMPRESSION;
差異備份數(shù)據(jù)庫的T-SQL語句如下:
backup database DBName to disk='d:db.bak' WITH Differential;
參數(shù)FORMAT表示格式化介質(zhì),COMPRESSION表示采用壓縮的方式。
采用backup database備份數(shù)據(jù)庫的參數(shù)較多,但基礎(chǔ)的和常用的是上面的備份數(shù)據(jù)庫語句。其他的參數(shù)將在后面使用到時,會逐步進行介紹。
還原數(shù)據(jù)庫的T-SQL命令如下所示:
restore database DBName from disk= ' d:db.bak '
以上T-SQL語句將從文件“d:db.bak”進行恢復(fù),還原為數(shù)據(jù)庫DBName;但以上語句需要保證數(shù)據(jù)庫DBName不存在。如果要強制進行還原,則使用如下T-SQL語句:
restore database DBName from disk= ' d:db.bak 'with replace
以上還原語句適合于不改變原備份數(shù)據(jù)庫的物理存儲位置。如果將備份的數(shù)據(jù)文件拷貝到其他服務(wù)器中進行還原時,不能保證兩臺服務(wù)器的SQL Server 2014安裝位置完全一樣,或數(shù)據(jù)文件的存放位置就無法保證一致。此時,采用如上方法還原時,會提示“系統(tǒng)找不到指定的文件”的錯誤。解決方法是在:還原時,先查看備份文件中的邏輯文件名,然后將邏輯文件名移動到實際的目錄位置。
下面T-SQL命令用于查看備份文件中的邏輯文件名及位置:
restore filelistonly from disk= 'd: db.bak'
運行結(jié)果將列出備份文件中的邏輯文件名和其物理位置。
然后采用如下T-SQL命令進行恢復(fù)數(shù)據(jù)庫,同時會將恢復(fù)后的數(shù)據(jù)文件移動到指定位置:
在上面語句,更改還原后的數(shù)據(jù)庫名為cc,同時將備份文件中的邏輯文件移動到新的位置,并且更改了文件名稱。
由此可以看出,采用如上方法,不但可以完成數(shù)據(jù)庫的備份和還原,同時可以實現(xiàn)數(shù)據(jù)庫的復(fù)制。
注意:默認無法在早期版本的 SQL Server中還原較新版本的 SQL Server 創(chuàng)建的備份。
SQL Server 2014提供了配置自動備份數(shù)據(jù)庫的方法,可以指定系統(tǒng)自動備份的數(shù)據(jù)庫的時間、頻率和方法等。這可以進一步減少系統(tǒng)管理員維護數(shù)據(jù)庫的工作量。
在SQL Server Manage ment Studio管理界面中,展開左邊“對象資源管理器”樹型節(jié)點,右鍵單擊“維護計劃”,選擇“維護計劃向?qū)А?,將彈出建立維護計劃的向?qū)Т翱?,以引?dǎo)用戶逐步完成創(chuàng)建自動維護任務(wù)。
在“選擇計劃屬性”頁面,點擊“更改”按鈕,彈出“新建作業(yè)計劃”窗口,在該窗口中,設(shè)置作業(yè)運行的頻率以及持續(xù)時間。比如,可以設(shè)置每天晚上3點運行指定作業(yè),即選擇在數(shù)據(jù)庫最少被使用時,運行備份任務(wù)。設(shè)置完任務(wù)作業(yè)計劃后,單擊“確定”按鈕,以進行其他設(shè)置。
在“選擇維護任務(wù)”頁面,勾選需要維護的任務(wù),可以同時指定多項,比如勾選“備份數(shù)據(jù)庫(完全)”和“”清除維護”任務(wù)”兩項,前一項用于設(shè)置在指定時間自動完全備份數(shù)據(jù)庫,后一項用于指定清除指定文件,。在這里設(shè)置“清除”任務(wù)很重要,如果只是無限制備份數(shù)據(jù),服務(wù)器硬盤遲早會被占滿。
選擇完成后,點擊“確定”完成備份,在打開“定義備份數(shù)據(jù)庫任務(wù)”頁面中,指定備份的數(shù)據(jù)庫,同時需要注意指定備份文件的擴展名,默認是“bak”后綴。指定完成后,進入“定義清除維護任務(wù)”頁面,
設(shè)置指定刪除備份文件的條件,比如指定了刪除文件的所在文件夾,同時需要指定文件擴展名,比如“bak”,同時,需要指定文件保留時間,這樣在同一個文件夾中會有多個指定擴展名的文件存在,維護任務(wù)運行時,會查找并保留指定時間內(nèi)的文件。一般備份文件保留最近一個月或三個月的時間即可,這樣,維護任務(wù)運行是,系統(tǒng)會自動刪除指定時間之前的文件,以節(jié)省服務(wù)器空間。
設(shè)置完成后,根據(jù)提示逐步完成維護任務(wù)的設(shè)置。
這樣,系統(tǒng)會在指定時間完成事先設(shè)置的任務(wù),以幫助管理員完成繁瑣的維護任務(wù)。
注意:要正確運行維護任務(wù),需要在系統(tǒng)服務(wù)中啟動“SQL Server代理”,否則,維護任務(wù)將不會執(zhí)行。
對于用戶來講,數(shù)據(jù)的安全性始終是第一的。不但對于數(shù)據(jù)庫中的數(shù)據(jù)如此,對于備份的數(shù)據(jù),同樣如此。SQL Server 2014加強了對備份數(shù)據(jù)的加密管理,其一個新特性就是支持原生備份加密,其使得如果備份文件被盜,在沒有加密證書的情況下也無法使用。在SQL Server 2014中,用戶可以采用多種加密算法對備份數(shù)據(jù)文件進行加密,即AES128、AES196、AES256 和三重DES算法。
直接使用SQL Server 2014的加密算法對備份數(shù)據(jù)文件加密的前提是,存在證書或非對稱密鑰。那么,首先應(yīng)該是在SQL Server 2014中創(chuàng)建證書,使用如下簡單T-SQL語句:
CertificateName:證書名稱,可改成任意名稱,只要不重復(fù)。
1221adcd:即密鑰,可以設(shè)置成強密碼。
SUBJECT Name:設(shè)置主題名稱。
以上語句創(chuàng)建了一個名為“CertificateName”的證書,在加密備份中將會用到。接下來,就可以創(chuàng)建加密備份數(shù)據(jù)文件,點擊“介質(zhì)選項”節(jié)點,設(shè)置新介質(zhì)名稱,點擊“備份選項”節(jié)點,勾選“加密備份”復(fù)選框,選擇一種加密“算法”,選擇剛創(chuàng)建的證書,點擊“確定”按鈕,完成加密備份數(shù)據(jù)庫。
除了圖形化界面?zhèn)浞輸?shù)據(jù)庫,還可以直接使用如下T-SQL語句完成數(shù)據(jù)庫的備份:
以上T-SQL語句用于備 份數(shù)據(jù)庫“abc”,備份 位置“d:abc.bak”,加密算法采用AES_256,使用了CertificateName證書。
在本地加密了備份數(shù)據(jù)庫,如果本地SQL Server 2014數(shù)據(jù)庫沒有重新安裝,或者證書沒有被刪除,都可以正常還原加密后的備份數(shù)據(jù)庫。但如果涉及數(shù)據(jù)庫的移植和重新安裝,就需要考慮證書的備份和使用。
在本地SQL Server 2014創(chuàng)建了證書,就需要備份證書,采用如下T-SQL語句:
以上T-SQL語句用于備份證書“CertificateName”至文 件“D:CertificateName.cer”,運行完成后,將文件“D:CertificateName.cer”拷貝到其他SQL Server 2014數(shù)據(jù)庫服務(wù)器中,運行如下T-SQL語句:
以上T-SQL語句用于從備份證書文件“D:CertificateName.cer”創(chuàng)建一個名為CertificateName的證書。
如果正常執(zhí)行以上T-SQL語句,將可以在該數(shù)據(jù)庫中按照正常方法恢復(fù)加密后的備份數(shù)據(jù)了。由此,可以發(fā)現(xiàn),恢復(fù)加密備份數(shù)據(jù)庫的關(guān)鍵是備份證書,只要有正確的證書,才能還原數(shù)據(jù)庫。
分離和附加數(shù)據(jù)庫的方式也是一種重要的數(shù)據(jù)庫備份和還原的方法,即把數(shù)據(jù)庫文件(.MDF)和對應(yīng)的日志文件(.LDF)拷貝到其它磁盤上作備份,然后把這兩個文件再拷貝到任何需要這個數(shù)據(jù)庫的系統(tǒng)之中。
如果在SQL Server運行中對數(shù)據(jù)文件進行復(fù)制操作,會提示“文件只在使用,不能復(fù)制”的錯誤。所以,數(shù)據(jù)庫的復(fù)制有如下兩種方法:
一是在系統(tǒng)服務(wù)中,將SQL Server數(shù)據(jù)庫的服務(wù)停止,然后再進入數(shù)據(jù)庫文件位置復(fù)制數(shù)據(jù)庫文件,包括數(shù)據(jù)庫的文件(.MDF)和對應(yīng)的日志文件(.LDF),以保證數(shù)據(jù)庫文件的完整性。
其次,如果系統(tǒng)中運行了多個數(shù)據(jù)庫,那么SQL Server數(shù)據(jù)庫的服務(wù)則無法停止。此時,就需要使用SQL Server數(shù)據(jù)庫提供的數(shù)據(jù)庫分離方法,現(xiàn)將數(shù)據(jù)庫進行分離,再進行復(fù)制。
在SQL Server Manage ment Studio管理界面中,右鍵單擊需要分離的數(shù)據(jù)庫,在彈出的快捷菜單中,選擇“任務(wù)”→“分離”,彈出分離窗口,如果有其他連接正在連接數(shù)據(jù)庫,則在頁面中,“狀態(tài)”列顯示為“未就緒”,為了能正常分離數(shù)據(jù)庫,一定要勾選“刪除連接”復(fù)選框。單擊“確定”按鈕,完成數(shù)據(jù)庫的分離。
附加數(shù)據(jù)庫時,將需要附加的數(shù)據(jù)庫文件和日志文件同時拷貝到指定文件夾中。在SQL Server Management Studio管理界面中,右鍵單擊“數(shù)據(jù)庫”節(jié)點,在彈出的快捷菜單中,選擇“附加”,彈出“附加數(shù)據(jù)庫”窗口,在界面中,單擊“添加”按鈕,找到需要附加的“.MDF”文件,如果該文件正確,將在窗口中列出所有的文件,包括“.MDF”和“.LDF”文件,單擊“確定”按鈕,完成數(shù)據(jù)庫的附加。
提示:如果服務(wù)器操作系統(tǒng)宕機了,但數(shù)據(jù)庫忘記備份了。那么可以直接將數(shù)據(jù)庫文件復(fù)制到其他服務(wù)器中,在SQL Server直接進行附加操作,就可以完成數(shù)據(jù)庫的還原操作了。
實際上,數(shù)據(jù)庫在還原時,有很多工作需要做。比如,最重要的是查看當前待還原的數(shù)據(jù)庫是否有其他用戶的連接,如果有,則需要先斷開這些連接,然后才能進行數(shù)據(jù)的還原。那么,可以將這一系列動作合在一起,創(chuàng)建一個過程,在還原數(shù)據(jù)庫時,只需要調(diào)用該過程即可。下面是創(chuàng)建過程的T-SQL語句:
以上創(chuàng)建的過程需要放在master數(shù)據(jù)庫中,傳入的兩個參數(shù)分別是:
@dbname:要恢復(fù)的數(shù)據(jù)庫;
@dbpath:數(shù)據(jù)庫備份文件的物理路徑。
該過程內(nèi)部定義的@sql用于查找系統(tǒng)中正在運行的指定數(shù)據(jù)庫的連接,接著使用循環(huán)語句斷開所有連接,最后使用恢復(fù)語句,恢復(fù)數(shù)據(jù)庫。提示:在該過程中,使用的是完全還原語句,在實際開發(fā)中,可以采用任何還原語句;同時,用戶在還原過程中,要連接到master數(shù)據(jù)庫,否則,會造成無法斷開自己本身的連接,恢復(fù)不成功的錯誤。
管理員在日常管理中,可以采用以上介紹的多種方法完成SQL Server 2014的備份和恢復(fù)操作。但網(wǎng)絡(luò)開發(fā)人員和多數(shù)管理員還喜歡采用網(wǎng)頁遠程連接數(shù)據(jù)庫進行數(shù)據(jù)的備份和操作,這樣,即使是不懂得數(shù)據(jù)庫管理的用戶也可以采用IE訪問的方式進行數(shù)據(jù)庫的備份和還原操作。
Java提供了連接SQL Server 2014的工具,通過以上理論的講解,那么在Java中開發(fā)備份和恢復(fù)數(shù)據(jù)庫就容易了。首先是定義數(shù)據(jù)庫的連接:
以上采用了數(shù)據(jù)庫默認高級用戶sa連接SQL Server 2014的master數(shù)據(jù)庫,在實際開發(fā)中,如果不能使用sa用戶,則系統(tǒng)管理員提供的連接用戶也要具有連接master數(shù)據(jù)庫和備份恢復(fù)數(shù)據(jù)庫的權(quán)限,否則會造成備份和恢復(fù)不成功。
下面是備份數(shù)據(jù)庫的函數(shù):
下面是定義還原數(shù)據(jù)庫的函數(shù):
限于篇幅,以上列出了在Java開發(fā)中使用到的重要函數(shù),在備份函數(shù)或還原函數(shù)中只需要傳遞數(shù)據(jù)庫名稱和備份文件路徑即可。