SQL收缩数据库
SQL收缩数据库
SQL里面删除数据后,MDF的大小并没有减少,有没有办法能删除数据后,mdf文件能跟着减少。
收缩数据库
SQL Server 2000 自动收缩有大量可用空间的数据库。该进程仅适用于那些
autoshrink 选项设置为 true 的数据库。服务器定期检查每个数据库中的空间使用情况。如果发现数据库中有大量闲置空间,而且它的 autoshrink 选项设置为 true,SQL Server 就缩小该数据库中的文件大小。也可以使用 SQL Server 企业管理器或 DBCC SHRINKDATABASE 和 DBCC SHRINKFILE 语句,手工收缩数据库中的文件。
如何收缩数据库(企业管理器)
展开服务器组,然后展开服务器。
展开"数据库"文件夹,右击要收缩的数据库,指向"所有任务",然后单击"收缩数据库"命令。
要指定数据库的收缩量,请从以下选项中选择:
在"收缩后文件中的最大可用空间"中输入收缩后数据库中剩余的可用空间量。以"数据库大小,可用空间"值作为依据。
选择"在收缩前将页移到文件起始位置",使释放的文件空间保留在数据库文件中,并使包含数据的页移到数据库文件的起始位置。
单击"调度"命令创建或更改自动收缩数据库的频率和时间。
如果要收缩个别的数据库文件,请单击"收缩文件"。 说明 不能将数据库的大小收缩到小于 model 数据库的大小
DBCC SHRINKDATABASE
收缩指定数据库中的数据文件大小。
语法
DBCC SHRINKDATABASE
( database_name [ , target_percent ]
[ , { NOTRUNCATE | TRUNCATEONLY } ]
)
参数
database_name
是要收缩的数据库名称。数据库名称必须符合标识符的规则。有关更多信息,请参见使用标识符。
target_percent
是数据库收缩后的数据库文件中所要的剩余可用空间百分比。
NOTRUNCATE
导致在数据库文件中保留所释放的文件空间。如果未指定,将所释放的文件空间释放给操作系统。 TRUNCATEONLY
导致将数据文件中的任何未使用的空间释放给操作系统,并将文件收缩到上一次所分配的大小,从而减少文件大小,而不移动任何数据。不试图重新定位未分配页的行。使用 TRUNCATEONLY 时,忽略 target_percentis。
注释
Microsoft® SQL Server™ 可收缩:
特定数据库的所有数据和日志文件。执行 DBCC SHRINKDATABASE。
一次一个特定数据库中的数据或日志文件。执行 DBCC SHRINKFILE。
DBCC SHRINKDATABASE 以每个文件为单位对数据文件进行收缩。然而,DBCC
SHRINKDATABASE 在对日志文件进行收缩时,看起来好像所有的日志文件都存在于一个连续的日志池中。
假设名为 mydb 的数据库有两个数据文件和两个日志文件。这些数据文件和日志文件大小都为 10 MB。第一个数据文件包含 6 MB 数据。
对于每个文件,SQL Server 计算目标大小,即要收缩文件到的大小。当用
target_percent 指定 DBCC SHRINKDATABASE 时,SQL Server 计算的目标大小是收缩后文件中的 target_percent 可用空间大小。例如,如果指定按
target_percent 为 25 收缩 mydb。SQL Server 计算的该文件的目标大小为 8
MB(6 MB 数据加上 2 MB 可用空间)。因此,SQL Server 将任何数据从数据文件的最后 2 MB 中移动到数据文件前 8 MB 的可用空间中,然后对该文件进行收缩。
假设 mydb 的第一个数据文件包含 7 MB 的数据。若将 target_percent 指定为
30,则允许将该数据文件收缩到所要的可用百分比 30。然而,若将
target_percent 指定为 40,就不会收缩该数据文件,因为 SQL Server 不能将文件收缩到比数据当前占有的空间还小的程度。也可以从另一个角度考虑这个问题:40% 要求的可用空间 + 70% 完整的数据文件(10 MB 中的 7 MB)大于 100%。因为所要求的可用百分比加上数据文件占用的当前百分比大于 100%(多出
10%),所以任何大于 30 的 target_size 都不会收缩该数据文件。
对于日志文件,SQL Server 使用 target_percent 以对整个日志的目标大小进行计算;因此,target_percent 是收缩操作后日志中的可用空间大小。之后,整个日志的目标大小可以解释为每个日志文件的目标大小。DBCC
SHRINKDATABASE 尝试立即将每个物理日志文件收缩到其目标大小。如果虚拟日志中的所有逻辑日志部分都没有超出日志文件的目标大小,则该文件将成功截断,DBCC SHRINKDATABASE 完成且不显示任何消息。然而,如果虚拟日志中的逻辑日志部分超出其目标大小,则 SQL Server 释放尽可能多的空间并发出一条消息。该消息告诉您需要执行什么操作来移动文件末尾超出虚拟日志的逻辑日志部分。执行完该操作后,可以重新发出 DBCC SHRINKDATABASE 命令以释放剩余的空间。有关收缩事务日志的更多信息,请参见收缩事务日志。 因为日志文件只能收缩到虚拟日志文件边界,所以不可能将日志文件收缩到比虚拟日志文件更小(即使现在没有使用该文件)。例如,可以将数据库的 1 GB 日志文件收缩到只有 128 MB。有关截断的更多信息,请参见截断事务日志。有关确定虚拟日志文件大小的更多信息,请参见虚拟日志文件。
由 DBCC SHRINKDATABASE 计算的数据和日志文件的目标大小始终不小于文件的最小大小。文件的最小大小是在文件最初创建时指定的大小,或是上一次用更改文件大小的操作(如用带有 MODIFY FILE 选项的 ALTER DATABASE 或 DBCC
SHRINKFILE)显式设置的大小。例如,如果在执行 CREATE DATABASE 时,将 mydb
的所有数据和日志文件大小都指定为 10 MB,则每个文件的最小大小都为 10 MB。DBCC SHRINKDATABASE 不能收缩任何小于 10 MB 的文件。如果使用带有 MODIFY
FILE 选项的 ALTER DATABASE 将其中的一个文件显示增长到 20 MB,则该文件新的最小大小为 20 MB。若要将文件大小收缩到小于其最小大小,请使用 DBCC
SHRINKFILE 并指定新大小。执行 DBCC SHRINKFILE 会将文件的最小大小更改为所指定的新大小。
在使用数据文件时,DBCC SHRINKDATABASE 有 NOTRUNCATE 和 TRUNCATEONLY 选项。如果为日志文件指定这两个选项,则将忽略这两个选项。DBCC
SHRINKDATABASE 不带任何选项等价于 DBCC SHRINKDATABASE 带有 NOTRUNCATE
选项,后面还要跟着带有 TRUNCATEONLY 选项的 DBCC SHRINKDATABASE。
不论是否指定 target_percent,NOTRUNCATE 选项都执行 DBCC SHRINKDATABASE
的实际数据移动操作(包括将分配页从文件的末尾移动到文件前面的未分配页)。然而,文件末尾的可用空间不会返回给操作系统,文件的物理大小也不会更改。因此,如果指定 NOTRUNCATE 选项,数据文件好像没有收缩。例如,假设再次使用 mydb 数据库,该 mydb 有两个数据文件和两个日志文件。第二个数据文件和第二个日志文件的大小都为 10 MB。执行 DBCC SHRINKDATABASE mydb NOTRUNCATE
时,Microsoft SQL Server 将数据从数据文件的后面几页移动到前面几页中。而文件的大小仍然为 10 MB。
TRUNCATEONLY 选项将文件末尾的所有可用空间收回给操作系统。然而,TRUNCATEONLY 在文件内不执行任何页移动操作。指定的文件只能收缩到上一次分配的大小。如果使用 TRUNCATEONLY 选项指定 target_percent,则忽略后者。
所生成的数据库不能比 model 数据库更小。
要收缩的数据库不必在单用户模式下;其他的用户仍可以在数据库收缩时对其进行工作。这也包括系统数据库。
结果集
下表描述结果集内的列。
列名 描述
DbId SQL Server 试图收缩的文件的数据库标识号。
FileId SQL Server 试图收缩的文件的文件标识号。
CurrentSize 文件当前占用的 8KB 页数。
MinimumSize 文件可以占用的最小 8KB 页数。这与文件的最小大小或最初创建时的大小相对应。 UsedPages 文件当前使用的 8KB 页数。
EstimatedPages SQL Server 估计文件能够收缩到的 8KB 页数。
说明 SQL Server 并不显示未收缩的文件的行。
权限
DBCC SHRINKDATABASE 权限默认授予 sysadmin 固定服务器角色或 db_owner 固定数据库角色的成员且不可转让。
示例
下例将 UserDB 用户数据库中的文件减小,以使 UserDB 中的文件有 10% 的可用空间。
DBCC SHRINKDATABASE (UserDB, 10)
GO
sql shrinkfile收缩日志写法
sql shrinkfile收缩日志写法
SQL Server是一种关系型数据库管理系统,它的日志文件是用来记录数据库操作的详细信息的。在使用SQL Server时,我们经常需要对日志文件进行收缩,以便释放磁盘空间。在本文中,我们将介绍如何使用SQL Server的shrinkfile命令来收缩日志文件。
首先,我们需要了解一些基本概念。SQL Server的日志文件分为两种类型:事务日志和错误日志。事务日志用于记录数据库操作的详细信息,而错误日志用于记录SQL Server的错误和警告信息。事务日志文件通常具有较小的大小,而错误日志文件通常具有较大的大小。
在SQL Server中,我们可以使用shrinkfile命令来收缩日志文件。该命令的语法如下:
DBCC SHRINKFILE (file_name [, target_size] [, truncateonly])
其中,file_name是要收缩的日志文件的名称;target_size是要收缩到的目标大小(以MB为单位);truncateonly是一个可选参数,用于指定是否仅截断日志文件而不进行实际的收缩操作。
在使用shrinkfile命令时,我们需要注意以下几点:
1. 在收缩日志文件之前,我们应该先备份数据库。这是因为收缩日志文件可能会导致数据丢失或损坏,而备份可以帮助我们恢复数据。
2. 我们应该尽量避免频繁地收缩日志文件。频繁的收缩操作可能会导致性能下降,并且可能会导致日志文件无法正常工作。
3. 我们应该根据实际情况来确定目标大小。如果我们将目标大小设置得太小,可能会导致日志文件再次增长,从而浪费磁盘空间。如果我们将目标大小设置得太大,可能会导致性能下降。
4. 我们应该在非繁忙时段进行收缩操作。收缩操作可能会占用大量的系统资源,从而影响数据库的性能。
下面是一个示例,演示如何使用shrinkfile命令来收缩日志文件:
ORACLE常用SQL语句大全
FLC集成
ORACLE常用SQL语句大全
一、基础
1、说明:创建数据库
CREATE DATABASE database-name
2、说明:删除数据库
drop database dbname
3、说明:备份sql server
--- 创建 备份数据的 device
USE master
EXEC sp_addumpdevice 'disk', 'testBack', 'c:/mssql7backup/MyNwind_1.dat'
--- 开始 备份
BACKUP DATABASE pubs TO testBack
4、说明:创建新表
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
根据已有的表创建新表:
A:select * into table_new from table_old (使用旧表创建新表)
B:create table tab_new as select col1,col2… from tab_old definition only
5、说明:删除表
drop table tablename FLC集成
6、说明:增加一个列,删除一个列
A:alter table tabname add column col type
B:alter table tabname drop column colname
注:DB2DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。
7、添加主键: Alter table tabname add primary key(col)
删除主键: Alter table tabname drop primary key(col)
8、创建索引:create [unique] index idxname on tabname(col….)
SQLServer LDF文件太大解决
SQL2000 LDF文件太大解决
一般不建议做第4,6两步
第4步不安全,有可能损坏数据库或丢失数据
第6步如果日志达到上限,则以后的数据库处理会失败,在清理日志后才能恢复.
--*/
--下面的所有库名都指你要处理的数据库的库名
1.清空日志
DUMP TRANSACTION 库名 WITH NO_LOG
2.截断事务日志:
BACKUP LOG 库名 WITH NO_LOG
3.收缩数据库文件(如果不压缩,数据库的文件不会减小
企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件
--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
也可以用SQL语句来完成
--收缩数据库
DBCC SHRINKDATABASE(库名)
--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles
DBCC SHRINKFILE(1)
4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行)
a.分离数据库:
企业管理器--服务器--数据库--右键--分离数据库
b.在我的电脑中删除LOG文件
c.附加数据库:
企业管理器--服务器--数据库--右键--附加数据库
此法将生成新的LOG,大小只有500多K
或用代码:
下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。
a.分离
EXEC sp_detach_db @dbname = '库名 '
b.删除日志文件
c.再附加
EXEC sp_attach_single_file_db @dbname = '库名 ',
@physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\库名.mdf '
数据库基本SQL语句大全
WORD格式整理
专业知识分享 数据库基本SQL语句大全
数据库基本----SQL语句大全
一、基础
1、说明:创建数据库
Create DATABASE database-name
2、说明:删除数据库
drop database dbname
3、说明:备份sql server
--- 创建 备份数据的 device
USE master
EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'
--- 开始 备份
BACKUP DATABASE pubs TO testBack
4、说明:创建新表
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
根据已有的表创建新表:
A:create table tab_new like tab_old (使用旧表创建新表)
B:create table tab_new as select col1,col2… from tab_old definition only
5、说明:删除新表
drop table tabname
6、说明:增加一个列
Alter table tabname add column col type
注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。
SQL 命令大全
一、基础
1、说明:创建数据库
CREATE DATABASE database-name
2、说明:删除数据库
drop database dbname
3、说明:备份sql server
--- 创建 备份数据的 device
USE master
EXEC sp_addumpdevice 'disk', 'testBack',
'c:\mssql7backup\MyNwind_1.dat'
--- 开始 备份
BACKUP DATABASE pubs TO testBack
4、说明:创建新表
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not
null],..)
根据已有的表创建新表:
A:select * into table_new from table_old (使用旧表创建新表)
B:create table tab_new as select col1,col2„ from tab_old definition
only
5、说明:删除新表
drop table tabname
6、说明:增加一个列,删除一个列
A:alter table tabname add column col type
B:alter table tabname drop column colname
注:DB2DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。
7、说明:添加主键: Alter table tabname add primary key(col)
说明:删除主键: Alter table tabname drop primary key(col)
8、说明:创建索引:create [unique] index idxname on tabname(col„.)
经典SQL语句大全(超全)
1 一、基础
1、说明:创建数据库
CREATE DATABASE database-name
2、说明:删除数据库
drop database dbname
3、说明:备份sql server
--- 创建 备份数据的 device
USE master
EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'
--- 开始 备份
BACKUP DATABASE pubs TO testBack
4、说明:创建新表
create table tabname(col1 type1 [not null] [primary key],col2 type2
[not null],..)
根据已有的表创建新表:
A:create table tab_new like tab_old (使用旧表创建新表)
B:create table tab_new as select col1,col2„ from tab_old definition only
5、说明:删除新表
drop table tabname
6、说明:增加一个列
Alter table tabname add column col type
注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。
7、说明:添加主键: Alter table tabname add primary key(col)
说明:删除主键: Alter table tabname drop primary key(col)
8、说明:创建索引:create [unique] index idxname on tabname(col„.)
删除索引:drop index idxname
注:索引是不可更改的,想更改必须删除重新建。
sqlserver数据库ldf文件过大解决方法 九
sqlserver数据库ldf文件过大解决方法九
压缩日志及数据库文件大小
/*--特别注意
请按步骤进行,未进行前面的步骤,请不要做后面的步骤
否则可能损坏你的数据库.
一般不建议做第4,6两步
第4步不安全,有可能损坏数据库或丢失数据
第6步如果日志达到上限,则以后的数据库处理会失败,在清理日志后才能恢复.
--*/
--下面的所有库名都指你要处理的数据库的库名
1.清空日志
DUMP TRANSACTION 库名 WITH NO_LOG
2.截断事务日志:
BACKUP LOG 库名 WITH NO_LOG
3.收缩数据库文件(如果不压缩,数据库的文件不会减小
企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件
--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
也可以用SQL语句来完成
--收缩数据库
DBCC SHRINKDATABASE(库名)
--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select *
from sysfiles
DBCC SHRINKFILE(1)
4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行)
a.分离数据库: 企业管理器--服务器--数据库--右键--分离数据库
b.在我的电脑中删除LOG文件
c.附加数据库:
企业管理器--服务器--数据库--右键--附加数据库
此法将生成新的LOG,大小只有500多K
或用代码:
下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。
SQL Server 2008 数据库日志清理
SQL Server 2008 数据库日志清理
1.将数据库设置成 简单 模式
选择要收缩的数据库,点右键 属性->选项,选择 简单模式
2.选择任务->收缩->文件
3.选择日志
或者用如下语句
USE [master]
GO
ALTER DATABASE DNName SET RECOVERY SIMPLE WITH NO_WAIT
GO
ALTER DATABASE DNName SET RECOVERY SIMPLE
GO USE DNName GO
DBCC SHRINKFILE (N'LogFileName' , 0,TRUNCATEONLY)
GO
USE [master]
GO
ALTER DATABASE DNName SET RECOVERY FULL WITH NO_WAIT
GO
ALTER DATABASE DNName SET RECOVERY FULL
GO
收缩数据库的语句
收缩数据库的语句
1. 收缩数据库不就像给房间做一次大扫除吗?把那些没用的杂物都清理掉,让空间更清爽!比如说,把那些过时的客户信息都清理掉,不就腾出更多空间了嘛!
2. 收缩数据库难道不是让系统轻装上阵吗?就像人甩掉多余的脂肪一样,能跑得更快呢!比如把重复的数据精简掉,系统运行不就更流畅啦!
3. 收缩数据库,这不是在给数据瘦身嘛!就好比给肥胖的身体减肥,让它更健康有活力呀!像那些无效的记录,不收缩掉留着干嘛呢!
4. 收缩数据库,不就是在整理我们的数据家园嘛!把那些杂乱的东西清理掉,家园才会更整洁呀!比如那些很久不用的文件,收缩起来多好!
5. 收缩数据库,这跟整理衣柜有啥区别呀!把不穿的衣服清理掉,衣柜才更有序嘛!像那些错误的数据,不赶紧收缩掉还等什么呢!
6. 收缩数据库,这不就是给数据做一次深度护理嘛!让它焕发新生呀!比如说把那些冗余的数据都去掉,多清爽!
7. 收缩数据库,难道不是给数据来一次大改造吗?把不好的都改掉,留下精华呀!像那些没用的备份,收缩掉多明智!
8. 收缩数据库,不就像是给数据花园除除草嘛!让花园更美丽呀!比如把那些混乱的数据结构整理好,多棒!
9. 收缩数据库,这跟给车子保养一样重要呀!把该清理的清理掉,车子才能跑得顺呀!像那些无效的链接数据,收缩起来呀!
10. 收缩数据库,不就是让数据更精炼嘛!就像精炼钢铁一样,更有价值呀!比如把那些模糊不清的数据处理掉,多有必要!
原创不易,请尊重原创,谢谢!
SQL常用语法
---常用语法
--SQL语句先前写的时候,很容易把一些特殊的用法忘记,我特此整理了一下SQL语句操作。
--一、基础
--1、说明:创建数据库
Create DATABASE database-name
--2、说明:删除数据库
drop database dbname
--3、说明:备份sql server
--- 创建备份数据的device
USE master
EXEC sp_addumpdevice 'disk', 'testBack',
'c:\mssql7backup\MyNwind_1.dat'
---- 开始备份
BACKUP DATABASE pubs TO testBack
--4、说明:创建新表
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not
null],..)
--根据已有的表创建新表:
--A:create table tab_new like tab_old (使用旧表创建新表)
--B:create table tab_new as select col1,col2…from tab_old definition only
--5、说明:删除新表
drop table tabname
--6、说明:增加一个列
Alter table tabname add column col type
--注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。
--7、说明:添加主键:Alter table tabname add primary key(col)
--说明:删除主键:Alter table tabname drop primary key(col)
--8、说明:创建索引:create [unique] index idxname on tabname(col….)
