oracle中  alter system .....  force logging  起到什么作用 ,在什么情况下用

解决方案 »

  1.   

    有些特定的操作可能不会产生redo log,比如insert /*+append*/  create table test as ..。这会引起主库和备库的不一致。启用force logging的目的就是强制主库产生log,保证主备数据库是一致的
      

  2.   

    force logging是强制日志模式,即所有的操作都会记入日志,用于忽略nologging选项不记录redo的请求,一般用于dataguard以及安全要求较高的数据库,另外可以设置force_logging的值为yes或no。
      

  3.   

    通常情况下,任何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