zoukankan      html  css  js  c++  java
  • 可能发生了架构损坏。请运行 DBCC CHECKCATALOG。

    SQL 2005 修改系统表

    本文由 www.sqlstudy.com 原创,版权所有,转载请注明作者和出处!

            在 SQL Server 2000 中修改系统表的方法大部分人都知道,介绍如何在 SQL 2005 中修改系统表的资料目前还比较少,虽然微软不赞成修改系统表,而且也把修改系统表的代码隐藏起来了。但微软一贯喜欢给自己留个小后门。我是这么想的:最先知道如何修改 SQL 2005 系统表的人只有微软 SQL Server 2005 的设计、开发者。于是就到 msdn 中逛逛,最后终于找到了 SQL 2005 修改系统表的方法:)

    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 服务】--【右键】--【属性】

    SQL 2005 修改系统表的两个先决条件——单用户模式

    根据【可执行文件的路径】内容,我的是:

    "D:Microsoft SQL Server 2005MSSQL.1MSSQLBinnsqlservr.exe" -sSQLB

    命令行下,进入 sqlservr.exe 安装路径,执行:sqlservr.exe -sSQLB -m

    C:>d:D:>cd D:Microsoft SQL Server 2005MSSQL.1MSSQLBinnD:Microsoft SQL Server 2005MSSQL.1MSSQLBinn> sqlservr.exe -sSQLB -m

    -sSQLB 表示要启动的SQL Server 实例名字为:SQLB;-m 参数表示以单用户模式启动 SQL Server 实例。如果顺利的话,SQL Server 实例就启动起来了。如果启动不了呢,可以重新启动下机器,再试,如果仍然启动不了,那你可以根据报错内容,到网上找找解决方法。

    2. 使用 DAC 连接到 SQL Server 2005。

    使用 DAC 连接到 SQL Server 2005 最常见的方法就是,在命令行下执行带有 -A 参数的 sqlcmd,如:

    c:sqlcmd -E -S MYPCSQLB -A

    也可以使用 SQL Server 超级用户和密码进入:

    c:sqlcmd -U sa -P **** -S MYPCSQLB -A

    注意:这里是“MYPCSQLB”(computer_nameinstance_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。

    SQL 2005 修改系统表的两个先决条件——DAC

    就可以通过 DAC 连接到 SQL 2005 中,这时候会出现个错误,忽略它。

    SQL 2005 修改系统表——DAC错误3. 在 SQL 2005 中修改系统表use mastergocreate table ddd (id int not null)goinsert into ddd values(10)go

    这时候,我们创建了一个表: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

  • 相关阅读:
    Python解析库lxml与xpath用法总结
    安装docker时,遇到Loaded plugins...怎么办
    【AcWing】第6场周赛 B题 3734. 求和 (思维)
    CF上部分树形DP练习题
    Codeforces Round #481 (Div. 3) 经典几道思维题
    KB专题:区间DP专辑
    ZOJ 3537 Cake (凸包 + 区间DP && 最优三角形剖分)
    AtCoder Beginner Contest 171 AK!
    【算法学习笔记】分段打表
    [apue] 多进程管道读写的一些疑问
  • 原文地址:https://www.cnblogs.com/pingping/p/4146020.html
Copyright © 2011-2022 走看看