天天看點

SQL Server 2005系統資料庫master重建、修複

在用SQL Server 2005進行一項測試:如何一次删除所有使用者資料庫時,沒注意到目前資料庫是master,結果,把這裡的一些表都給删除了,進而,資料庫引擎可以正常使 用,但如果右擊任一資料庫,都會出現查找master裡的一個表的操作(對象名 master.dbo.spt_values' 無效。 (Microsoft SQL Server,錯誤: 208)),而這個表被我删除了,是以就運作不成功了,想壓縮資料庫還行用SQL語句,很麻煩。

在 網上找的大都是SQL Server 2000 master資料庫重建文章,關于SQL Server 2005 重建master的文章基本上都是隻有提問的,沒有回答的,于是在國外網站上搜尋了下,發現一個,但也很不好使,後來順着他的關鍵詞:rebuid sql Server 2005 master找到了微軟的網站,沒想到微軟早就解決這問題了,按他說的做了一遍,OK,成功,在寫這文章時又把他的MSDN位址改了下,看看有沒有中文版 的,沒想到還真有,可憐的搜尋引擎呀,這麼好的東西我怎麼在baidu及google裡都找不到呢。

雖然問題是解決了,不過還有一個問題,就是:重建後相當于資料庫重新安裝了一次,所有的登入使用者,資料庫都沒了(聽說資料都在master裡,master被重建了裡面的資料庫相關資訊當然沒了。資料庫檔案還在,沒被删除。),是以重建或者說修複好後,你還得把每個資料庫都附加進來,并建相關使用者。

微軟官方解決方法:

start /wait <CD or DVD Drive>/setup.exe /qn INSTANCENAME=<InstanceName> REINSTALL=SQL_Engine REBUILDDATABASE=1 SAPWD=<NewStrongPassword>

舉例:

start /wait L:/Servers/setup.exe /qn INSTANCENAME="MSSQLSERVER" REINSTALL=SQL_Engine REBUILDDATABASE=1 SAPWD=www_yongfa365_com

如果重裝、重建或修複其它服務,詳情參見:

英文版:http://msdn.microsoft.com/en-us/library/ms144259(SQL.90).aspx

中文版:http://msdn.microsoft.com/zh-cn/library/ms144259(SQL.90).aspx

sp_detach_db

從伺服器分離資料庫,并可以選擇在分離前在所有的表上運作 UPDATE STATISTICS。

文法

sp_detach_db [ @dbname = ] 'dbname'

    [ , [ @skipchecks = ] 'skipchecks' ]

參數

[@dbname =] 'dbname'

要分離的資料庫名稱。dbname 的資料類型為 sysname,預設值為 NULL。

[@skipchecks =] 'skipchecks'

skipchecks 的資料類型為 nvarchar(10),預設值為 NULL。如果為 true,則跳過 UPDATE STATISTICS。

如果為 false,則運作 UPDATE STATISTICS。對于要移動到隻讀媒體上的資料庫,此選項很有用。

傳回代碼值

0(成功)或 1(失敗)

結果集

注釋

使用 sp_attach_db 或 sp_attach_single_file_db 保留并重新附加分離檔案。檔案也可以移動并附加到其它伺服器上。

權限

隻有 sysadmin 固定伺服器角色的成員才能執行 sp_detach_db。

示例

下面的示例分離 pubs 資料庫,并将 skipchecks 設為 true。

EXEC sp_detach_db 'pubs', 'true'

sp_attach_db

将資料庫附加到伺服器。

文法

sp_attach_db [ @dbname = ] 'dbname'

    , [ @filename1 = ] 'filename_n' [ ,...16 ]

參數

[@dbname =] 'dbname'

要附加到伺服器的資料庫的名稱。該名稱必須是唯一的。dbname 的資料類型為 sysname,預設值為 NULL。

[@filename1 =] 'filename_n'

數 據庫檔案的實體名稱,包括路徑。filename_n 的資料類型為 nvarchar(260),預設值為 NULL。最多可以指定 16 個檔案名。參數名稱以 @filename1 開始,遞增到 @filename16。檔案名清單至少必須包括主檔案,主檔案包含指向資料庫中其它檔案的系統表。該清單還必須包括資料庫分離後所有被移動的檔案。

傳回代碼值

0(成功)或 1(失敗)

結果集

注釋

隻應對以前使用顯式 sp_detach_db 操作從資料庫伺服器分離的資料庫執行 sp_attach_db。如果必須指定多于 16 個檔案,請使用帶有 FOR ATTACH 子句的 CREATE DATABASE。

如果将資料庫附加到的伺服器不是該資料庫從中分離的伺服器,并且啟用了分離的資料庫以進行複制,則應該運作 sp_removedbreplication 從資料庫删除複制。

權限

隻有 sysadmin 和 dbcreator 固定伺服器角色的成員才能執行本過程。

示例

下面的示例将 pubs 中的兩個檔案附加到目前伺服器。

EXEC sp_attach_db @dbname = N'pubs',

   @filename1 = N'c:/Program Files/Microsoft SQL Server/MSSQL/Data/pubs.mdf',

   @filename2 = N'c:/Program Files/Microsoft SQL Server/MSSQL/Data/pubs_log.ldf'

sp_attach_single_file_db

将隻有一個資料檔案的資料庫附加到目前伺服器。

文法

sp_attach_single_file_db [ @dbname = ] 'dbname'

    , [ @physname = ] 'physical_name'

參數

[@dbname =] 'dbname'

要附加到伺服器的資料庫的名稱。dbname 的資料類型為 sysname,預設值為 NULL。

[@physname =] 'phsyical_name'

據庫檔案的實體名稱,包括數路徑。physical_name 的資料類型為 nvarchar(260),預設值為 NULL。

傳回代碼值

0(成功)或 1(失敗)

結果集

注釋

當使用 sp_attach_single_file_db 将資料庫附加到伺服器時,它建立一個新的日志檔案并執行額外的清除工作,從新附加的資料庫中删除複制。

僅對以前使用顯式 sp_detach_db 操作從伺服器分離的資料庫執行 sp_attach_single_file_db。

權限

隻有 sysadmin 和 dbcreator 固定伺服器角色的成員才能執行本過程。

示例

下面的示例分離 pubs,然後将 pubs 中的一個檔案附加到目前伺服器。

EXEC sp_detach_db @dbname = 'pubs'

EXEC sp_attach_single_file_db @dbname = 'pubs',

   @physname = 'c:/Program Files/Microsoft SQL Server/MSSQL/Data/pubs.mdf'

sp_helpfile

傳回與目前資料庫關聯的檔案的實體名稱及特性。使用此存儲過程确定附加到伺服器或從伺服器分離的檔案名。

文法

sp_helpfile [ [ @filename = ] 'name' ]

參數

[@filename =] 'name'

是目前資料庫中任意檔案的邏輯名稱。name 的資料類型為 sysname,預設值為 NULL。如果不指定 name,會列出目前資料庫中所有檔案的特性。

傳回代碼值

0(成功)或 1(失敗)

結果集
列名 資料類型 描述
name sysname 邏輯檔案名。
fileid smallint 檔案的數字辨別符。
filename nchar(260) 實體檔案名。
filegroup sysname 檔案所屬的組。為便于配置設定和管理,可以将資料庫檔案分成檔案組。日志檔案不屬于檔案組。
size nvarchar(18) 檔案大小。
maxsize nvarchar(18) 檔案可達到的最大值。此字段中的 UNLIMITED 值表示檔案可以一直增大直到磁盤滿為止。
growth nvarchar(18) 檔案的增量。表示每次需要新的空間時給檔案增加的空間大小。
usage varchar(9) 檔案用法。資料檔案隻能用于 data only,而日志檔案隻能用于 log only。

權限

執行權限預設賦予 public 角色。

示例

下面的示例傳回有關 pubs 中的檔案的資訊。

USE pubs

EXEC sp_helpfile