SQL Server 2005系统数据库master重建、修复

在用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(失败)

结果集
列名数据类型描述
namesysname逻辑文件名。
fileidsmallint文件的数字标识符。
filenamenchar(260)物理文件名。
filegroupsysname文件所属的组。为便于分配和管理,可以将数据库文件分成文件组。日志文件不属于文件组。
sizenvarchar(18)文件大小。
maxsizenvarchar(18)文件可达到的最大值。此字段中的 UNLIMITED 值表示文件可以一直增大直到磁盘满为止。
growthnvarchar(18)文件的增量。表示每次需要新的空间时给文件增加的空间大小。
usagevarchar(9)文件用法。数据文件只能用于 data only,而日志文件只能用于 log only


权限
执行权限默认赋予 public 角色。

示例
下面的示例返回有关 pubs 中的文件的信息。

USE pubs
EXEC sp_helpfile

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值