create table aaaa
as select * from  bbbb;这样建表语句,如果表bbbb的数据量很大,会不会出现这样的情况:表建好了,但是由于某种原因操作终止而导致bbbb的数据没有完全插入到aaaa中?
也就是说
select * from  bbbb;会有数据,但是不是aaaa中完整的数据。

解决方案 »

  1.   

    不会,建表是一个DDL操作但隐含了一个事务,所以该语句在建表同时插入数据属于同一个隐含事务,
    要么成功建立表,并拥有完整一致的数据,要么失败,全部回滚。不存在一个中间状态。
      

  2.   

    参考http://www.itpub.net/viewthread.php?tid=1325285#
    会的,
      

  3.   

    ddl语句会自动提交;
    这个会。create table tablename
    as
    select * from tablename1;
    相当于先创建一个table,然后执行insert;
    由于create语句会自动提交,所以事务中断的话就不能回滚创建表的内容。
    但,至于会不会出现一半的情况,就有待测试。
      

  4.   

    不会的 DDL没有中间状态 要么成功 要么不成功
      

  5.   

    应该不会,你可以自己去做做测试.
    比如
    create table t_test
    as
    select rownum rn from dual connect by rownum<100000000;
    在执行中你对电脑shutdown abort,然后查看下表是否存在.
      

  6.   

    SQL> create table t_test_create
      2  as
      3  select rownum rn from dual connect by rownum<100000000;
     
    create table t_test_create
    as
    select rownum rn from dual connect by rownum<100000000
     
    ORA-03113: end-of-file on communication channel
     --重启数据库
    SQL> select * from t_test_create;
     
    select * from t_test_create
     
    ORA-00942: 表或视图不存在
     
    SQL> 
    如果是先执行ddl去create table再insert.那么应该表存在但无法查询出数据.
      

  7.   

    create table ****
    应该没有中间状态的,它基本上还是一个DDL,要么建表成功,要么不成功。
      

  8.   

    在这个操作中,如果在给aaaa表插数据的时候失败了,会不会创建一个没有数据的空aaaa表呢 还是连表也一起回滚??
      

  9.   

    身先士卒。
    看看这个,http://space.itpub.net/22034023/viewspace-666440
      

  10.   

    不会的 不存在中间状态 不过 这种情况oracle推荐使用copy命令