表emp_redef将按以下规则来进行联机重定义:
.增加新列mgr,hiredate,sal与bonus
.新列bonus被初始化为0
.列department_id的值由10开始增加
.表将被重定义为范围分区表,分区键为employee_id。
联机重定义操作如下:
1.用要执行联机重定义操作的用户登录数据库
2.验证表emp_redef是否可以执行联机重定义。在这种情况下,可以使用主键或伪主键来来进行验证。
3.创建一个中间表hr.int_emp_redef
4.开始重定义操作
5.复制依赖对象(自动对表hr.int_emp_redef创建任何触发器,索引,物化视图日志,授权与约束)
注意,在调用这个过程时ignore_errors参数需要设置为TRUE。原因是中间表创建了主键约束,并且当执行copye_table_dependents过程来试图从原始表复制主键约束与索引时会发生错误。可以忽略这些错误,但必须执行下一步操作中的查询来查看是否还存在其它错误。
6.查询dba_redefinition_errors视图来查看错误信息
上面的错误信息是说中间表的last_name与job_id列为not null,而原因表为null,这种错误可以忽略。
7.同步中间表hr.int_emp_redef
8.完成重定义操作
表hr.emp_redef只会以排他模式被锁定很短的时间来结束重定义操作。在操作完成后,表hr.emp_redef将使用hr.int_emp_redef表的所有属性来重定义。
可以看到表hr.emp_redef已经成功能联机重定义
9.等任何查询中间表的语句执行完成后将其删除,而且中间表在重定义后其结构就变成了原始表的表结构
到此,联机重定义表hr.emp_redef就操作完成。