Database File Management ->> Shrink Data File
今天在开发环境遇到了一个问题,我们发现服务器上的硬盘空间满了,查看了下发现这个盘存放的数据库文件应该是来源一个并非很大的库才对。检查之后发现这个数据库下的某个数据文件占了盘符下70%的空间,而大部分数据都来自某张表。但是即便我删除了该表里面所有的数据,这个数据文件并不会把空间都还给操作系统啊。那就面临一个如何把收缩文件大小的问题了。我最先想到的还是SQL Server下的DBCC SHRINKFILE命令,按道理来讲连续执行两条DBCC SHRINKFILE命令应该是可以达到收缩数据库文件大小的目的的。
第一条命令把文件尾部的页面尽量往文件内部靠前的空闲页面填充,这种适用于数据文件而不适用于日志文件;第二条命令把文件尾部的空白页面截断并还给操作系统。这样看好像便可以达到目的了。但是,这两条命令跑起来太慢了。首先这个文件是100GB大小,使用页面所占空间其实只有十分之一也就是10GB。第二条命令我花了快3个小时都没跑完。而且重要的是,第二条命令会造成blocking的现象。在SHRINKFILE的过程中出现某位同事无法访问某张表存储在该文件中的数据。
USE [YourDB]
GO
DBCC SHRINKFILE (28, NOTRUNCATE);
DBCC SHRINKFILE (28, TRUNCATEONLY);
于是乎我想到了另外一个办法
1)检查下同一文件组下面的其他数据文件的剩余是否大于要收缩的文件的实际已用空间大小(space used)。
2)如果是,DBCC SHRINKFILE(<FILE_ID>,EMPTYFILE)。过程可能有点慢。可以用脚本来监控数据库的空闲空间的变化(脚本1)
3)如果否,ALTER DATABASE ADD FILE加入一个文件,同不同磁盘不管,总之整个文件组下除了要收缩的文件外的其他文件的剩余可用空间总大小要大于收缩文件的已用空间大小。然后再运行DBCC SHRINKFILE(<FILE_ID>,EMPTYFILE)。
4)整个SHRINKFILE的过程最好是SET SINGLE_USER。
5)这个时候你就可以用ALTER DATABASE REMOVE FILE把文件移除出文件组。
6)这个时候如果前面你加入了文件,而你又希望文件回到原来的盘下,就SET DATABASE OFFLINE然后ALTER DATABASE MODIFY FILE修改路径,然后把文件拷贝到和你修改的路径一致的地方,然后SET DATABASE ONLINE; 如果前面不需要添加文件,而你又希望文件回到原来的盘下,直接ALTER DATABASE ADD FILE到文件组就行。
脚本1:
use [MyDB];
GO select DB_NAME() AS DbName,
CONVERT(varchar(20),DatabasePropertyEx('MyDB','Status')) ,
CONVERT(varchar(20),DatabasePropertyEx('MyDB','Recovery')),
sum(size)/128.0 AS File_Size_MB,
sum(CAST(FILEPROPERTY(name, 'SpaceUsed') AS INT))/128.0 as Space_Used_MB,
SUM( size)/128.0 - sum(CAST(FILEPROPERTY(name,'SpaceUsed') AS INT))/128.0 AS Free_Space_MB
from sys.database_files where type=0
and file_id = 28
group by type
有一个需要注意的是:
DBCC SHRINKFILE是单线程的操作
Database File Management ->> Shrink Data File的更多相关文章
- ORA-01157报错"cannot identify/lock data file"解决
sqlplus以管理员方式接入数据库,启动时出现报错,如下: > sqlplus "/as sysdba" SQL> startup ...... ORA-01157: ...
- oracle data file header replace(測)
SQL> create tablespace rm_tbs datafile 'f1.dbf' size 10m; Tablespace created. SQL> select file ...
- 【Oracle】ORA-01157: cannot identify/lock data file 201 - see DBWR trace file
今天数据库在查询数据的时候显示了这个错误: ORA-01157: cannot identify/lock data file 201 - see DBWR trace file ORA-01110: ...
- C#二次开发BIMFACE系列61 File Management文件管理服务接口二次开发及实战详解
系列目录 [已更新最新开发文章,点击查看详细] 在我的博客<C#二次开发BIMFACE系列61 File Management文件管理服务接口二次开发及实战详解>最后列出了 Fil ...
- 【MySQL】InnoDB: Error: checksum mismatch in data file 报错
参考:http://www.jb51.net/article/66951.htm 用5.7版本启动原5.5实例后,再用5.5启动出现以下报错 InnoDB: Error: checksum misma ...
- Invalid file system control data detected
今天在做mkdir操作时报错:Invalid file system control data detected.检查用户和权限没问题,再检查磁盘空间也没问题.最后在网上找到如下信息: [proble ...
- Unity3D发布WebPlayer时Failed to download data file解决方案
今天发布WebPlayer时, 发现直接打开html是可以正常运行的, 但是通过iis访问的话就会报错: Failed to download data file. 一开始以为是防火墙, 后来发现不是 ...
- [OpenGL] mac上运行NateRobin的OpenGL教程找不到 data file 解决方案
之前买的OpenGL编程指南第七版一直没看,最近开始看了,然后按照教程推荐的去指定网址下载NateRobin的OpenGL教程,但发现网址已经提示Error:404了, 然后谷歌搜索到可用的下载网址为 ...
- 1816647 - Error "Data file of SAP Note is incomplete" uploading a note in SNOTE
ymptom When uploading an SAP Note in transaction SNOTE you receive the error "Data file of SAP ...
随机推荐
- C#委托详解(3):委托的实现方式大全(续)
接上篇(C#委托详解(2):实现方式大全),本篇继续介绍委托的实现方式. 4.Action<T>和Func<T>委托 使用委托时,除了为每个参数和返回类型定义一个新委托类型之外 ...
- sample a texture as a rendertarget
ID3D11DeviceContext::PSSetShaderResources: Resource being set to PS shader resource slot 0 is still ...
- ios 分类(Category)
今天研究了类别,都是网上找的资料,类别的作用 类别主要有3个作用: (1)将类的实现分散到多个不同文件或多个不同框架中. (2)创建对私有方法的前向引用. (3 ...
- 用WebStorm编辑Markdown
前言[转http://blog.fens.me/webstorm-markdown/] WebStorm是一个非常高效的开发工具,特别对于Web前端的开发.Markdown流行,因为其简化了HTML的 ...
- javascript (js)中的基本概念
1. 基本数据类型 1.1 number (数字)在js中没有整形和浮点型的区分,所有的数字都是浮点型标识, 采用64位的浮点格式来表示数字.如果数字类型用在字符串连接表达式中,则会自动转换成字符串, ...
- 浅谈javascript中的数据类型和引用类型
1.概述 javascript中有五种简单数据类型和一种复杂数据类型. 分别是:undefind, null, number, string ,boolean ----简单数据类型 ...
- JQuery原理及深入解析--转载
总体架构 jQuery是个出色的javascript库,最近结合它写javascript,看了下源码. 先从整体.全局的看,jQuery的源码几乎都在下面的代码中: (function() { //… ...
- POJ 3696 The Luckiest number (欧拉函数,好题)
该题没思路,参考了网上各种题解.... 注意到凡是那种11111..... 22222..... 33333.....之类的序列都可用这个式子来表示:k*(10^x-1)/9进而简化:8 * (10^ ...
- EditText 属性
android:layout_gravity="center_vertical" 设置控件显示的位置:默认top,这里居中显示,还有bottom android:hint=&quo ...
- 安装mysql之后,存入中文出现乱码
如图显示:安装mysql之后,存入中文出现乱码 解决方案: 找到如图的文件位置 打开进行如图的修改: 结果: