当前位置:首页 » 编程语言 » sql的log压缩
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sql的log压缩

发布时间: 2023-07-10 14:22:33

‘壹’ sql Server 压缩日志及数据库文件大小

请按步骤进行 未进行前面的步骤时 请不要做后面的步骤 以免损坏你的数据库

一般不建议做第 两步 第 步不安全 有可能损坏数据库或丢失数据 第 步如果日志达到上限 则以后的数据库处理会失败 在清理日志后才能恢复

清空日志

DUMP TRANSACTION 库名 WITH NO_LOG

截断事务日志

BACKUP LOG 数据库名 WITH NO_LOG

收缩数据库文件(如果不压缩 数据库的文件不会减小

企业管理器 右键你要压缩的数据库 所有任务 收缩数据库 收缩文件

选择日志文件 在收缩方式里选择收缩至XXM 这里会给出一个允许收缩到的最小M数 直接输入这个数 确定就可以了

选择数据文件 在收缩方式里选择收缩至XXM 这里会给出一个允许收缩到的最小M数 直接输入这个数 确定就可以了

也可以用SQL语句来完成

收缩数据库

DBCC SHRINKDATABASE(客户资料)

收缩指定数据文件 是文件号 可以通过这个语句查询到:

select * from sysfiles

DBCC SHRINKFILE( )

为了最大化的缩小日志文件(如果是sql 这步只能在查询分析器中进行)

a 分离数据库:

企业管理器 服务器 数据库 右键 分离数据库

b 在我的电脑中删除LOG文件

c 附加数据库:

企业管理器 服务器 数据库 右键 附加数据库

此法将生成新的LOG 大小只有 多K

或用代码

下面的示例分离 pubs 然后将 pubs 中的一个文件附加到当前服务器

a 分离

EXEC sp_detach_db @dbname = pubs

b 删除日志文件

c 再附加

EXEC sp_attach_single_file_db @dbname = pubs

@physname = c:/Program Files/Microsoft

SQL Server/MSSQL/Data/pubs mdf

为了以后能自动收缩 做如下设置

企业管理器 服务器 右键数据库 属性 选项 选择 自动收缩

SQL语句设置方式:

EXEC sp_dboption 数据库名

autoshrink TRUE

如果想以后不让它日志增长得太大

企业管理器 服务器 右键数据库 属性 事务日志

将文件增长限制为xM(x是你允许的最大数据文件大小)

SQL语句的设置方式:

lishixin/Article/program/SQLServer/201311/22266

‘贰’ 如何压缩SQL Server 2005指定数据库文件和日志的大小

您好,很高兴为您解答。

下面有两个SQL语句可以达到在SQL Server 2005/2008压缩指定数据库文件和日志的大小的效果:
1、DBCC SHRINKDATABASE (Transact-SQL)
收缩指定数据库中的数据文件和日志文件的大小。
语法
DBCC SHRINKDATABASE
( 'database_name' | database_id | 0
[ ,target_percent ]
[ , { NOTRUNCATE | TRUNCATEONLY } ]
)
[ WITH NO_INFOMSGS ]
参数
'database_name' | database_id | 0 要收缩的数据库的名称或 ID。如果指定 0,则使用当前数据库。
target_percent 数据库收缩后的数据库文件中所需的剩余可用空间百分比。
NOTRUNCATE 通过将已分配的页从文件末尾移动到文件前面的未分配页来压缩数据文件中的数据。target_percent 是可选参数。 文件末尾的可用空间不会返回给操作系统,文件的物理大小也不会更改。因此,指定 NOTRUNCATE 时,数据库看起来未收缩。 NOTRUNCATE 只适用于数据文件。日志文件不受影响。
TRUNCATEONLY 将文件末尾的所有可用空间释放给操作系统,但不在文件内部执行任何页移动。数据文件只收缩到最近分配的区。如果与 TRUNCATEONLY 一起指定,将忽略 target_percent。 TRUNCATEONLY 只适用于数据文件。日志文件不受影响。
WITH NO_INFOMSGS 取消严重级别从 0 到 10 的所有信息性消息。

结果集
列名 说明
DbId 数据库引擎试图收缩的文件的数据库标识号。
FileId 数据库引擎尝试收缩的文件的文件标识号。
CurrentSize 文件当前占用的 8 KB 页数。
MinimumSize 文件最低可以占用的 8 KB 页数。这与文件的最小大小或最初创建时的大小相对应。
UsedPages 文件当前使用的 8 KB 页数。
EstimatedPages 数据库引擎估计文件能够收缩到的 8 KB 页数。

备注
若要收缩特定数据库的所有数据和日志文件,请执行 DBCC SHRINKDATABASE 命令。若要一次收缩一个特定数据库中的一个数据或日志文件,请执行 DBCC SHRINKFILE 命令。
若要查看数据库中当前的可用(未分配)空间量,请运行 sp_spaceused。
可在进程中的任一点停止 DBCC SHRINKDATABASE 操作,任何已完成的工作都将保留。
收缩后的数据库不能小于数据库的最小大小。最小大小是在数据库最初创建时指定的大小,或是使用文件大小更改操作(如 DBCC SHIRNKFILE 或 ALTER DATABASE)显式设置的最后大小。例如,如果数据库最初创建时的大小为 10 MB,后来增长到 100 MB,则该数据库最小只能收缩到 10 MB,即使已经删除数据库的所有数据也是如此。
运行 DBCC SHRINKDATABASE 而不指定 NOTRUNCATE 选项或 TRUNCATEONLY 选项等价于带 NOTRUNCATE 运行 DBCC SHRINKDATABASE 操作,然后再带 TRUNCATEONLY 运行 DBCC SHRINKDATABASE 操作。
要收缩的数据库不必在单用户模式下;其他的用户仍可以在数据库收缩时对其进行工作。这也包括系统数据库。
不能在备份数据库时收缩数据库。反之,也不能在数据库执行收缩操作时备份数据库。

DBCC SHRINKDATABASE 的工作原理
DBCC SHRINKDATABASE 以每个文件为单位对数据文件进行收缩。然而,DBCC SHRINKDATABASE 在对日志文件进行收缩时,它将视为所有的日志文件都存在于一个连续的日志池中。文件始终从末尾开始收缩。
假设名为 mydb 的数据库有一个数据文件和两个日志文件。数据文件和日志文件分别是 10 MB,并且数据文件包含 6 MB 数据。
Microsoft SQL Server 2005 数据库引擎对每个文件计算一个目标大小。这就是文件将要收缩到的大小。将 target_percent 与 DBCC SHRINKDATABASE 一起指定时,数据库引擎计算的目标大小是收缩后文件中的 target_percent 可用空间大小。例如,如果在收缩 mydb 时将 target_percent 指定为 25,则数据库引擎将此文件的目标大小计算为 8 MB(6 MB 数据加上 2 MB 可用空间)。因此,数据库引擎将任何数据从数据文件的后 2 MB 中移动到数据文件前 8 MB 的可用空间中,然后对该文件进行收缩。
假设 mydb 的数据文件包含 7 MB 的数据。将 target_percent 指定为 30,以允许将此数据文件收缩到可用空间为 30%。但是,将 target_percent 指定为 40 却不会收缩数据文件,因为数据库引擎收缩文件的目标大小不能小于数据当前占用空间大小。您还可以用另一种方法来考虑此问题:所要求的 40% 可用空间加上整个数据文件大小的 70%(10 MB 中的 7 MB),超过了 100%。因为所要求的可用百分比加上数据文件占用的当前百分比大于 100%(多出 10%),所以任何大于 30 的 target_size 都不会收缩此数据文件。
对于日志文件,数据库引擎使用 target_percent 来计算整个日志的目标大小;因此,target_percent 是收缩操作后日志中的可用空间大小。之后,整个日志的目标大小转换为每个日志文件的目标大小。
DBCC SHRINKDATABASE 尝试立即将每个物理日志文件收缩到其目标大小。如果虚拟日志中的所有逻辑日志部分都没有超出日志文件的目标大小,则该文件将成功截断,DBCC SHRINKDATABASE 完成且不显示任何消息。但是,如果部分逻辑日志位于超出目标大小的虚拟日志中,则数据库引擎将释放尽可能多的空间,并发出一条信息性消息。该消息说明需要执行哪些操作来将逻辑日志移出位于文件末尾的虚拟日志。执行该操作以后,DBCC SHRINKDATABASE 可用于释放剩余空间。有关详细信息,请参阅收缩事务日志。
因为日志文件只能收缩到虚拟日志文件边界,所以不可能将日志文件收缩到比虚拟日志文件更小(即使现在没有使用该文件)。虚拟日志文件的大小在创建或扩展这些日志文件时由数据库引擎动态选择。有关虚拟日志文件的详细信息,请参阅事务日志物理体系结构。

权限
要求具有 sysadmin 固定服务器角色或 db_owner 固定数据库角色的成员身份。、

示例
A. 收缩数据库并指定可用空间的百分比
以下示例将减小 UserDB 用户数据库中数据文件和日志文件的大小,以便在数据库中留出 10% 的可用空间。
DBCC SHRINKDATABASE (UserDB, 10);
GO

B. 截断数据库
以下示例使 AdventureWorks 示例数据库中的数据文件收缩到最后分配的区。
DBCC SHRINKDATABASE (AdventureWorks, TRUNCATEONLY);
请参考:http://msdn.microsoft.com/zh-cn/vs2008/ms190488(SQL.90).aspx

2、DBCC SHRINKFILE (Transact-SQL)
收缩当前数据库的指定数据或日志文件的大小,或通过将数据从指定的文件移动到相同文件组中的其他文件来清空文件,以允许从数据库中删除该文件。文件大小可以收缩到比创建该文件时所指定的大小更小。这样会将最小文件大小重置为新值。
语法
DBCC SHRINKFILE ( { 'file_name' | file_id } { [ , EMPTYFILE ] | [ [ , target_size ] [ , { NOTRUNCATE | TRUNCATEONLY } ] ] } ) [ WITH NO_INFOMSGS ]

参数
' file_name '
要收缩的文件的逻辑名称。
file_id
要收缩的文件的标识 (ID) 号。若要获得文件 ID,请使用 FILE_IDEX 系统函数,或查询当前数据库中的 sys.database_files 目录视图。
target_size
用兆字节表示的文件大小(用整数表示)。如果未指定,则 DBCC SHRINKFILE 将文件大小减少到默认文件大小。默认大小是创建文件时指定的大小,或者是使用 ALTER DATABASE 所设置的最后大小。
如果指定了 target_size,则 DBCC SHRINKFILE 尝试将文件收缩到指定大小。将要释放的文件部分中的已使用页重新定位到保留的文件部分中的可用空间。例如,如果数据文件为 10 MB,则 target_size 为 8 的 DBCC SHRINKFILE 操作会将文件最后 2 MB 中所有的已使用页重新分配到文件前 8 MB 中的任何未分配页中。DBCC SHRINKFILE 不会将文件收缩到小于存储文件中的数据所需要的大小。例如,如果使用 10 MB 数据文件中的 7 MB,则带有 target_size 为 6 的 DBCC SHRINKFILE 语句只能将该文件收缩到 7 MB,而不能收缩到 6 MB。
EMPTYFILE
将指定文件中的所有数据迁移到同一文件组中的其他文件。由于数据库引擎不再允许将数据放在空文件内,因此可以使用 ALTER DATABASE 语句来删除该文件。
NOTRUNCATE
在指定或不指定 target_percent 的情况下,将已分配的页从数据文件的末尾移动到该文件前面的未分配页。文件末尾的可用空间不会返回给操作系统,文件的物理大小也不会更改。因此,指定 NOTRUNCATE 时,文件看起来未收缩。
NOTRUNCATE 只适用于数据文件。日志文件不受影响。
TRUNCATEONLY
将文件末尾的所有可用空间释放给操作系统,但不在文件内部执行任何页移动。数据文件只收缩到最后分配的区。
如果随 TRUNCATEONLY 指定了 target_size,则会忽略该参数。
TRUNCATEONLY 只适用于数据文件。
WITH NO_INFOMSGS
取消显示所有信息性消息。

结果集
列名 说明
DbId 数据库引擎试图收缩的文件的数据库标识号。
FileId 数据库引擎试图收缩的文件的文件标识号。
CurrentSize 文件当前占用的 8 KB 页数。
MinimumSize 文件最低可以占用的 8 KB 页数。这与文件的最小大小或最初创建时的大小相对应。
UsedPages 文件当前使用的 8 KB 页数。
EstimatedPages 数据库引擎估计文件能够收缩到的 8 KB 页数。

收缩日志文件
对于日志文件,SQL Server 2005 数据库引擎使用 target_size 来计算整个日志的目标大小;因此,target_size 是收缩操作后日志中的可用空间大小。之后,整个日志的目标大小转换为每个日志文件的目标大小。DBCC SHRINKFILE 尝试立即将每个物理日志文件收缩到其目标大小。但是,如果部分逻辑日志位于超出目标大小的虚拟日志中,则数据库引擎将释放尽可能多的空间,并发出一条信息性消息。该消息说明需要执行哪些操作来将逻辑日志移出位于文件末尾的虚拟日志。执行这些操作以后,DBCC SHRINKFILE 可用于释放剩余空间。

如果文件不收缩
如果收缩操作运行时未出现错误,但文件大小看起来没有发生更改,则请执行下列操作之一以验证文件是否有足够的可用空间可供删除:
运行以下查询。
SELECT name ,size/128.0 - CAST(FILEPROPERTY(name, 'SpaceUsed') AS int)/128.0 AS AvailableSpaceInMB
FROM sys.database_files;

权限
要求具有 sysadmin 固定服务器角色或 db_owner 固定数据库角色的成员身份。

示例
A. 将数据文件收缩到指定的目标大小
以下示例将 UserDB 用户数据库中名为 DataFile1 的数据文件的大小收缩到 7MB。
USE UserDB;
GO
DBCC SHRINKFILE (DataFile1, 7);
GO

B. 将日志文件收缩到指定的目标大小
以下示例将 AdventureWorks 数据库中的日志文件收缩到 1 MB。若要允许 DBCC SHRINKFILE 命令收缩文件,首先需要通过将数据库恢复模式设置为 SIMPLE 来截断该文件。
USE AdventureWorks;
GO
-- Truncate the log by changing the database recovery model to SIMPLE.
ALTER DATABASE AdventureWorks
SET RECOVERY SIMPLE;
GO
-- Shrink the truncated log file to 1 MB.
DBCC SHRINKFILE (AdventureWorks_Log, 1);
GO
-- Reset the database recovery model.
ALTER DATABASE AdventureWorks
SET RECOVERY FULL;
GO

C. 截断数据文件
以下示例将截断 AdventureWorks 数据库中的主数据文件。需要查询 sys.database_files 目录视图以获得数据文件的 file_id。
USE AdventureWorks;
GO
SELECT file_id, name
FROM sys.database_files;
GO
DBCC SHRINKFILE (1, TRUNCATEONLY);

D. 清空文件
以下示例演示了清空文件以便从数据库中将其删除的步骤。针对此示例,首先创建一个数据文件,并假设该文件包含数据。
USE AdventureWorks;
GO
-- Create a data file and assume it contains data.
ALTER DATABASE AdventureWorks
ADD FILE (
NAME = Test1data,
FILENAME = 'C:\t1data.ndf',
SIZE = 5MB
);
GO
-- Empty the data file.
DBCC SHRINKFILE (Test1data, EMPTYFILE);
GO
-- Remove the data file from the database.
ALTER DATABASE AdventureWorks
REMOVE FILE Test1data;
GO

如若满意,请点击右侧【采纳答案】,如若还有问题,请点击【追问】

希望我的回答对您有所帮助,望采纳!

~ O(∩_∩)O~

‘叁’ sql server 数据库怎样压缩数据库日志文件

具体方法有3种。
方法一:
第一步:
backup log database_name with no_log
或者 backup log database_name with truncate_only
-- no_log和truncate_only是在这里是同义的,随便执行哪一句都可以。
第二步:
1.收缩特定数据库的所有数据和日志文件,执行:
dbcc shrinkdatabase (database_name,[,target_percent])
-- database_name是要收缩的数据库名称;target_percent是数据库收缩后的数据库文件中所要的剩余可用空间百分比。
2.收缩一次一个特定数据库中的数据或日志文件,执行
dbcc shrinkfile(file_id,[,target_size])
-- file_id是要收缩的文件的标识 (ID) 号,若要获得文件 ID,请使用 FILE_ID 函数或在当前数据库中搜索 sysfiles;target_size是用兆字节表示的所要的文件大小(用整数表示)。如果没有指定,dbcc shrinkfile 将文件大小减少到默认文件大小。两个dbcc都可以带上参数notruncate或truncateonly,具体意思查看联机帮助.

方法二:
第一步:
先备份整个数据库以备不测 。
第二步:
备份结束后,在Query Analyzer中执行如下的语句:
exec sp_detach_db yourDBName,true
--卸除这个DB在MSSQL中的注册信息
第三步:
到日志的物理文件所在的目录中去删除该日志文件或者将该日志文件移出该目录
第四步:
在Query Analyzer中执行如下的语句:
exec sp_attach_single_file_db yourDBName,'
d:\mssql\data\yourDBName_data.mdf '
--以单文件的方式注册该DB,如果成功则MSSQL将自动为这个DB生成一个500K的日志文件。

方法三:
1. 进入企业管理器,选中数据库,比如demo
2. 所有任务->分离数据库
3. 到数据库文件的存放目录,将MuOnline_log.LDF文件删除,以防万一,你可以拷出去
4. 企业管理器->附加数据库,选muonline,这个时候你会看见日志文件这项是一个叉,不要紧,继续,此时数据库就会提示你该数据库无日志是否创建一个新的,确定就是了。
5. 记得数据库重新附加后用户要重新设置一下。
如果以后,不想要它变大:
SQL2000下使用:
在数据库上点右键->属性->选项->故障恢复-模型-选择-简单模型。
或用SQL语句:
alter database 数据库名 set recovery simple

‘肆’ SQL2005数据库日志文件LOG太大怎么办

Sqlserver2005下,日志文件太大,使其减小的方法。
在打开SQL Server Management Studio并正常联接SQL服务器后,运行下面的三行:
( 注意将dbName代换为你的数据库名。)
backup log dbName with NO_LOG
backup log dbName with TRUNCATE_ONLY
DBCC SHRINKDATABASE(dbName)

注意,在SQL 2008之后的版本以上方法无效,需将数据库设为简单模式后再进行收缩。

此外,在SQL Server Management Studio中,以视窗方法操作也可以,操作步骤:
第一步:截断数据库日志,运行代码:
BACKUP LOG 要收缩的数据库名 WITH NO_LOG
第二步:收缩数据库日志文件:
1. 选择要收缩的数据库,点右键选择任务-收缩-文件

2. 在弹出的页面中,选择文件类型为日志

3.点确定。

‘伍’ sql2008中如何收缩数据库日志文件

打开企业管理器SQL ServerManagement Studio,先备份数据库,然后有两个方法压缩数据库日志文件:

方法一、

选择数据库,新建查询,顺序输入语句并执行

1、ALTER DATABASE database_name SET RECOVERY SIMPLE

DBCC SHRINKDATABASE(database_name, 0)

2、ALTER DATABASE database_name SET RECOVERY FULL

方法二、

1、选择数据库

2、右键数据库选属性=》选项,将恢复模式改为简单,确定

3、右键数据库选任务=》收缩=》文件,文件类型选日志,确定

4、回到第2步,恢复模式改为完整

‘陆’ SQL SERVER 2000 怎么压缩log文件

方法1:
第一步:
backup log DATABASE_NAME with no_log
第二步:
收缩特定数据库的所有数据和日志文件,执行 dbcc shrinkdatabase (DATABASE_NAME)
方法2:
另一种方法有一定的风险性,因为SQL SERVER的日志文件不是即时写入数据库主文件的,如处理不当,会造成数据的损失。
1: 删除LOG
分离数据库 企业管理器->服务器->数据库->右键->分离数据库
2:删除LOG文件
附加数据库 企业管理器->服务器->数据库->右键->附加数据库
此法会提示"重新创建log"生成新的LOG,大小只有500多K。
注意:建议使用第一种方法。
如果以后,不想要它变大。
SQL2000下使用:
在数据库上点右键->属性->选项->故障恢复-模型-选择-简单模型。
或用SQL语句:
alter database 数据库名 set recovery simple
方法3:
如果数据库使用的是简单恢复模式,直接执行CHECKPOINT之后,再收缩一次数据库,则删除新的 MinLSN 之前的所有日志记录。