Лимит Oracle Database на генерируемые имена
Сегодня задался вопросом, как Oracle выбирает имена для автогенерируемых объектов. Конкретно интересовал вопрос выбора имени для таблицы со временными mview логами. mview логи на таблице позволяют создавать быстро обновляемые (fast refresh) материализованные представления, испольующие исходную таблицу. Вкратце: Если на таблице создать materialized view log:
Собственно таблицу T1 и две таблицы с логами.
Как видно oracle добавляет к имени таблицы MLOG$_/RUPD$_ - и получает имя таблицы с логами. Сразу возник вопрос, что будет с таблицами, чьи имена длиннее 24. (Так как лимит на имя объекта в oracle - 30 символов, минус 6 символов на приставку MLOG$_/RUPD$_ получаем 24). Пробуем
Ага, значит обрезает имя. Смотрим что будет если создать еще одну таблицу с таким же началом
Длина имени таблицы с логами получается 26-27 символов. Значит чтобы дойти до лимита в цифрах, необходимо 10000 уже занятых имен. Сразу захотелось узнать что же будет дальше Сказано - сделано. Создает скрипт, создающий 10000 таблиц с именами RUPD$_T2_tt_0123456789_pp_1, RUPD$_T2_tt_0123456789_pp_2, RUPD$_T2_tt_0123456789_pp_3 и т.д.
через несколько минут у нас все имена заняты. Смотрим как Oracle поведет, если создать еще одну таблицу с логами:
Цитата:
ORA-01948: identifier's name length (31) exceeds maximum (30)
PS. Используемая версия: Цитата:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
PL/SQL Release 11.2.0.3.0 - Production CORE 11.2.0.3.0 Production TNS for 64-bit Windows: Version 11.2.0.3.0 - Production NLSRTL Version 11.2.0.3.0 - Production |
Всего комментариев 0
Комментарии