千家信息网

Oracle 12.2如何使用联机重定义对表进行多处改变

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,小编给大家分享一下Oracle 12.2如何使用联机重定义对表进行多处改变,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!下面的例子将演示如何使用联机重定义操作来对表进行多处改变,原始
千家信息网最后更新 2026年11月03日Oracle 12.2如何使用联机重定义对表进行多处改变

小编给大家分享一下Oracle 12.2如何使用联机重定义对表进行多处改变,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

下面的例子将演示如何使用联机重定义操作来对表进行多处改变,原始表jy.original的创建语句如下:

SQL> create table jy.original(  2  col1 number primary key,  3  col2 varchar2(10),  4  col3 clob,  5  col4 date)  6  organization index;Table created.

表jy.original将按以下规则进行重定义:
.表启用高级行压缩方法进行压缩
.LOB列将被改变为SecureFiles LOB存储
.表的存储表空间将由test改变为example,并且表的块大小由8KB改变为 16KB。
.表将基于col1列进行分区
.将增加列col5
.列col2将被删除
.列col3与col4会被重命名,并且它们的位置会发生改变
.列col3的数据类型将从date改变为timestamp
.表将由索引组织表改变为堆表
.表的碎片将会被整理

为了演示碎片整理,使用下面的语句来向表加载数据:

SQL> declare  2  v_clob clob;  3  begin  4   for i in 0..999 loop  5    v_clob := null;  6    for j in 1..1000 loop  7     v_clob := v_clob||to_char(i,'0000');  8    end loop;  9    insert into jy.original values(i,to_char(i),v_clob,sysdate+i); 10    commit; 11   end loop; 12   commit; 13  end; 14  /PL/SQL procedure successfully completed.

执行下面的语句来使用表被碎片化

SQL> delete from jy.original where (col1/3) <> trunc(col1/3);666 rows deleted.SQL> commit;Commit complete.
SQL> set serveroutput on;SQL> declare  2      l_fs1_bytes number;  3      l_fs2_bytes number;  4      l_fs3_bytes number;  5      l_fs4_bytes number;  6      l_fs1_blocks number;  7      l_fs2_blocks number;  8      l_fs3_blocks number;  9      l_fs4_blocks number; 10      l_full_bytes number; 11      l_full_blocks number; 12      l_unformatted_bytes number; 13      l_unformatted_blocks number; 14  begin 15      dbms_space.space_usage( 16           segment_owner      => 'JY', 17           segment_name       => 'ORIGINAL', 18           segment_type       => 'TABLE', 19           fs1_bytes          => l_fs1_bytes, 20           fs1_blocks         => l_fs1_blocks, 21           fs2_bytes          => l_fs2_bytes, 22           fs2_blocks         => l_fs2_blocks, 23           fs3_bytes          => l_fs3_bytes, 24           fs3_blocks         => l_fs3_blocks, 25           fs4_bytes          => l_fs4_bytes, 26           fs4_blocks         => l_fs4_blocks, 27           full_bytes         => l_full_bytes, 28           full_blocks        => l_full_blocks, 29           unformatted_blocks => l_unformatted_blocks, 30           unformatted_bytes  => l_unformatted_bytes 31            ); 32 33        dbms_output.put_line('0-25% free = '||l_fs1_blocks||' and bytes = '||l_fs1_bytes); 34        dbms_output.put_line('25-50% free = '||l_fs2_blocks||' and bytes = '||l_fs2_bytes); 35        dbms_output.put_line('50-75% free = '||l_fs3_blocks||' and bytes = '||l_fs3_bytes); 36        dbms_output.put_line('75-100% free = '||l_fs4_blocks||' and bytes = '||l_fs4_bytes); 37        dbms_output.put_line(' full blocks = '||l_full_blocks||' and bytes = '||l_full_bytes); 38  end; 39  /0-25% free = 0 and bytes = 025-50% free = 3 and bytes = 2457650-75% free = 0 and bytes = 075-100% free = 0 and bytes = 0full blocks = 10 and bytes = 81920PL/SQL procedure successfully completed.

1.用要执行联机重定义操作的用户登录数据库

SQL> conn jy/jy@jypdbConnected.

2.验证原始表是否可以执行联机重定义

SQL> begin  2  dbms_redefinition.can_redef_table(  3  uname => 'jy',  4  tname => 'original',  5  options_flag => dbms_redefinition.cons_use_pk);  6  end;  7  /PL/SQL procedure successfully completed.

3.创建中间表jy.int_original

SQL> create table jy.int_original(  2  col1 number,  3  col3 timestamp,  4  col4 clob,  5  col5 varchar2(3))  6  lob(col4) store as securefile (nocache filesystem_like_logging)  7  partition by range (col1) (  8  partition par1 values less than (333),  9  partition par2 values less than (666), 10  partition par3 values less than (maxvalue)) 11  tablespace example 12  row store compress advanced;Table created.

4.开始联机重定义操作

SQL> begin  2  dbms_redefinition.start_redef_table(  3  uname => 'jy',  4  orig_table => 'original',  5  int_table => 'int_original',  6  col_mapping => 'col1 col1, to_timestamp(col4) col3, col3 col4',  7  options_flag => dbms_redefinition.cons_use_pk);  8  end;  9  /PL/SQL procedure successfully completed.

5.复制依赖对象

SQL> declare  2  num_errors pls_integer;  3  begin  4  dbms_redefinition.copy_table_dependents(  5  uname => 'jy',  6  orig_table => 'original',  7  int_table => 'int_original',  8  copy_indexes => dbms_redefinition.cons_orig_params,  9  copy_triggers => true, 10  copy_constraints => true, 11  copy_privileges => true, 12  ignore_errors => true, 13  num_errors => num_errors); 14  end; 15  /PL/SQL procedure successfully completed.

6.可选操作同步中间表

SQL> begin  2  dbms_redefinition.sync_interim_table(  3  uname => 'jy',  4  orig_table => 'original',  5  int_table => 'int_original');  6  end;  7  /PL/SQL procedure successfully completed.

7.完成联机重定义操作

看完了这篇文章,相信你对"Oracle 12.2如何使用联机重定义对表进行多处改变"有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!

数据 碎片 语句 面的 原始 篇文章 存储 演示 高级 位置 例子 大小 完了 对象 数据库 方法 更多 来使 用户 知识 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技工作委员会副主任毛军 互联网与科技发展 互联网科技的英文 成都互联网科技公司 华中科技大学互联网 融贸通互联网科技 互联网科技的未来发展 长亮科技互联网金融 丰台科技园 互联网公司 成都玖崟互联网科技有限公司乐商圈怎么样 农村开互联网科技讲堂 深圳前海聚择互联网科技有限公司 阿里互联网科技公司 中化能源互联网科技招聘 江阴互联网智能科技产品进口 杭州壁岐互联网科技有限公司 恒生互联网科技业指数调整周期 全球科技与互联网公司市值变化 艺电能源互联网科技有限公司招聘 中国科技和美国互联网 广州百单互联网科技有限公司 科技与互联网发展 新浪科技互联网 互联网科技公司介绍 天扬科技互联网广告 顺网科技2021年互联网排名 现代科技和互联网有关系吗 互联网科技大赛获奖感言 上海互联网科技园景观 小牛互联网科技有限公司地址
0