CTAS和insert append的一个测试

8174上的一个测试,非归档模式:

代码:
  
  

SQL
> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle8i Enterprise Edition Release 8.1.7.4.1 - Production
PL
/SQL Release 8.1.7.4.0 - Production
CORE    8.1.7.2.1       Production
TNS
for 32-bit Windows: Version 8.1.7.4.0 - Production
NLSRTL Version 3.4.1.0.0
- Production

SQL
> archive log list
数据库日志模式             非存档模式
自动存档             启用
存档终点            D
:databaseoracleora817RDBMS
最早的概要信息日志序列     1488
当前日志序列           1491  


SQL
> select * from redo_size;

     
VALUE
----------
     
91848

SQL
> create table test nologging as select * from all_objects;

表已创建。

SQL
> select * from redo_size;

     
VALUE
----------
    
147148

SQL
> drop table test;

表已丢弃。

SQL
> select * from redo_size;

     
VALUE
----------
    
177584

SQL
> create table test as select * from all_objects;

表已创建。

SQL
> select * from redo_size;

     
VALUE
----------
    
232892       

SQL
> select (232892 - 177584 ) redo,(147148-91848) redo_nolog from dual;

      
REDO REDO_NOLOG
---------- ----------
     
55308      55300
'



在归档模式下的情况:

代码:
    
    

SQL
> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL
> startup mount
ORACLE 例程已经启动。

Total System
Global Area   65648668 bytes
Fixed Size                    75804 bytes
Variable Size              44523520 bytes
Database Buffers           20971520 bytes
Redo Buffers                  77824 bytes
数据库装载完毕。
SQL
> alter database archivelog
  2  
/

数据库已更改。

SQL
> alter database open;

数据库已更改。    

SQL
> drop table test;

表已丢弃。

SQL
> select * from redo_size;

     
VALUE
----------
     
30520
     
SQL
> create table test as select * from all_objects;

表已创建。

SQL
> select * from redo_size;

     
VALUE
----------
   
2953668

SQL
> drop table test;

表已丢弃。

SQL
> select * from redo_size;

     
VALUE
----------
   
3070020

SQL
> create table test nologging as select * from all_objects;

表已创建。

SQL
> select * from redo_size;

     
VALUE
----------
   
3125328

SQL
> select (2953668-30520) redo,(3125328-3070020) redo_nolog from dual;

      
REDO REDO_NOLOG
---------- ----------
   
2923148      55308
'



在归档模式下的近一步测试,比较ctas和ctas无数据+ insert append 的redo size:

代码:
      
      

SQL
> drop table test;

表已丢弃。

SQL
> select * from redo_size;

     
VALUE
----------
   
3155764

SQL
> create table test as select * from all_objects where 1=0;

表已创建。

SQL
> insert /*+append*/into test select * from all_objects;

已创建25474行。

SQL
> commit;

提交完成。

SQL
> select * from redo_size;

     
VALUE
----------
   
6079860
   
SQL
> select  (6079860-3155764) logging from dual;

(
6079860-3155764)
-----------------
          
2924096   

   
SQL
> drop table test;

表已丢弃。

SQL
> select * from redo_size;

     
VALUE
----------
   
6110356

SQL
> create table test nologging as select * from all_objects where 1=0;

表已创建。

SQL
> insert /*+append*/ into test select * from all_objects;

已创建25474行。

SQL
> commit;

提交完成。

SQL
> select * from redo_size;

     
VALUE
----------
   
6167588
   
SQL
> select (6079860-3155764) logging ,(6167588-6110356)nologging from dual;

   
LOGGING  NOLOGGING
---------- ----------
   
2924096      57232
'



根据这个结果,我们看到:

noarchivelog下的CTAS 的redo=noarchivelog下的CTAS nologging的redo =archivelog下的CTAS nologging的redo
这三种情况下,都对系统产生了较少的redo size
只有在archivelog 下CTAS,才产生了较多的redo size


比较了CTAS和CTAS+insert append后,实际上(archivelog mode):

CTAS nologging redo =CTAS(no data) nologing +insert append redo size;

CTAS redo =CTAS(no data) +insert append redo size;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值