jco*_*and 50 sql-server-2008 sql-server shrink
在 SQL Server(在本例中为 2008)中,如何快速缩小实例上所有数据库的所有文件,包括日志和数据?我可以通过 SSMS 并右键单击每个并选择任务 -> 收缩,但我正在寻找更快的东西。
我编写了一些“创建数据库”脚本,但忘记了它们的默认值已经膨胀,并且不需要为该项目中的这些文件保留太多空间。
小智 65
当您从 GUI 执行“任务 -> 收缩”时,它实际上会DBCC SHRINKDATABASE在幕后发出命令。尝试一下。当对话框出现时,不要单击“确定”按钮。相反,单击“脚本”按钮。您将在查询窗口中看到该命令。将它与对 sys.databases 的查询结合起来(忽略 master 和 msdb),您可以制作一个脚本来缩小所有数据库。
例如(取自 jcolebrand 的评论):
SELECT
'USE [' + d.name + N']' + CHAR(13) + CHAR(10)
+ 'DBCC SHRINKFILE (N''' + mf.name + N''' , 0, TRUNCATEONLY)'
+ CHAR(13) + CHAR(10) + CHAR(13) + CHAR(10)
FROM
sys.master_files mf
JOIN sys.databases d
ON mf.database_id = d.database_id
WHERE d.database_id > 4;
Run Code Online (Sandbox Code Playgroud)
复制该查询的输出并运行它以缩小所有文件。
Cod*_*awk 24
一行sql语句怎么样?
请在执行以下 sql 语句之前阅读这篇非常有趣的博客文章。
EXEC sp_MSForEachDB 'DBCC SHRINKDATABASE (''?'' , 0)'
Run Code Online (Sandbox Code Playgroud)
Tho*_*ser 15
DBCC SHRINKDB(及其表亲 SHRINKFILE)非常慢,因为该代码中有很多单线程执行。
缩小数据库文件的一种更快的方法是:
sp_spaceused确定有多大)因为索引重建是大规模并行的,所以这种技术通常会导致数据库收缩得更快。当然,它确实需要您在进程进行时为新文件组留出一些额外空间。但是,您只需要新文件组中有足够的空间来容纳实例中最大的文件组(因为您将在执行过程中回收空间)。
此技术还具有在此过程中对索引进行碎片整理的额外好处。
小智 14
我稍微调整了查询以仅在请求时缩小 LOG:
set nocount on
SELECT
'USE [' + d.name + N']' + CHAR(13) + CHAR(10)
+ 'DBCC SHRINKFILE (N''' + mf.name + N''' , 0, TRUNCATEONLY)'
+ CHAR(13) + CHAR(10) + CHAR(13) + CHAR(10)
FROM
sys.master_files mf
JOIN sys.databases d
ON mf.database_id = d.database_id
WHERE d.database_id > 4 and mf.type_desc = 'LOG'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
129358 次 |
| 最近记录: |