本文由 www.sqlstudy.com 原創,版權全部,轉載請註明做者和出處!web
在 SQL Server 2000 中修改系統表的方法大部分人都知道,介紹如何在 SQL 2005 中修改系統表的資料目前還比較少,雖然微軟不同意修改系統表,並且也把修改系統表的代碼隱藏起來了。但微軟一向喜歡給本身留個小後門。我是這麼想的:最早知道如何修改 SQL 2005 系統表的人只有微軟 SQL Server 2005 的設計、開發者。因而就到 msdn 中逛逛,最後終於找到了 SQL 2005 修改系統表的方法:)sql
SQL 2005 修改系統表的兩個先決條件1. 在單用戶模式(single-user mode)下啓動 sql server instance(實例)。2. 使用管理員專用鏈接(DAC: dedicated administrator connections),鏈接到 SQL Server Instance下面,就來具體介紹如何實現這兩個修改系統表的先決條件。數據庫
1. 單用戶模式下啓動 SQL Server 2005 Instance(實例)。【開始】--【運行】--【services.msc】進入 Windows 服務管理器。緩存
找到 【SQL Server 服務】--【右鍵】--【屬性】服務器

根據【可執行文件的路徑】內容,個人是:網絡
"D:\Microsoft SQL Server 2005\MSSQL.1\MSSQL\Binn\sqlservr.exe" -sSQLB命令行下,進入 sqlservr.exe 安裝路徑,執行:sqlservr.exe -sSQLB -mless
C:\>d:D:\>cd D:\Microsoft SQL Server 2005\MSSQL.1\MSSQL\BinnD:\Microsoft SQL Server 2005\MSSQL.1\MSSQL\Binn> sqlservr.exe -sSQLB -m-sSQLB 表示要啓動的SQL Server 實例名字爲:SQLB;-m 參數表示以單用戶模式啓動 SQL Server 實例。若是順利的話,SQL Server 實例就啓動起來了。若是啓動不了呢,能夠從新啓動下機器,再試,若是仍然啓動不了,那你能夠根據報錯內容,到網上找找解決方法。ide
2. 使用 DAC 鏈接到 SQL Server 2005。使用 DAC 鏈接到 SQL Server 2005 最多見的方法就是,在命令行下執行帶有 -A 參數的 sqlcmd,如:ui
c:\sqlcmd -E -S MYPC\SQLB -A也可使用 SQL Server 超級用戶和密碼進入:spa
c:\sqlcmd -U sa -P **** -S MYPC\SQLB -A注意:這裏是「MYPC\SQLB」(computer_name\instance_name),而不僅僅只是 SQL Server 實例名「SQLB」。 小知識:「除默認實例外,全部數據庫引擎實例都由安裝該實例的過程當中指定的實例名標識。應用程序必須提供準備鏈接的計算機的名稱和命名實例的實例名。計算機名和實例名以格式 computer_name\ instance_name 指定」。
若是不能經過 DAC 鏈接到 SQL Server 2005 實例,那你就要檢查下,SQL Server Browser 這個服務啓動沒有。SQL Server Browser 偵聽 1434端口(UDP端口),它能夠根據客戶端發送來的實例名,返回相應的IP 和 Port,從而引導客戶端創建正確的鏈接。
大部分狀況下都能順利完成 DAC 鏈接。可是,在命令行下操做 SQL Server,你不以爲很痛苦嗎,若是沒有配置好 cmd 環境,顯示的結果老是亂七八糟的。呵呵,我在這裏介紹下如何使用 SQL Server Management Studio(SSMS)DAC 到 SQL 2005。DAC 鏈接跟普通鏈接不同,它有個本身專用的端口,咱們只要找到這個 DAC 端口,就能夠以任何方式(命令行或者 SSMS)鏈接到 SQL 2005 實例。
如何找到 DAC 的專用端口呢?當你在命令行單用戶下啓動 sql server 的時候, SQL Server 在屏幕上會輸出好多日誌信息。關鍵是找到包含「Dedicated admin connection」的內容:
Server is listening on [ 127.0.0.1 [ipv4] 1183].Dedicated admin connection support was established for listening locally on port 1183.這條信息告訴咱們,SQL 2005 在網絡地址 127.0.0.1 上的 1183 端口監聽客戶端的 DAC 鏈接。咱們啓動 SSMS,在服務器名稱中輸入:127.0.0.1,1183。這裏的 ip 和 port 中間要用英文逗號「,」來分隔。固然,也能夠在命令下經過 sqlcmd 來創建 DAC 鏈接。
c:\sqlcmd -E -S 127.0.0.1,1183須要注意的是,若是指定了 DAC 端口,就不要在 sqlcmd 後加 -A 參數,不然會出錯。這時候,也不須要啓動 SQL Server Browser 了,由於咱們已經告訴 sqlcmd 要鏈接到的 DAC 地址和端口是:127.0.0.1,1183。

就能夠經過 DAC 鏈接到 SQL 2005 中,這時候會出現個錯誤,忽略它。

這時候,咱們建立了一個表:ddd。下面在 SQL 2005 系統表 sys.sysschobjs 中查詢這個表「ddd」的元數據。sys.sysschobjs 就相似於 SQL 2000 中的系統表 dbo.sysobjects。
select * from sys.sysschobjs where name = 'ddd'下面列出的結果集中,因爲版面的緣故,我省略了 created, modified 兩個日期字段內容。
id name nsid nsclass status type pid pclass intprop created modified---------- ----- ---- ------- -------- ---- ---- ------ -------- ------- --------1211151360 ddd 1 0 917504 U 0 1 1 2008*** 2008***這時候,我想把表「ddd」改名爲「sqlstudy」:
update sys.sysschobjs set name = 'sqlstudy' where name = 'ddd'警告: 數據庫 ID 1 中的系統表 ID 34 已直接更新,但可能未維護緩存一致性。應從新啓動 SQL Server。(1 行受影響)由於有緩存致使不一致,新的表名字可能沒有立刻生效,在命令行 Ctrl+C,從新啓動 SQL Server 2005。就能夠看到表「ddd」已經更名爲「sqlstudy」了。
select * from sqlstudyid-------10補充內容:查看 SQL 2005 系統表的語句。select name from sys.all_objects where type = 'S' order by namename-------------------sysallocunitssysasymkeyssysbinobjssysbinsubobjssyscertssyschildinstssysclsobjssyscolparssysconvgroupsysdbfilessysdbregsysdercvsysdesendsysendptssysfiles1sysftindssysguidrefssyshobtcolumnssyshobtssysidxstatssysiscolssyslnklgnssyslogshipperssysmultiobjrefssysnsobjssysobjkeycryptssysobjvaluessysownerssysprivssysqnamessysremsvcbindssysrmtlgnssysrowsetcolumnssysrowsetrefssysrowsetssysrtssysscalartypessysschobjssysserefssyssingleobjrefssyssqlguidessystypedsubobjssysusermsgssyswebmethodssysxlgnssysxmitqueuesysxmlcomponentsysxmlfacetsysxmlplacementsysxpropssysxsrvs在 SQL Server 2005 master 數據庫中,共有 51 個系統表。而且這些系統表的 schema 是 「sys」。
本文《SQL 2005 修改系統表方法》示例,在 SQL Server 2005 Enterprise Edition SP2(9.00.3042.00) 環境下運行經過。操做系統:Windows Server 2003。
本文參考:http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=89594&SiteID=1