DB2不记录事务日志
2013-07-18 17:21
176 查看
1. DB2大数据处理不记录事务日志步骤:
建表需要添加属性“NOT LOGGED INITIALLY”
在大批量更改操作的同一个事务开始时执行:“ALTER TABLE tabname ACTIVATE NOT LOGGED INITIALLY”
执行更新sql
提交,一个事务完成,后续sql为下一个事务,默认记录事务日志
但是根据IBM的官方文档及测试,建表的时候不加参数“NOT LOGGED INITIALLY”,直接进行“ALTER TABLE tabname ACTIVATE NOT LOGGED INITIALLY”也是可以的。
2. IBM官方文档:
使用 NOT LOGGED INITIALLY 参数减少日志记录
如果应用程序根据主表创建并填充工作表,并且您不担心这些工作表的可恢复性(因为可以根据主表方便地重新创建它们),
那么创建工作表时可以在 CREATE TABLE 语句上指定 NOT LOGGED INITIALLY 参数。这样可以减少日志记录并提高性能。
使用 NOT LOGGED INITIALLY 参数的优点是,不记录在创建表的同一个工作单元中对该表所作的任何更改(包括插入、删除、更新或创建索引操作)。
这不仅降低了日志记录工作量,还能提高应用程序性能。还可以对现有表使用带 NOT LOGGED INITIALLY 参数的 ALTER TABLE 语句,来获得同样的结果。
3. 理解
上述描述说了两个意思:
1.创建并填充工作表create table A as select * from B 时加NOT LOGGED INITIALLY不记录日志。
2.在表创建后(无论在建表时有无NOT LOGGED INITIALLY),对于一个事务不记录日志时,用“ALTER TABLE tabname ACTIVATE NOT LOGGED INITIALLY”。
可以看出不记录日志只是对事务而言,当事务提交后not logged intially选项同时被关闭。
因为该事务没有记录日志,导致对应的表出现异常后不能被恢复(发生SQL1477N异常,只能将表删除重建),最好在not logged intially后对表执行备份。
not logged intially方法不被推荐使用,如果要导入大量数据,还是使用Load,Import好一些; 想要在程序中写也是可以的,DB2提供了API,你可以参考API Reference。
4. sql举例
DB2 CREATE TABLE A ...... NOT LOGGED INITIALLY;
db2 ALTER TABLE A ACTIVATE NOT LOGGED INITIALLY;
db2 Insert into a select * from b;
db2 commit;
commit之前由于打开了not logged intially选项,后面的Sql语句不计日志;
commit之后not logged intially选项同时被关闭; 这个时候最好执行备份,因为你这一段数据操作是没有日志的,不利于以后恢复。
建表需要添加属性“NOT LOGGED INITIALLY”
在大批量更改操作的同一个事务开始时执行:“ALTER TABLE tabname ACTIVATE NOT LOGGED INITIALLY”
执行更新sql
提交,一个事务完成,后续sql为下一个事务,默认记录事务日志
但是根据IBM的官方文档及测试,建表的时候不加参数“NOT LOGGED INITIALLY”,直接进行“ALTER TABLE tabname ACTIVATE NOT LOGGED INITIALLY”也是可以的。
2. IBM官方文档:
使用 NOT LOGGED INITIALLY 参数减少日志记录
如果应用程序根据主表创建并填充工作表,并且您不担心这些工作表的可恢复性(因为可以根据主表方便地重新创建它们),
那么创建工作表时可以在 CREATE TABLE 语句上指定 NOT LOGGED INITIALLY 参数。这样可以减少日志记录并提高性能。
使用 NOT LOGGED INITIALLY 参数的优点是,不记录在创建表的同一个工作单元中对该表所作的任何更改(包括插入、删除、更新或创建索引操作)。
这不仅降低了日志记录工作量,还能提高应用程序性能。还可以对现有表使用带 NOT LOGGED INITIALLY 参数的 ALTER TABLE 语句,来获得同样的结果。
3. 理解
上述描述说了两个意思:
1.创建并填充工作表create table A as select * from B 时加NOT LOGGED INITIALLY不记录日志。
2.在表创建后(无论在建表时有无NOT LOGGED INITIALLY),对于一个事务不记录日志时,用“ALTER TABLE tabname ACTIVATE NOT LOGGED INITIALLY”。
可以看出不记录日志只是对事务而言,当事务提交后not logged intially选项同时被关闭。
因为该事务没有记录日志,导致对应的表出现异常后不能被恢复(发生SQL1477N异常,只能将表删除重建),最好在not logged intially后对表执行备份。
not logged intially方法不被推荐使用,如果要导入大量数据,还是使用Load,Import好一些; 想要在程序中写也是可以的,DB2提供了API,你可以参考API Reference。
4. sql举例
DB2 CREATE TABLE A ...... NOT LOGGED INITIALLY;
db2 ALTER TABLE A ACTIVATE NOT LOGGED INITIALLY;
db2 Insert into a select * from b;
db2 commit;
commit之前由于打开了not logged intially选项,后面的Sql语句不计日志;
commit之后not logged intially选项同时被关闭; 这个时候最好执行备份,因为你这一段数据操作是没有日志的,不利于以后恢复。
相关文章推荐
- DB2不记录事务日志方法
- DB2 事务日志已满 增加事务日志文件;操作不记录日志
- SQL Server BI Step by Step SSIS 7 (End) --- 事务,错误输出,事件处理,日志记录
- DB2 事务日志满 解决办法 增大日志空间&不写日志
- Spring 编程式事务和声明式事务(记录日志)
- DB2事务日志已满的解决方法
- DB2在导入数据时,如果数据量过大,出现事务日志满的错误(Database transaction log is full)该如何解决,commitcount使用
- 内存中OLTP(Hekaton)里的事务日志记录
- DB2 的事务日志
- db2 数据库日志记录
- db2事务日志满解决方法
- MySQL事务的隔离级别和日志记录模式选择
- SSIS之事务,错误输出,事件处理,日志记录
- SQL Server BI Step by Step SSIS 7 (End) --- 事务,错误输出,事件处理,日志记录
- 考勤系统问题记录一:事务日志太大
- oracle使用自治事务记录系统日志
- DB2崩溃后用事务日志恢复的原理和技巧
- 高级 DAO 编程(事务界定、异常处理和日志记录)
- SQL Server BI Step by Step SSIS 7 (End) --- 事务,错误输出,事件处理,日志记录
- DB2事务日志