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