Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Перемещение партиционированной таблицы  [new]
OlegON
Member

Откуда: Moscow
Сообщений: 596
10.2.0.5
правильно ли я понимаю, что переместить партиционированную таблицу в табличное пространство с другим размером блока я могу только пересоздав таблицу?
19 июл 10, 12:28    [9124178]     Ответить | Цитировать Сообщить модератору
 Re: Перемещение партиционированной таблицы  [new]
SQL*Plus
Member

Откуда: Россия, Москва
Сообщений: 8131
ALTER TABLE ... MODIFY DEFAULT ATTRIBUTES ... TABLESPACE ...;
ALTER TABLE ... MOVE PARTITION ... TABLESPACE ...;
19 июл 10, 13:31    [9124694]     Ответить | Цитировать Сообщить модератору
 Re: Перемещение партиционированной таблицы  [new]
OlegON
Member

Откуда: Moscow
Сообщений: 596
Хм, может у меня карма не та, но в ТП с другим блоком все равно так не переместить, нет?
19 июл 10, 19:19    [9127529]     Ответить | Цитировать Сообщить модератору
 Re: Перемещение партиционированной таблицы  [new]
SQL*Plus
Member

Откуда: Россия, Москва
Сообщений: 8131
OlegON,
Почему это?
А попробовать?
19 июл 10, 19:21    [9127539]     Ответить | Цитировать Сообщить модератору
 Re: Перемещение партиционированной таблицы  [new]
OlegON
Member

Откуда: Moscow
Сообщений: 596
Конечно же я попробовал...

SQL> alter table table MODIFY DEFAULT ATTRIBUTES TABLESPACE users;
alter table table MODIFY DEFAULT ATTRIBUTES TABLESPACE users
                                                                 *
ERROR at line 1:
ORA-14520: Tablespace USERS block size [8192] does not match existing object block size [32768]

это-то и огорчает, это центральная таблица, ее пересоздание... ну несколько часов моей работы... А сама ее перестройка - еще несколько.
19 июл 10, 19:36    [9127580]     Ответить | Цитировать Сообщить модератору
 Re: Перемещение партиционированной таблицы  [new]
SQL*Plus
Member

Откуда: Россия, Москва
Сообщений: 8131
ORA-14520: Tablespace string block size [string] does not match existing object block size [string]
Cause: A DDL statement was issued that would require a tablespace of a block size different from the block size of the specified partitioned object to be assigned either: (1) As the object's default tablespace (or one of the object's partition-level default tablespaces, if composite partitioning is being used) OR (2) To one of the object's partitions/subpartitions.
Action: Specify a tablespace of the same block size as the partitioned object.

Значит получается, что нельзя...
Видимо для секционированных таблиц используется какой-то механизм, который не может такого вынести...
19 июл 10, 19:42    [9127597]     Ответить | Цитировать Сообщить модератору
 Re: Перемещение партиционированной таблицы  [new]
OlegON
Member

Откуда: Moscow
Сообщений: 596
Вот и ищу что-то, чтобы упростить себе жизнь... На эту таблицу ссылается куча других, потом еще триггеров пачка :( Не спать мне сегодня, видимо.
19 июл 10, 19:46    [9127609]     Ответить | Цитировать Сообщить модератору
 Re: Перемещение партиционированной таблицы  [new]
SQL*Plus
Member

Откуда: Россия, Москва
Сообщений: 8131
OlegON,
А по какой причине требуется такой перенос?
Надеюсь, эта причина достаточно веская?
19 июл 10, 20:12    [9127693]     Ответить | Цитировать Сообщить модератору
 Re: Перемещение партиционированной таблицы  [new]
aamazur
Member

Откуда: CA
Сообщений: 438
dbms_redefinition в руки. если таблица большая, на на start redef можно и поспать :-)
19 июл 10, 20:20    [9127716]     Ответить | Цитировать Сообщить модератору
 Re: Перемещение партиционированной таблицы  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18337
В 11gR2 вроде можно миксовать.
В десятке и раньше - придется попрыгать.
0) убедиться в наличии актуальной резервной копии.
1) создать новое табличко в новом TS, nologging.
Для простоты можно воспользоваться услугами dbms_metadata, далее - поиск/замена.
1.5) Базу - в restricted или просто листенер погасить, чтобы юзверя не мешались.
2) переливать append-ом посекционно, можно в параллель.
3) дизаблить сылающиеся FK, для надежности - скриптом по dba_constraints.
4) rename старое табличко (для пущей надежности), rename новое табличко.
5) запуск FK в enable novalidate.
6) Экспресс-проверка фунциклябельности.
8) Запускаем юзверей
7) drop переименованное_старое_табличко
9) BACKUP - юзверя потормозят немного, им чай не впервой :)
В принципе, пункты 1, 2 и 3 можно закодить за час, поставить переливаться и (если табличка реально большая, а не десяток миллионов строк) идти домой.
С утречка пораньше - ранее подготовленными скриптами начиная с с п. 3, украдете у юзверей пару часиков утром - они только спасибо скажут за возможность лишний раз интернет почетать :)
19 июл 10, 20:27    [9127732]     Ответить | Цитировать Сообщить модератору
 Re: Перемещение партиционированной таблицы  [new]
OlegON
Member

Откуда: Moscow
Сообщений: 596
Причина весьма веская, я не любитель посидеть помувить таблички. Да, еще не сказал, табличку буду сливать в одну. Т.е. партиционирована она не будет.
Несколько сотен миллионов записей. Есть идеи, как бы ее смержить в одну в этом табличном пространстве, а потом тихо move в другое? :) Суть не в ней, а в гигантском количестве ссылок на нее по FK. Если дропнуть их каскадом, то здоровья не хватит потом восстанавливать.
19 июл 10, 20:51    [9127786]     Ответить | Цитировать Сообщить модератору
 Re: Перемещение партиционированной таблицы  [new]
SQL*Plus
Member

Откуда: Россия, Москва
Сообщений: 8131
OlegON
Да, еще не сказал, табличку буду сливать в одну. Т.е. партиционирована она не будет.
Несколько сотен миллионов записей.
И какая же веская причина отказаться от секционирования?
Это должна быть очень-очень веская причина, особенно когда в ней "Несколько сотен миллионов записей"...
19 июл 10, 20:54    [9127796]     Ответить | Цитировать Сообщить модератору
 Re: Перемещение партиционированной таблицы  [new]
OlegON
Member

Откуда: Moscow
Сообщений: 596
Да, простите, что не всем ответил, скрипт таблички уже собрал, конечно же, времени до 01:00 по мск, т.е. еще несколько часов :)
Сейчас бодаю DBMS_REDEFINITION, как-то не приходилось пользоваться.
19 июл 10, 20:57    [9127801]     Ответить | Цитировать Сообщить модератору
 Re: Перемещение партиционированной таблицы  [new]
OlegON
Member

Откуда: Moscow
Сообщений: 596
SQL*Plus
И какая же веская причина отказаться от секционирования?
Это должна быть очень-очень веская причина, особенно когда в ней "Несколько сотен миллионов записей"...

Требование разработчиков. У меня остался один довод в виде кувалдометра.
Но на самом деле дело больше не в партиционировании, а в размере блока. Планы ползут - факт. Т.е. партиционирована она или нет - не столь важно, сколько убрать ее с 32к.
19 июл 10, 21:00    [9127815]     Ответить | Цитировать Сообщить модератору
 Re: Перемещение партиционированной таблицы  [new]
SQL*Plus
Member

Откуда: Россия, Москва
Сообщений: 8131
OlegON
SQL*Plus
И какая же веская причина отказаться от секционирования?
Это должна быть очень-очень веская причина, особенно когда в ней "Несколько сотен миллионов записей"...
Требование разработчиков. У меня остался один довод в виде кувалдометра.
Что есть "кувалдометр"? "Вы этого хотели - получИте"?

OlegON
Но на самом деле дело больше не в партиционировании, а в размере блока. Планы ползут - факт. Т.е. партиционирована она или нет - не столь важно, сколько убрать ее с 32к.
После того, как не будет секций планы "совсем уползут"...
Надеюсь, что вы с разработчиками не на рабочей системе тренируетесь!?
19 июл 10, 21:03    [9127826]     Ответить | Цитировать Сообщить модератору
 Re: Перемещение партиционированной таблицы  [new]
OlegON
Member

Откуда: Moscow
Сообщений: 596
SQL*Plus,

последствия мы все хорошо представляем. Именно, что заставить разрабов переменить точку зрения к подходу в создании запросов не удается. Много нюансов, которые бы не хотелось тут обсуждать.
19 июл 10, 21:09    [9127841]     Ответить | Цитировать Сообщить модератору
 Re: Перемещение партиционированной таблицы  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18337
Получить FK:
select table_name, dbms_metadata.get_dependent_ddl('REF_CONSTRAINT',max(table_name),USER) 
from user_constraints 
where constraint_type = 'R'
  and R_constraint_name in (select constraint_name 
                              from user_constraints 
                             where table_name = '<big-big-table>'
                           )
group by table_name
;
19 июл 10, 21:18    [9127865]     Ответить | Цитировать Сообщить модератору
 Re: Перемещение партиционированной таблицы  [new]
OlegON
Member

Откуда: Moscow
Сообщений: 596
andrey_anonymous,

да, спасибо, я уже собрал их все... Кстати, доступ туда только ssh+sqlplus, т.е. select dbms_lob.substr задействовал, оно, собака, может порезать DDL. А те несчастные 4000 байт я так и не поборол что-то.
Видимо, не придется мне сегодня ночевать, чисто физически не успеваю до часу ночи. Да и вторые сутки уж пошли. Завтра попробую. Спасибо большое за поддержку.

Странно вообще, что такое ограничение по переносу. Это ж сколько возни админу придумали.
19 июл 10, 21:30    [9127897]     Ответить | Цитировать Сообщить модератору
 Re: Перемещение партиционированной таблицы  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18337
OlegON
andrey_anonymous,

да, спасибо, я уже собрал их все... Кстати, доступ туда только ssh+sqlplus, т.е. select dbms_lob.substr задействовал, оно, собака, может порезать DDL.

set long :)
19 июл 10, 21:40    [9127931]     Ответить | Цитировать Сообщить модератору
 Re: Перемещение партиционированной таблицы  [new]
OlegON
Member

Откуда: Moscow
Сообщений: 596
Спасибо :) Я почему-то dbms_lob.substr всегда использовал... На него-то и жаловался, что порежет. Так, конечно, удобнее.
19 июл 10, 22:00    [9127967]     Ответить | Цитировать Сообщить модератору
 Re: Перемещение партиционированной таблицы  [new]
OlegON
Member

Откуда: Moscow
Сообщений: 596
вот еще скриптик, с лишними, правда, но под мои цели хорош...
SELECT to_char(DBMS_METADATA.GET_DEPENDENT_DDL('REF_CONSTRAINT', table_name, owner)) DDL
  FROM (SELECT DISTINCT b.table_name, b.owner
          FROM dba_constraints a,
               dba_constraints b
         WHERE b.r_constraint_name = a.constraint_name
           AND b.r_owner           = a.owner
           AND a.constraint_type in ('P','U')
           AND b.constraint_type = 'R'
           AND b.owner = ''
           AND b.table_name = 'table_name')
union
SELECT to_char(DBMS_METADATA.GET_DEPENDENT_DDL('REF_CONSTRAINT', table_name, owner)) DDL
  FROM (SELECT DISTINCT a.table_name, a.owner
          FROM dba_constraints a,
               dba_constraints b
         WHERE a.r_constraint_name = b.constraint_name
           AND a.r_owner           = b.owner
           AND b.constraint_type in ('P','U')
           AND a.constraint_type = 'R'
           AND b.owner = 'owner'
           AND b.table_name = 'table_name')
19 июл 10, 22:34    [9128025]     Ответить | Цитировать Сообщить модератору
 Re: Перемещение партиционированной таблицы  [new]
Vadim Lejnin
Member

Откуда:
Сообщений: 7126
Утро
OlegON

... Кстати, доступ туда только ssh+sqlplus

Можно попробовать ssh port forward (если не запрещен админом)
Например проброс порта 1521 с dbserver на локальный порт 1544

ssh -L 1544:dbserver:1521 sshuser@sshserver

port listener в данном случае проброситься к Вам на локальную машину
То есть в параметре
(HOST=127.0.0.1) 
tnsnames.ora
нужно будет прописать не dbserver а 127.0.0.1
Ну и
(PORT=1544)

В этом случаем можете использовать подключится к базе oracle со своей локальной машины
( С той с которой вы запустили ssh)

Для windows можно использовать либо cygwin ssh либо putty (Утилита plink)
ssh -L 1544:dbserver:1521 sshuser@sshserver
19 июл 10, 23:30    [9128118]     Ответить | Цитировать Сообщить модератору
 Re: Перемещение партиционированной таблицы  [new]
OlegON
Member

Откуда: Moscow
Сообщений: 596
Vadim Lejnin,

да, спасибо, я знаю, как порты пробрасывать... Только некомфортно работать, особенно, если связь просядет.. Всякие ToAd начинают сыпаться.. Предпочитаю по старинке... Да и некуда пробрасывать, собственно, сам на Линуксе сейчас, а с wine влом связываться :)
Помню, с windows были свистопляски на тему USE_SHARED_SOCKET, посмотрел netstat, вроде как такой параметр не требуется?
Рискнул все таки. Благодаря andrey_anonymous быстренько собрал FK, теперь уже назад пути нет, восстанавливаю индексы...

Еще раз всем спасибо за советы и поддержку.
19 июл 10, 23:43    [9128143]     Ответить | Цитировать Сообщить модератору
 Re: Перемещение партиционированной таблицы  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18482
andrey_anonymous
В 11gR2 вроде можно миксовать.
Да, вроде, нельзя
Oracle® Database VLDB and Partitioning Guide
11g Release 2 (11.2)
Part Number E10837-03
Partitioning Restrictions for Multiple Block Sizes

Use caution when creating partitioned objects in a database with tablespaces of different block sizes. The storage of partitioned objects in such tablespaces is subject to some restrictions. Specifically, all partitions of the following entities must reside in tablespaces of the same block size:
  • Conventional tables
  • Indexes
  • Primary key index segments of index-organized tables
  • Overflow segments of index-organized tables
  • LOB columns stored out of line
    Therefore:
  • For each conventional table, all partitions of that table must be stored in tablespaces with the same block size.
    ...
  • 20 июл 10, 02:27    [9128364]     Ответить | Цитировать Сообщить модератору
    Все форумы / Oracle Ответить