title: Faster way to refresh a table in Oracle
body: <p>I have a procedure in Oracle 10g that copies data from a staging table to a main table.</p>
  
  <pre><code>-- move data to final table
  DELETE FROM my_table;
  INSERT INTO my_table
      SELECT * FROM my_table_s;
  COMMIT;
  </code></pre>
  
  <p>This table has ~3M records.  The delete statement is very slow. I can speed it up with a TRUNCATE, but that creates a small window of time where the data is unavailable.</p>
  
  <p>Is there a better way to do this type of move that both maintains the data availability to whomever may be querying at any given time and would not invalidate any packages using these table objects?</p>