下面的例子将演示如何使用联机重定义操作来对表进行多处改变,原始表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 = 0

25-50% free = 3 and bytes = 24576

50-75% free = 0 and bytes = 0

75-100% free = 0 and bytes = 0

full blocks = 10 and bytes = 81920

PL/SQL procedure successfully completed.

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

SQL> conn jy/jy@jypdb

Connected.

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批量联机,Oracle 12.2 使用联机重定义对表进行多处改变相关推荐

  1. ORACLE 普通表转换成分区表(在线重定义)

    在一个高可用系统中,如果需要改变一个表的定义是一件比较棘手的问题,尤其是对于7×24系统.Oracle提供的基本语法基本可以满足一般性修改,但是对于把普通堆表改为分区表,把索引组织表修改为堆表等操作就 ...

  2. oracle 批量下单,3.12批量创建采购订单

    3.12.1   业务方案描述 在生成采购订单前,由采购员审核计划结果,根据供应商的供货状况调整供应商供货数量.供货日期. 所有合格供应商都能够通过下单平台批量下达采购订单,尽管供应商没有供货比例,或 ...

  3. oracle 批量读,Oracle批量读取数据和批量绑定

    通常我们获取游标数据是用 fetch some_cursor into var1, var2 的形式,自 Oracle 8i 起,Oracle 为我们提供了 fetch bulk collect 来批 ...

  4. 【转】Oracle在线重定义DBMS_REDEFINITION 普通表—分区表

    实验环境:RHEL 6.4 + Oracle 11.2.0.3 实验:在线重定义 普通表 为 分区表,包括主键对应的索引都改造为分区索引. 1,构造普通表t_objects conn test1/te ...

  5. Oracle当前日志组出错,【案例】Oracle报错ORA-00313 ORA-00312 ORA-27037当前联机日志损坏恢复...

    天萃荷净 运维DBA反映Oracle数据库在启动时报错ORA-00313 ORA-00312 ORA-27037,分析原因为数据库redo联机日志文件损坏导致 环境模拟 删除状态为active的联机日 ...

  6. oracle insert汉字出错,Oracle数据库之Oracle批量插入数据SQL语句太长出错:无效的主机/绑定变量名...

    本文主要向大家介绍了Oracle数据库之Oracle批量插入数据SQL语句太长出错:无效的主机/绑定变量名,通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助. Oracle数据库,用 ...

  7. Oracle批量导出AWR报告

    Oracle批量导出AWR报告 工作需求:项目中需要把生产库中所有的AWR报告dump出来,然后导入到方便测试的数据库中.在测试库中的AWR报告需要根据dbid和实例名逐个导出,如果遇到很多再加上RA ...

  8. 用PXE方法从裸机批量推Oracle 11gR2 RAC环境

    9月29日,由中科院高级工程师唐波在"DBA+福州群"进行了一次关于用PXE方法从裸机批量推Oracle 11gR2 RAC环境的线上主题分享.小编特别整理出其中精华内容,供大家学 ...

  9. Oracle 批量插入数据-插入民族数据

    数据库需要导入民族数据,在网上找到数据,如果一条一条手动导入数据库,显得有点蠢了,所以在excel里,利用excel的优势,编写好sql语句,结果在oracle里执行失败,很简单的语句,没有语法问题 ...

最新文章

  1. 浏览新闻oracle的数据结构,oracle 数据结构探索之旅二 [2]
  2. (chap4 IP协议) 多播和子网掩码
  3. 【poj2114】点分治(离线)
  4. 12月碎碎念-随便聊聊这一年
  5. 允許Linux的snmp服務被查詢
  6. php字符串学习笔记
  7. wordpress去掉自带的logo或者左侧栏的菜单方法
  8. OC --(5)-- 字典、集、数组排序:字典类、集合类、数组数组排序、字典、集合的快速遍历、数组排序...
  9. Maven:导入Oracle的jar包时出现错误
  10. lsof命令_lsof命令的部分说明
  11. iphone开发OC语言的NSString与int和float的相互转换
  12. 一致性hash算法_一致性 Hash 算法的实际应用
  13. 从程序员到项目经理(9):程序员加油站 -- 再牛也要合群
  14. ShowModalDialog数据缓存的清除方法
  15. PHP网站常见一些安全漏洞及防御方法
  16. java实现飞机大战小游戏(源码+注释)
  17. 恢复计算机注册表命令,电脑的注册表如果损坏怎么恢复
  18. vue单页面应用初始加载登录页_6 种 Vue 权限路由实现方式总结(最全)
  19. ctf_backdoor
  20. 科大讯飞AIUI-应用集成6麦解决方案

热门文章

  1. kalilinux装到u盘上的弊端_付费下载的歌曲,竟然无法在汽车上播放!原因在这里...
  2. linux安装 redis,在linux中安装redis
  3. 关于安卓手机在微信浏览器中无法调起相机的原因
  4. LeetCode:验证回文串【125】
  5. SQL强化(二) 在Oracle 中写代码
  6. OGEngine教程:声音载入
  7. 使用 ServiceStack 构建跨平台 Web 服务
  8. Google Maps API 简易教程(四)
  9. 织梦(DEDECMS)首页调用相关投票的方法(自动更新)
  10. 简单的C语言程序合集