Erik - Another suggestion that has been mentioned on this forum is to
consider partitioning. You could partition by insertion date, with each
partition holding a month of data. Then you could clean up by truncating the
oldest partition. Without indexes, any use of these tables will probably be
table scans, so you may receive a performance bonus for queries that only
need data within a certain date range.
Dennis Williams
DBA
Lifetouch, Inc.
[EMAIL PROTECTED]


-----Original Message-----
Sent: Thursday, November 01, 2001 10:00 AM
To: Multiple recipients of list ORACLE-L


That is an excellent suggestion! I had not thought of that.

Those tables are populated with data as a result of web site interactions.
Inserts need to be as fast as possible. There were no indexes added due to
the overhead of maintaining an associated index.

Thanks again for the suggestion. I am going to look into that this
afternoon.

Erik



> -----Original Message-----
> From: [EMAIL PROTECTED] [SMTP:[EMAIL PROTECTED]]
> Sent: Thursday, November 01, 2001 10:10 AM
> To:   Multiple recipients of list ORACLE-L
> Subject:      Re:Data Deletion in Tables with Foreign Keys
> 
> Erik,
> 
>     First off, do the foreign keys have the 'on delete cascade' option
> turned
> on?  If not then do so as it makes keeping things in sync much easier.
> Actually
> in this scenario you don't have to worry about the child tables.
> 
>     Second, what do you mean by "The design of the application prohibits
> me from
> adding indexes to these tables. "?  I've not seen any application that
> 'prohibits' adding indexes.
> 
> Dick Goulet
> 
> ____________________Reply Separator____________________
> Author: Erik Williams <[EMAIL PROTECTED]>
> Date:       11/1/2001 5:45 AM
> 
> I need to prune data from a set of tables every day. I need to retain the
> last 90 days of information. Two of the tables, A and B, have foreign keys
> to a third, C. I cannot disable the constraints prior to deleting the
> data,
> because the system is 24/7. I have created a script that will delete the
> data from each of the tables with foreign keys first, then from the parent
> table. The problem I am having is the time it is taking to perform the
> deletions. The A and B tables are without indexes on the foreign key,
> because they very high volume insertion tables and very infrequent lookup.
> These tables are very large. The design of the application prohibits me
> from
> adding indexes to these tables. 
> 
> Here is the code:
> 
> set serveroutput on 
> set timing on
> 
> DECLARE
>         id number(15);
>         dtm  date;
>         cnt number;
>         cursor purge_c is
>                 select id
>                 from C
>                 where dtm < sysdate-90; 
> BEGIN
>         open purge_c;
>         fetch purge_c into id;
>         cnt := 0;
>         while (purge_c%FOUND) loop
>                 cnt := cnt + 1;
>                 delete from A where id = id;
>                 delete from B where id = id;
>                 delete from C where id = id; 
>                 commit;
>         fetch purge_c into id;
>         end loop;
>         close purge_c;
>         DBMS_OUTPUT.PUT_LINE('Number of sessions deleted: ' || cnt);
> END;
> /
> 
> set timing off
> set serveroutput off
> 
> 
> I was thinking about creating another loop so that commits will only be
> done
> every 1000 deletions, but I think that the commits are a very a small
> percentage of the time compared to the table scans. I also considered
> partitioned tables, but I really don't want to go to that length.  I was
> hoping to hear how other people handle this issue. 
> 
> Thanks.
> 
> -- 
> Please see the official ORACLE-L FAQ: http://www.orafaq.com
> -- 
> Author: Erik Williams
>   INET: [EMAIL PROTECTED]
> 
> Fat City Network Services    -- (858) 538-5051  FAX: (858) 538-5051
> San Diego, California        -- Public Internet access / Mailing Lists
> --------------------------------------------------------------------
> To REMOVE yourself from this mailing list, send an E-Mail message
> to: [EMAIL PROTECTED] (note EXACT spelling of 'ListGuru') and in
> the message BODY, include a line containing: UNSUB ORACLE-L
> (or the name of mailing list you want to be removed from).  You may
> also send the HELP command for other information (like subscribing).
> -- 
> Please see the official ORACLE-L FAQ: http://www.orafaq.com
> -- 
> Author: 
>   INET: [EMAIL PROTECTED]
> 
> Fat City Network Services    -- (858) 538-5051  FAX: (858) 538-5051
> San Diego, California        -- Public Internet access / Mailing Lists
> --------------------------------------------------------------------
> To REMOVE yourself from this mailing list, send an E-Mail message
> to: [EMAIL PROTECTED] (note EXACT spelling of 'ListGuru') and in
> the message BODY, include a line containing: UNSUB ORACLE-L
> (or the name of mailing list you want to be removed from).  You may
> also send the HELP command for other information (like subscribing).

-- 
Please see the official ORACLE-L FAQ: http://www.orafaq.com
-- 
Author: Erik Williams
  INET: [EMAIL PROTECTED]

Fat City Network Services    -- (858) 538-5051  FAX: (858) 538-5051
San Diego, California        -- Public Internet access / Mailing Lists
--------------------------------------------------------------------
To REMOVE yourself from this mailing list, send an E-Mail message
to: [EMAIL PROTECTED] (note EXACT spelling of 'ListGuru') and in
the message BODY, include a line containing: UNSUB ORACLE-L
(or the name of mailing list you want to be removed from).  You may
also send the HELP command for other information (like subscribing).
-- 
Please see the official ORACLE-L FAQ: http://www.orafaq.com
-- 
Author: DENNIS WILLIAMS
  INET: [EMAIL PROTECTED]

Fat City Network Services    -- (858) 538-5051  FAX: (858) 538-5051
San Diego, California        -- Public Internet access / Mailing Lists
--------------------------------------------------------------------
To REMOVE yourself from this mailing list, send an E-Mail message
to: [EMAIL PROTECTED] (note EXACT spelling of 'ListGuru') and in
the message BODY, include a line containing: UNSUB ORACLE-L
(or the name of mailing list you want to be removed from).  You may
also send the HELP command for other information (like subscribing).

Reply via email to