在用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