今天早上突然发现,某个2008R2测试库无法在图形界面右键数据库查看属性,报错如下:
对象名‘master.dbo.spt_values’无效。(错误:208)
到系统表和视图中查看发现spt_values确实不存在。
于是果断Google发现解决答案基本都是执行sqlserver自带的u_tables.sql脚本,于是找到脚本执行之,但是报错:spt_values无效。
只能仔细去看u_tables.sql的内容,发现其内容如下:
use master
go
set nocount on
go
declare @vdt varchar(99)
select@vdt = convert(varchar,getdate(),113)
raiserror('Starting u_Tables.SQL at%s',0,1,@vdt) with nowait
raiserror('This file creates all the system tables in master.',0,1)
go
-- Create a synonym spt_values in master pointing to spt_master in Resource DB,
-- for backward compat
if object_id('spt_values','U') IS NOT NULL
begin
print 'drop table spt_values ....'
drop table spt_values
end
go
if object_id('spt_values','SN') IS NOT NULL
begin
print 'drop synonym spt_values ....'
drop synonym spt_values
end
go
if object_id('spt_values','V') IS NOT NULL
begin
print 'drop view spt_values ....'
drop view spt_values
end
go
raiserror('Creating view ''%s''.', -1,-1,'spt_values')
go
create view spt_values as
select name collate database_default as name,
number,
type collate database_default as type,
low, high, status
from sys.spt_values
go
......后边还有一堆类似的用于创建其他系统表。
这里发现脚本中将spt_values表给干掉了,然后基于这个表创建视图???显然会出现spt_values不存在的错误。
于是到一个正常的2008R2库中看发现此表是存在的,但一旦执行u_tables.sql的脚本这个表就会消失,不能查看属性的问题又会出现。那么问题来了!!!
1。这个脚本是不是微软故意放出来的坑!!说好的修复居然起到了直接把数据库图形界面废掉的功能!!
2。除了重建实例有其他办法解决问题吗?
|