Тема: FAQ по Oracle
Сообщение отдельно
19.08.2009 15:50
Назым
 
Вопрос:

При обновлении версии СМ2000 ( CM +) Генератор БД останавливается с ошибкой:

***** Documents.sql *****

Таблица изменена.

begin

*

ошибка в строке 1:

ORA-22856: невозможно добавлять столбцы к таблицам объектов

ORA-06512: на "SUPERMAG.SMINITNEWFIELD", line 11

ORA-06512: на line 2

Ответ:

I. Были изменены свойства таблиц. В Oracle 9i и выше, есть понятие сжатых таблиц. Если таблица сжатая, то добавление к ней колонок приводит к ошибке ORA-22856.

Можно попробовать отобрать сжатые таблицы запросом:

select TABLE_NAME from user_tables where compression='ENABLED';

Запрос выведет все сжатые таблицы.

Для каждой из них надо выполнить следующую команду:

alter table table_name nocompress;


II. Есть подозрение, что декомпрессия не работает в oracle 9 i .

Ранее ошибка проявлялась на таблице smdoclog и рекомендации выше не помогали.

Поэтому, чтобы решить эту проблему нужно выполнить следующее (инструкция общая на примере одной таблицы SMDOCLOG),:

Все необходимые компоненты структуры смотреть перед удалением таблицы!

Выяснить наименование скомпрессованных таблиц:

select TABLE_NAME from user_tables where compression='ENABLED';

Необходимо пересоздать скомпрессированную таблицу SMDOCLOG.

2 . Сначала необходимо сохранить имеющиеся данные:

Create table smdoclog_bak as select * from smdoclog;

3. Затем удалить таблицу SMDOCLOG:

Drop table SMDOCLOG;

4. Создать ее заново скриптом (который можно вытащить, например программой TOAD (скрипт не прилагается полностью, по причине его возможной модификации от версии к версии)):



CREATE TABLE SMDOCLOG

(

RECID NUMBER DEFAULT 0 NOT NULL,

EVENTTIME DATE DEFAULT SYSDATE NOT NULL,

DOCTYPE CHAR(2 BYTE) NOT NULL,

……………………………..…OG TO SUPERMAG_MODULE_TERMINAL;

5. Вернуть записи в таблицу SMDOCLOG:

Insert into smdoclog select * from smdoclog_bak;

Commit;

6. Удалить таблицу smdoclog_bak:

Drop table smdoclog_bak;