Oracle 12.2如何使用联机重定义对表进行多处改变
小编给大家分享一下Oracle 12.2如何使用联机重定义对表进行多处改变,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!
下面的例子将演示如何使用联机重定义操作来对表进行多处改变,原始表jy.original的创建语句如下:
SQL>createtablejy.original(2col1numberprimarykey,3col2varchar2(10),4col3clob,5col4date)6organizationindex;Tablecreated.
表jy.original将按以下规则进行重定义:
.表启用高级行压缩方法进行压缩
.LOB列将被改变为SecureFiles LOB存储
.表的存储表空间将由test改变为example,并且表的块大小由8KB改变为 16KB。
.表将基于col1列进行分区
.将增加列col5
.列col2将被删除
.列col3与col4会被重命名,并且它们的位置会发生改变
.列col3的数据类型将从date改变为timestamp
.表将由索引组织表改变为堆表
.表的碎片将会被整理
为了演示碎片整理,使用下面的语句来向表加载数据:
SQL>declare2v_clobclob;3begin4foriin0..999loop5v_clob:=null;6forjin1..1000loop7v_clob:=v_clob||to_char(i,'0000');8endloop;9insertintojy.originalvalues(i,to_char(i),v_clob,sysdate+i);10commit;11endloop;12commit;13end;14/PL/SQLproceduresuccessfullycompleted.
执行下面的语句来使用表被碎片化
SQL>deletefromjy.originalwhere(col1/3)<>trunc(col1/3);666rowsdeleted.SQL>commit;Commitcomplete.
SQL>setserveroutputon;SQL>declare2l_fs1_bytesnumber;3l_fs2_bytesnumber;4l_fs3_bytesnumber;5l_fs4_bytesnumber;6l_fs1_blocksnumber;7l_fs2_blocksnumber;8l_fs3_blocksnumber;9l_fs4_blocksnumber;10l_full_bytesnumber;11l_full_blocksnumber;12l_unformatted_bytesnumber;13l_unformatted_blocksnumber;14begin15dbms_space.space_usage(16segment_owner=>'JY',17segment_name=>'ORIGINAL',18segment_type=>'TABLE',19fs1_bytes=>l_fs1_bytes,20fs1_blocks=>l_fs1_blocks,21fs2_bytes=>l_fs2_bytes,22fs2_blocks=>l_fs2_blocks,23fs3_bytes=>l_fs3_bytes,24fs3_blocks=>l_fs3_blocks,25fs4_bytes=>l_fs4_bytes,26fs4_blocks=>l_fs4_blocks,27full_bytes=>l_full_bytes,28full_blocks=>l_full_blocks,29unformatted_blocks=>l_unformatted_blocks,30unformatted_bytes=>l_unformatted_bytes31);3233dbms_output.put_line('0-25%free='||l_fs1_blocks||'andbytes='||l_fs1_bytes);34dbms_output.put_line('25-50%free='||l_fs2_blocks||'andbytes='||l_fs2_bytes);35dbms_output.put_line('50-75%free='||l_fs3_blocks||'andbytes='||l_fs3_bytes);36dbms_output.put_line('75-100%free='||l_fs4_blocks||'andbytes='||l_fs4_bytes);37dbms_output.put_line('fullblocks='||l_full_blocks||'andbytes='||l_full_bytes);38end;39/0-25%free=0andbytes=025-50%free=3andbytes=2457650-75%free=0andbytes=075-100%free=0andbytes=0fullblocks=10andbytes=81920PL/SQLproceduresuccessfullycompleted.
1.用要执行联机重定义操作的用户登录数据库
SQL>connjy/jy@jypdbConnected.
2.验证原始表是否可以执行联机重定义
SQL>begin2dbms_redefinition.can_redef_table(3uname=>'jy',4tname=>'original',5options_flag=>dbms_redefinition.cons_use_pk);6end;7/PL/SQLproceduresuccessfullycompleted.
3.创建中间表jy.int_original
SQL>createtablejy.int_original(2col1number,3col3timestamp,4col4clob,5col5varchar2(3))6lob(col4)storeassecurefile(nocachefilesystem_like_logging)7partitionbyrange(col1)(8partitionpar1valueslessthan(333),9partitionpar2valueslessthan(666),10partitionpar3valueslessthan(maxvalue))11tablespaceexample12rowstorecompressadvanced;Tablecreated.
4.开始联机重定义操作
SQL>begin2dbms_redefinition.start_redef_table(3uname=>'jy',4orig_table=>'original',5int_table=>'int_original',6col_mapping=>'col1col1,to_timestamp(col4)col3,col3col4',7options_flag=>dbms_redefinition.cons_use_pk);8end;9/PL/SQLproceduresuccessfullycompleted.
5.复制依赖对象
SQL>declare2num_errorspls_integer;3begin4dbms_redefinition.copy_table_dependents(5uname=>'jy',6orig_table=>'original',7int_table=>'int_original',8copy_indexes=>dbms_redefinition.cons_orig_params,9copy_triggers=>true,10copy_constraints=>true,11copy_privileges=>true,12ignore_errors=>true,13num_errors=>num_errors);14end;15/PL/SQLproceduresuccessfullycompleted.
6.可选操作同步中间表
SQL>begin2dbms_redefinition.sync_interim_table(3uname=>'jy',4orig_table=>'original',5int_table=>'int_original');6end;7/PL/SQLproceduresuccessfullycompleted.
7.完成联机重定义操作
看完了这篇文章,相信你对“Oracle 12.2如何使用联机重定义对表进行多处改变”有了一定的了解,如果想了解更多相关知识,欢迎关注亿速云行业资讯频道,感谢各位的阅读!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。