|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
这里我们讨论用binlog来实现闪回的方案。server办法1:
第一步:
backuplogdatabase_namewithno_log
大概backuplogdatabase_namewithtruncate_only--no_log和truncate_only是在这里是同义的,任意实行哪一句都能够
第二步:
1.压缩特定命据库的一切数据和日记文件,实行dbccshrinkdatabase(database_name,[,target_percent])--database_name是要压缩的数据库称号;target_percent是数据库压缩后的数据库文件中所要的残剩可用空间百分比
2.压缩一次一个特定命据库中的数据或日记文件,实行dbccshrinkfile(file_id,[,target_size])--file_id是要压缩的文件的标识(ID)号,若要取得文件ID,请利用FILE_ID函数或在以后数据库中搜刮sysfiles;target_size是用兆字节暗示的所要的文件巨细(用整数暗示)。假如没有指定,dbccshrinkfile将文件巨细削减到默许文件巨细
两个dbcc都能够带上参数notruncate或truncateonly,详细意义看匡助。
办法2(这个办法在sqlserver2000的情况下做一样平常能乐成,在sqlserver7及以下版本就纷歧定了):
第一步:
先备份全部数据库以备意外
第二步:
备份停止后,在QueryAnalyzer中实行以下的语句:
execsp_detach_dbyourDBName,true--卸除这个DB在MSSQL中的注册信息
第三步:
到日记的物理文件地点的目次中往删除该日记文件大概将该日记文件移出该目次
第四步:
在QueryAnalyzer中实行以下的语句:
execsp_attach_single_file_dbyourDBName,d:mssql7datayourDBName_data.mdf
--以单文件的体例注册该DB,假如乐成则MSSQL将主动为这个DB天生一个500K的日记文件。
以上办法在扫除log日记中均无效。
但,可否让sqlserver不发生log日记呢?以上办法仿佛均有效。
我这儿恰好有个case:
我客户的sqlserver天天城市发生4,500M的log日记,天天都扫除一下,十分方便。有无举措完成不发生log日记呢?
我剖析了一下客户发生log日记的缘故原由,而且做了响应测试。
客户是天天将数据库清空,从总体系中将数据导进到sqlserver里。我感决sqlserver在拔出时发生log不年夜,在delete全部库时发生log极年夜。
好比:
SELECT*intotest_2fromb_bgxx
共45000笔记录,发生十几Mlog,假如
deletefromtest_2
发生80多Mlog,这分明存在成绩。
固然能够换成:
truncatetabletest_2
但我仍是但愿能找到不发生log的办法。就如oracle不发生回档一样。
导致了一个使用几乎和mSQL一样的API接口的用于他们的数据库的新的SQL接口的产生,这样,这个API被设计成允许为用于mSQL而写的第三方代码更容易移植到MySQL。 |
|