Oracle FAQ Your Portal to the Oracle Knowledge Grid
HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US
 

Home -> Community -> Usenet -> c.d.o.misc -> Re: Exclude Tables from Archive log

Re: Exclude Tables from Archive log

From: Thomas J. Kyte <tkyte_at_us.oracle.com>
Date: Sat, 04 Mar 2000 14:07:04 GMT
Message-ID: <89r5a7$9q3$1@nnrp1.deja.com>


In article <89ocg9$brl$1_at_nnrp1.deja.com>,   efflerch_at_my-deja.com wrote:
> Hallo,
> is there a way to exclude tables from ARCHIVELOG.

No, not when doing normal INSERTS/UPDATES and DELETES.

If you direct path load, insert /*+ APPEND */, and truncate -- yes, you can avoid redo -- otherwise no.

> Of course this Tables have no triggers or constraits to other tables .
>
> Background is: I load nightly data from a ASCII-file via SQL*Loader,
> which are a datapool for the "real" Application. (I did SQL Command
> "Alter table xxx nologging")
> But unfortunately I have after the sqlload a script running which is
> doing lots of formating stuff.
>
> Today I have approx 80% Archiv-Log files due to of UPDATE commands on
> the datapool Tables executed by formating scripts.
>
> I'm using Oracle 8.1.5 on WinNT
>
> Sent via Deja.com http://www.deja.com/
> Before you buy.
>

Since 8.1.5 has temporary tables and:
...
DML statements on temporary tables do not generate redo logs for the data
changes. However, undo logs for the data and redo logs for the undo logs are
generated. Data from the temporary table is automatically dropped in the case of
session termination, either when the user logs off or when the session terminates
abnormally such as during a session or instance crash. ....

That means that redo should effectively be cut in half (see test below). So, what you could do is:

o direct path load into your table (no logging) o insert /*+ append */ into a session based global temporary table (no logging)
o mod this table instead (~1/2 the redo) o truncate the table you loaded (no logging) o insert /*+ append */ into that table from the temp table (no logging)

To test this approach, you could

o sqlldr as normal
o make the first line in your update script be "rename T to T_HOLD" o create global temporary table T on commit preserve rows as select * from T_HOLD where 1=0;
o insert /*+ append */ into t select * from t_hold o -- run the existing script ---
o truncate t_hold
o insert /*+ append */ into t_hold select * from t; o drop table t
o rename T_HOLD to T

to see how it goes (only need to modify the script a little to test)

Here is the test of redo generated on a temp table:

scott_at_dev8i> create global temporary table tmp_tab on commit preserve rows as select * from all_objects where 1=0; Table created.

scott_at_dev8i> create table t nologging as select * from all_objects where 1=0;
Table created.

scott_at_dev8i> insert /*+ append */ into tmp_tab select * from all_objects;
21785 rows created.

Statistics


        839  recursive calls
        133  db block gets
     186380  consistent gets
          0  physical reads
      15828  redo size
        996  bytes sent via SQL*Net to client
        832  bytes received via SQL*Net from client
          4  SQL*Net roundtrips to/from client
          3  sorts (memory)
          0  sorts (disk)
      21785  rows processed

scott_at_dev8i> commit;
Commit complete.

REM -- 15k of redo to log the data dictionary changes made only. append is like a direct path insert.

scott_at_dev8i> update tmp_tab set object_name = initcap(object_name); 21785 rows updated.

Statistics


          0  recursive calls
      22397  db block gets
        286  consistent gets
          0  physical reads
    3693968  redo size
       1011  bytes sent via SQL*Net to client
        826  bytes received via SQL*Net from client
          4  SQL*Net roundtrips to/from client
          1  sorts (memory)
          0  sorts (disk)
      21785  rows processed


3.6 meg of redo more or less....

scott_at_dev8i> insert /*+ append */ into t select * from all_objects; 21785 rows created.

Statistics


         97  recursive calls
         71  db block gets
     186187  consistent gets
          0  physical reads
       7192  redo size
        998  bytes sent via SQL*Net to client
        826  bytes received via SQL*Net from client
          4  SQL*Net roundtrips to/from client
          3  sorts (memory)
          0  sorts (disk)
      21785  rows processed


about 7k of redo generated for this insert...

scott_at_dev8i> commit;
Commit complete.

scott_at_dev8i> update t set object_name = initcap(object_name); 21785 rows updated.

Statistics


          0  recursive calls
      22399  db block gets
        286  consistent gets
        286  physical reads
    6067764  redo size
       1014  bytes sent via SQL*Net to client
        820  bytes received via SQL*Net from client
          4  SQL*Net roundtrips to/from client
          1  sorts (memory)
          0  sorts (disk)
      21785  rows processed


6meg of redo generated for the same update. --

Thomas Kyte                              tkyte_at_us.oracle.com
Oracle Service Industries
http://osi.oracle.com/~tkyte/index.html --
Opinions are mine and do not necessarily reflect those of Oracle Corp

Sent via Deja.com http://www.deja.com/
Before you buy. Received on Sat Mar 04 2000 - 08:07:04 CST

Original text of this message

HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US