我有一个 1.5 TB 的大型数据库,其中包含图像数据。已实施归档过程,删除了大部分数据。我想缩小数据文件的大小。
我正在使用Shrink File
SSMS 2008 用户界面中的对话框。我选择执行Release unused space
,但操作在大约 30 秒后失败。我已确保没有与数据库的活动连接。错误虽然没有提供任何信息,但如下所示。
==================================
数据文件“DBNAME”收缩失败。(Microsoft.SqlServer.Smo)
------------------------------ 如需帮助,请单击: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=10.0.1600.22+((SQL_PreRelease).080709-1414+)&EvtSrc=Microsoft.SqlServer.Management.Smo.ExceptionTemplates.FailedOperationExceptionText&EvtID=Shrink+DataFile&LinkId=20476
------------------------------ 项目地点:
在 Microsoft.SqlServer.Management.Smo.DatabaseFile.Shrink(Int32 newSizeInMB,ShrinkMethod shrinkType)在 Microsoft.SqlServer.Management.SqlManagerUI.ShrinkDatabaseFiles.OnRunNow(对象发送者)
===================================
执行 Transact-SQL 语句或批处理时发生异常。(Microsoft.SqlServer.ConnectionInfo)
------------------------------ 项目地点:
在 Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(String sqlCommand,ExecutionTypes 执行类型)在 Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(StringCollection sqlCommands,ExecutionTypes 执行类型)在 Microsoft.SqlServer.Management.Smo.ExecutionManager.ExecuteNonQuery(StringCollection 查询)在 Microsoft.SqlServer.Management.Smo.DatabaseFile.Shrink(Int32 newSizeInMB,ShrinkMethod shrinkType)
===================================
当前命令发生严重错误。结果(如果有)应被丢弃。(.Net SqlClient 数据提供程序)
------------------------------ 如需帮助,请单击: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=10.00.1600&EvtSrc=MSSQLServer&EvtID=0&LinkId=20476
------------------------------ 服务器名称:SERVERNAME 错误编号:0 严重性:11 状态:0
------------------------------ 项目地点:
在 System.Data.SqlClient.SqlConnection.OnError(SqlException 异常,布尔 breakConnection)
在 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException 异常,布尔 breakConnection)
在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)在 System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj)在 System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName,Boolean async)在 System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult 结果,String methodName,在 System.Data.SqlClient.SqlCommand.ExecuteNonQuery() 处使用 Boolean sendToPipe 在 Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(String sqlCommand, ExecutionTypes executiveType)
答案1
我已经放弃了心理治疗,并开始调查我的选择移动到新文件。这个问题的答案是,我在这里提出了一个建议,解决了我最初的问题。
使用Reorganize pages before releasing unused space
小块就成功了。一旦我把它缩小一点,我就能够使用 100GB 以上的大块。
答案2
当您手动运行 DBCC SHRINKFILE 命令时您会得到什么输出?
答案3
您可能有不将表移动到新文件组的正当理由。
确保所有辅助进程(SQL 代理、日志传送、复制、DB 镜像、第三方应用程序等)也已禁用。
答案4
对我来说,重建碎片最大的表的索引后会缩小
我知道我从哪个表中删除了大部分数据,或者从统计数据中找到了它......
然后像这样打开该表
[页面过满和碎片化]
重建它 [重建聚集索引]
收缩数据文件:任务 | 收缩 | SQL Server Management Studio 中的文件,使用“在释放未使用的空间之前重新组织文件”
重建之后,收缩就可以起作用了。