發表于 2012 年 01 月 10 日 由 惜分飛
聯系:手機(13429648788) QQ(107644445)
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiInBnauEXcfVGdpN3LcdWbp9CXzVWblhGdvwFduVGdu92YtA3dvwVbvNmLpVmZuVmZphnL3d3dvw1LcpDc0RHaiojIsJye.jpg)
标題:MOVE和CAST比較
作者:惜分飛©版權所有[未經本人同意,請不得以任何形式轉載,否則有進一步追究法律責任的權利.]
1.建立模拟表
|
2.測試move
2.1)執行move操作,記錄時間
|
從這裡可以看出,move操作執行了00:02:11.77
2.2)檢視trace内容
|
從這裡可以看出執行move,其實本質是全表掃描表,然後append方式插入資料,而不是真的資料塊拷貝
3.測試CAST
3.1).CAST插入資料過程
SQL> alter system flush buffer_cache;
System altered.
SQL> SET TIMING ON;
SQL> alter session set events
2 ’10046 trace name context forever,level 1′;
Session altered.
Elapsed: 00:00:00.01
SQL> create table chf.t_xifenfei_move_new tablespace test_ocp
2 as
3 select * from chf.t_xifenfei_move;
Table created.
Elapsed: 00:01:59.22
SQL> alter session set events
2 ’10046 trace name context off’;
Session altered.
Elapsed: 00:00:00.00
SQL> select d.value||’/'||lower(rtrim(i.instance,chr(0)))||’_ora_’||p.spid||’.trc’ trace_file_name from
2 (select p.spid from v$mystat m, v$session s,v$process p where m.statistic# = 1 and s.sid = m.sid and p.addr = s.paddr ) p,
3 (select t.instance from v$thread t,v$parameter v where v.name = ‘thread’ and(v.value = 0 or t.thread# = to_number(v.value))) i,
4 (select value from v$parameter where name = ‘user_dump_dest’) d;
TRACE_FILE_NAME
——————————————————————————–
/opt/oracle/diag/rdbms/chf/chf/trace/chf_ora_5121.trc
從這裡看出cast操作用時:00:01:59.22,比move稍微少,但是cast要實作move完全的功能,還需要表重命名,表授權,編譯無效對象等。
3.2)檢視trace内容
|
通過這個可以看出,CAST其實本質也是全表掃描,然後append方式插入資料
4.比較move和cast
4.1)通過比較執行時間,cast稍微少,但是還有後續操作需要時間
4.2)通過比較執行計劃,兩者是一樣的
4.3)move操作在整個過程中都會鎖表,而cast不會鎖住原表(select+where可以減少停業務時間)
4.4)move操作會一次性處理好權限,plsql/view等有效,而cast在rename之後,相關對象可能需要重新編譯,重新授權等操作
4.5)cast操作index需要建立(create),而move操作index需要重建(rebuild)
4.6)cast完成後,需要對表重命名,删除原表操作操作,而這個操作move不用
5.選擇使用誰
5.1)如果停業務時間夠長,建議使用move操作
5.2)如果停業務時間不能太長,可以使用cast+where實作
5.3)如果資料庫版本>=10g,且表空間使用local管理,那麼可以考慮在不停業務的情況下使用shrink實作類此功能
至于MOVE和CAST在執行過程中,關于産生的redo和undo的比較,請見下篇:MOVE和CAST比較(續)
原文位址:http://www.xifenfei.com/2012/01/move%E5%92%8Ccast%E6%AF%94%E8%BE%83.html