转-SQL 2005修改系统表
FROM:http://blog.csdn.net/liangCK/archive/2008/10/07/3029315.aspx
在 SQL Server 2000 中修改系統(tǒng)表的方法大部分人都知道,介紹如何在 SQL 2005 中修改系統(tǒng)表的資料目前還比較少,雖然微軟不贊成修改系統(tǒng)表,而且也把修改系統(tǒng)表的代碼隱藏起來(lái)了。但微軟一貫喜歡給自己留個(gè)小后門(mén)。我是這么想的:最先知道如何修改 SQL 2005 系統(tǒng)表的人只有微軟 SQL Server 2005 的設(shè)計(jì)、開(kāi)發(fā)者。于是就到 msdn 中逛逛,最后終于找到了 SQL 2005 修改系統(tǒng)表的方法:)
SQL 2005 修改系統(tǒng)表的兩個(gè)先決條件
1. 在單用戶(hù)模式(single-user mode)下啟動(dòng) sql server instance(實(shí)例)。 2. 使用管理員專(zhuān)用連接(DAC: dedicated administrator connections),連接到 SQL Server Instance下面,就來(lái)具體介紹如何實(shí)現(xiàn)這兩個(gè)修改系統(tǒng)表的先決條件。
1. 單用戶(hù)模式下啟動(dòng) SQL Server 2005 Instance(實(shí)例)。
【開(kāi)始】--【運(yùn)行】--【services.msc】進(jìn)入 Windows 服務(wù)管理器。
找到 【SQL Server 服務(wù)】--【右鍵】--【屬性】
根據(jù)【可執(zhí)行文件的路徑】?jī)?nèi)容,我的是:
"D:\Microsoft SQL Server 2005\MSSQL.1\MSSQL\Binn\sqlservr.exe" -sSQLB命令行下,進(jìn)入 sqlservr.exe 安裝路徑,執(zhí)行:sqlservr.exe -sSQLB -m
C:\>d: D:\>cd D:\Microsoft SQL Server 2005\MSSQL.1\MSSQL\Binn D:\Microsoft SQL Server 2005\MSSQL.1\MSSQL\Binn> sqlservr.exe -sSQLB -m-sSQLB 表示要啟動(dòng)的SQL Server 實(shí)例名字為:SQLB;-m 參數(shù)表示以單用戶(hù)模式啟動(dòng) SQL Server 實(shí)例。如果順利的話,SQL Server 實(shí)例就啟動(dòng)起來(lái)了。如果啟動(dòng)不了呢,可以重新啟動(dòng)下機(jī)器,再試,如果仍然啟動(dòng)不了,那你可以根據(jù)報(bào)錯(cuò)內(nèi)容,到網(wǎng)上找找解決方法。
2. 使用 DAC 連接到 SQL Server 2005。
使用 DAC 連接到 SQL Server 2005 最常見(jiàn)的方法就是,在命令行下執(zhí)行帶有 -A 參數(shù)的 sqlcmd,如:
c:\sqlcmd -E -S MYPC\SQLB -A也可以使用 SQL Server 超級(jí)用戶(hù)和密碼進(jìn)入:
c:\sqlcmd -U sa -P **** -S MYPC\SQLB -A注意:這里是“MYPC\SQLB”(computer_name\instance_name),而不單單只是 SQL Server 實(shí)例名“SQLB”。 小知識(shí):“除默認(rèn)實(shí)例外,所有數(shù)據(jù)庫(kù)引擎實(shí)例都由安裝該實(shí)例的過(guò)程中指定的實(shí)例名標(biāo)識(shí)。應(yīng)用程序必須提供準(zhǔn)備連接的計(jì)算機(jī)的名稱(chēng)和命名實(shí)例的實(shí)例名。計(jì)算機(jī)名和實(shí)例名以格式 computer_name\ instance_name 指定”。
如果不能通過(guò) DAC 連接到 SQL Server 2005 實(shí)例,那你就要檢查下,SQL Server Browser 這個(gè)服務(wù)啟動(dòng)沒(méi)有。SQL Server Browser 偵聽(tīng) 1434端口(UDP端口),它可以根據(jù)客戶(hù)端發(fā)送來(lái)的實(shí)例名,返回相應(yīng)的IP 和 Port,從而引導(dǎo)客戶(hù)端建立正確的連接。
大部分情況下都能順利完成 DAC 連接。但是,在命令行下操作 SQL Server,你不覺(jué)得很痛苦嗎,如果沒(méi)有配置好 cmd 環(huán)境,顯示的結(jié)果總是亂七八糟的。呵呵,我在這里介紹下如何使用 SQL Server Management Studio(SSMS)DAC 到 SQL 2005。DAC 連接跟普通連接不一樣,它有個(gè)自己專(zhuān)用的端口,我們只要找到這個(gè) DAC 端口,就可以以任何方式(命令行或者 SSMS)連接到 SQL 2005 實(shí)例。
如何找到 DAC 的專(zhuān)用端口呢?當(dāng)你在命令行單用戶(hù)下啟動(dòng) sql server 的時(shí)候, SQL Server 在屏幕上會(huì)輸出好多日志信息。關(guān)鍵是找到包含“Dedicated admin connection”的內(nèi)容:
Server is listening on [ 127.0.0.1 [ipv4] 1183]. Dedicated admin connection support was established for listening locally on port 1183.這條信息告訴我們,SQL 2005 在網(wǎng)絡(luò)地址 127.0.0.1 上的 1183 端口監(jiān)聽(tīng)客戶(hù)端的 DAC 連接。我們啟動(dòng) SSMS,在服務(wù)器名稱(chēng)中輸入:127.0.0.1,1183。這里的 ip 和 port 中間要用英文逗號(hào)“,”來(lái)分隔。當(dāng)然,也可以在命令下通過(guò) sqlcmd 來(lái)建立 DAC 連接。
c:\sqlcmd -E -S 127.0.0.1,1183需要注意的是,如果指定了 DAC 端口,就不要在 sqlcmd 后加 -A 參數(shù),否則會(huì)出錯(cuò)。這時(shí)候,也不需要啟動(dòng) SQL Server Browser 了,因?yàn)槲覀円呀?jīng)告訴 sqlcmd 要連接到的 DAC 地址和端口是:127.0.0.1,1183。
就可以通過(guò) DAC 連接到 SQL 2005 中,這時(shí)候會(huì)出現(xiàn)個(gè)錯(cuò)誤,忽略它。
3. 在 SQL 2005 中修改系統(tǒng)表
use master gocreate table ddd (id int not null) goinsert into ddd values(10) go這時(shí)候,我們創(chuàng)建了一個(gè)表:ddd。下面在 SQL 2005 系統(tǒng)表 sys.sysschobjs 中查詢(xún)這個(gè)表“ddd”的元數(shù)據(jù)。sys.sysschobjs 就類(lèi)似于 SQL 2000 中的系統(tǒng)表 dbo.sysobjects。
select * from sys.sysschobjs where name = 'ddd'下面列出的結(jié)果集中,由于版面的緣故,我省略了 created, modified 兩個(gè)日期字段內(nèi)容。
id name nsid nsclass status type pid pclass intprop created modified ---------- ----- ---- ------- -------- ---- ---- ------ -------- ------- -------- 1211151360 ddd 1 0 917504 U 0 1 1 2008*** 2008***這時(shí)候,我想把表“ddd”更名為“sqlstudy”:
update sys.sysschobjs set name = 'sqlstudy' where name = 'ddd' 警告: 數(shù)據(jù)庫(kù) ID 1 中的系統(tǒng)表 ID 34 已直接更新,但可能未維護(hù)緩存一致性。應(yīng)重新啟動(dòng) SQL Server。 (1 行受影響)因?yàn)橛芯彺鎸?dǎo)致不一致,新的表名字可能沒(méi)有馬上生效,在命令行 Ctrl+C,重新啟動(dòng) SQL Server 2005。就可以看到表“ddd”已經(jīng)改名為“sqlstudy”了。
select * from sqlstudy id ------- 10補(bǔ)充內(nèi)容:查看 SQL 2005 系統(tǒng)表的語(yǔ)句。
select name from sys.all_objects where type = 'S' order by name name ------------------- sysallocunits sysasymkeys sysbinobjs sysbinsubobjs syscerts syschildinsts sysclsobjs syscolpars sysconvgroup sysdbfiles sysdbreg sysdercv sysdesend sysendpts sysfiles1 sysftinds sysguidrefs syshobtcolumns syshobts sysidxstats sysiscols syslnklgns syslogshippers sysmultiobjrefs sysnsobjs sysobjkeycrypts sysobjvalues sysowners sysprivs sysqnames sysremsvcbinds sysrmtlgns sysrowsetcolumns sysrowsetrefs sysrowsets sysrts sysscalartypes sysschobjs sysserefs syssingleobjrefs syssqlguides systypedsubobjs sysusermsgs syswebmethods sysxlgns sysxmitqueue sysxmlcomponent sysxmlfacet sysxmlplacement sysxprops sysxsrvs在 SQL Server 2005 master 數(shù)據(jù)庫(kù)中,共有 51 個(gè)系統(tǒng)表。并且這些系統(tǒng)表的 schema 是 “sys”。
本文《SQL 2005 修改系統(tǒng)表方法》示例,在 SQL Server 2005 Enterprise Edition SP2(9.00.3042.00) 環(huán)境下運(yùn)行通過(guò)。操作系統(tǒng):Windows Server 2003。
本文參考:http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=89594&SiteID=1
轉(zhuǎn)載于:https://www.cnblogs.com/xioxu/archive/2009/02/20/1394995.html
總結(jié)
以上是生活随笔為你收集整理的转-SQL 2005修改系统表的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: AD排错的一般流程
- 下一篇: AIX操作系统启动详细介绍