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

Откуда:
Сообщений: 9
Всем доброго времени суток.

Возникло некоторое затруднение при выполнении парционирования таблицы с помощью пакета DBMS_REDEFINITION

Порядок действий:
--создаю interim таблицу. партионинг по хешу от (id) всего 8 партиций. Структура такая же как у оригинальной таблицы, за исключением 4 полей(not null в оригинальной таблице). Далее DBMS_REDEFINITION сам их создаст.

--далее проверяю можно ли использовать пакет
begin dbms_redefinition.can_redef_table (uname=>'T', tname=>'T', options_flag=>DBMS_REDEFINITION.CONS_USE_PK); end;

--Копируем записи из таблицы
BEGIN DBMS_REDEFINITION.START_REDEF_TABLE (uname=>'T', orig_table=>'T', int_table=>'T_TM', options_flag=>DBMS_REDEFINITION.CONS_USE_PK); end;

--Копирую индексы, констрайнт и т.д со следующими параметрами
--то есть копируем все за исключением статистики(потом ее сбор руками запущу) и игнорируя ошибки
BEGIN DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS(uname=>'T', orig_table=>'T', int_table=>'T_TM', copy_indexes=>dbms_redefinition.cons_orig_params , copy_triggers=>TRUE, copy_constraints=>TRUE, copy_privileges=>TRUE, ignore_errors=>TRUE, num_errors=>:num_errors, copy_statistics=>false); END;

--изза того что в базе работают пользователи получаю 7 ошибок на создании констрайнтов.
SQL> select count(*) from DBA_REDEFINITION_ERRORS;

COUNT(*)
----------
7

--Создаю констрайнты руками и регистрирую их с помощью REGISTER_DEPENDENT_OBJECT
begin DBMS_REDEFINITION.REGISTER_DEPENDENT_OBJECT(uname=>'T', orig_table=>'T', int_table=>'T_TM', dep_type=>DBMS_REDEFINITION.CONS_CONSTRAINT, dep_owner=>'T', dep_orig_name=>'FK_ACT_INVENTPURPOSEFIN_194113', dep_int_name=>'TMP$$_FK_ACT_INVENTPURPOSEF0'); end;

--Проверяю что объекты зарегистрированы
SQL> select count(*) from DBA_REDEFINITION_OBJECTS where object_name='FK_ACT_INVENTPURPOSEFIN_194113';

COUNT(*)
----------
1

--Проверяю ошибки. И там по-прежнему 7 объектов, которые и были в DBA_REDEFINITION_OBJECTS
SQL> select count(*) from DBA_REDEFINITION_ERRORS;

COUNT(*)
----------
7


Получается что автоматически ошибки не очищаются из DBA_REDEFINITION_ERRORS??? Как их можно очистить? То есть обновить представление DBA_REDEFINITION_ERRORS? И еще вопрос можно ли продолжать то есть приступать к dbms_redefinition.finish_redef_table?

Версия оракла:
SQL> select * from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
CORE 11.2.0.4.0 Production
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production
13 июл 14, 04:08    [16297160]     Ответить | Цитировать Сообщить модератору
 Re: DBA_REDEFINITION_ERRORS не обновляется после REGISTER_DEPENDENT_OBJECT  [new]
zhal
Member

Откуда: Киев-Харьков
Сообщений: 647
nicotin,

А какие ошибки у тебя в DBA_REDEFINITION_ERRORS ?
14 июл 14, 11:36    [16300240]     Ответить | Цитировать Сообщить модератору
 Re: DBA_REDEFINITION_ERRORS не обновляется после REGISTER_DEPENDENT_OBJECT  [new]
zhal
Member

Откуда: Киев-Харьков
Сообщений: 647
При создании вручную/регистрации - не очищает. Чтобы очистить надо запустить COPY_TABLE_DEPENDENTS повторно. Финишировать можно и с наличием записей в DBA_REDEFINITION_ERRORS. Например, у меня там остаются зачастую ошибки по созданию констрейнта нот нулл, которые я просто игнорирую.
14 июл 14, 12:02    [16300466]     Ответить | Цитировать Сообщить модератору
 Re: DBA_REDEFINITION_ERRORS не обновляется после REGISTER_DEPENDENT_OBJECT  [new]
nicotin
Member

Откуда:
Сообщений: 9
Я в общем то так и сделал. Просто повторно запустил COPY_TABLE_DEPENDENTS. Просто это получается баг, так как в доке написано что ошибки автоматически очищаются.
Ради интереса на тестовой базе попробовал с ошибками продолжить(я их исправил и запустил REGISTER_DEPENDENT_OBJECTS, они только в DBA_REDEFINITION_ERRORS остались) Все отработало как надо, проблем нет
14 июл 14, 19:28    [16303223]     Ответить | Цитировать Сообщить модератору
 Re: DBA_REDEFINITION_ERRORS не обновляется после REGISTER_DEPENDENT_OBJECT  [new]
zhal
Member

Откуда: Киев-Харьков
Сообщений: 647
nicotin
в доке написано что ошибки автоматически очищаются
А ссылку на доку можно?
Тут написано, что DBA_REDEFINITION_ERRORS заполняется в случае автокопирования запуском COPY_TABLE_DEPENDENTS (в том числе и при повторном).
В пункте про ручное создание/регистрацию процедурой REGISTER_DEPENDENT_OBJECT нет ссылок на это представление.
Имхо никакого бага нет.
Полностью представление очищается либо при FINISH_REDEF_TABLE, либо при ABORT_REDEF_TABLE.

P.S. У меня не было проблем с FK на этапе COPY_TABLE_DEPENDENTS, как в твоем случае. Однако слетало финиширование FINISH_REDEF_TABLE поскольку не удавалось получить эксклюзивную блокировку
15 июл 14, 10:59    [16305403]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить