oracle数据库通过在线重定义的方法新增字段详解

oracle数据库通过在线重定义的方法新增字段详解

ID:11939077

大小:63.96 KB

页数:3页

时间:2018-07-15

oracle数据库通过在线重定义的方法新增字段详解_第1页
oracle数据库通过在线重定义的方法新增字段详解_第2页
oracle数据库通过在线重定义的方法新增字段详解_第3页
资源描述:

《oracle数据库通过在线重定义的方法新增字段详解》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Oracle数据库操作中,假如在原始表TB_HXL_USER上新增字段remark01,默认值为'A',但是由于该表的数据量比较大,直接在原表上新增字段,执行的时间特别长,最后还报出了undo空间不足的问题。而且在新增字段的过程中,其他用户还不能访问该表,出现的等待事件是librarycachelock。下面试着通过在线重定义的方法新增字段,能够避免undo空间不足以及其他用户不能访问该表的情况。1.使用如下SQL获取原始表的DDL设置分隔符号以及去掉表DDL中的storage属性:1.begin 2. 3.Dbms

2、_Metadata.Set_Transform_Param(Dbms_Metadata.Session_Transform, 4. 5.'SQLTERMINATOR', 6. 7.True); 8. 9.Dbms_Metadata.Set_Transform_Param(Dbms_Metadata.Session_Transform, 10. 11.'STORAGE', 12. 13.False); 14. 15.end; 提取表,索引,约束以及权限的语句。1.Select Dbms_Metadata.Get_Ddl

3、(Object_Type => 'TABLE', Name => 'TB_HXL_USER') 

4、

5、 2. 3.Dbms_Metadata.Get_Dependent_Ddl(Object_Type => 'INDEX', 4. 5.Base_Object_Name => 'TB_HXL_USER') 

6、

7、 6. 7.Dbms_Metadata.Get_Dependent_Ddl(Object_Type => 'CONSTRAINT', 8. 9.Base_Object_Name => 'TB_HXL_USER') 

8、

9、

10、 10. 11.Dbms_Metadata.Get_Dependent_Ddl('OBJECT_GRANT', 'TB_HXL_USER', 'HXL') 12. 13.From Dual 2.将步骤1SQL中的表名TB_HXL_USER替换为TB_HXL_USER_MID创建中间表3.中间表新增字段remark011.alter table TB_HXL_USER_MID add remark01 varchar2(10) default 'A'; 4.检查能否进行重定义,过程执行成功即说明可以重定义1.Beg

11、in 2. 3.Dbms_Redefinition.Can_Redef_Table(USER, 'TB_HXL_USER'); 4. 5.End; 5.开始重定义表注意:如原始表有未提交的事物,该过程会一直在等待,等待事件为enq:TX-rowlockcontention。不能执行start_redef_table的情况下,需要将如下权限赋予用户。1.grant create any table to hxl; 2. 3.grant alter any table to hxl; 4. 5.grant drop an

12、y table to hxl; 6. 7.grant lock any table to hxl; 8. 9.grant select any table to hxl; 10. 11.grant create any trigger to hxl; 12. 13.grant create any index to hxl; 运行start_redef_table过程1.BEGIN 2. 3.dbms_redefinition.start_redef_table( 4. 5.uname => USER, 6. 7.o

13、rig_table => 'TB_HXL_USER', 8. 9.int_table => 'TB_HXL_USER_MID', 10. 11.options_flag => DBMS_REDEFINITION.cons_use_pk); 如果有主键则是options_flag=>DBMS_REDEFINITION.cons_use_pk,如果没有1.DBMS_REDEFINITION.cons_use_rowid 2.END; 6.开始同步中间表1.BEGIN 2. 3.dbms_redefinition.sync

14、_interim_table( 4. 5.uname => USER, 6. 7.orig_table => 'TB_HXL_USER', 8. 9.int_table => 'TB_HXL_USER_MID'); 10. 11.END; 7.完成同步注意:如原始表有未提交的事物,该过程会一直在等待1.BEGIN 2. 3.dbms_redef

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。