Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1289389
  • 博文数量: 107
  • 博客积分: 1456
  • 博客等级: 上尉
  • 技术积分: 1868
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-13 15:33
文章分类

全部博文(107)

文章存档

2021年(2)

2016年(8)

2015年(8)

2014年(10)

2013年(20)

2012年(38)

2011年(21)

分类: 系统运维

2014-06-27 10:53:12

上个月好忙,没有尽头的那种忙。但忙归忙,还是会遇到很多有趣的问题。特别是在上个月行将结束的最后一天,我们遇到的那个问题。

这是一个很少见的问题。虽然在某个特定的场景下很容易出现,但还是很少人会真正遇到。它不仅会发生在SQL Server 2005环境下,也会发生在SQL Server 2008环境下(虽然在SQL Server 2008环境下我还没有真正测试过)。

想必大家都很清楚,在系统数据库中,存在一个名为master的数据库。它是SQL server在运行时需要用到的主数据库。在SQL Server 2005环境下查看master数据库,可以看到5-6张系统表。但这些系统表的具体内容是什么,恐怕就没人知道了。而且,如果这些表丢了,会怎么样?

你可能会说:“什么?丢失系统表?在系统数据库里?”但是相信我,这不是不可能的事。右键这些系统表中的一张,然后选择删除...所以你知道这是怎么一回事了吧...

PS:这里只是解释说明,希望大家不要真的在服务器上操作删除...

导致系统表丢失的原因有很多种。在SQL Server 2000到SQL Server 2005的升级过程中,如果操作不当,就会导致系统表丢失。还有就是用户自己的问题(右键-删除),也会导致系统表丢失。如果是要应对用户误删的情形,我们可以安装一个操作追踪器——C2 Audit Traces。这款追踪器可以记录操作删除的用户名及时间。不过由于它的追踪记录只能保存一段时间,所以一些重要的信息很可能会被自动刷新。

现在让我们回到问题上——当系统表丢失我们该怎么办?其实问题不大,只有在丢失dbo.spt_values这张表的时候,我们会无法通过右键查看数据库对象的属性。比如,右键查看一个数据库,选择属性,就会出现这样一条报错:
Invalid object name 'master.dbo.spt_values'
这时不用惊慌,它是可以被修复的。在SQL Server的安装目录下(\MSSQL\Install),有一个名为u_tables.sql的sql脚本。只要在丢失系统文件的数据库服务器上,执行这个脚本,问题就修复了:系统表dbo.spt_monitor和 dbo.spt_values会重新生成,上面那条报错也将不复存在。

至于其他几张系统表,没有初始化脚本。不过我们可以从其他正常的服务器上,把其他几张表导出来,再导入到有问题的服务器。

希望这篇文章能帮到你!

原文地址:http://blogs.msdn.com/b/suhde/archive/2009/04/05/invalid-object-name-master-dbo-spt-values-microsoft-sql-server-error-208.aspx
阅读(3034) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~