2009-02-12 74 views
3

我们正在使用我们的一个生产数据库并在另一台服务器上创建副本以进行只读目的。只读数据库位于SQL Server 2008上。一旦数据库位于新服务器上,我们希望将其优化为只读使用。准备只读数据库的最佳方法

一个问题是,有一些未使用的表中有大量的分配空间。我预计的另一个问题是索引的碎片化。我不确定表碎片是否是一个问题。

涉及到的问题是什么,最好的方法是什么? SQL Server中包含的存储过程有哪些帮助?我试过运行DBCC SHRINKDATABASE,但是这并没有释放未使用的空间。

编辑:我用收缩数据库具体的命令是

DBCC SHRINKDATABASE (dbname, 0) 
GO 

它跑了几个小时。当我使用sp_spaceused检查表空间时,没有任何未使用的空间被释放。

+0

而不是指定可用空间尝试以下操作:DBCC SHRINKDATABASE(DBName,TRUNCATEONLY); – 2009-02-12 16:47:30

回答

0

我认为只需从备份重新创建即可。

tablesindexes放在不同的物理磁盘上总是有帮助。当您在另一个文件组上重新创建索引时,索引将从头开始重建,因此不会被分段。

1

您可能希望考虑的一件事是将数据库的恢复模式更改为简单。如果您不打算对数据库执行任何写入操作,那么您还可以从事务日志的自动截断中受益,并消除使用其他恢复模型的管理开销。如果您进行任何重大结构更改(如索引),则始终可以执行临时备份。

您可能还希望将未使用的表放置在单独的文件组中,使其远离要访问的数据文件。也许考虑将未使用的表放在较低等级的磁盘存储上,以节省成本。

有些事情要考虑DBCC SHRINKDATABASE,你不能缩小超过数据库的最小大小。

尝试以下面的形式发布声明。

DBCC SHRINKDATABASE (DBName, TRUNCATEONLY); 

干杯,约翰

+0

数据库的最小大小远小于数据库中的数据量。我会尝试TRUNCATEONLY选项。谢谢! – 2009-02-12 18:05:24

+0

@Eric Ness:好东西,让我知道你怎么样。 – 2009-02-12 18:11:41

0

没有为收缩或截断在MSSQL Server中的数据库的工具。我认为你选择数据库的属性,你会发现它。这可以在复制备份之前或之后完成。

某些形式的复制可能会做你想要的。

1

有几件事情可以做:

首先 - 除非你在磁盘上所剩无几不用担心绝对分配DB大小。

第二 - Idera有很多很酷的SQL Server工具,其中一个对数据库进行碎片整理。 http://www.idera.com/Content/Show27.aspx

第三次 - 删除和重新创建聚集索引本质上也是对表进行碎片整理 - 并重新创建所有非聚簇索引(并对它们进行碎片整理)。请注意,这可能会扩大数据库的分配大小(再次,不用担心)并花费很长时间(聚簇索引重建很昂贵)。