Каталог Oracle 11g / Системные таблицы Записи DBA_COL_COMMENTS и DBA_OBJECTS

Я работаю над проектом, цель которого проста. У нас есть суррогатный ключ, тип данных которого необходимо изменить с целого на десятичный (18,0), чтобы вместить больше транзакций из-за роста бизнеса. Судя по всему, это поле очень важно и упоминается в тысячах объектов.

Я хочу найти автоматизированный способ идентификации всех объектов, в которых это поле присутствует или упоминается. Имя поля, скажем, SRV_ACCS_XXX. Это таблицы/представления/макросы и т. д., которые ссылаются на это поле.

Мысль будет использовать системные таблицы каталога/системы :). Это проблема, с которой я столкнулся. В dba_col_comments есть объекты, которые ссылаются на поле SRV_ACCS, однако эти объекты не имеют записи в dba_objects, поэтому я получаю тип объекта как нулевой. Имена объектов похожи на "BIN$01gtIjJPB0vgRAALXeCowg==$0", однако они имеют допустимое имя схемы базы данных.

Верен ли мой подход? Если да, то что это за типы объектов - с именами "BIN$01gtIjJPB0vgRAALXeCowg==$0"? Как я могу удалить временные объекты/изменчивые объекты из результата, чтобы получить только постоянно созданные объекты?. Потому что каждый раз, когда я запускаю запрос без каких-либо изменений, он дает разные результаты.

Пожалуйста, прочитайте следующий запрос.

select 
current_date "Load_date",
NULL "Tower_owner",
'Oracle Production' as "Environment_Name",
Object_Details_Tbl.TABLE_NAME "Object_Name",
object_typ_tbl.object_type "Object Type",
1 "Num Occurances",
Object_Details_Tbl.Owner "Database Schema",
'p1etl1d8.edc.cingular.net' "Server",
'N/A' "Object_Repository",
'Oracle Table'  "Object_Description",
'N/A' "Object_Folder_Name", 
'N/A' "Object_Directory_Name",
'A' AS "Object_Status" 
from dba_col_comments Object_Details_Tbl
left outer join
dba_objects Object_Typ_Tbl
on
object_details_tbl.table_name = object_typ_tbl.object_name
and
object_details_tbl.owner = object_typ_tbl.owner
where Object_Details_Tbl.column_name like('%SRV_ACCS_%')

Спасибо Маркив.


person MarkIV    schedule 16.01.2013    source источник
comment
Я не уверен, что предпосылка имеет смысл. В Oracle INTEGER является синонимом NUMBER(38,0), а DECIMAL(18,0)NUMBER(18,0). Таким образом, вы пытаетесь уменьшить максимальное значение, которое может быть сохранено в столбце, на 20 порядков. Это, кажется, противоречит заявленному желанию разместить больше транзакций из-за роста. Вы действительно хотите уменьшить размер столбца?   -  person Justin Cave    schedule 16.01.2013
comment
объекты, начинающиеся с BIN$, будут находиться в recylebin (select * from user_recyclebin для просмотра).   -  person DazzaL    schedule 16.01.2013


Ответы (1)


Я не знаю о вашем подходе и скорости транзакций. Но для объектов BIN$.. это удаленные объекты. Не беспокойтесь о них, просто очистите корзину (это может занять некоторое время), и они должны исчезнуть.

person Plouf    schedule 16.01.2013
comment
Извините за первоначальную путаницу - типы данных, которые я упоминал в исходном письме, были для тераданных. Мои извинения. - person MarkIV; 16.01.2013
comment
Большое спасибо за ваш отзыв, это действительно помогает в понимании. - person MarkIV; 16.01.2013
comment
Спасибо @DazzaL - ваши комментарии были действительно полезны. - person MarkIV; 06.02.2013
comment
Спасибо @Justing Cave за ваш вклад, они были действительно полезны. - person MarkIV; 06.02.2013