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

Откуда:
Сообщений: 30
Менеджер табличного пространства показал, что у LOB таблицы 94% сцелленных и/или мигрированных строк (chained/migrated) Попытка ее реорганизации с помощью alter table BLOBBUFFER move tablespace data привел к ошибке ORA-00997 illegal use of LONG datatype. Подскажите как правильно устранить сцепление и миграцию у таблиц с таким типом данных?
27 июл 06, 08:59    [2931141]     Ответить | Цитировать Сообщить модератору
 Re: Реорганизация LOB таблицы  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18484
Мож там все-таки не LOB, а LONG [RAW] ?
tst> create table t1 as select view_name, to_lob(text) text from all_views;

Table created.

tst> desc t1;
 Name                                                              Null?    Type
 ----------------------------------------------------------------- -------- -----------------
 VIEW_NAME                                                         NOT NULL VARCHAR2(30)
 TEXT                                                                       CLOB

tst> alter table t1 move tablespace tools lob(text) store as (tablespace tools);

Table altered.
27 июл 06, 09:06    [2931158]     Ответить | Цитировать Сообщить модератору
 Re: Реорганизация LOB таблицы  [new]
vidiccs
Member

Откуда:
Сообщений: 30
Да это таблица с полем типа LONG
27 июл 06, 09:10    [2931171]     Ответить | Цитировать Сообщить модератору
 Re: Реорганизация LOB таблицы  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18484
Тады варианты:
  • exp/imp (самое простое)
  • вроде, команда COPY в SQL*Plus умеет работать с лонгами -- т.е. скопировать в новую таблицу
  • конвертнуть LONG в LOB (если клиент сможет с ними работать -- как правило, это прозрачно) и с ним уже делать все, что хошь
    tst> create table t1(a number, b long raw);
    
    Table created.
    
    tst> insert into t1 values(1, hextoraw('1234567890abcdef'));
    
    1 row created.
    
    tst> alter table t1 move tablespace tools;
    alter table t1 move tablespace tools
    *
    ERROR at line 1:
    ORA-00997: illegal use of LONG datatype
    
    
    tst> desc t1;
     Name                                                              Null?    Type
     ----------------------------------------------------------------- -------- -----------------
     A                                                                          NUMBER
     B                                                                          LONG RAW
    
    tst> alter table t1 modify (b blob);
    
    Table altered.
    
    tst> desc t1;
     Name                                                              Null?    Type
     ----------------------------------------------------------------- -------- -----------------
     A                                                                          NUMBER
     B                                                                          BLOB
    
    tst> alter table t1 move tablespace tools;
    
    Table altered.
    
  • 27 июл 06, 09:20    [2931196]     Ответить | Цитировать Сообщить модератору
     Re: Реорганизация LOB таблицы  [new]
    vidiccs
    Member

    Откуда:
    Сообщений: 30
    Спасибо сейчас попробую на тестовой базе как после модификации таблицы будет работать прикладная программа
    27 июл 06, 09:30    [2931227]     Ответить | Цитировать Сообщить модератору
     Re: Реорганизация LOB таблицы  [new]
    Вячеслав Любомудров
    Member

    Откуда: Владивосток
    Сообщений: 18484
    И кстати, по-поводу "94% сцелленных и/или мигрированных строк (chained/migrated)"
    Если размер данных в поле LONG превышает размер блока (за вычетом некоторого оверхида -- служебной информации), то от сцепленных строк никуда не деться по определению
    27 июл 06, 09:33    [2931237]     Ответить | Цитировать Сообщить модератору
     Re: Реорганизация LOB таблицы  [new]
    vidiccs
    Member

    Откуда:
    Сообщений: 30
    После выполнения операции по реорганизации таблицы слетают индексы, подскажите пожалуйста как их надо восстанавливать. primary key мне удалось воостановить, а вот остальные не получается
    27 июл 06, 10:29    [2931482]     Ответить | Цитировать Сообщить модератору
     Re: Реорганизация LOB таблицы  [new]
    Вячеслав Любомудров
    Member

    Откуда: Владивосток
    Сообщений: 18484
    begin
        for i in (select index_name from user_indexes where table_name='bla-bla-bla' and status='UNUSABLE') loop
            execute immediate 'alter index '||i.index_name||' rebuild';
        end loop;
    end;
    /
    
    27 июл 06, 10:32    [2931505]     Ответить | Цитировать Сообщить модератору
     Re: Реорганизация LOB таблицы  [new]
    vidiccs
    Member

    Откуда:
    Сообщений: 30
    спасибо за помощь
    27 июл 06, 10:39    [2931552]     Ответить | Цитировать Сообщить модератору
    Все форумы / Oracle Ответить