通常情况下,任何DML(如INSERT, DELETE)都会生产redo log,如果使用NOLOGGING的话会大大加快执行速度。
ZEENO@SS01PRD> create table zeeno as
2 select * from cust_mon_sales
3 where 1=2;
Table created.
这样一来,你在zeeno表中的任何DDL都不会产生redo log。在一些临时的操作中这非常有用。
但对于更多的实际应用而言,你必须保证数据的可恢复,任何在产品数据库中取消redo log以提到执行效率的做法都是值得商榷的,也是绝对需要慎重考虑的。因而,有时候我们需要保证在产品数据库中(或者其他的一些有必要的场合)的任何 DML都必须产生redo log,这可以通过一些强制措施来实现。
ALTER DATABASE FORCE LOGGING;在数据库级别应用FORCE LOGGING可以强制该数据库中的任何DML都产生redo log,用户无法取消这个特性。也可以在tablespace级别应用FORCE LOGGING,但是建议不要在database和tablespace级别上同时应用FORCE LOGGING模式。
撤销该模式:
ZEENO@SS01PRD> alter database no force logging;
Database altered.
FORCE LOGGING模式会成为database的永久属性,重新后并不会改变该属性,但是如果重建了control file,数据库将不会被置于FORCE LOGGING模式,除非在创建控制文件的时候指定了FORCE LOGGING。
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production