下面的例子将使用手动创建与注册依赖对象的方法来执行联机重定义操作,原始表创建如下:

SQL> create table jy.t1(c1 number);

Table created

SQL> create index jy.t1_idx_1 on jy.t1(c1);

Index created

假设在联机重定义之后列c1变为了c2。在这种情况下,使用copy_table_dependents过程试图对中间表的c1列创建索引t1_idx,因为不存在列c1就会出现错误。因此必须在列c2上创建索引然后进行注册。

联机重定义操作如下:

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

SQL> conn jy/jy@jypdb

Connected.

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

SQL> begin

2 dbms_redefinition.can_redef_table(

3 uname => 'jy',

4 tname => 't1',

5 options_flag => DBMS_REDEFINITION.CONS_USE_ROWID);

6 end;

7 /

PL/SQL procedure successfully completed.

3.手动创建中间表jy.int_t1并且在列c2上创建索引jy.int_t1_idx_1

SQL> create table jy.int_t1(c2 number);

Table created.

SQL> create index jy.int_t1_idx_1 on jy.int_t1(c2);

Index created.

4.开始执行联机重定义操作

SQL> begin

2 dbms_redefinition.start_redef_table(

3 uname => 'jy',

4 orig_table => 't1',

5 int_table => 'int_t1',

6 col_mapping => 'c1 c2',

7 options_flag => DBMS_REDEFINITION.CONS_USE_ROWID);

8 end;

9 /

PL/SQL procedure successfully completed.

5.注册原始(索引t1_idx_1)与中间(int_t1_idx_1)依赖对象

SQL> begin

2 dbms_redefinition.register_dependent_object(

3 uname => 'jy',

4 orig_table => 't1',

5 int_table => 'int_t1',

6 dep_type => DBMS_REDEFINITION.CONS_INDEX,

7 dep_owner => 'jy',

8 dep_orig_name => 't1_idx_1',

9 dep_int_name => 'int_t1_idx_1');

10 end;

11 /

PL/SQL procedure successfully completed.

6.复制依赖对象

SQL> declare

2 num_errors pls_integer;

3 begin

4 dbms_redefinition.copy_table_dependents(

5 uname => 'jy',

6 orig_table => 't1',

7 int_table => 'int_t1',

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.

7.可选操作同步中间表

SQL> begin

2 dbms_redefinition.sync_interim_table(

3 uname => 'jy',

4 orig_table => 't1',

5 int_table => 'int_t1');

6 end;

7 /

PL/SQL procedure successfully completed.

8.完成联机重定义操作

SQL> begin

2 dbms_redefinition.finish_redef_table(

3 uname => 'jy',

4 orig_table => 't1',

5 int_table => 'int_t1');

6 end;

7 /

PL/SQL procedure successfully completed.

SQL> select dbms_metadata.get_ddl(object_type =>'TABLE',name =>'T1',schema => 'JY') from dual;

DBMS_METADATA.GET_DDL(OBJECT_TYPE=>'TABLE',NAME=>'T1',SCHEMA=>'JY')

--------------------------------------------------------------------------------

CREATE TABLE "JY"."T1"

( "C2" NUMBER

) SEGMENT CREATION DEFERRED

PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255

NOCOMPRESS LOGGING

TABLESPACE "TEST"

1 row selected.

可以看到表jy.t1已经成功能联机重定义

9.等待任何查询中间表的语句执行完成后将其删除

SQL> desc jy.t1

Name Type Nullable Default Comments

---- ------ -------- ------- --------

C2 NUMBER Y

SQL> drop table jy.t1 purge;

Table dropped

到此重定义操作就完成了。

oracle 删除用户和依赖,Oracle 12.2使用手动创建与注册依赖对象来执行联机重定义...相关推荐

  1. oracle批量联机,Oracle 12.2 使用联机重定义对表进行多处改变

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

  2. 然后删除oracle用户,oracle删除用户

    oracle 动态删除,oracle监听之动态和静态注册,oracle删除数据,oracle删除用户 Oracle 创建删除用户.角色.表空间.导入导出.备份 命令总结 创建删除用户.角色.表空间.导 ...

  3. Oracle——删除用户以及用户下数据

    Oracle中删除用户下所有对象的多种方法 2015-09-22 13:12  8299人阅读  评论(0)  收藏  举报   分类: Oracle数据库基本管理(336)   oracle安装升级 ...

  4. Oracle删除用户和表空间

    Oracle删除用户和表空间 对于单个user和tablespace 来说, 可以使用如下命令来完成. 步骤一:  删除user drop user ×× cascade 说明: 删除了user,只是 ...

  5. Oracle删除用户下的sequence

    --Oracle删除用户下的sequence declare owner_name varchar(20); cursor cur1 is select sequence_name from user ...

  6. Oracle删除用户以及用户下数据

    Oracle删除用户下所有对象的方法未必人人都会,下面就为您介绍两种常用的Oracle删除用户下所有对象的方法,希望对您学习Oracle删除用户方面能有所帮助. 方法1: drop user XXXX ...

  7. oracle 删除用户、表空间

    2019独角兽企业重金招聘Python工程师标准>>> //删除用户以及用户所有的对象 drop user zfmi cascade; //cascade参数是级联删除该用户所有对象 ...

  8. Oracle删除用户drop user报错解决方案

    由于开发过程中对数据库的操作比较多,另外也是怕占用资源,决定将数据库所使用用户删除掉,然后可能是资源占用,oracle报错了,提供解决方案: 1.首先将索要删除的用户锁定(这句必须执行): alter ...

  9. oracle删除用户及表空间

    1.以sysdba用户(最高权限)登录,查找需要删除的用户(普通用户没有删除权限) select * from dba_users; 2.查询需要删除用户对应的表空间 SELECT * FROM Us ...

  10. oracle删除用户 提示“无法删除当前已连接用户”

    趁着今天有时间 多记录自己遇到过的问题吧 在删除oracle用户时,报错提示"无法删除当前已连接用户". 解决方法如下: 1.查看用户的连接状况 select username,s ...

最新文章

  1. vue 搭建脚手架 的教程
  2. python__高级 : 类当作装饰器
  3. RxSwift ViewModel定义
  4. PAT甲级1082 Read Number in Chinese:[C++题解]字符串处理
  5. 成功解决TypeError: ‘tuple‘ object is not callable
  6. IC攻城狮求职宝典 01 2018年IC设计企业 笔试题 01 英伟达(Nvidia)
  7. 成为Java流大师–第4部分:数据库流
  8. 美国留学计算机网络技术,美国留学计算机专业详解
  9. 目标检测(七)--Fast R-CNN
  10. 金蝶ERP实现产品入库及委外加工冲减生产现场虚仓毛坯数(修正版07-05-10)
  11. 无极灯与LED灯将在短期内合力淘汰传统光源
  12. Julia : HDF5、JLD2库、group、dataset
  13. mimics能导出什么格式_mimics教程
  14. Java中的class类和对象总结(思维导图)
  15. DreamWeaver CC网页设计与制作
  16. 迅雷android 电视,【迅雷电视助手】迅雷电视助手安卓版(Android)2.0下载_太平洋下载中心...
  17. WordPress SEO 技巧
  18. 举个栗子~Tableau 技巧(226):用分段条形图呈现数据占比
  19. linux下twm切换gn,如何让vnc控制由默认的twm界面改为gnome?
  20. 弗洛伊德、荣格、阿德勒

热门文章

  1. Leetcode2. Add Two Numbers
  2. 如何在页面显示json数据
  3. jquery prop('checked', true)解决attr('checked', true)不能选中radio问题
  4. 显示分类对应的文章数目,为空的设置为0,按文章数目排序
  5. OpenGL学习笔记(13)位图与文字
  6. ZeroPrompt:首个中文多任务Prompt统一模型,zeroshot性能可比微调!
  7. COLING 2020 | 一种从科学文献中提取关键词的基于自蒸馏的联合学习方法
  8. 远程监督在关系抽取中的应用
  9. 【linux】最常用 150 个Linux命令汇总
  10. ​我拿 12 年 36 套四级真题做了什么 ?