|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
Mysql的存储引擎接口定义良好。有兴趣的开发者可以通过阅读文档编写自己的存储引擎。紧缩
SETQUOTED_IDENTIFIEROFF
GO
SETANSI_NULLSOFF
GO
CREATEPROCEDUREstrink_logspace
AS
SETNOCOUNTON
DECLARE@LogicalFileNamesysname,
@MaxMinutesINT,
@NewSizeINT
SELECT@LogicalFileName=rtrim(name),
@MaxMinutes=10,--最年夜实行工夫
@NewSize=10--最小空间
fromsysfileswherestatus&0x40=0x40
--Setup/initialize
DECLARE@OriginalSizeint
SELECT@OriginalSize=size--in8Kpages
FROMsysfiles
WHEREname=@LogicalFileName
SELECTdb_name()+日记原始巨细+
CONVERT(VARCHAR(30),@OriginalSize)+pages/8K或+
CONVERT(VARCHAR(30),(@OriginalSize*8/1024))+MB
FROMsysfiles
WHEREname=@LogicalFileName
CREATETABLEDummyTrans
(DummyColumnchar(8000)notnull)
--Wraplogandtruncateit.
DECLARE@CounterINT,
@StartTimeDATETIME,
@TruncLogVARCHAR(255)
SELECT@StartTime=GETDATE(),
@TruncLog=BACKUPLOG[+db_name()+]WITHTRUNCATE_ONLY
--Tryaninitialshrink.
DBCCSHRINKFILE(@LogicalFileName,@NewSize)
EXEC(@TruncLog)
--Wrapthelogifnecessary.
WHILE@MaxMinutes>DATEDIFF(mi,@StartTime,GETDATE())--timehasnotexpired
AND@OriginalSize=(SELECTsizeFROMsysfilesWHEREname=@LogicalFileName)--theloghasnotshrunk
AND(@OriginalSize*8/1024)>@NewSize--Thevaluepassedinfornewsizeissmallerthanthecurrentsize.
BEGIN--Outerloop.
SELECT@Counter=0
WHILE((@Counter<@OriginalSize/16)AND(@Counter<50000))
BEGIN--update
INSERTDummyTransVALUES(FillLog)--Becauseitisacharfielditinserts8000bytes.
DELETEDummyTrans
SELECT@Counter=@Counter+1
END--update
EXEC(@TruncLog)--Seeifatruncofthelogshrinksit.
END--outerloop
DBCCSHRINKFILE(@LogicalFileName,@NewSize)
SELECTdb_name()+日记最初巨细+
CONVERT(VARCHAR(30),size)+pages/8K或+
CONVERT(VARCHAR(30),(size*8/1024))+MB
FROMsysfiles
WHEREname=@LogicalFileName
DROPTABLEDummyTrans
PRINT***数据库日记紧缩乐成***
SETNOCOUNTOFF
GO
SETQUOTED_IDENTIFIEROFF
GO
SETANSI_NULLSON
GO
--used
execstrink_logspace
MySQL是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQLAB公司。目前MySQL被广泛地应用在Internet上的中小型网站中。 |
|