3.SQL Sewer數(shù)據(jù)庫恢復(fù)
在SQL Sever的數(shù)據(jù)庫中,系統(tǒng)數(shù)據(jù)庫占據(jù)著非常重要的位置。一般來講如果用戶數(shù)據(jù)庫壞了,可以通過還原用戶數(shù)據(jù)庫備份而達到恢復(fù)用戶數(shù)據(jù)的目的。而如果Maser數(shù)據(jù)庫損壞了,用戶將無法啟動SQL Server來還原其他任何數(shù)據(jù)庫。所以恢復(fù)SQL Server 2000用戶數(shù)據(jù)庫的前提是保證系統(tǒng)數(shù)據(jù)庫正常。
(1)系統(tǒng)數(shù)據(jù)庫概述。
在SQL Server數(shù)據(jù)庫中,系統(tǒng)信息存儲在系統(tǒng)數(shù)據(jù)庫中。安裝SQL Server后,自動建立了4個系統(tǒng)數(shù)據(jù)庫。它們分別是Master數(shù)據(jù)庫、model數(shù)據(jù)庫、tempdb數(shù)據(jù)庫和msdb數(shù)據(jù)庫。當服務(wù)器配置為復(fù)制分發(fā)服務(wù)器時,系統(tǒng)數(shù)據(jù)庫還將包括distribution數(shù)據(jù)庫。SQL Server依靠這些數(shù)據(jù)庫來運行,這些數(shù)據(jù)庫中的每個庫都在服務(wù)器上執(zhí)行特定的功能。
Master數(shù)據(jù)庫從整體上控制SQL Server的所有方面。這個數(shù)據(jù)庫中包括所有的配置信息、用戶登錄信息、當前正在服務(wù)器中運行過程的信息等等。Master數(shù)據(jù)庫是整個系統(tǒng)中最重要的數(shù)據(jù)庫。如果丟失Master數(shù)據(jù)庫,恢復(fù)所有用戶數(shù)據(jù)庫將是非常困難的事。SQL Server在運行時所做的第一件事就是尋找Master數(shù)據(jù)庫并打開它。所以在創(chuàng)建了任何用戶定義的對象后,都要備份它。
Model數(shù)據(jù)庫為新數(shù)據(jù)庫提供模版和原型。當用戶建立一個新數(shù)據(jù)庫時,SQL Server會把model數(shù)據(jù)庫中的所有對象建立一份復(fù)制并轉(zhuǎn)移到新數(shù)據(jù)庫中,然后把新數(shù)據(jù)庫的所有多余空間用空頁填滿。
tempdb數(shù)據(jù)庫是一個特殊的數(shù)據(jù)庫,它供所有訪問SQL Server的用戶使用。這個庫用來保存所有的臨時表、存儲過程和其他SQL Server建立的臨時對象。每次SQL Server重新啟動,都會清空tempdb數(shù)據(jù)庫并重建。因此永遠不要在tempdb數(shù)據(jù)庫中建立需要永久保存的表。
msdb數(shù)據(jù)庫是SQL Server中的一個用戶數(shù)據(jù)庫的特例。所有的任務(wù)調(diào)度、報警操作都存儲在msdb數(shù)據(jù)庫中。該庫的另一個功能是存儲所有備份歷史。
(2)恢復(fù)Master數(shù)據(jù)庫。
如果Master數(shù)據(jù)庫以某種方式被損壞(如由于媒體故障),而且損失很嚴重,則可能無法啟動Microsoft SQL Server實例。有兩種方法將Master數(shù)據(jù)庫返回到可用狀態(tài)。
1)從當前備份還原。可采用以下步驟從當前備份中還原Master數(shù)據(jù)庫(Transact-SQL)。
①以單用戶模式啟動SQL Server。在單用戶模式下以命令提示符啟動SQL Server的默認實例,可從命令提示符輸入:sqlservr.exe-c-m。在啟動sqlservr.exe之前,必須在命令窗口中切換到要啟動的Microsoft SQL Server實例所在的目錄。其中參數(shù)“-c”表示縮短啟動時間,SQL Server不作為Windows NT/2000的服務(wù)啟動。參數(shù)“-m”表示以單用戶模式啟動SQL Server。
②執(zhí)行RESTORE DATABASE語句以還原Master數(shù)據(jù)庫備份。同時指定:要從其中還原Master數(shù)據(jù)庫備份的備份設(shè)備。例如從磁帶中還原Master數(shù)據(jù)庫備份而不使用永久命名的備份設(shè)備,可以使用如下語句:
USE Master
GO
RESTORE DATABASE Master
FROM TAPE=‘\\.\TapeO‘
GO
如果是磁盤則將“TAPE=‘\\.\TapeO’”換成“disk=‘c:\(具體的備份文件名)‘”即可。
2)用重建主控實用工具完全重建。使用重建主控實用工具重建Master數(shù)據(jù)庫時,將導(dǎo)致以前存儲在Master數(shù)據(jù)庫中的所有數(shù)據(jù)永久丟失。如果由于可以訪問Master數(shù)據(jù)庫(至少部分可用)而能夠啟動SQL Server實例,則可以從完整數(shù)據(jù)庫備份中還原Master數(shù)據(jù)庫。然而,如果由于Master數(shù)據(jù)庫嚴重損壞而無法啟動SQL Server實例,則不能立即還原Master數(shù)據(jù)庫的備份,因為SQL Server實例需要處于運行狀態(tài)才能還原任何數(shù)據(jù)庫。首先應(yīng)使用重建主控實用工具重建Master數(shù)據(jù)庫,然后才可以用普通方法還原當前數(shù)據(jù)庫備份。可以按以下步驟重建Master數(shù)據(jù)庫。
①在Program Files\Microsoft SQL Server\80\Tools\Binn目錄中,運行rebuildm.exe重建工具。
②彈出“重建Master”對話框,單擊“瀏覽”按鈕,在“瀏覽文件夾”對話框中,選擇SQL Server 2000光盤上或用于安裝SQL Server 2000的共享網(wǎng)絡(luò)目錄中的\Data文件夾,然后單擊“確定”按鈕。
③單擊“設(shè)置”按鈕。在“排序規(guī)則設(shè)置”對話框中,驗證或更改用于Master數(shù)據(jù)庫或其他數(shù)據(jù)庫的設(shè)置。必須選擇和初次安裝時相同的字符集、排序規(guī)則和統(tǒng)一的編碼校驗。如果不選擇與初次安裝服務(wù)器相同的排序規(guī)則,將無法還原Master數(shù)據(jù)庫。此外還必須保證配置的新的Master數(shù)據(jù)庫和原來的Master數(shù)據(jù)庫大小一致。
④單擊“重建”按鈕以啟動進程。重建Master實用工具將重新安裝Master數(shù)據(jù)庫。
⑤當SQL Server完成重建Master數(shù)據(jù)庫后,它啟動MSSQLServer服務(wù),打開企業(yè)管理器,連接到服務(wù)器。
⑥添加設(shè)備,該設(shè)備要與上次備份Master數(shù)據(jù)庫的設(shè)備所在位置、名稱、類型一致。
⑦從最近一次備份中還原Master數(shù)據(jù)庫。當Master數(shù)據(jù)庫還原后,必須重新啟動SQL
⑧重新應(yīng)用自最新一次備份以來所發(fā)生的任何改變。然后還原msdb數(shù)據(jù)庫或者重建所有的任務(wù)和報警。因為重建Master數(shù)據(jù)庫的處理破壞并重建了msdb數(shù)據(jù)庫。
⑨還原其他系統(tǒng)數(shù)據(jù)庫。
⑩使用sp_attach_db系統(tǒng)存儲過程重新關(guān)聯(lián)所有用戶數(shù)據(jù)庫。
11使用企業(yè)管理器重新給數(shù)據(jù)庫用戶分配服務(wù)器登錄ID。
12重置數(shù)據(jù)庫選項。
13重新輸入所有SQL Server設(shè)置信息。
(3)還原model和msdb數(shù)據(jù)庫。
model和msdb數(shù)據(jù)庫只能從在Microsoft SQL Server 2000服務(wù)器上創(chuàng)建的備份還原。不支持從SQL Server 7.0版或更早的版本上創(chuàng)建的備份還原這些數(shù)據(jù)庫。如果msdb包含系統(tǒng)使用的調(diào)度數(shù)據(jù)或其他數(shù)據(jù),則重建Master數(shù)據(jù)庫時必須還原msdb數(shù)據(jù)庫,因為實用工具刪除并重建了msdb數(shù)據(jù)庫。這將導(dǎo)致丟失所有調(diào)度信息以及備份和還原歷史記錄。如果msdb數(shù)據(jù)庫沒有還原且無法訪問,SQL Server代理程序則無法訪問或啟動任何以前的調(diào)度任務(wù)。
Meta Data Services將msdb用作默認知識庫數(shù)據(jù)庫。Meta Data Services和msdb數(shù)據(jù)庫之間打開的連接將中斷msdb還原。若要釋放該連接,請重新啟動企業(yè)管理器并還原msdb數(shù)據(jù)庫。在完全還原msdb數(shù)據(jù)庫之前,不要單擊企業(yè)管理器中的Meta Data Services節(jié)點。
(4)還原distribution數(shù)據(jù)庫。
在使用重建主控實用工具重建Master數(shù)據(jù)庫時,不自動重建distribution數(shù)據(jù)庫,因此重建Master數(shù)據(jù)庫后不必還原distribution數(shù)據(jù)庫。如果distribution數(shù)據(jù)庫仍沒有被改動過,則可通過將數(shù)據(jù)庫附加到SQL Server自動重新創(chuàng)建distribution。另一種方法是還原distribution數(shù)據(jù)庫備份。
但是,如果不是通過還原備份或附加數(shù)據(jù)庫重新創(chuàng)建distribution數(shù)據(jù)庫,SQL Server復(fù)制實用工具不會運行,這樣會防止進行數(shù)據(jù)復(fù)制。如果許多發(fā)布服務(wù)器都使用distribution數(shù)據(jù)庫復(fù)制數(shù)據(jù),將影響許多系統(tǒng)不能還原用戶正在訪問的數(shù)據(jù)庫。因此,還原msdb數(shù)據(jù)庫時,應(yīng)停止SQL Server代理程序。如果SQL Server代理程序正在運行,它可能會訪問msdb數(shù)據(jù)庫。同樣,還原distribution數(shù)據(jù)庫時,應(yīng)停止SQL Server復(fù)制實用工具。如果SQL Server復(fù)制實用工具正在運行,它也可能會訪問distribution數(shù)據(jù)庫。必須停止的復(fù)制實用工具還包括:復(fù)制日志讀取器代理程序?qū)嵱蒙暇摺?fù)制分發(fā)代理程序?qū)嵱霉ぞ摺?fù)制快照代理程序?qū)嵱霉ぞ呒皬?fù)制合并代理程序?qū)嵱霉ぞ摺?BR>
(5)恢復(fù)用戶數(shù)據(jù)庫。
1)在本地機上進行數(shù)據(jù)庫恢復(fù)。
①啟動“企業(yè)管理器”,展開其中的選項,選擇“數(shù)據(jù)庫”,單擊右鍵,在對話框中選擇“所有任務(wù)”選項中的“還原數(shù)據(jù)庫”,出現(xiàn)“還原數(shù)據(jù)庫”窗口。
②單擊“選擇設(shè)備”按鈕,選擇要恢復(fù)的數(shù)據(jù)庫文件。選擇完畢后,“備份數(shù)量”選項將會變亮,選擇最近的一次備份。然后單擊“確定”按鈕,數(shù)據(jù)庫恢復(fù)過程開始執(zhí)行。
2)從網(wǎng)絡(luò)備份恢復(fù)。由于網(wǎng)絡(luò)上備份的SQL Server中具有和本機相同的數(shù)據(jù)庫,當原來的數(shù)據(jù)庫崩潰后,就可以直接啟用另一個,只要修改一下計算機上ODBC數(shù)據(jù)源中所設(shè)置的SQL Server主機名稱就行了。
3)使用存儲過程恢復(fù)數(shù)據(jù)庫。在SQL Server2000中微軟重新設(shè)計了數(shù)據(jù)庫文件的存儲方式,取消了新建設(shè)備再建數(shù)據(jù)庫這一繁瑣的過程。在新的存儲方式中,一個數(shù)據(jù)庫包括兩個文件,mdf數(shù)據(jù)庫文件和ldf日志文件。所以我們在重裝機器備份時可以把要備份的數(shù)據(jù)庫的這兩個文件復(fù)制出來,重新安裝之后再恢復(fù)。在SQL Server中提供了這種恢復(fù)方式的存儲過程。
①sp_attach_db[@dbname=]‘dbname’,[@filenamel=]‘filename_n’
給系統(tǒng)添加一個數(shù)據(jù)庫,在dbname指定數(shù)據(jù)庫名稱,filename n指定數(shù)據(jù)庫的文件和日志文件。
比如有一個test的庫,停止SQL Server服務(wù)備份test_data.mdf,test_log.1df,啟動SQL server,刪除這個庫,然后再把這兩上文件復(fù)制到SQL Server DATA目錄中,在Query Analyzer中執(zhí)行如下語句:
EXEC sp_attach_db@dbname=N‘test’,
@filename 1=N‘d:mssq17\data\test_data.mdf’,
@filename2=N‘d:mssq17\data\test_log.1df’
就會把這個庫加入到SQL Server Group中。
②sp_attach_single_file_db[@dbname=]‘dbname’,@physname=]‘physical_name’
這個命令和上面的功能一樣,在physical_name中只要寫上數(shù)據(jù)庫的物理文件名就可以了,日志文件SQL server會重新建立。這個存儲過程的運行要執(zhí)行下面的存儲過程:
sp_detach_db@dbname=‘dbname’
同樣以上面的為例:
EXEC sp_detach_db@dbname=‘test’
EXEC sp_attach_single_file_db@dbname=‘test’,
@physname=‘d:mssq17\data\test_data.mdf’
要注意執(zhí)行以上存儲過程的用戶要在sysadmin中。以上方法均在Windows 2000 Advanced Server,SQL Server2000上運行通過。


