我的编程空间,编程开发者的网络收藏夹
学习永远不晚

oracle在线重定义表有什么功能

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

oracle在线重定义表有什么功能

这篇文章主要讲解了“oracle在线重定义表有什么功能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“oracle在线重定义表有什么功能”吧!

在线重定义表具有以下功能:

修改表的存储参数;

可以将表转移到其他表空间;

增加并行查询选项;

增加或删除分区;

重建表以减少碎片;

将堆表改为索引组织表或相反的操作;

增加或删除一个列。

原理:增量物化视图刷新

目的:清理表中碎片,释放空间(重建表以减少碎片)

重定义方法:

存在两种重定义方法,一种是基于主键、另一种是基于ROWID。

ROWID的方式不能用于索引组织表,而且重定义后会存在隐藏列M_ROW$$。

默认采用主键的方式。

前提条件:

1)查看表中是否含有主键,在线重定义需要表中存在主键

select a.constraint_name,  a.column_name from dba_cons_columns a, dba_constraints b 

where a.constraint_name = b.constraint_name  and b.constraint_type = 'P' and a.table_name in('ZWD_JDMSG_GD','ZB2C_KUCUN_LOG');

2)如果在执行在线重定义的过程中出现任何的失败操作,那么需要执行dbms_redefinition.abort_redef_table来回退;

1、检查是否能够重定义

EXEC DBMS_REDEFINITION.CAN_REDEF_TABLE('用户名', '源表', DBMS_REDEFINITION.CONS_USE_PK);   --主键方式

EXEC DBMS_REDEFINITION.CAN_REDEF_TABLE('用户名', '源表', DBMS_REDEFINITION.CONS_USE_ROWID);   --ROWID方式

2、获取源表建表语句

SET SERVEROUTPUT ON 

SET LINESIZE 1000 

SET FEEDBACK OFF 

set long 99999           

set pagesize 4000

select dbms_metadata.get_ddl('TABLE','ZWD_JDMSG_GD','SAPSR3') from dual;

3、创建中间表(根据源表创建语句)

4、查看依赖对象

SELECT * from dba_dependencies where REFERENCED_NAME in ('ZWD_JDMSG_GD','ZB2C_KUCUN_LOG');

5、调用dbms_redefinition包执行表的在线重定义。

EXEC DBMS_REDEFINITION.start_redef_table('SAPSR3','ZWD_JDMSG_GD','T_TEMP');

或者

--null代表所有的列名与原表一样

begin

dbms_redefinition.start_redef_table(‘用户’,‘原表’,‘中间表’,null,dbms_redefinition.cons_use_rowid);

end;

6、复制依赖对象到中间表,后几个参数分别表示从原表复制索引、触发器、约束、权限、某一项复制出错跳过、复制过程中的出错数目、复制统计信息、复制物化视图日志

(各选项凭需要取用,完毕后需检查num_errors的值,有错一定要查看,酌情处理)

DECLARE

num_errors PLS_INTEGER;

BEGIN

DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS

(‘用户’, ‘原表’,‘临时表’, DBMS_REDEFINITION.CONS_ORIG_PARAMS, TRUE, TRUE, TRUE, TRUE, num_errors, TRUE, TRUE);

END;

7、查看报错信息

select object_name,base_table_name,ddl_txt from DBA_REDEFINITION_ERRORS;

8、 将中间表中的数据和原始表中的数据进行同步操作(这一步不是必须的)。

如果在执行dbms_redefinition.start_redef_table和dbms_redefinition.finish_redef_table之间有大量的DML操作发生,

那么执行一次dbms_redefinition.sync_interim_table来减少最后一步执行dbms_redefinition.finish_redef_table时的锁定时间。

EXEC dbms_redefinition.sync_interim_table('DBSYAN','T_TEST','T_TEMP');

9、结束在线重定义过程

EXEC dbms_redefinition.finish_redef_table('DBSYAN','T_TEST','T_TEMP');

执行完FINISH_REDEF_TABLE()过程后,原始表重定义后具有了中间表的属性、索引、约束、授权和触发器。中间表上disabled的约束在原始表上处于enabled状态。

10、检查原表的表空间是否改变,检查其数据、结构、索引等依赖对象是否正确

11、执行失败,进行回退

EXEC dbms_redefinition.abort_redef_table ('DBSYAN','T_TEST','T_TEMP');

注意:

对于采用了ROWID方式重定义的表,包括了一个隐含列M_ROW$$。推荐使用下列语句经隐含列置为UNUSED状态或删除 

ALTER TABLE TABLE_NAME SET UNUSED (M_ROW$$);

ALTER TABLE TABLE_NAME DROP UNUSED COLUMNS;

感谢各位的阅读,以上就是“oracle在线重定义表有什么功能”的内容了,经过本文的学习后,相信大家对oracle在线重定义表有什么功能这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

oracle在线重定义表有什么功能

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

ORACLE分区表转换在线重定义DBMS_REDEFINITION

目录一、DBMS_REDEFINITION(在线重定义)使用在线重定义的一些限制条件:DBMS_REDEFINITION包:二、在线重定义表的步骤1.创建未分区的表2.确认表是否存在主键,表空间是否足够,收集表统计信息。3.调用DBMS_R
2022-07-07

Java中的注解(Annotation)有什么作用?如何自定义注解?(Java注解的功能是什么?如何定义自己的注解?)

Java注解用于提供附加信息,不会影响代码行为。它们用于:文档化代码代码分析代码生成运行时行为修改自定义注解通过@Retention和@Target指定范围和应用元素,并使用@Documented和@Inherited控制文档和继承行为。在使用时,通过@AnnotationName(value)语法应用注解。通过反射可以在运行时访问自定义注解。最佳实践包括保持简洁、使用标准化命名、避免过度使用和详细文档化。
Java中的注解(Annotation)有什么作用?如何自定义注解?(Java注解的功能是什么?如何定义自己的注解?)
2024-04-02

编程热搜

目录