基于主键的在线重定义表的三种索引重建方式

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

环境配置:创建mssm和assm表空间,在mssm上创建带有主键的表t,在assm上创建中间表t_interim。验证t可以使用基于主键的在线重定义,启动在线重定义。这些步骤完成后,进入到本文讨论的三种索引重建方式。

步骤:1 创建mssm,assm

LEO1@LEO1>create tablespace MSSM datafile '/u01/app/oracle/oradata/LEO1/disk1/mssm01.dbf' size 20m extent management local segment space management manual;

Tablespace created.

LEO1@LEO1>create tablespace ASSM datafile '/u01/app/oracle/oradata/LEO1/disk1/assm01.dbf' size 20m extent management local segment space management auto;

Tablespace created.

2.检查表空间的段空间管理模式

LEO1@LEO1>select segment_space_management,tablespace_name from dba_tablespaces where tablespace_name in ('MSSM','ASSM');

SEGMEN TABLESPACE_NAME

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

AUTO ASSM

MANUAL MSSM

3.在MSSM表空间上创建t表

LEO1@LEO1>create table t(a number constraint pk_t primary key ) tablespace MSSM;

Table created.

LEO1@LEO1>insert into t values (10);

1 row created.

LEO1@LEO1>insert into t values (20);

1 row created.

LEO1@LEO1>insert into t values (30);

1 row created.

LEO1@LEO1>insert into t values (40);

1 row created.

LEO1@LEO1>insert into t values (50);

1 row created.

LEO1@LEO1>commit;

Commit complete.

LEO1@LEO1>select * from t;

A

----------

10

20

30

40

50

LEO1@LEO1>select table_name,tablespace_name from user_tables where table_name='T';

TABLE_NAME TABLESPACE_NAME

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

T MSSM

4.验证是否满足基于主键在线重定义要求

LEO1@LEO1>exec dbms_redefinition.can_redef_table ('LEO1','t',dbms_redefinition.cons_use_pk);

PL/SQL procedure successfully completed.

5.创建在线重定义中间表

LEO1@LEO1>create table t_interim (a number) tablespace assm;

Table created.

6.查看t表和t_interim表所在的表空间

LEO1@LEO1>select table_name,tablespace_name from user_tables where table_name in ('T','T_INTERIM');

TABLE_NAME TABLESPACE_NAME

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

T MSSM

T_INTERIM ASSM

7.启动在线重定义

LEO1@LEO1>exec dbms_redefinition.start_redef_table('leo1','t','t_interim'); PL/SQL procedure successfully completed.

LEO1@LEO1>select * from t_interim;

A

----------

10

20

30

40

50

这些步骤完成后,进入到本文讨论的三种索引重建方式。

方法一:

手工同步,完成在线重定义。删掉中间表,在t表上增加约束pk_t

LEO1@LEO1>exec dbms_redefinition.sync_interim_table('leo1','t','t_interim');

PL/SQL procedure successfully completed.

LEO1@LEO1>exec dbms_redefinition.finish_redef_table('leo1','t','t_interim');

PL/SQL procedure successfully completed.

LEO1@LEO1>select table_name,tablespace_name from user_tables where table_name in ('T','T_INTERIM');

TABLE_NAME TABLESPACE_NAME

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

T ASSM

T_INTERIM MSSM

LEO1@LEO1>select index_name,table_name,tablespace_name,status from

相关文档
最新文档