Heim  >  Artikel  >  Datenbank  >  通过shell检查Oracle分区表中是否含有默认分区

通过shell检查Oracle分区表中是否含有默认分区

WBOY
WBOYOriginal
2016-06-07 16:43:561041Durchsuche

在大数据量的系统中,分区表是很常见的,分区有多种类型,可以根据业务来选择自己需要的分区,不过为了数据的兼容性,需要考虑对于分

在大数据量的系统中,分区表是很常见的,分区有多种类型,可以根据业务来选择自己需要的分区,不过为了数据的兼容性,需要考虑对于分区表设定一个默认的表分区,如果数据在插入表分区的时候,,没有符合条件的分区,就会插入默认的表分区中。

这个可以根据自己的需要来设定,如果确实对数据有严格的要求,甚至可以要求不加入默认的分区。

以下的脚本会去"扫描"分区的信息,如果检测到没有默认的分区,就会生成对应的脚本。

可以根据自己的情况来决定是否需要加入分区。

sqlplus -s $1/$2@$SH_DB_SID  set head off
 set pages 100
 set linesize 200
 /* bad performance
 select name,Count(*)from user_part_key_columns where object_type='TABLE' and name in
 (
 select table_name from user_tables where partitioned='YES'
 minus
  (select distinct  table_name
 from user_tab_partitions where  partition_name like '%MAX%'
  )
 )
 group by name;
 */
 select 'alter table  '||table_name||' add partition  PMAXVALUE  values less than ('||
 decode(col_count, 1, 'MAXVALUE',
                                                          2,'MAXVALUE,MAXVALUE',
                                                          3,'MAXVALUE,MAXVALUE,MAXVALUE',
                                                          4,'MAXVALUE,MAXVALUE,MAXVALUE,MAXVALUE','partition out of range')||');'
    from
 (
 (
 select t1.table_name,count(t2.name) col_count from user_tables t1,user_part_key_columns t2
 where t1.partitioned='YES'
 and t1.table_name=t2.name
 and t2.object_type='TABLE'
 group by t1.table_name
 )
 minus
  (
  select  t2.name table_name,count(t2.name)col_count
 from user_tab_partitions t1,user_part_key_columns t2
 where  t1.partition_name like '%MAX%'
 and t1.table_name=t2.name
 and t2.object_type='TABLE'
 group by t2.name
  )
 )
 /

EOF
 exit

 简单运行一下,可以看到有一些分区表是灭有默认的分区的。可以根据自己的情况来定夺。

[ora11g@rac1 dbm_lite]$ ksh getmaxpar.sh system Oracle

alter table  LOGMNRC_GSBA add partition  PMAXVALUE  values less than (MAXVALUE);
 alter table  LOGMNRC_GSII add partition  PMAXVALUE  values less than (MAXVALUE);
 alter table  LOGMNRC_GTCS add partition  PMAXVALUE  values less than (MAXVALUE);
 alter table  LOGMNRC_GTLO add partition  PMAXVALUE  values less than (MAXVALUE);
 alter table  LOGMNRP_CTAS_PART_MAP add partition  PMAXVALUE  values less than (MAXVALUE);
 alter table  LOGMNR_ATTRCOL$ add partition  PMAXVALUE  values less than (MAXVALUE);
 alter table  LOGMNR_ATTRIBUTE$ add partition  PMAXVALUE  values less than (MAXVALUE);
 alter table  LOGMNR_CCOL$ add partition  PMAXVALUE  values less than (MAXVALUE);
 alter table  LOGMNR_CDEF$ add partition  PMAXVALUE  values less than (MAXVALUE);
 alter table  LOGMNR_COL$ add partition  PMAXVALUE  values less than (MAXVALUE);
 alter table  LOGMNR_COLTYPE$ add partition  PMAXVALUE  values less than (MAXVALUE);
 alter table  LOGMNR_DICTIONARY$ add partition  PMAXVALUE  values less than (MAXVALUE);
 alter table  LOGMNR_DICTSTATE$ add partition  PMAXVALUE  values less than (MAXVALUE);
 alter table  LOGMNR_ENC$ add partition  PMAXVALUE  values less than (MAXVALUE);
 alter table  LOGMNR_ICOL$ add partition  PMAXVALUE  values less than (MAXVALUE);

浅谈Oracle分区表之范围分区

Oracle分区表迁移

Oracle分区表使用实例

Oracle分区表 (Partition Table) 的创建及管理

本文永久更新链接地址:

linux

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn