我在SQL Server 2000上有一个小数据库(最大2GB)(是的,我知道)。
问题是数据库已达到其大小限制,不能再增长。
查看表中有一个索引总计约950 MB,碎片超过30%,我想减少它。
进行索引重建(并重新组织 - 非常绝望)我收到错误消息,因为主要内容空间不足以创建页面。
我认为对于SQL Server的更高版本,我可以禁用索引然后重建,这不应该需要任何额外的空间,但是使用我的版本是不可用的。
关于在这种情况下如何重建索引的任何想法?
好的,接受建议放弃并重新创建。我唯一的问题是创造......!
请参阅下面的使用语句,SQL SMS不断为第9行附近的第9行抛出语法错误,不要认为它喜欢这些选项,这很奇怪,因为我很懒,并且得到了SMS来生成脚本本身来自原始索引......你可能已经注意到了,我不是DBA!
USE Database
GO
ALTER TABLE [db1].[_tbl]
ADD CONSTRAINT [ck_unique]
UNIQUE NONCLUSTERED
(
[DateID] ASC,
[LRN] ASC,
[Activity] ASC,
[DateON] ASC
)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
ON [PRIMARY]
GO
告诉你什么,看看这些选项,我想我可以在不使用它们的情况下逃脱。大多数都不会默认申请吗?
欢迎来到我的工作方式!已经输入了上述声明但没有“with”部分。
现在查看SQL Server Manageblah上的GUI,我可以看到至少有一些选项没问题。
PAD_INDEX为Off,设置为重新计算统计信息,tempdb中的排序已关闭,因此:
我是否需要进行一些更改以反映其他选项?即:
IGNORE_DUP_KEY=OFF, ONLINE=OFF, ALLOW_ROW_LOCKS=ON, ALLOW_PAGE_LOCKS=ON
真的想去pub-> taxi-> home->现在睡觉!!!
答案 0 :(得分:1)
如果要重新创建索引,可以使用
USE DATABASE
DECLARE @TableName varchar(255)
DECLARE TableCursor CURSOR FOR
SELECT table_name FROM information_schema.tables
WHERE table_type = 'base table'
OPEN TableCursor
FETCH NEXT FROM TableCursor INTO @TableName
WHILE @@FETCH_STATUS = 0
BEGIN
DBCC DBREINDEX(@TableName,' ',90)
FETCH NEXT FROM TableCursor INTO @TableName
END
CLOSE TableCursor
DEALLOCATE TableCursor
如果填写错误,请尝试
dbcc checkdb(DatabaseName,repair_allow_data_loss)
我一直在使用它来重新索引大小约为2 GB的数据库。希望这有帮助