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

возник у меня в голове вот такой вопрос.
Допустим на програмным продуктом работают куча народу,пишут серверную логику т.е. пакеты.
У каждого есть набор пакетов которые он пишет, изменяет.
Об использованиии их другими разработчиками, он может либо знать, либо догадаваться, либо не знать во все.

например, изменил ты спецификацию внешнего метода добавил обязательный параметр, и думал, что его пользуешь только ты в своих пакетах, а оказывается, Петя Иванов, как-то в 1999 году увидел этот очень полезный метод и давно его пользует. Понятно что после этих изменений Петя обидется.

Я прекрасно понимаю, что тут можно подойти к проблеме, как изменять свои объекты:
посмотреть по зависимостям, кто ссылается,
посмотреть, как ссылается,
надеяться, что твои пакеты не использут через динамический sql
после этого делать свои изменения на основе полученных выше данных.

но если вы с большой достоверность знаете, как вас "позьзуют", то описанный процесс, может быть достаточно трудоемкий каждый раз, и хотелось бы иметь какой-нибуть полезный набор запросов к словарю, который помогал отсекать наиболее распространненые ошибки.

например такие запросы
все invalid объекты кторые приналежать вам
select * from user_objects where object_name in (ваш список объектов) and status='INVALID'
я понимаю что в статус invalid можно попатсть просто изза recompile зависимых объектов, но как некоторое приближение подойдет

очень часто наши админы при создании копии любят про№;№ть тело пакета, но не забять про спецификацию, в такой ситуации свиду кажется что всё впорядке, но пользователи кричат и матюгаются, для этого может быть полезен запрос
SELECT * FROM user_objects uo1 WHERE object_type='PACKAGE' 
AND NOT EXISTS (SELECT * FROM user_objects uo2 WHERE object_type='PACKAGE BODY' 
AND uo1.object_NAME=uo2.object_NAME );

ну и напоследок не знаю как описать

select * from user_errors
,(select distinct object_name from user_arguments where package_name 
in (список ваших пакетов)) pkg_func
where user_errors.type='PACKAGE BODY'
and user_errors.text like '%'||pkg_func.object_name||'%'

критика запросов преветствуется, так хотелось бы увидеть кто скакими проблемами сталкивался и их решения.

и опциональный вопрос, как вы оптимизируете запаросы к словарю, мне при посторении планов постоянно кричат, что не достатоно привелегий.
25 сен 06, 23:15    [3182290]     Ответить | Цитировать Сообщить модератору
 Re: поиск своих ошибок у других  [new]
Anton Demidov
Member

Откуда: Atlanta, GA
Сообщений: 1187
Запросы эти нужные, но организационный вопрос остаётся.
Я бы прописывал в комментариях Package Spec какой пакет использует вас, дату и имя (логин) программиста. На первый раз можно прописать туда результаты вышеописанных запросов, потом там отмечаются те, кто использует. Если поленился кто оставить запись и после изменений чей-то пакет поломался - вычисляем его на ура по истории в CVS (у вас же наверняка есть система контроля версий). Да, на видном месте держите баночку с вазелином

--
Антон
Per rectum ad astrum
25 сен 06, 23:28    [3182312]     Ответить | Цитировать Сообщить модератору
 Re: поиск своих ошибок у других  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116202
Если честно, пост производит несколько странное впечатление.
Первая мысль - у человека нет никакого GUI.

Вы пользуетесь PL/SQL Developer, SQL Navigator, TOAD ?

По поводу запросов

select * from user_objects where object_name in (ваш список объектов) and status='INVALID'

Обычный список инвалидных объектов пользователя. Да, бывает вполне
полезным, но как бы это сказать, 99% времени мои объекты валидны.
Они инвалидны только тогда, когда я изменяю свой пакет и я как правило
это вижу и так. А вообще то, я вижу в GUI красный крест или что-то подобное.

SELECT * FROM user_objects uo1 WHERE object_type='PACKAGE' 
AND NOT EXISTS (SELECT * FROM user_objects uo2 WHERE object_type='PACKAGE BODY' 
AND uo1.object_NAME=uo2.object_NAME );

Это что, специфиации без тела ? Во- первых, это вполне легально,
например, Вы создали пакет типов. Про зловещую роль админов я в
этом контексте вообще ничего не понял.

select * from user_errors
,(select distinct object_name from user_arguments where package_name 
in (список ваших пакетов)) pkg_func
where user_errors.type='PACKAGE BODY'
and user_errors.text like '%'||pkg_func.object_name||'%'

Это ошибки в Ваших пакетах ? Снова как- то немного странно.
Как правило, ничего показывать не будет, а только когда я вношу
изменения в пакет и я это тут же вижу опять через GUI. Опять же
красные кресты в GUI.

Хм, в процессе анализа окреп вопрос про Ваши взаимоотношения с
GUI. Если У Вас ничего нет, и Вы программируете в sqlplus, наверное
это может помочь, иначе, мой совет более полно использовать
возможности GUI.

И еще неплохо бы посмотреть в сторону усиления организационных
взаимоотношений в коллективе. Описанная картина ИМХО несколько
хаотична.
25 сен 06, 23:41    [3182344]     Ответить | Цитировать Сообщить модератору
 Re: поиск своих ошибок у других  [new]
Гость 25092006
Guest
пользуюсь PL/SQL Developer
сразу сказал, что запросы не претендуют на идеал
автор

Обычный список инвалидных объектов пользователя. Да, бывает вполне
полезным, но как бы это сказать, 99% времени мои объекты валидны.
Они инвалидны только тогда, когда я изменяю свой пакет и я как правило
это вижу и так. А вообще то, я вижу в GUI красный крест или что-то подобное.

это я понимаю

автор

Это что, специфиации без тела? Во- первых, это вполне легально,
например, Вы создали пакет типов. Про зловещую роль админов я в
этом контексте вообще ничего не понял

ну про спецификацию без тела я конечно знаю, просто у нас был случай, когда 2 недели админты не могли наладить работу схемы потому, что один пакет заведомо имеющий тело последнее "потерял"

автор
Это ошибки в Ваших пакетах ?

не совсем, я навоял это запрос, когда посмотрел в user_errors по пакету использующему мой пакет, в котором я поменял специкацию метода.
в user_errors.text упоминался метод моего пакета в сообщении ошибки.


автор
Описанная картина ИМХО несколько
хаотична.

Полностью с тобой согласен, в реальности не так, я прекрастно представляю, где мое используется, а где нет, + набор инструкций как нужно оформлять код.
Но зачастую быть уверенным можешь ты только за себя, а как другие работают.
Да и вопрос был всеже в ключе как что-то полезное вытаскивать из словаря, в ключе топика.



про GUI, может я не спец, но в дереве sql-навигатора мне лично влом искать все свои объекты, и смотреть их статус,
или окошки по поиску объектов (pl/sql-developer и sql-navigator), по сравнению с этим всем мне реально легче выпоонить заренее написанный запрос.
ИМХО. через GUI можно сделать не все, в свою бытность, когда я не знал, что такое документация по ORACLE, о наличии конкретных user_ предствалений я узнавал через, снятие trace'ов с махинациями в GUI sql-navigator :), а потом доварачивал запросы как мне нужно.
26 сен 06, 00:03    [3182387]     Ответить | Цитировать Сообщить модератору
 Re: поиск своих ошибок у других  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18351
dmidek
И еще неплохо бы посмотреть в сторону усиления организационных
взаимоотношений в коллективе. Описанная картина ИМХО несколько
хаотична.

Вообще это единственная здравая мысль во всем топике :)
Отслеживание зависимостей тут бессильно.
Правила изменения "контрактов" (деклараций и правил использования) методов регламентируются таким смешным документом, как стандарты разработки.
Эти правила очень просты но чрезвычайно эффективны, проверка из исполнения легко формализуется и возлагается на систему управления версиями.
К сожалению, опубликовать конкретные положения не могу, технология производства у нас под грифом КТ.
Но при определенном умонастроении додуматься труда не составит.
Или, не исключено, кто-то может себе позволить опубликовать пример таких правил.
Основная идея - не допустить развала зависимых пакетов при любых допустимых стандартом модификациях спецификаций.
26 сен 06, 00:04    [3182388]     Ответить | Цитировать Сообщить модератору
 Re: поиск своих ошибок у других  [new]
Bely
Member

Откуда: Москва
Сообщений: 1903
Гость 25092006
например, изменил ты спецификацию внешнего метода добавил обязательный параметр, и думал, что его пользуешь только ты в своих пакетах, а оказывается, Петя Иванов, как-то в 1999 году увидел этот очень полезный метод и давно его пользует. Понятно что после этих изменений Петя обидется.
Все эти вопросы - они слабо автоматизируются.
Из автоматизации применимо разве что - контроль версий, тестирование продукта.
Все остальное - административные меры, правила, спецификации, документирование.

Что касается пакетов и процедур.
Если изменения несущественные, косметические (а не тотальная переделка), то почти всегда можно добавить и расширить функцию, не изменяя ее предыдущего поведения.
Для этого добавляется нужное количество параметров, которые по DEFAULT устанавливаешь в "старое" поведение, а сам используешь так как тебе надо.

Вот, например, есть функция, которая выдает ФИО пользователя.
function GetUserName(I_n_user_id IN NUMBER) return VARCHAR2;
Понадобилось выдавать не только имя-фамилию, а еще в скобках e-mail.
Чтобы не писать отдельную функцию, можно добавить параметр, который указывает что именно выдавать.
function GetUserName(I_n_user_id IN NUMBER, I_str_par IN VARCHAR2 default 'FULL_NAME' ) return VARCHAR2;
-- А вызывать теперь можно так --
str := GetUserName(10); -- Работаем по старому
str := GetUserName(10, 'NAME_WITH_EMAIL');  -- Новая функциональность
Такой незатейливый подход спасет не только от нелюбви Васи, но и от долгого корпения вечерами над разваливающимся на глазах кодом.
26 сен 06, 11:33    [3183736]     Ответить | Цитировать Сообщить модератору
 Re: поиск своих ошибок у других  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
И.А.Крылов "Огородник и Философ"
Весной в своих грядах так рылся Огородник,
Как будто бы хотел он вырыть клад:
Мужик ретивый был работник,
И дюж и свеж на взгляд;
Под огурцы одни он взрыл с полсотни гряд.
Двор обо двор с ним жил охотник
До огородов и садов,
Великий краснобай, названный друг природы,
Недоученный Философ,
Который лишь из книг болтал про огороды.
Однако ж за своим он вздумал сам ходить
И тоже огурцы садить;
А между тем смеялся так соседу:
«Сосед, как хочешь ты потей,
А я с работою моей
Далеко от тебя уеду,
И огород твой при моем
Казаться будет пустырем.
Да, правду говорить, я и тому дивился,
Что огородишко твой кое-как идет.
Как ты еще не разорился?
Ты, чай, ведь никаким наукам не учился?» —
«И некогда, — соседа был ответ. —
Прилежность, навык, руки:
Вот все мои тут и науки;
Мне бог и с ними хлеб дает»
. —
«Невежа! восставать против наук ты смеешь?» —
«Нет, барин, не толкуй моих так криво слов:
Коль ты что путное затеешь,
Я перенять всегда готов». —
«А вот, увидишь ты, лишь лета б нам дождаться...» —
«Но, барин, не пора ль за дело приниматься?
Уж я кой-что посеял, посадил;
А ты и гряд еще не взрыл». —
«Да, я не взрыл, за недосугом;
Я всё читал
И вычитал,
Чем лучше: заступом их взрыть, сохой иль плугом.
Но время еще не уйдет». —
«Как вас, а нас оно не очень ждет», —
Последний отвечал и тут же с ним расстался,
Взяв заступ свой;
А ФилосОф пошел домой.
Читал, выписывал, справлялся
И в книгах рылся и в грядах, —
С утра до вечера в трудах.
Едва с одной работой сладит,
Чуть на грядах лишь что взойдет,
В журналах новость он найдет —
Все перероет, пересадит

На новый лад и образец.
Какой же вылился конец?
У Огородника взошло все и поспело:
Он с прибылью, и в шляпе дело;
А ФилосОф —
Без огурцов.
26 сен 06, 12:05    [3183933]     Ответить | Цитировать Сообщить модератору
 Re: поиск своих ошибок у других  [new]
contr
Member

Откуда:
Сообщений: 1909
Bely
Такой незатейливый подход спасет не только от нелюбви Васи, но и от долгого корпения вечерами над разваливающимся на глазах кодом.

Это первое приближение, но на практике - недостаточное.
1) это не работает с oracle forms без перекомпиляции таковых.
2) этого не всегда достаточно для развития функционала
Существует способ решить и эти проблемы, но немного менее элегантный.
26 сен 06, 12:47    [3184267]     Ответить | Цитировать Сообщить модератору
 Re: поиск своих ошибок у других  [new]
mcureenab
Member

Откуда: Murmansk
Сообщений: 5928
orawish
И.А.Крылов "Огородник и Философ"


Это ты про рефакторинг, что ли?
26 сен 06, 12:54    [3184317]     Ответить | Цитировать Сообщить модератору
 Re: поиск своих ошибок у других  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
mcureenab
orawish
И.А.Крылов "Огородник и Философ"


Это ты про рефакторинг, что ли?
Ну, не я, а дедушка Крылов.
А вообще, весь рефакторинг вытекает из привычки затыкать (новые)
проблемы (типа) пальцем, вместо чтобы нормально решать..
26 сен 06, 13:27    [3184599]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить