OCP043 第十讲Managing Schema Objects(五)

2014-11-24 11:32:19 · 作者: · 浏览: 3
0 sorts (disk)

1 rows processed

4:在线重定义分区表

准备基表,创建表依附对象,位图索引和触发器

SQL> create table hr.t04310_e as select * from dba_source;

Table created.

SQL> create bitmap index hr.i_t04310_e on hr.t04310_e(type);

Index created.

SQL> create or replace trigger hr.trg_t04310_e

2 after update of line on hr.t04310_e

3 referencing new as new old as old for each row

4 begin

5 if :old.line <= :new.line

6 then

7 raise_application_error('-20001','new values must big than old');

8 end if;

9* end;

Trigger created

SQL> select * from user_errors;

no rows selected

构造长查询语句,模拟表正在被访问

SQL> select * from hr.t04310_e a,hr.t04310_e b;

开始在线重定义分区表

SQL> CREATE TABLE "HR"."T04310_E$REORG"

2 ( OWNER VARCHAR2(30),NAME VARCHAR2(30), TYPE VARCHAR2(12),LINE NUMBER,TEXT VARCHAR2(4000) )

3 PARTITION BY RANGE ( LINE )

4 (PARTITION line_P1 VALUES LESS THAN (5000) TABLESPACE USERS,

5 PARTITION line_P2 VALUES LESS THAN (MAXVALUE) TABLESPACE EXAMPLE);

Table created.

SQL> BEGIN

2 DBMS_REDEFINITION.START_REDEF_TABLE('"HR"', '"T04310_E"', '"T04310_E$REORG"', NULL, DBMS_REDEFINITION.CONS_USE_ROWID);

3* END;

PL/SQL procedure successfully completed.

SQL> CREATE BITMAP INDEX "HR"."I_T04310_E$REORG" ON "HR"."T04310_E$REORG" ("TYPE") local

2 TABLESPACE "USERS" PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE ( INITIAL 64K BUFFER_POOL DEFAULT) LOGGING;

Index created.

SQL> BEGIN

2 DBMS_REDEFINITION.REGISTER_DEPENDENT_OBJECT('"HR"', '"T04310_E"', '"T04310_E$REORG"',

3 DBMS_REDEFINITION.CONS_INDEX, '"HR"', '"I_T04310_E"', '"I_T04310_E$REORG"');

4* END;

PL/SQL procedure successfully completed.

SQL> BEGIN

2 DBMS_REDEFINITION.SYNC_INTERIM_TABLE('"HR"', '"T04310_E"', '"T04310_E$REORG"');

3* END;

PL/SQL procedure successfully completed.

SQL> CREATE OR REPLACE TRIGGER "HR"."TRG_T04310_E$REORG" AFTER

2 UPDATE OF "LINE" ON "HR"."T04310_E$REORG" REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW begin

3 if :old.line <= :new.line

4 then

5 raise_application_error('-20001','new values must big than old');

6 end if;

7* end;

Trigger created.

SQL> BEGIN DBMS_REDEFINITION.REGISTER_DEPENDENT_OBJECT('"HR"', '"T04310_E"', '"T04310_E$REORG"',

2 DBMS_REDEFINITION.CONS_TRIGGER, '"HR"', '"TRG_T04310_E"', '"TRG_T04310_E$REORG"');

3* END;

PL/SQL procedure successfully completed.

SQL> BEGIN

2 DBMS_REDEFINITION.FINISH_REDEF_TABLE('"HR"', '"T04310_E"', '"T04310_E$REORG"');

3* END;

PL/SQL procedure successfully completed

验证结果

SQL> select table_name,partitioning_type,partition_count from dba_part_tables pt

2* where pt.owner='HR' and pt.table_name='T04310_E'

TABLE_NAME PARTITIONING_TYPE PARTITION_COUNT

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

T04310_E RANGE 2

5.截断分区表的单个分区

SQL> select count(*) from hr.t04310_a;

COUNT(*)

----------

100000

SQL> alter table hr.t04310_a truncate partition t04310a_p1;

Table truncated.

SQL> select count(*) from hr.t04310_a;

COUNT(*)

----------

90001

二:索引组织表

索引组织表同普通堆表的对比:访问更快,不重复存储,更少的存储空间,使用第二索引,适用于小表

–Have faster key-based access to table data

–Do not duplicate the storage of primary key values

–Require less storage

–Use secondary indexes and log