本文由 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