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