powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Перемещение LOP partitions в другую ТС
20 сообщений из 20, страница 1 из 1
Перемещение LOP partitions в другую ТС
    #39643428
maxski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наплодили тут columns c LOB partitions c INITIAL 8M NEXT 1M, при этом 90% LOB'ов пустыею

Пытаюсь перерести в другую ТС (или в этуже ТС) с изменением INITIAL и NEXT. Выдает ошибку:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SQL> alter table DATA.HIST_FLD_HISTORY  move partition SYS_P145646   lob (OLD_VALUE) store as (storage (initial 65536 next 65536) );
alter table DATA.HIST_FLD_HISTORY  move partition SYS_P145646   lob (OLD_VALUE) store as (storage (initial 65536 next 65536) )
                                                                        *
ERROR at line 1:
ORA-00904: "OLD_VALUE": invalid identifier


 SQL> alter table DATA.HIST_FLD_HISTORY  move partition SYS_P145646   lob (OLD_VALUE) store as (tablespace users );
alter table DATA.HIST_FLD_HISTORY  move partition SYS_P145646   lob (OLD_VALUE) store as (tablespace users )
                                                                        *
ERROR at line 1:
ORA-00904: "OLD_VALUE": invalid identifier



shrink_space не работает.


В доке https://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_3001.htm#i2104128
разделяют:
отдельно: storage_clause, отдельно tablespace (+ может быть lob_parameters + может быть storage_clause)

поэтому я отдельными запросамию
...
Рейтинг: 0 / 0
Перемещение LOP partitions в другую ТС
    #39643449
Ярослав Батозский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxski,

одной командой можно подвинуть экстенты и ТП и неск полей на 11.2.0.4 проверил
В имени поля не ошибся?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
SQL> alter table HIST_FLD_HISTORY move partition SYS_P145646
  2  lob (OLD_VALUE) store as
  3  (tablespace USERS storage (initial 65536 next 65536))
  4  lob (NEW_VALUE) store as
  5  (tablespace USERS storage (initial 65536 next 65536));

Table altered.

SQL>
SQL> alter table HIST_FLD_HISTORY move partition SYS_P145646
  2  lob (OLD_VALUE_COLNAME_MISTAKE) store as
  3  (tablespace USERS storage (initial 65536 next 65536));
lob (OLD_VALUE_COLNAME_MISTAKE) store as
     *
ERROR at line 2:
ORA-00904: "OLD_VALUE_COLNAME_MISTAKE": invalid identifier
SQL>
...
Рейтинг: 0 / 0
Перемещение LOP partitions в другую ТС
    #39643451
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потенциальные не-всем-очевидные проблемы:
- символы нац. алфавита вместо латиницы
- регистрозависимые идентификаторы.
- мисстайп при написании запроса (как вариант - символы нац. алфавита вместо латиницы как сайд-эффект от какого пунто-свитчера)

Как порешать:
Сделать describe или DDL таблицы, скопипастить идентификатор атрибута.
Если в выводе describe/DDL атрибут не в uppercase, то взять в двойные кавычки.
...
Рейтинг: 0 / 0
Перемещение LOP partitions в другую ТС
    #39644168
maxski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
07:39:46 SQL> set long 1000000
07:39:50 SQL> select dbms_metadata.get_ddl('TABLE','HIST_FLD_HISTORY','DATA') from dual;

  CREATE TABLE "DATA"."HIST_FLD_HISTORY"
   (	"ID_HIST" NUMBER(*,0) NOT NULL ENABLE,
	"ID_FIELD" NUMBER(*,0) NOT NULL ENABLE,
	"CHANGE_TIME" DATE NOT NULL ENABLE,
	"ID_OBJ" NUMBER(*,0) NOT NULL ENABLE,
	"ID_SERVER" NUMBER(*,0),
	"OLD_VALUE" "SYS"."ANYDATA" ,
	"NEW_VALUE" "SYS"."ANYDATA" ,
	"OLDVAL_STR" VARCHAR2(4000) GENERATED ALWAYS AS ("DATA"."GETVARCHAR2FROMANYDATA"("OLD_VALUE")) VIRTUAL VISIBLE ,
	"NEWVAL_STR" VARCHAR2(4000) GENERATED ALWAYS AS ("DATA"."GETVARCHAR2FROMANYDATA"("NEW_VALUE")) VIRTUAL VISIBLE ,
	"OLDVAL_NUM" VARCHAR2(4000) GENERATED ALWAYS AS ("DATA"."GETNUMFROMANYDATA"("OLD_VALUE")) VIRTUAL VISIBLE ,
	"NEWVAL_NUM" VARCHAR2(4000) GENERATED ALWAYS AS ("DATA"."GETNUMFROMANYDATA"("NEW_VALUE")) VIRTUAL VISIBLE ,
	 CONSTRAINT "PK_HIST_FLD_HISTORY" PRIMARY KEY ("ID_HIST")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "USERS"  ENABLE,
	 FOREIGN KEY ("ID_FIELD")
	  REFERENCES "DATA"."HIST_FIELDS" ("ID") ENABLE
   ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
  STORAGE(INITIAL 65536 NEXT 65536
  BUFFER_POOL KEEP FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "USERS"
 OPAQUE TYPE "OLD_VALUE" STORE AS BASICFILE LOB (
  ENABLE STORAGE IN ROW CHUNK 8192 RETENTION
  CACHE
  STORAGE(
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT))
 OPAQUE TYPE "NEW_VALUE" STORE AS BASICFILE LOB (
  ENABLE STORAGE IN ROW CHUNK 8192 RETENTION
  CACHE
  STORAGE(
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT))
  PARTITION BY RANGE ("CHANGE_TIME") INTERVAL (NUMTOYMINTERVAL(1,'MONTH'))
 (PARTITION "P00"  VALUES LESS THAN (TO_DATE(' 2014-02-01 00:00:00', 'SYYYY-MM-D
D HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) SEGMENT CREATION IMMEDIATE
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 65536 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "USERS"
 LOB ("OLD_VALUE") STORE AS BASICFILE (
  ENABLE STORAGE IN ROW CHUNK 8192 RETENTION
  CACHE
  STORAGE(INITIAL 8388608 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT))
 LOB ("NEW_VALUE") STORE AS BASICFILE (
  ENABLE STORAGE IN ROW CHUNK 8192 RETENTION
  CACHE
  STORAGE(INITIAL 8388608 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)) )


Elapsed: 00:00:01.44
07:39:53 SQL> 




VIRTUAL?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
07:39:53 SQL> alter table DATA.HIST_FLD_HISTORY  move partition SYS_P145646   lob ("OLD_VALUE") store as (tablespace users );
alter table DATA.HIST_FLD_HISTORY  move partition SYS_P145646   lob ("OLD_VALUE") store as (tablespace users )
                                                                        *
ERROR at line 1:
ORA-00904: "OLD_VALUE": invalid identifier


Elapsed: 00:00:00.02
07:41:45 SQL> alter table DATA.HIST_FLD_HISTORY  move partition SYS_P145646   lob ("OLD_VALUE") store as (storage (initial 65536 next 65536) );
alter table DATA.HIST_FLD_HISTORY  move partition SYS_P145646   lob ("OLD_VALUE") store as (storage (initial 65536 next 65536) )
                                                                        *
ERROR at line 1:
ORA-00904: "OLD_VALUE": invalid identifier


Elapsed: 00:00:00.01
...
Рейтинг: 0 / 0
Перемещение LOP partitions в другую ТС
    #39644529
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxskiVIRTUAL?


С чего ты взял?

Код: plsql
1.
"OLD_VALUE" "SYS"."ANYDATA"



А ANYDATA хоть и хранится как и LOB своей tablespace не имеет и всегда хранится в том-же tablespace что и сама таблица:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
SQL> create table tbl(old_data anydata)
  2  /

Table created.

SQL> select  tablespace_name
  2    from  user_lobs
  3    where table_name = 'TBL'
  4      and column_name = 'OLD_DATA'
  5  /

TABLESPACE_NAME
------------------------------
USERS

SQL> alter table tbl
  2    move
  3      tablespace sysaux
  4  /

Table altered.

SQL> select  tablespace_name
  2    from  user_lobs
  3    where table_name = 'TBL'
  4      and column_name = 'OLD_DATA'
  5  /

TABLESPACE_NAME
------------------------------
SYSAUX

SQL> 



SY.
...
Рейтинг: 0 / 0
Перемещение LOP partitions в другую ТС
    #39644659
maxski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY,
Завтра. проверю. С VIRTUAL, я тормознул. посмотрел не на тот столбец. Меня тут дергают, от оракла к постгресу и Mysql, от CISCO c ipsec - к сертификатам под nginx. Поэтому у меня и получился заголовок 'LOP' вместо 'LOB'. Хотя я был уверен, что писал "LOB'.
...
Рейтинг: 0 / 0
Перемещение LOP partitions в другую ТС
    #39645058
maxski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выбираем LOB PARTITION SYS_LOB_P171731 и смотрим BYTES, INITIAL, NEXT

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
11:25:30 SQL> select distinct owner, segment_name, segment_type, partition_name, BYTES, INITIAL_EXTENT, NEXT_EXTENT from dba_segments where  OWNER not like '%SYS%'    and partition_name = 'SYS_LOB_P171731' order by 1,2;

OWNER			       SEGMENT_NAME		      SEGMENT_TYPE	 PARTITION_NAME 		     BYTES INITIAL_EXTENT NEXT_EXTENT
------------------------------ ------------------------------ ------------------ ------------------------------ ---------- -------------- -----------
DATA 		       SYS_LOB0000308819C00007$$      LOB PARTITION	 SYS_LOB_P171731		   8388608	  8388608     1048576

Elapsed: 00:00:00.07
12:43:25 SQL>  select TABLE_NAME, PARTITION_NAME , LOB_NAME, column_name from DBA_LOB_PARTITIONS where LOB_PARTITION_NAME = 'SYS_LOB_P171731';

TABLE_NAME		       PARTITION_NAME		      LOB_NAME			     COLUMN_NAME
------------------------------ ------------------------------ ------------------------------ ------------------------------
HIST_FLD_HISTORY	       SYS_P158778		      SYS_LOB0000308819C00007$$      NEW_VALUE

Elapsed: 00:00:00.07



Затем меняем INITIAL и NEXT:

Код: plsql
1.
alter table DATA.HIST_FLD_HISTORY  move partition SYS_P158778  storage (initial 64k next 64k) update indexes;



И LOB сегмент исчезает:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
13:00:27 SQL>  select TABLE_NAME, PARTITION_NAME , LOB_NAME, column_name from DBA_LOB_PARTITIONS where LOB_PARTITION_NAME = 'SYS_LOB_P171731';

no rows selected

Elapsed: 00:00:00.08
13:00:41 SQL> select distinct owner, segment_name, segment_type, partition_name, BYTES, INITIAL_EXTENT, NEXT_EXTENT from dba_segments where  OWNER not like '%SYS%'    and partition_name = 'SYS_LOB_P171731' order by 1,2;

no rows selected

Elapsed: 00:00:00.07



Зато есть табличный сегмент:

Код: plsql
1.
2.
3.
4.
5.
6.
13:00:06 SQL> select distinct owner, segment_name, segment_type, partition_name, BYTES, INITIAL_EXTENT, NEXT_EXTENT from dba_segments where  OWNER not like '%SYS%'    and partition_name = 'SYS_P158778' order by 1,2;

OWNER			       SEGMENT_NAME		      SEGMENT_TYPE	 PARTITION_NAME 		     BYTES INITIAL_EXTENT NEXT_EXTENT
------------------------------ ------------------------------ ------------------ ------------------------------ ---------- -------------- -----------
DATA 		       HIST_FLD_HISTORY 	      TABLE PARTITION	 SYS_P158778			   4194304	    65536	65536
DATA 		       IDX_HIST_FLDHIST 	      INDEX PARTITION	 SYS_P158778			    983040	    65536     1048576



Вообшем, имели на LOB сегменте 8M (плюс сколько-то в не LOB), сейчас 4М всего.
...
Рейтинг: 0 / 0
Перемещение LOP partitions в другую ТС
    #39645098
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты бы определился что ты хочешь - перенести ANYDATA в другое табличное пространство или перенести PARTITION в другое табличное пространство.

SY.
...
Рейтинг: 0 / 0
Перемещение LOP partitions в другую ТС
    #39645119
maxski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача изначально: "причесать" базу, по возможности, уменьшить размер сегментов. Два аспекта: место диске и фулсканы в память.

Ну вот наткнулся на LOB'ы, которые, не то, что storage менять, не хотят перемещаться в другой тейблспейс, для чего есть примеры в доке. Ну если по доке не работает, значит какая то засада. Вот поэтому я спросил тут про то, что есть в доке, но не работает.
Ну раз можно переместить в др тейблспейс, значит можно и storage поменять...
...
Рейтинг: 0 / 0
Перемещение LOP partitions в другую ТС
    #39645134
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxskiпо доке не работаетУ тебя anydata, а не lob. Претензия может быть только к непропатченной dbms_metadata, которая вернула лишнее в get_ddl.
...
Рейтинг: 0 / 0
Перемещение LOP partitions в другую ТС
    #39645140
maxski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нмкуда LOB'ы не исчезли, после move partition они поменяли имя:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
15:02:30 SQL> select TABLE_NAME, LOB_PARTITION_NAME , LOB_NAME, column_name from DBA_LOB_PARTITIONS where PARTITION_NAME = 'SYS_P158778';

TABLE_NAME		       LOB_PARTITION_NAME	      LOB_NAME			     COLUMN_NAME
------------------------------ ------------------------------ ------------------------------ ------------------------------
HIST_FLD_HISTORY	       SYS_LOB_P171917		      SYS_LOB0000308819C00006$$      OLD_VALUE
HIST_FLD_HISTORY	       SYS_LOB_P171919		      SYS_LOB0000308819C00007$$      NEW_VALUE

Elapsed: 00:00:00.07




С теми же самыми INITIAL и NEXT

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
15:02:30 SQL> select TABLE_NAME, LOB_PARTITION_NAME , LOB_NAME, column_name from DBA_LOB_PARTITIONS where PARTITION_NAME = 'SYS_P158778';

TABLE_NAME		       LOB_PARTITION_NAME	      LOB_NAME			     COLUMN_NAME
------------------------------ ------------------------------ ------------------------------ ------------------------------
HIST_FLD_HISTORY	       SYS_LOB_P171917		      SYS_LOB0000308819C00006$$      OLD_VALUE
HIST_FLD_HISTORY	       SYS_LOB_P171919		      SYS_LOB0000308819C00007$$      NEW_VALUE

15:07:37 SQL> select distinct owner, segment_name, segment_type, partition_name, BYTES, INITIAL_EXTENT, NEXT_EXTENT from dba_segments where  OWNER not like '%SYS%'    and partition_name = 'SYS_LOB_P171919' order by 1,2;

OWNER			       SEGMENT_NAME		      SEGMENT_TYPE	 PARTITION_NAME 		     BYTES INITIAL_EXTENT NEXT_EXTENT
------------------------------ ------------------------------ ------------------ ------------------------------ ---------- -------------- -----------
DATA 		       SYS_LOB0000308819C00007$$      LOB PARTITION	 SYS_LOB_P171919		   8388608	  8388608     1048576

Elapsed: 00:00:00.16
15:07:51 SQL> select distinct owner, segment_name, segment_type, partition_name, BYTES, INITIAL_EXTENT, NEXT_EXTENT from dba_segments where  OWNER not like '%SYS%'    and partition_name = 'SYS_LOB_P171917' order by 1,2;

OWNER			       SEGMENT_NAME		      SEGMENT_TYPE	 PARTITION_NAME 		     BYTES INITIAL_EXTENT NEXT_EXTENT
------------------------------ ------------------------------ ------------------ ------------------------------ ---------- -------------- -----------
DATA 		       SYS_LOB0000308819C00006$$      LOB PARTITION	 SYS_LOB_P171917		   8388608	  8388608     1048576

Elapsed: 00:00:00.07
...
Рейтинг: 0 / 0
Перемещение LOP partitions в другую ТС
    #39645162
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxskiВот поэтому я спросил тут про то, что есть в доке, но не работает.


Так тебе и ответили. Для поля LOB (LOB/CLOB/XMLTYPE...) можно указывать и соответственно менять табличное пространство. Для поля ANYDATA табличное пространство указать нельзя и соответственно менять табличное пространство нельзя, табличное пространство поля ANYDATA всегда то-же что и самой таблицы и посему перемещается поле ANYDATA только вместе с таблицей.

SY.
...
Рейтинг: 0 / 0
Перемещение LOP partitions в другую ТС
    #39645734
maxski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYmaxskiВот поэтому я спросил тут про то, что есть в доке, но не работает.


Так тебе и ответили. Для поля LOB (LOB/CLOB/XMLTYPE...) можно указывать и соответственно менять табличное пространство. Для поля ANYDATA табличное пространство указать нельзя ....

SY.


Похоже, тут сказочники завелись.

Создаю такую же таблицу с другим табличным пространством для LOB partitions (USERS и USERS2):

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
CREATE TABLE "DATA"."HIST_FLD_HISTORY2"
   (    "ID_HIST" NUMBER(*,0) NOT NULL ENABLE,
        "ID_FIELD" NUMBER(*,0) NOT NULL ENABLE,
        "CHANGE_TIME" DATE NOT NULL ENABLE,
        "ID_OBJ" NUMBER(*,0) NOT NULL ENABLE,
        "ID_SERVER" NUMBER(*,0),
        "OLD_VALUE" "SYS"."ANYDATA" ,
        "NEW_VALUE" "SYS"."ANYDATA" ,
        "OLDVAL_STR" VARCHAR2(4000) GENERATED ALWAYS AS ("DATA"."GETVARCHAR2FROMANYDATA"("OLD_VALUE")) VIRTUAL VISIBLE ,
        "NEWVAL_STR" VARCHAR2(4000) GENERATED ALWAYS AS ("DATA"."GETVARCHAR2FROMANYDATA"("NEW_VALUE")) VIRTUAL VISIBLE ,
        "OLDVAL_NUM" VARCHAR2(4000) GENERATED ALWAYS AS ("DATA"."GETNUMFROMANYDATA"("OLD_VALUE")) VIRTUAL VISIBLE ,
        "NEWVAL_NUM" VARCHAR2(4000) GENERATED ALWAYS AS ("DATA"."GETNUMFROMANYDATA"("NEW_VALUE")) VIRTUAL VISIBLE ,
         CONSTRAINT "PK_HIST_FLD_HISTORY2" PRIMARY KEY ("ID_HIST")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "USERS"  ENABLE,    FOREIGN KEY ("ID_FIELD")  REFERENCES "DATA"."HIST_FIELDS" ("ID") ENABLE
   ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
  STORAGE(INITIAL 65536 NEXT 65536  BUFFER_POOL KEEP FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "USERS"
 OPAQUE TYPE "OLD_VALUE" STORE AS BASICFILE LOB (  ENABLE STORAGE IN ROW CHUNK 8192 RETENTION  CACHE  STORAGE(  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT))
 OPAQUE TYPE "NEW_VALUE" STORE AS BASICFILE LOB (  ENABLE STORAGE IN ROW CHUNK 8192 RETENTION  CACHE  STORAGE(  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT))
  PARTITION BY RANGE ("CHANGE_TIME") INTERVAL (NUMTOYMINTERVAL(1,'MONTH'))
 (PARTITION "P00"  VALUES LESS THAN (TO_DATE(' 2014-02-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) SEGMENT CREATION IMMEDIATE  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING  STORAGE(INITIAL 65536 NEXT 65536 MINEXTENTS 1 MAXEXTENTS 2147483645  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)  TABLESPACE "USERS"
 LOB ("OLD_VALUE") STORE AS BASICFILE ( tablespace users2 ENABLE STORAGE IN ROW CHUNK 8192 RETENTION  CACHE  STORAGE(INITIAL 65536 NEXT 65536 MINEXTENTS 1 MAXEXTENTS 2147483645  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT))
 LOB ("NEW_VALUE") STORE AS BASICFILE ( tablespace users2  ENABLE STORAGE IN ROW CHUNK 8192 RETENTION  CACHE  STORAGE(INITIAL 65536 NEXT 65536 MINEXTENTS 1 MAXEXTENTS 2147483645  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)) );





Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
15:46:16 SQL> @create_table_hist2.sql

Table created.

Elapsed: 00:00:00.04
15:46:31 SQL> select LOB_NAME, COLUMN_NAME, PARTITION_NAME, LOB_PARTITION_NAME, TABLESPACE_NAME , INITIAL_EXTENT, NEXT_EXTENT from dba_lob_partitions where table_name = 'HIST_FLD_HISTORY2';

LOB_NAME		       COLUMN_NAME		      PARTITION_NAME		     LOB_PARTITION_NAME 	    TABLESPACE_NAME
------------------------------ ------------------------------ ------------------------------ ------------------------------ ------------------------------
INITIAL_EXTENT				 NEXT_EXTENT
---------------------------------------- ----------------------------------------
SYS_LOB0001169844C00006$$      OLD_VALUE		      P00			     SYS_LOB_P172044		    USERS2
65536					 65536

SYS_LOB0001169844C00007$$      NEW_VALUE		      P00			     SYS_LOB_P172046		    USERS2
65536					 65536


Elapsed: 00:00:00.00
15:46:35 SQL> select  tablespace_name from dba_segments where segment_name = 'HIST_FLD_HISTORY2';

TABLESPACE_NAME
------------------------------
USERS

Elapsed: 00:00:00.09
15:46:50 SQL> select  tablespace_name from dba_segments where segment_name = 'SYS_LOB0001169844C00006$$';

TABLESPACE_NAME
------------------------------
USERS2

Elapsed: 00:00:00.08
15:47:13 SQL> alter table  data.HIST_FLD_HISTORY2 move partition P00 lob ("OLD_VALUE") store as (tablespace users );
alter table  data.HIST_FLD_HISTORY2 move partition P00 lob ("OLD_VALUE") store as (tablespace users )
                                                               *
ERROR at line 1:
ORA-00904: "OLD_VALUE": invalid identifier


Elapsed: 00:00:00.02



Вставляю строки из первой таблицы.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
15:48:04 SQL> insert into data.HIST_FLD_HISTORY2 ( ID_HIST, ID_FIELD, CHANGE_TIME,ID_OBJ,ID_SERVER,OLD_VALUE,NEW_VALUE)  select ID_HIST,ID_FIELD,CHANGE_TIME,ID_OBJ,ID_SERVER,OLD_VALUE,NEW_VALUE  from data.HIST_FLD_HISTORY partition (SYS_P171053);

10408 rows created.

Elapsed: 00:00:00.26
15:48:26 SQL> commit;

Commit complete.

Elapsed: 00:00:00.01
15:48:31 SQL> select LOB_NAME, COLUMN_NAME, PARTITION_NAME, LOB_PARTITION_NAME, TABLESPACE_NAME , INITIAL_EXTENT, NEXT_EXTENT from dba_lob_partitions where table_name = 'HIST_FLD_HISTORY2';

LOB_NAME		       COLUMN_NAME		      PARTITION_NAME		     LOB_PARTITION_NAME 	    TABLESPACE_NAME
------------------------------ ------------------------------ ------------------------------ ------------------------------ ------------------------------
INITIAL_EXTENT				 NEXT_EXTENT
---------------------------------------- ----------------------------------------
SYS_LOB0001169844C00007$$      NEW_VALUE		      SYS_P172048		     SYS_LOB_P172051		    USERS
8388608 				 1048576

SYS_LOB0001169844C00006$$      OLD_VALUE		      P00			     SYS_LOB_P172044		    USERS2
65536					 65536

SYS_LOB0001169844C00007$$      NEW_VALUE		      P00			     SYS_LOB_P172046		    USERS2
65536					 65536

SYS_LOB0001169844C00006$$      OLD_VALUE		      SYS_P172048		     SYS_LOB_P172049		    USERS
8388608 				 1048576


Elapsed: 00:00:00.00






Пытаюсь сменить ТС и получаю ошибку:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
15:48:36 SQL> alter table  data.HIST_FLD_HISTORY2 move partition SYS_P172048 lob ("OLD_VALUE") store as (tablespace users2 );
alter table  data.HIST_FLD_HISTORY2 move partition SYS_P172048 lob ("OLD_VALUE") store as (tablespace users2 )
                                                                       *
ERROR at line 1:
ORA-00904: "OLD_VALUE": invalid identifier


Elapsed: 00:00:00.02
 





При этом если СLOB, то все перемещается.
Я это делал еще в 2005 году без проблем.

Единственное, где нашел про ограничения для отдельных типов данных, тут:

https://docs.oracle.com/cd/B28359_01/appdev.111/b28393/adlob_tables.htm#ADLOB510

"Relational and object partitioned index-organized tables (partitioned by range, hash, or list) can hold LOBs stored as follows; however, partition maintenance operations, such as MOVE, SPLIT, and MERGE are not supported with:

VARRAY datatypes stored as LOB datatypes

Abstract datatypes with LOB attributes

Nested tables with LOB types"

но это не мой случай.

может dbms_redefinition?
...
Рейтинг: 0 / 0
Перемещение LOP partitions в другую ТС
    #39645798
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxski,

Похоже ты нашел баг который позволяет задать tablespace для ANYDATA если таблица партицирoвана. По идее при указании tablespace для LOB сегмента для партиции Oracle должен ба проверить откуда у LOB сегмента ноги растут, т.е. какого типа поле породившее LOB сегмент. Попробуй указать tablespace для ANYDATA если таблица HE партицирoвана. Но все что этот баг тебе даeт это возможность создать ANYDATA в другом tablespace. А вот при попытке изменить tablespace для поля ANYDATA бага нет и посeму приехали...

SY.
...
Рейтинг: 0 / 0
Перемещение LOP partitions в другую ТС
    #39645903
maxski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Меня другое волнует.
Допустим я поменял INITIAL_EXTENT c 8M на 64k на всех LOB PARTITIONS (пересоздал таблцу). А дальще при вставке строки с "CHANGE_TIME" выходящей за диапазон текущих HIGH_VALUE, то так как
PARTITION BY RANGE ("CHANGE_TIME") INTERVAL (NUMTOYMINTERVAL(1,'MONTH'))
автоматом создастся новая 'monthly' PARTITION как вот тут:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
15:48:31 SQL> select LOB_NAME, COLUMN_NAME, PARTITION_NAME, LOB_PARTITION_NAME, TABLESPACE_NAME , INITIAL_EXTENT, NEXT_EXTENT from dba_lob_partitions where table_name = 'HIST_FLD_HISTORY2';

LOB_NAME		       COLUMN_NAME		      PARTITION_NAME		     LOB_PARTITION_NAME 	    TABLESPACE_NAME
------------------------------ ------------------------------ ------------------------------ ------------------------------ ------------------------------
INITIAL_EXTENT				 NEXT_EXTENT
---------------------------------------- ----------------------------------------
SYS_LOB0001169844C00007$$      NEW_VALUE		      SYS_P172048		     SYS_LOB_P172051		    USERS
8388608 				 1048576

SYS_LOB0001169844C00006$$      OLD_VALUE		      P00			     SYS_LOB_P172044		    USERS2
65536					 65536

SYS_LOB0001169844C00007$$      NEW_VALUE		      P00			     SYS_LOB_P172046		    USERS2
65536					 65536

SYS_LOB0001169844C00006$$      OLD_VALUE		      SYS_P172048		     SYS_LOB_P172049		    USERS
8388608 				 1048576


Elapsed: 00:00:00.00



При этом, создастся с INITIAL_EXTENT = 8M и NEXT_EXTENT = 1M.


Хотя при создании таблицы я прямо указываю:

" STORAGE(INITIAL 65536 NEXT 65536 ..."

т.е партиции созданные с INITIAL 65536 , а добавленная партиция будет с INITIAL_EXTENT = 8M

Как бы это исправить? Чтоб добавленная была бы с INITIAL 65536?
...
Рейтинг: 0 / 0
Перемещение LOP partitions в другую ТС
    #39645930
maxski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYmaxski,

Похоже ты нашел баг который позволяет задать tablespace для ANYDATA если таблица партицирoвана. По идее при указании tablespace для LOB сегмента для партиции Oracle должен ба проверить откуда у LOB сегмента ноги растут, т.е. какого типа поле породившее LOB сегмент. Попробуй указать tablespace для ANYDATA если таблица HE партицирoвана. Но все что этот баг тебе даeт это возможность создать ANYDATA в другом tablespace. А вот при попытке изменить tablespace для поля ANYDATA бага нет и посeму приехали...

SY.

Это не бвг, это ваши фантазии.

Создаем таблицу, с TABLESPACE USERS, и первая партиция P00 тоже USERS, a LOB для P00 в USERS2:
при этом для определения партиционировния указываю опцию: store in (users2)
Код: plsql
1.
 PARTITION BY RANGE ("CHANGE_TIME") INTERVAL (NUMTOYMINTERVAL(1,'MONTH')) store in (users2)



и теперь уже LOB'ы создаются в USERS2:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
08:12:02 SQL> drop table data.HIST_FLD_HISTORY2 purge;

Table dropped.

Elapsed: 00:00:00.36
08:12:09 SQL> @create_table_hist2.sql

Table created.

Elapsed: 00:00:00.16
08:12:19 SQL> insert into data.HIST_FLD_HISTORY2 ( ID_HIST, ID_FIELD, CHANGE_TIME,ID_OBJ,ID_SERVER,OLD_VALUE,NEW_VALUE)  select ID_HIST,ID_FIELD,CHANGE_TIME,ID_OBJ,ID_SERVER,OLD_VALUE,NEW_VALUE  from data.HIST_FLD_HISTORY partition (SYS_P169733);

18118 rows created.

Elapsed: 00:00:00.44

08:13:00 SQL> commit;

Commit complete.

Elapsed: 00:00:00.01
08:13:03 SQL> select LOB_NAME, COLUMN_NAME, PARTITION_NAME, LOB_PARTITION_NAME, TABLESPACE_NAME , INITIAL_EXTENT, NEXT_EXTENT from dba_lob_partitions where table_name = 'HIST_FLD_HISTORY2';

LOB_NAME		       COLUMN_NAME		      PARTITION_NAME		     LOB_PARTITION_NAME 	    TABLESPACE_NAME
------------------------------ ------------------------------ ------------------------------ ------------------------------ ------------------------------
INITIAL_EXTENT				 NEXT_EXTENT
---------------------------------------- ----------------------------------------
SYS_LOB0001170071C00006$$      OLD_VALUE		      P00			     SYS_LOB_P172073		    USERS2
65536					 65536

SYS_LOB0001170071C00007$$      NEW_VALUE		      P00			     SYS_LOB_P172075		    USERS2
65536					 65536

SYS_LOB0001170071C00006$$      OLD_VALUE		      SYS_P172077		     SYS_LOB_P172078		    USERS2
8388608 				 1048576

SYS_LOB0001170071C00007$$      NEW_VALUE		      SYS_P172077		     SYS_LOB_P172080		    USERS2
8388608 				 1048576


Elapsed: 00:00:00.08

08:15:22 SQL> select segment_name, partition_name, tablespace_name from dba_segments where segment_name = 'HIST_FLD_HISTORY2';

SEGMENT_NAME									  PARTITION_NAME		 TABLESPACE_NAME
--------------------------------------------------------------------------------- ------------------------------ ------------------------------
HIST_FLD_HISTORY2								  SYS_P172077			 USERS2
HIST_FLD_HISTORY2								  P00				 USERS

Elapsed: 00:00:00.07

08:16:27 SQL> insert into data.HIST_FLD_HISTORY2 ( ID_HIST, ID_FIELD, CHANGE_TIME,ID_OBJ,ID_SERVER,OLD_VALUE,NEW_VALUE)  select ID_HIST,ID_FIELD,CHANGE_TIME,ID_OBJ,ID_SERVER,OLD_VALUE,NEW_VALUE  from data.HIST_FLD_HISTORY partition (SYS_P171053);

10602 rows created.

Elapsed: 00:00:00.31
08:17:01 SQL> commit;

Commit complete.

Elapsed: 00:00:00.00
08:17:05 SQL> select segment_name, partition_name, tablespace_name from dba_segments where segment_name = 'HIST_FLD_HISTORY2';

SEGMENT_NAME									  PARTITION_NAME		 TABLESPACE_NAME
--------------------------------------------------------------------------------- ------------------------------ ------------------------------
HIST_FLD_HISTORY2								  SYS_P172082			 USERS2
HIST_FLD_HISTORY2								  SYS_P172077			 USERS2
HIST_FLD_HISTORY2								  P00				 USERS

Elapsed: 00:00



И LOB'ы ушли в USERS2:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
08:29:08 SQL> select LOB_NAME, COLUMN_NAME, PARTITION_NAME, LOB_PARTITION_NAME, TABLESPACE_NAME , INITIAL_EXTENT, NEXT_EXTENT from dba_lob_partitions where table_name = 'HIST_FLD_HISTORY2';

LOB_NAME		       COLUMN_NAME		      PARTITION_NAME		     LOB_PARTITION_NAME 	    TABLESPACE_NAME
------------------------------ ------------------------------ ------------------------------ ------------------------------ ------------------------------
INITIAL_EXTENT				 NEXT_EXTENT
---------------------------------------- ----------------------------------------
SYS_LOB0001170071C00006$$      OLD_VALUE		      P00			     SYS_LOB_P172073		    USERS2
65536					 65536

SYS_LOB0001170071C00007$$      NEW_VALUE		      P00			     SYS_LOB_P172075		    USERS2
65536					 65536

SYS_LOB0001170071C00006$$      OLD_VALUE		      SYS_P172077		     SYS_LOB_P172078		    USERS2
8388608 				 1048576

SYS_LOB0001170071C00007$$      NEW_VALUE		      SYS_P172077		     SYS_LOB_P172080		    USERS2
8388608 				 1048576

SYS_LOB0001170071C00006$$      OLD_VALUE		      SYS_P172082		     SYS_LOB_P172083		    USERS2
8388608 				 1048576

SYS_LOB0001170071C00007$$      NEW_VALUE		      SYS_P172082		     SYS_LOB_P172085		    USERS2
8388608 				 1048576


6 rows selected.

Elapsed: 00:00:00.00



при этом NEXT я могу поменять:

Код: plsql
1.
2.
3.
08:29:17 SQL> alter table  data.HIST_FLD_HISTORY2 modify partition SYS_P172082  lob ("OLD_VALUE") (storage (NEXT 64k) );

Table altered.



но не могу поменять все остальное:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
08:31:27 SQL> alter table  data.HIST_FLD_HISTORY2 modify partition SYS_P172082  lob ("OLD_VALUE") (storage (INITIAL 64k) );
alter table  data.HIST_FLD_HISTORY2 modify partition SYS_P172082  lob ("OLD_VALUE") (storage (INITIAL 64k) )
                                                                                                 *
ERROR at line 1:
ORA-02203: INITIAL storage options not allowed


Elapsed: 00:00:00.00
08:31:39 SQL> alter table  data.HIST_FLD_HISTORY2 modify partition SYS_P172082  lob ("OLD_VALUE") (tablespace users );
alter table  data.HIST_FLD_HISTORY2 modify partition SYS_P172082  lob ("OLD_VALUE") (tablespace users )
                                                                                        *
ERROR at line 1:
ORA-22853: invalid LOB storage option specification


Elapsed: 00:00:00.00
08:31:57 SQL> !oerr ora 22853
22853, 00000, "invalid LOB storage option specification"
// *Cause:   A LOB storage option was not specified
// *Action:  Specify one of CHUNK, PCTVERSION, CACHE, NOCACHE, TABLESPACE, 
//           STORAGE, INDEX, [A]SYNC or DATA SYNC as part of the LOB storage
//           clause.



В расшифровке ошибки говорится, что 'TABLESPACE' входит в список разрещенных, а на деле нет. В доке говорится, что уже созданное modify нельзя, можно move, Но про ANYDATA я ничего не нашел.
...
Рейтинг: 0 / 0
Перемещение LOP partitions в другую ТС
    #39646164
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxskiЭто не бвг, это ваши фантазии.

Создаем таблицу, с TABLESPACE USERS, и первая партиция P00 тоже USERS, a LOB для P00 в USERS2:

В расшифровке ошибки говорится, что 'TABLESPACE' входит в список разрещенных, а на деле нет. В доке говорится, что уже созданное modify нельзя, можно move, Но про ANYDATA я ничего не нашел.

Послeдняя попытка. Попробуй указать tablespace для ANYDATA если таблица HE партицирoвана. Не получится ибо поле ANYDATA. И не верь всему что написано в документации. Ноги растут с как минимум Oracle 8. Там в move_table_clause находим:

You can also move any LOB data segments associated with the table using the LOB_storage_clause. (LOB items not specified in this clause are not moved.)

Что есть правда посколько только поля LOB типов хранились в отдельных сегментах и такие сегменты получили имя LOB segments. Ничего другое в LOB segments не хранилось. В Oracle 9 добавили varray columns и ANYDATA однaко изменили move_table_clause только относительно varray columns move_table_clause :

You can also move any LOB data segments associated with the table using the LOB_storage_clause and varray_col_properties clause . LOB items not specified in this clause are not moved.

Т.е доку подправили насчет varray columns а про то что теперь LOB data segments используются не только для хранения данных полей LOB типов но и для хранения данных полей ANYDATA которые в отличие от полей LOB типов своей tablespace не имеют и всегда живут в том-же tablespace что и таблица и отдельно их моve'ать нельзя забыли. Так и тащится это в доке...

SY.
...
Рейтинг: 0 / 0
Перемещение LOP partitions в другую ТС
    #39646671
maxski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY
но и для хранения данных полей ANYDATA которые в отличие от полей LOB типов своей tablespace не имеют и всегда живут в том-же tablespace что и таблица и отдельно их моve'ать нельзя забыли. Так и тащится это в доке...

SY.

Спасибо за подробный ответ.

Вы упорно не хотите видеть, что таблица и ее PARTITION P00 - в одном тейблспейсе USERS, а LOB-PARTITION - в другом USERS2
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
5:48:31 SQL> select LOB_NAME, COLUMN_NAME, PARTITION_NAME, LOB_PARTITION_NAME, TABLESPACE_NAME , INITIAL_EXTENT, NEXT_EXTENT from dba_lob_partitions where table_name = 'HIST_FLD_HISTORY2';

LOB_NAME		       COLUMN_NAME		      PARTITION_NAME		     LOB_PARTITION_NAME 	    TABLESPACE_NAME
------------------------------ ------------------------------ ------------------------------ ------------------------------ ------------------------------
INITIAL_EXTENT				 NEXT_EXTENT
---------------------------------------- ----------------------------------------
SYS_LOB0001169844C00007$$      NEW_VALUE		      SYS_P172048		     SYS_LOB_P172051		    USERS
8388608 				 1048576

SYS_LOB0001169844C00006$$      OLD_VALUE		      P00			     SYS_LOB_P172044		    USERS2
65536					 65536

SYS_LOB0001169844C00007$$      NEW_VALUE		      P00			     SYS_LOB_P172046		    USERS2
65536					 65536

SYS_LOB0001169844C00006$$      OLD_VALUE		      SYS_P172048		     SYS_LOB_P172049		    USERS
8388608 				 1048576


Elapsed: 00:00:00.00



При вставке новых строк в таблицу, создалась новая партиция SYS_P172048, в соответствии с установками по умолчанию. Не я ее добавлял. "oracle" сам создал автоматом при добавлении строк.
А P00 -LOB была создана мной:

Код: plsql
1.
2.
3.
(PARTITION "P00"  VALUES LESS THAN (TO_DATE(' 2014-02-01 00:00:00', .... SEGMENT CREATION IMMEDIATE ... TABLESPACE "USERS"
LOB ("OLD_VALUE") STORE AS BASICFILE ( tablespace users2 ...
LOB ("NEW_VALUE") STORE AS BASICFILE ( tablespace users2 ...



Аргумент "Попробуй указать tablespace для ANYDATA если таблица HE партицирoвана", получается не аргумент.

По мне так, Oracle (company) просто реализовали отдельный тейблспейс для LOB-партиций типа ANYDATA (также как и для CLOB). А реализацию MOVE для ANYDATA не закончили из-за багов (Возможно, как указывал Андрей_Анонимус - Orphaned Lobs after marking LOB column unused (Doc ID 461651.1)), поэтому не стали корректировать oerr по этой ошибке (см выше), чтоб потом не возвращать обратно.
А реально все мои ANYDATA данные живут в таблице, по той причине, что они меньше 4000 символов (каждая строка ANYDATA). И из-за этого все LOB-партиции пустые, поэтому я и хочу их сократить до 64к, каждую (сейчас 8М, каждая). И пока не знаю как.
...
Рейтинг: 0 / 0
Перемещение LOP partitions в другую ТС
    #39646720
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxskiВы упорно не хотите видеть, что таблица и ее PARTITION P00 - в одном тейблспейсе USERS, а LOB-PARTITION - в другом USERS2


А ты упорно не веришь что это просто баг где для партиций Oracle забывает проверить тип поля которое хранится в LOB сегменте и упорно игнорируешь "Попробуй указать tablespace для ANYDATA если таблица HE партицирoвана". Так-что продолжай биться головой об стену. Хотя, можешь воспользоваться этим багом и попробовать:

1. EXPDP (или EXP) партицированной таблицы
2. DROP партицированная таблицa PURGE.
3. CREATE партицированная таблицa с ANYDATA в нужных tablespace.
4. IMPDP (или IMP) экспортированной таблицы c TABLE_EXISTS_ACTION=APPEND или TRUNCATE.

Второй вариант:

1. Переименовать партицированную таблицу.
2. Удалить ключи, индексы итд.
3. Coздать партицированную таблицу (без ключей и индексов итд) со старым именем и с ANYDATA в нужных tablespace.
4. Создать непартицированную таблицу с той-же структурой.
5. Для каждой партиции переименованной таблицы:
a) truncate непартицированной таблицы.
б) exchange очередной партиции переименованной таблицы с непартицированной таблицей.
в) exchange очередной партиции новой партицированной таблицы с непартицированной таблицей.
6) Создать ключи, индексы итд в новой партицированной таблице.
7) Удалить переименованную таблицу (DROP PURGE).


SY.
P.S. Будеть интересно узнать сработает ли.
...
Рейтинг: 0 / 0
Перемещение LOP partitions в другую ТС
    #39646752
maxski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY,

exchange partition не сработает, так как параметры storage должны быть одинаковыми у LOB партиции и у обмениваемой таблицы.

Я думал на счет пересоздания таблицы, и это сработало бы, но следующие новые будут создаваться с INITIAL 8M

Я пробовал создавать новую таблицу с
Код: plsql
1.
STORAGE(INITIAL 65536 NEXT 65536



и для создаваемых партиций указывал:
Код: plsql
1.
STORAGE(INITIAL 65536  ...


все создавалось,

но, новые партиции оракл создавал автоматом с INITIAL 8М,
и потом уже эти 8М никак не смувить в 64к.
И через какое-то время придется повторять пересоздание. Что вообщем-то не устраивает.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Перемещение LOP partitions в другую ТС
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]