现在需要每天夜里将一张表的数据全部删除,从数据来源处将新数据导入。需要在这个过程中不影响数据的使用。
现在想到的办法是用两张表,A和B,同一时刻只有一张表有效。
例如:A有效,则将数据导入B中,然后程序中设定B有效,以后程序就去访问B。想请教一下是否有更好的办法只用一张表搞定,不用程序中去控制哪张表有效的?
比如物化视图之类的是否可以达到目的?
谢谢~

解决方案 »

  1.   

    很简单啊,你删除表里的老数据并导入新数据后,不要马上提交事务,让你的程序访问完这张表后,再提交事务,oracle事务的隔离性就保证了这样做绝对不会影响你的程序使用原有的数据。
      

  2.   

    参考你的思路,最快的方法是建立好一个表A,然后要做切换到 时候,删除表B,然后将表A重新命名为A,这样切换最快
      

  3.   

    我想了想,可以这样,1:按天建立分区表,每天晚上12点后自动切换查询准备好的分区表2:也可以建立视图,A,B表的访问控制写在视图里,基数日期访问A表,偶数日期访问B表,自动在视图的SQL理做判断,访问的时候就自动切换了
      

  4.   

    重命名表是瞬间的事,怎么会有间隔呢?alter table 
    rename to 
      

  5.   

    to caihong201:
       要重命名2个表。to java3344520:非常感谢。
      

  6.   

    同意楼上java3344520说的从远程服务器拉下来先建一张新表,然后drop掉原来的表,再重名命这样是最快,影响最小的。记录多的时候delete运行非常慢(当然truncate table会非常快),并且据我的经验,create table as 会比insert into会快可以把整个过程写成一个方法或过程,中间有一些表是否存在的判断