_disable_logging如何禁止日志的生成

时间:2009-03-31 22:28:00 来源:互联网 作者: 神秘的大神 字体:

 

在我们的实际的工作中,非归档模式下(注:归档模式会导致日志损坏)使用_disable_logging可以禁止日志的生成,在此条件下可以很大的提高某些特殊操作(例如批量加载或者Benchmark测试等)的性能.

禁止完成的参考示例:

首先我们需要启动两个Session,一个用来管理,一个用来测试。

1.Session 1 ,使用SYS用户连接数据库,当前_disable_logging没有设置,数据库处于正常的状态。

        
         $ sqlplus "/ as sysdba"
            SQL*Plus: Release 9.2.0.4.0 - Production on Fri Apr 14 09:30:42 2006
            Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
            Connected to:
            Oracle9i Enterprise Edition Release 9.2.0.4.0 - 64bit Production
            With the Partitioning option
            JServer Release 9.2.0.4.0 - Production
            SQL> col member for a40
            SQL> select * from v$logfile;
            GROUP# STATUS TYPE MEMBER
            ---------- ------- -------
            1 ONLINE /opt/oracle9/oradata/testora9/redo01.log
            2 ONLINE /opt/oracle9/oradata/testora9/redo02.log
            3 ONLINE /opt/oracle9/oradata/testora9/redo03.log
            SQL> alter system switch logfile;
            System altered.
            SQL> select * from v$log;
            GROUP# THREAD# SEQUENCE# BYTES MEMBERS
            ARC STATUS FIRST_CHANGE# FIRST_TIM
            ---------- ---------- ---------- ----------
            1 1 148 104857600 1 NO CURRENT 262708457 14-APR-06
            2 1 146 104857600 1 NO INACTIVE 262662667 14-APR-06
            3 1 147 104857600 1 NO ACTIVE 262675537 14-APR-06
        

2.Session 2则通过SCOTT用户连接,具体执行下面的更新:

        
         SQL> connect scott/tiger
            Connected.
            SQL> update emp set sal=3000 where empno=7788;
            1 row updated.
            SQL> commit;
            Commit complete.
        

3.在Session转储REDO日志

        
         SQL> ALTER SYSTEM DUMP LOGFILE '
            /opt/oracle9/oradata/testora9/redo01.log';
            System altered.
        

4.观察跟踪文件,记录正常状态下的REDO信息

                              TRC文件太大,就不贴出来了

 

5.禁用日志生成的,并且切换日志

        
         SQL> alter system set "_disable_logging"=true;
            System altered.
            SQL> alter system switch logfile;
            System altered.
            SQL> select * from v$log;
            GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM
            ---------- ---------- ----------  ---------
            1 1 148 104857600 1 NO ACTIVE 262708457 14-APR-06
            2 1 149 104857600 1 NO CURRENT 262708606 14-APR-06
            3 1 147 104857600 1 NO INACTIVE 262675537 14-APR-06
        

6.SCOTT用户再更新

        
         SQL> show parameter disable
            NAME TYPE VALUE
            ------------------------------------
            _disable_logging boolean TRUE
            SQL> update emp set sal=4000 where empno=7788;
            1 row updated.
            SQL> commit;
            Commit complete.
        

7.转储日志

        
         SQL> ALTER SYSTEM DUMP LOGFILE '
            /opt/oracle9/oradata/testora9/redo02.log';
            System altered.
        

8.记录此时REDO信息

        
         DUMP OF REDO FROM FILE '/opt/oracle9/oradata/testora9/redo02.log'
            Opcodes *.*
            DBA's: (file # 0, block # 0) thru (file # 65534, block # 4194303)
            RBA's: 0x000000.00000000.0000 thru 0xffffffff.ffffffff.ffff
            SCN's scn: 0x0000.00000000 thru scn: 0xffff.ffffffff
            Times: creation thru eternity
            FILE HEADER:
            Software vsn=153092096=0x9200000, Compatibility Vsn=153092096=0x9200000
            Db ID=1628068176=0x610a5950, Db Name='TESTORA9'
            Activation ID=1628067152=0x610a5550
            Control Seq=1163=0x48b, File size=204800=0x32000
            File Number=2, Blksiz=512, File Type=2 LOG
            descrip:"Thread 0001, Seq# 0000000149, SCN 0x00000fa89d7e-0xffffffffffff"
            thread: 1 nab: 0xffffffff seq: 0x00000095 hws: 0x1 eot: 1 dis: 0
            reset logs count: 0x1f435110 scn: 0x0000.00000001
            Low scn: 0x0000.0fa89d7e 04/14/2006 09:33:43
            Next scn: 0xffff.ffffffff 01/01/1988 00:00:00
            Enabled scn: 0x0000.00000001 04/26/2004 15:56:10
            Thread closed scn: 0x0000.0fa89d7e 04/14/2006 09:33:43
            Log format vsn: 0x8000000 Disk cksum: 0xcac7 Calc cksum: 0xcac7
            Terminal Recovery Stamp scn: 0x0000.00000000 01/01/1988 00:00:00
            Most recent redo scn: 0x0000.00000000
            Largest LWN: 0 blocks
            End-of-redo stream : No
            Unprotected mode
            Miscellaneous flags: 0x0
            END OF REDO DUMP
        

至此已经没有REDO的生成.数据库目前仅仅记录少量的必要信息。