Криво секционировали таблицу. Как исправить?

Blacky1979
Дата: 19.11.2009 14:42:26
В общем наш админ немного облажался и при нарезании новых партиций в таблице секционированной по полю типа NUMBER написал
alter table num_calls split partition num_calls$up at ('4700000') into ....

То есть точку деления задал типа строка. В итога база этот запрос обработала и создала такую партицию, но при работе с ней все начало тормозить в общем-то по понятной причине.

Проблему нашли не сразу а прошло порядочно времени и в кривые партиции записалось полно данных.
Сейчас попробовали сделать merge нескольких кривых партиций и потом попробовали split с нормальной точкой деления. В итоге Oracle ругается что тип данных не тот.

Вот засада .... туда он нам смог разделить а обратно болт.....
Кто нибудь наступал на эти грабли ? Как проблему решили c наименьшими затратами по времени, а то таблица гигантских размеров примерно 100-200Gb.

Сервер Oracle 9.2.0.7
orawish
Дата: 19.11.2009 14:48:15
Blacky1979
..Вот засада .... туда он нам смог разделить а обратно болт.....

попробуйте
exchange ->
персоздать секции
exchange <-
suPPLer
Дата: 19.11.2009 14:50:40
Blacky1979,

как вариант: создать таблиц по количеству секций + поменять секции с этими таблицами данными, используя ALTER TABLE EXCHANGE PARTITION + изменить таблицу с секциями + поменять секции с таблицами обратно.
Вячеслав Любомудров
Дата: 20.11.2009 03:16:27
WBDB> create table t1(a number, b varchar2(100)) tablespace tools
  2  partition by range(a)
  3  (partition p1 values less than(10),
  4   partition p2 values less than(maxvalue));

Table created.

WBDB> insert into t1 select rownum, rownum from dual connect by level <= 100;

100 rows created.

WBDB> alter table t1 split partition p2 at('20') into
  2  (partition p2, partition p3);

Table altered.

WBDB> set long 10000
WBDB> select dbms_metadata.get_ddl('TABLE', 'T1') from dual;

DBMS_METADATA.GET_DDL('TABLE','T1')
--------------------------------------------------------------------------------

  CREATE TABLE "SYSTEM"."T1"
   (    "A" NUMBER,
        "B" VARCHAR2(100)
   ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
  STORAGE(
  BUFFER_POOL DEFAULT)
  TABLESPACE "TOOLS"
  PARTITION BY RANGE ("A")
 (PARTITION "P1"  VALUES LESS THAN (10)
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "TOOLS" NOCOMPRESS ,
 PARTITION "P2"  VALUES LESS THAN ('20')
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "TOOLS" NOCOMPRESS ,
 PARTITION "P3"  VALUES LESS THAN (MAXVALUE)
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "TOOLS" NOCOMPRESS )



WBDB> alter table t1 split partition p3 at(30) into(partition p3, partition p4);

Table altered.

WBDB> alter table t1 merge partitions p2,p3;

Table altered.

WBDB> select dbms_metadata.get_ddl('TABLE', 'T1') from dual;

DBMS_METADATA.GET_DDL('TABLE','T1')
--------------------------------------------------------------------------------

  CREATE TABLE "SYSTEM"."T1"
   (    "A" NUMBER,
        "B" VARCHAR2(100)
   ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
  STORAGE(
  BUFFER_POOL DEFAULT)
  TABLESPACE "TOOLS"
  PARTITION BY RANGE ("A")
 (PARTITION "P1"  VALUES LESS THAN (10)
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "TOOLS" NOCOMPRESS ,
 PARTITION "SYS_P1"  VALUES LESS THAN (30)
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "TOOLS" NOCOMPRESS ,
 PARTITION "P4"  VALUES LESS THAN (MAXVALUE)
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "TOOLS" NOCOMPRESS )



WBDB> select * from v$version where rownum=1;

BANNER
----------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.2.0.5.0 - Production