先执行
exec sp_dboption yourDB,'trunc. log on chkpt.',true
让其不写日志再删
exec sp_dboption yourDB,'trunc. log on chkpt.',true
让其不写日志再删
解决方案 »
- 取值问题
- 求一个查询语句
- BULK INSERT 有参数可以去掉空格吗?
- 为什么UPDATE老是提示超时?
- T-SQL 2 Tips: 1.计算任意两日期之间的"周一"到"周日"分别各有几个! 2.根据出生日期计算精确年龄!
- 如何在导出数据库备份文件时更改数据库备份文件的和日志文件的逻辑名称??
- 让数据库产生一张详细的日历表(学习篇)
- 小问题
- 各位高手帮个忙!
- 请教高手:如何在 MSSQL下如何安全地将一个数据库中的一些数据表中记录复制到另外一个数据库中!
- 能不能写出这样的sql语句:表中有ID(int ),content(varchar)两个字段,想根据ID分组,合并content内容(中间加,)
- 我有一个自动增加的字段,叫did,当我把这个表格中的数据删除以后,insert的时候did不是从1开始
此方法适用于7.0和2000。
1、在查询分析器中执行:
exec sp_detach_db 'DB_Name','true'
2、在我的电脑中将日志的物理文件xxx_Log.LDF改名。
3、在查询分析器中执行:
exec sp_attach_single_file_db 'DB_Name','C:\Program Files\Microsoft SQL Server\MSSQL\Data\DB_Name.MDF'
4、如果上一步成功,将步骤2中改名后的文件删除。如果上一步不成功,改回原来的文件名,用sp_attach_db将数据库附加到服务器,然后用方法二。
方法二
6.X中
DUMP TRANSACTION test2 with NO_LOG
DUMP TRANSACTION test2 with TRUNCATE_ONLY
将上面的语句多次执行,直到日志缩小。
7.0和2000中
backup log test2 with NO_LOG
backup log test2 with TRUNCATE_ONLY
DBCC SHRINKDATABASE(test2)
将上面的语句多次执行,直到日志文件缩小。上面的方法治标不治本,标本兼治要用下面的方法。方法三:
--6.X和7.0中改为日志处于截断模式,2000中恢复模型改为简单恢复
exec sp_dboption 'test2','trunc. log on chkpt.','on'
--7.0和2000中设为自动收缩,6.x中不用执行。
exec sp_dboption 'test2','autoshrink','on'
通常用于测试环境。方法四:
--7.0中改为日志不处于截断模式,2000中恢复模型改为完全恢复
exec sp_dboption 'test2','trunc. log on chkpt.','off'
--7.0和2000中设为自动收缩,6.x中不用执行。
exec sp_dboption 'test2','autoshrink','on'
建立作业,每半个小时一次日志备份,每天一次完全数据库备份。
7.0和2000中:在Log收缩到正常大小后,将autoshrink选项设置为off。
通常用于真实环境。在产品化系统中将autoshrink选项设置为开启状态并非明智之举(除非您真的需要这样做),这是因为,当您的系统正在忙于完成其它任务时,autoshrink选项可能会同时启动,从而降低系统运行速度。然而,对于那些数据库管理员无暇估计并且数据库尺寸有可能在您毫无察觉的情况下超出控制范围的桌面或远程系统来说,开启这一选项却是一种非常有效的措施。
收缩事务日志在下列情况下,日志文件的物理大小将减少:
*执行 DBCC SHRINKDATABASE 语句时。
*执行引用日志文件的 DBCC SHRINKFILE 语句时。
*自动收缩操作发生时。 日志收缩操作依赖于最初的日志截断操作。日志截断操作不减小物理日志文件的大小,但减小逻辑日志的大小,并将没有容纳逻辑日志任何部分的虚拟日志标记为不活动。日志收缩操作会删除足够多的不活动虚拟日志,将日志文件减小到要求的大小。按下面任一方式控制事务日志的大小:
*在维护日志备份序列时,调度 BACKUP LOG 语句按间隔发生,以使事务日志不致增长到超过预期的大小。
*当不维护日志备份序列时,指定简单恢复模式。 详情请参考 MS SQL Server 2000 联机丛书:
目录--> SQL Server构架-->数据库构架-->物理数据库构架-->事务日志构架-->收缩事务日志
目录--> SQL Server构架-->数据库构架-->物理数据库构架-->事务日志构架-->截断事务日志
set rowcount 20000 --每次删除20000条记录
delete tablename
回为检查点是在一条语句执行完毕之后才执行截短的,在一条语句执行未完毕时,
会将所有的修改提交到事物日志中,
删除大量的记录,首先将这些记录全部保存到日志中,然后删除.所以 ,我认为webuse的方法比较可行. 或者你干脆自已写个程序,不断的向数据库发送delete语句,每次只删除一条几条,我以前就是这么干的!