• 1
  • 2
  • 3
  • 4
  • 5
mssql数据库问题 首 页  »  帮助中心  »  数据库  »  mssql数据库问题
关于Oracle 分区索引的正确 DROP 与TRUNCATE 方法
发布日期:2016-4-21 20:4:9

  关于Oracle 分区索引的正确 DROP 与TRUNCATE 方法

  --查看分区索引的大小

  如下所示:

  SQL> select segment_name, trunc(sum(bytes) / 1024 / 1024 / 1024, 2) GB

  from user_segments

  where segment_name in ('IDX_ACCTFLOW_CUSTOMTRANSTYPE',

  'IDX_ACCTFLOW_CUSTCODE',

  'IDX_ACCTFLOW_MAPPING',

  2 3 4 5 6 'IDX_ACCTFLOW_TYPECODEDATE',

  'PK_CUSTOMACCOUNTFLOW')

  group by segment_name; 7 8

  SEGMENT_NAME GB

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

  IDX_ACCTFLOW_CUSTCODE 31.75

  IDX_ACCTFLOW_TYPECODEDATE 24.53

  IDX_ACCTFLOW_MAPPING 33.19

  IDX_ACCTFLOW_CUSTOMTRANSTYPE 33.44

  PK_CUSTOMACCOUNTFLOW 33.19

  SQL> select index_name, index_type, status

  from user_indexes s

  where index_name in ('IDX_ACCTFLOW_CUSTOMTRANSTYPE',

  'IDX_ACCTFLOW_CUSTCODE',

  'IDX_ACCTFLOW_MAPPING',

  'IDX_ACCTFLOW_TYPECODEDATE',

  'PK_CUSTOMACCOUNTFLOW'); 2 3 4 5 6 7

  INDEX_NAME INDEX_TYPE STATUS

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

  IDX_ACCTFLOW_CUSTCODE FUNCTION-BASED NORMAL N/A

  IDX_ACCTFLOW_CUSTOMTRANSTYPE NORMAL VALID

  IDX_ACCTFLOW_MAPPING NORMAL VALID

  IDX_ACCTFLOW_TYPECODEDATE NORMAL VALID

  PK_CUSTOMACCOUNTFLOW NORMAL VALID

  --备份出要进行操作的分区

  如下所示:

  create table CUSTOMACCOUNTFLOW_bk as select * from ELMP_TRANS_CUSTOMACCOUNTFLOW partition(SYS_P623);

  insert into CUSTOMACCOUNTFLOW_bk select * from ELMP_TRANS_CUSTOMACCOUNTFLOW partition(SYS_P603);

  SQL> select count(*) from CUSTOMACCOUNTFLOW_bk;

  COUNT(*)

  ----------

  291862

  Elapsed: 00:00:00.07

  SQL> select segment_name, trunc(sum(bytes) / 1024 / 1024 / 1024, 4) GB

  from user_segments

  where segment_name in ('IDX_ACCTFLOW_CUSTOMTRANSTYPE',

  'IDX_ACCTFLOW_CUSTCODE',

  'IDX_ACCTFLOW_MAPPING',

  2 3 4 5 6 'IDX_ACCTFLOW_TYPECODEDATE',

  'PK_CUSTOMACCOUNTFLOW')

  group by segment_name; 7 8

  SEGMENT_NAME GB

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

  IDX_ACCTFLOW_CUSTCODE 31.7566

  IDX_ACCTFLOW_TYPECODEDATE 24.5361

  IDX_ACCTFLOW_MAPPING 33.1943

  IDX_ACCTFLOW_CUSTOMTRANSTYPE 33.4472

  PK_CUSTOMACCOUNTFLOW 33.1923

  --DROP 掉一个分区

  如下所示:

  Elapsed: 00:00:00.02

  SQL> alter table ELMP_TRANS_CUSTOMACCOUNTFLOW drop partition SYS_P603 update indexes;

  Table altered.

  Elapsed: 00:00:20.92

  SQL> select segment_name, trunc(sum(bytes) / 1024 / 1024 / 1024, 4) GB

  from user_segments

  where segment_name in ('IDX_ACCTFLOW_CUSTOMTRANSTYPE',

  'IDX_ACCTFLOW_CUSTCODE',

  'IDX_ACCTFLOW_MAPPING',

  'IDX_ACCTFLOW_TYPECODEDATE',

  'PK_CUSTOMACCOUNTFLOW')

  group by segment_name; 2 3 4 5 6 7 8

  SEGMENT_NAME GB

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

  IDX_ACCTFLOW_CUSTCODE 31.7381

  IDX_ACCTFLOW_TYPECODEDATE 24.5361

  IDX_ACCTFLOW_MAPPING 33.1943

  IDX_ACCTFLOW_CUSTOMTRANSTYPE 33.4472

  PK_CUSTOMACCOUNTFLOW 33.1923

  Elapsed: 00:00:00.03

  --TRUNCATE 掉一个分区

  如下所示:

  SQL> set timing on

  SQL> alter table ELMP_TRANS_CUSTOMACCOUNTFLOW truncate partition SYS_P623 update indexes;

  Table truncated.

  Elapsed: 00:00:04.60

  SQL> select segment_name, trunc(sum(bytes) / 1024 / 1024 / 1024, 4) GB

  from user_segments

  where segment_name in ('IDX_ACCTFLOW_CUSTOMTRANSTYPE',

  'IDX_ACCTFLOW_CUSTCODE',

  'IDX_ACCTFLOW_MAPPING',

  2 3 4 5 6 'IDX_ACCTFLOW_TYPECODEDATE',

  'PK_CUSTOMACCOUNTFLOW')

  group by segment_name; 7 8

  SEGMENT_NAME GB

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

  IDX_ACCTFLOW_CUSTCODE 31.7547

  IDX_ACCTFLOW_TYPECODEDATE 24.5361

  IDX_ACCTFLOW_MAPPING 33.1943

  IDX_ACCTFLOW_CUSTOMTRANSTYPE 33.4472

  PK_CUSTOMACCOUNTFLOW 33.1923

  加上 UPDATE INDEXES 的优点是:

  在对分区表进行操作的时候,索引仍是在线和可用的,这个操作不会影响到应用程序。

  在对分区表进行操作后,全局分区索引不需要进行重建。