sql server数据库技术-sql server提供的数据完整性约束
1、为什么需要缩容数据库?
SQL Server数据库采用预分配空间的方式创建数据库的数据文件或日志文件。 比如数据文件的空间分配了300MB,实际只占用了20MB,这样会造成磁盘存储空间的浪费。 数据库中的每个文件都可以通过数据库收缩技术进行收缩,已经分配但未使用的页面可以被删除。 从而节省了服务器的存储成本。
2.数据库缩容原理
官方解释:收缩数据文件通过将数据页从文件末尾移动到更接近文件开头的未占用空间来恢复空间。 在文件末尾创建足够的可用空间后,可以释放文件末尾的数据页并将其返回到文件系统。
3.数据库收缩的约束和限制
缩小的数据库不能小于最初创建数据库时指定的大小。 或者使用文件大小更改操作(如 DBCC SHRINKFILE)设置的最后一个显式大小。
例如:如果最初创建的数据库大小为 10 MB,后来增长到 100 MBsql server数据库技术,即使删除了数据库中的所有数据sql server数据库技术,也只能将数据库缩小到最小 10 MB。
您不能在备份时收缩数据库。 反之,在数据库缩容的时候不能备份数据库。
4.如何收缩数据库 4.1 收缩数据库 DBCC SHRINKDATABASE
描述:缩小指定数据库中数据文件的大小。
语法格式:
DBCC SHRINKDATABASE
( database_name [ , target_percent ]
[ , { NOTRUNCATE | TRUNCATEONLY } ]
)
参数说明:
4.2 收缩数据库文件DBCC SHRINKFILE
描述:缩小当前数据库的指定数据或日志文件的大小,或者通过将数据从指定文件移动到同一文件组中的其他文件来清空文件,从而允许从数据库中删除文件。 文件大小可以缩小到小于创建文件时指定的大小。 这会将最小文件大小重置为新值。
语法格式:
DBCC SHRINKFILE
(
{ file_name | file_id }
{ [ , EMPTYFILE ]
| [ [ , target_size ] [ , { NOTRUNCATE | TRUNCATEONLY } ] ]
}
)
[ WITH NO_INFOMSGS ]
参数说明:
例如,如果您创建一个 10MB 的文件,然后在文件仍为空时将该文件缩小为 2MB,则默认文件大小将设置为 2MB。 这仅适用于永远不会包含数据的空文件。
5.例子
-- 将TestDB数据库中的TestDB文件的大小收缩到20MB。
USE TestDB ;
GO
DBCC SHRINKFILE (TestDB, 20) ;
-- 将减小 UserDB 用户数据库中数据文件和日志文件的大小,以便在数据库中留出 10% 的可用空间
DBCC SHRINKDATABASE (TestDB, 30);
-- 清理数据库日志文件为2M
USE master
ALTER DATABASE TestDB SET RECOVERY SIMPLE WITH NO_WAIT
ALTER DATABASE TestDB SET RECOVERY SIMPLE --简单模式
USE TestDB
DBCC SHRINKFILE (N'TestDB_log' , 2, TRUNCATEONLY)
--设置压缩后的日志大小为2M,可以自行指定
USE master
ALTER DATABASE TestDB SET RECOVERY FULL WITH NO_WAIT
ALTER DATABASE TestDB SET RECOVERY FULL --还原为完全模式