Sybase SQL Server日志问题普及
2010-06-19 15:12:44 来源:WEB开发网同样,把整个table的记录都删除,要记很多log,我们可以用truncate table命令代替上 述语句完成相同功能。
1>;truncate table large_tab
2>;go
这样,表中记录都删除了,而使用truncate table 命令,log只记录空间回收情况,而不 是记录删除表中每一行的操作。
基于子查询的数据插入
例:
1>;insert new_tab select col1,col2 from
large_tab
2>;go
同样的方法,对这个大的transaction,我们应该处理为几个小的transactions。
1>;Insert new_tab
2>;select col1,col2 from large_tab where col1<=y
3>;go
1>;dump transaction database_name with truncate_only
2>;go
1>;insert new_tab
2>;select col1,col2 from large_tab where col1>;y
3>;go
1>;dump database database_name with truncate_only
2>;go
同样,若想保存log到介质上,则dump transaction 后不加with truncate_only 选项。若 执行dump transaction with truncate_only,应该先做dump database 动作。
批量数据拷贝
在使用bcp把数据拷入数据库时,我们可以把这个大的transaction变成几个小的 transactions处理,避免log剧增。
开放trunc log on chkpt 选项
1>;use master
2>;go
1>;sp_dboption database_name,trunc,true
2>;go
1>;use database_name
2>;go
1>;checkpoint
2>;go
bcp... -b 100 (on unix)
bcp... /batch_size=100(on vms)
关闭trunc log on chkpt选项,并dump database。
在这个例子中,一个批执行100行拷贝。也可以将bcp输入文件分成两或多个分开的文件, 在每个文件执行后做dump transaction 来避免log 满。
若bcp使用快速方式(无索引,无triggers),这样操作不记log,换句话说,log 只记载 空间分配情况。在这种情况下,要先做dump database(为恢复数据库用)。若log太小,可置 trunc log on chkpt 选项,这样在每次checkpoint后清除log。
- ››sql server自动生成批量执行SQL脚本的批处理
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››sqlserver安装和简单的使用
- ››SQL Sever 2008 R2 数据库管理
- ››SQL SERVER无法安装成功,sqlstp.log文件提示[未发...
- ››Sql Server中通过父记录查找出所有关联的子记录
- ››SqlServer触发器、存储过程和函数
- ››SQL Server 中的事务(含义,属性,管理)
- ››Sqlite数据库插入和读取图片数据
- ››Sql server 2005拒绝了对对象 'xx表' (数...
- ››Sql server 2005拒绝了对对象 'xx表' (数...
更多精彩
赞助商链接