mysql数据库 收缩的问题

mysql数据库 收缩的问题,第1张

数据库文件的收缩性不大

主要是对数据库的log日志进行收缩

这个收缩度非常的大,5G的日志文件最终都有可能收缩到512K

给你说个简单的收缩方法

1清空日志

DUMP TRANSACTION 库名 WITH NO_LOG

2截断事务日志:

BACKUP LOG 数据库名 WITH NO_LOG

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

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

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

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

这个方法非常的立竿见影,祝你好运了

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 70,这步只能在查询分析器中进行)

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'

5为了以后能自动收缩,

做如下设置: 企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩" --SQL语句设置方式: EXEC sp_dboption '库名', 'autoshrink', 'TRUE'

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

企业管理器--服务器--右键数据库--属性--事务日志 --将文件增长限制为xM(x是你允许的最大数据文件大小) --SQL语句的设置方式:

alter database 库名 modify file(name=逻辑文件名,maxsize=20)

USE crmdb --crmdb 是数据库名称

GO

ALTER DATABASE crmdb

SET RECOVERY SIMPLE;--设置简单恢复模式

GO

DBCC SHRINKFILE (crmdb_Log, 10);--crmdb_Log数据库日志文件,10是收缩到多大(日志最后大小)

GO

ALTER DATABASE crmdb

SET RECOVERY FULL;--恢复为原模式

GO

*** 作步骤如下:

(1)打开SQL Server企业管理器。双击打开“数据库”节点,在要收缩的数据库名称上,单击鼠标右键,在d出的快捷菜单中选择“所有任务”→“收缩数据库”命令,d出“收缩数据库”对话框,如图1所示。

图1 收缩数据库

(2)指定数据库的收缩量,可以从以下选项中选择。

在“收缩后文件中的最大可用空间”文本框中输入收缩后数据库中剩余的可用空间量。以“数据库大小,可用空间”值作为依据。如最大可用空间是“25%”,则在该选项中设置小于该数值的百分比,如“12%”。

选择“在收缩前将页移到文件起始位置”复选框,使释放的文件空间保留在数据库文件中,并使包含数据的页移到数据库文件的起始位置。

(3)在“调度”选项框中,选择是否自动定期执行数据库压缩 *** 作。选中“根据本调度来收缩数据库”复选框,单击“更改”按钮,创建或更改自动收缩数据库的频率和时间。

(4)最后单击“确定”按钮完成 *** 作。

SQL Server日志清空方法

在查询分析器中顺序执行以下三步,其中 databasename 为你的数据库文件名

1清空日志:DUMP TRANSACTION databasename WITH NO_LOG

2截断事务日志:BACKUP LOG databasename WITH NO_LOG

3收缩数据库:DBCC SHRINKDATABASE(databasename)

--//////////////////////////////////////////////////////////////////

SQL Server日志清空方法

一种方法:清空日志。

1.打开查询分析器,输入命令 DUMP TRANSACTION 数据库名 WITH NO_LOG

2再打开企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了。

方法二:

清空日志:

------------------------------------------

BACKUP LOG 库名 WITH NO_LOG

DBCC SHRINKFILE( '日志文件名 ',新的大小数值型如1)

日志文件名是这样的:

select name from sysfiles

如:

mastlog

---------------------------------------------

backup log DATABASENAME

with truncate_only

dbcc shrinkdatabase (DATABASENAME,SIZE)

若每天有whole back up 的话可以设置一job,

每隔三天或一个星期清空一次

这样的话日志就不会长大了哦

-------------------------------------

1: 删除LOG

1:分离数据库

2:删除LOG文件

3:附加数据库

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

再将此数据库设置自动收缩

2:清空日志

DUMP TRANSACTION 库名 WITH NO_LOG

再:

企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了

方法三:

第一步:

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,具体意思看帮助。

方法四:

(这个方法在sqlserver2000的环境下做一般能成功,在sqlserver7及以下版本就不一定了):

第一步:

先备份整个数据库以备不测

第二步:

备份结束后,在Query Analyzer中执行如下的语句:

exec sp_detach_db yourDBName,true --卸除这个DB在MSSQL中的注册信息

第三步:

到日志的物理文件所在的目录中去删除该日志文件或者将该日志文件移出该目录

第四步:

在Query Analyzer中执行如下的语句:

exec sp_attach_single_file_db yourDBName, 'd:\mssql7\data\yourDBName_datamdf '

--以单文件的方式注册该DB,如果成功则MSSQL将自动为这个DB生成一个500K的日志文件。

以上方法在清除log日志中均有效。

但,能否让sql server 不产生log日志呢?以上方法好像均无效。

我这儿正好有个case:

我客户的sql server每天都会产生4,500M的log日志,每天都清除一下,非常不便。有没有办法实现不产生log日志呢?

我分析了一下客户产生log日志的原因,并且做了相应测试。

客户是每天将数据库清空,从总系统中将数据导入到sql server里。我感决sqlserver在插入时产生log不大,在delete整个库时产生log极大。

比如:

SELECT into test_2 from b_bgxx

共45000条记录,产生十几M log,如果

delete from test_2

产生80多M log ,这明显存在问题。

虽然可以换成:

truncate table test_2

但我还是希望能找到不产生log的方法。就如oracle不产生归档一样。

以上就是关于mysql数据库 收缩的问题全部的内容,包括:mysql数据库 收缩的问题、SQL Server 设置了自动收缩,为什么还是会有提示事务日志已满、为什么SQL2005数据库的事务日志文件收缩不了高手帮帮忙等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9560074.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存