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

Откуда:
Сообщений: 75
Можно сделать так, чтобы в скрипте на обновление сначала обновлялись заголовки всех пакетов, а только потом их тела?
А то сейчас приходится руками менять порядок
10 сен 18, 17:43    [21670119]     Ответить | Цитировать Сообщить модератору
 Re: Database Comparer: Пакеты  [new]
slay2012
Member

Откуда:
Сообщений: 75
А еще лучше - сначала дропать тело всех измененных пакетов, потом обновлять заголовки и только потом создавать тело

Тут еще один нюанс. Рефакторил один пакет. Функцию переделал на процедуру. От нее зависело два других пакета у которых поменялось только тело и эксперт в скрипт на обновление добавил только пересоздание тела (без заголовка). Так вот - скрипт не смог выполнится ругань на несоответствие сигнатуры в заголовке и теле. (Хотя ни эксперт ни я различий не увидел). Добавил заголовок - скрипт выполнился успешно. После этого убрал заголовки этих двух пакетов и скрипт выполнился успешно. Т.е. похоже на баг сервера.

Может включать обновления заголовка для случая когда меняется только тело?
11 сен 18, 08:15    [21670469]     Ответить | Цитировать Сообщить модератору
 Re: Database Comparer: Пакеты  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 2794
Так это баг сервера? Или не баг сервера? Или что еще?
11 сен 18, 14:49    [21671028]     Ответить | Цитировать Сообщить модератору
 Re: Database Comparer: Пакеты  [new]
slay2012
Member

Откуда:
Сообщений: 75
IBExpert
Так это баг сервера? Или не баг сервера? Или что еще?

Похоже на баг, но не особо воспроизводится...

Проблема в неправильном порядке обновления пакетов.

Как по мне, то порядок должен быть такой:
1. сначала дропать тело всех измененных пакетов
2. потом обновлять заголовки
3. только потом создавать тело

И как опция (по галке, если можно) - включать обновления заголовка для случая когда меняется только тело
12 сен 18, 08:38    [21671720]     Ответить | Цитировать Сообщить модератору
 Re: Database Comparer: Пакеты  [new]
slay2012
Member

Откуда:
Сообщений: 75
И еще - если поменялся только заголовок, то тело надо перекомпилировать иначе оно становится невалидным
12 сен 18, 17:36    [21672544]     Ответить | Цитировать Сообщить модератору
 Re: Database Comparer: Пакеты  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 2794
slay2012
И еще - если поменялся только заголовок, то тело надо перекомпилировать иначе оно становится невалидным


Это сделал.
13 сен 18, 13:08    [21673439]     Ответить | Цитировать Сообщить модератору
 Re: Database Comparer: Пакеты  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 2794
slay2012
Проблема в неправильном порядке обновления пакетов.

Как по мне, то порядок должен быть такой:
1. сначала дропать тело всех измененных пакетов
2. потом обновлять заголовки
3. только потом создавать тело


Мне сие не кажется правильным. Нафига тогда пакеты разделены на заголовок и тело, если на каждый чих их надо практически заново пересоздавать?
13 сен 18, 13:12    [21673442]     Ответить | Цитировать Сообщить модератору
 Re: Database Comparer: Пакеты  [new]
slay2012
Member

Откуда:
Сообщений: 75
IBExpert
slay2012
Проблема в неправильном порядке обновления пакетов.

Как по мне, то порядок должен быть такой:
1. сначала дропать тело всех измененных пакетов
2. потом обновлять заголовки
3. только потом создавать тело


Мне сие не кажется правильным. Нафига тогда пакеты разделены на заголовок и тело, если на каждый чих их надо практически заново пересоздавать?


А как иначе если есть зависимости между пакетами?
Меняется сигнатура или удаляется процедура/функция и все - пока не удалишь тело зависимых пакетов обновить не даст.

спорным (не правильным) тут только это:
slay2012
И как опция (по галке, если можно) - включать обновления заголовка для случая когда меняется только тело

У меня один раз сервер не захотел принимать тело, пока не обновил заголовок (хотя он и не менялся). Ругался на несовпадение сигнатуры процедуры. Скорее всего это баг, но воспроизвести не смог.
13 сен 18, 14:19    [21673591]     Ответить | Цитировать Сообщить модератору
 Re: Database Comparer: Пакеты  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 2794
slay2012
А как иначе если есть зависимости между пакетами?
Меняется сигнатура или удаляется процедура/функция и все - пока не удалишь тело зависимых пакетов обновить не даст.


Про зависимости, заметь, у тебя только вот сейчас всплыло.
Я же по другому поводу недоумевал: зачем, например, дропать тело и обновлять заголовок, если что-то там в теле изменилось?

Короче, мне пока не очень понятно, что там не так с пакетами. Как сейчас компарер их обновляет?
У меня нет тест-кейза с пакетами под рукой, проверить с ходу не могу.
Можешь сделать свой и прислать мне.
13 сен 18, 14:54    [21673671]     Ответить | Цитировать Сообщить модератору
 Re: Database Comparer: Пакеты  [new]
slay2012
Member

Откуда:
Сообщений: 75
IBExpert
Короче, мне пока не очень понятно, что там не так с пакетами. Как сейчас компарер их обновляет?


Сейчас порядок такой:
CREATE OR ALTER PACKAGE PackageA as ....
RECREATE PACKAGE BODY PackageA as ....
CREATE OR ALTER PACKAGE PackageB as ....
RECREATE PACKAGE BODY PackageB as ....
--тут менялось только тело
RECREATE PACKAGE BODY PackageC as ....


Порядок самих пакетов очень похож на алфавитный.

Первая проблема - это если в PackageA используется процедура/функция из пакета PackageB. На момент обновления тела PackageA будет облом.
Сейчас я такое решаю ручным изменением порядка на вот такой:
CREATE OR ALTER PACKAGE PackageA as ....
CREATE OR ALTER PACKAGE PackageB as ....
RECREATE PACKAGE BODY PackageA as ....
RECREATE PACKAGE BODY PackageB as ....
--тут менялось только тело
RECREATE PACKAGE BODY PackageC as ....


Вторая проблема - это если в PackageA или PackageB изменилась сигнатура процедуры или ее удалили, которую использует PackageC.
В этом случае порядок надо вот такой:
DROP PACKAGE BODY PackageC;
CREATE OR ALTER PACKAGE PackageA as ....
CREATE OR ALTER PACKAGE PackageB as ....
RECREATE PACKAGE BODY PackageA as ....
RECREATE PACKAGE BODY PackageB as ....
--тут менялось только тело
RECREATE PACKAGE BODY PackageC as ....


Собственно, чтобы не заморачиватся с определением зависимостей я и предлагаю:
1. дропаем тела всех измененных пакетов (можно пропустить, если нет изменений в заголовках)
2. Обновляем заголовки (если есть)
3. Создаем тело все дропнутых на первом шаге.
13 сен 18, 15:29    [21673759]     Ответить | Цитировать Сообщить модератору
 Re: Database Comparer: Пакеты  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 2794
Попробуй эту версию:
www.ibexpert.com/rus/ibe_sfx_pkg.exe
14 сен 18, 07:48    [21674326]     Ответить | Цитировать Сообщить модератору
 Re: Database Comparer: Пакеты  [new]
slay2012
Member

Откуда:
Сообщений: 75
IBExpert
Попробуй эту версию:
www.ibexpert.com/rus/ibe_sfx_pkg.exe


Теперь ругань на отсутствие into (используется as cursor)

Parsing database object definitions...
==== Error ==== : EduProtocol: Missing: INTO (AS)
Script: Line:317 Pos:8
for select
    ...
from ...
as cursor cur
do ...
14 сен 18, 09:37    [21674374]     Ответить | Цитировать Сообщить модератору
 Re: Database Comparer: Пакеты  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 2794
slay2012
Теперь ругань на отсутствие into (используется as cursor)


У меня не воспроизводится.
Подожду нормального тест-кейза, пожалуй. Надоело самому их придумывать.
14 сен 18, 10:19    [21674420]     Ответить | Цитировать Сообщить модератору
 Re: Database Comparer: Пакеты  [new]
slay2012
Member

Откуда:
Сообщений: 75
Не в ту тему ответил....

По этой теме:

Тело измененного пакета дропается, но вот обновление заголовка надо бы перенести до обновления тела.
Сейчас получился такой порядок:
DROP PACKAGE BODY P1;
DROP PACKAGE BODY P2;
DROP PACKAGE BODY P3;

RECREATE PACKAGE BODY P1 as ...
RECREATE PACKAGE BODY P2 as ...

CREATE OR ALTER PACKAGE P3 as ...
RECREATE PACKAGE BODY P3 as ...


А нужно вот так:
DROP PACKAGE BODY P1;
DROP PACKAGE BODY P2;
DROP PACKAGE BODY P3;

CREATE OR ALTER PACKAGE P3 as ...

RECREATE PACKAGE BODY P1 as ...
RECREATE PACKAGE BODY P2 as ...
RECREATE PACKAGE BODY P3 as ...
14 сен 18, 10:26    [21674429]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Database Comparer: Пакеты  [new]
slay2012
Member

Откуда:
Сообщений: 75
Сегодня опять нарвался на неверный порядок скрипта обновления.
Expert 2019.9.22.1

Получил вот такой порядок:

1. Deactivating dependencies of objects
DROP PACKAGE BODY Pkg1
DROP PACKAGE BODY Pkg2
DROP PACKAGE BODY Pkg3
2. Creating tables (without computed fields)
3. Creating indices
4. Creating foreign key constraints
5. Creating triggers
6. Altering packages
RECREATE PACKAGE BODY Pkg1
CREATE OR ALTER PACKAGE Pkg2
RECREATE PACKAGE BODY Pkg2
CREATE OR ALTER PACKAGE Pkg3
RECREATE PACKAGE BODY Pkg3
7. Updating object comments
8. Revoking excess privileges
9. Granting missing privileges

Первыми обломились триггера - ибо использовали новые процедуры из Pkg2 и Pkg3
Потом обломился RECREATE PACKAGE BODY Pkg1 по той же причине

Собственно порядок должен быть вот такой:

1. Deactivating dependencies of objects
DROP PACKAGE BODY Pkg1
DROP PACKAGE BODY Pkg2
DROP PACKAGE BODY Pkg3
1.1. Тут заглушки для процедур/функций/триггеров у которых есть зависимости от измененных пакетов
2. Creating tables (without computed fields)
3. Creating indices
4. Creating foreign key constraints
4.1. Creating packages/Altering packages
CREATE OR ALTER PACKAGE Pkg2
CREATE OR ALTER PACKAGE Pkg3
5. Creating triggers/procedures/functions
6. Altering packages body
RECREATE PACKAGE BODY Pkg1
RECREATE PACKAGE BODY Pkg2
RECREATE PACKAGE BODY Pkg3
7. Updating object comments
8. Revoking excess privileges
9. Granting missing privileges
26 сен 19, 15:22    [21979971]     Ответить | Цитировать Сообщить модератору
 Re: Database Comparer: Пакеты  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 2794
"Подожду нормального тест-кейза, пожалуй. Надоело самому их придумывать." (c) мой
26 сен 19, 16:01    [21980038]     Ответить | Цитировать Сообщить модератору
 Re: Database Comparer: Пакеты  [new]
slay2012
Member

Откуда:
Сообщений: 75
IBExpert
"Подожду нормального тест-кейза, пожалуй. Надоело самому их придумывать." (c) мой


В каком виде надо?
26 сен 19, 16:13    [21980051]     Ответить | Цитировать Сообщить модератору
 Re: Database Comparer: Пакеты  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 2794
slay2012
В каком виде надо?


Два скрипта или две базы, которые я могу сравнить и воспроизвести проблему.
26 сен 19, 17:16    [21980134]     Ответить | Цитировать Сообщить модератору
 Re: Database Comparer: Пакеты  [new]
slay2012
Member

Откуда:
Сообщений: 75
Завтра сделаю.
Куда слать?
26 сен 19, 17:28    [21980143]     Ответить | Цитировать Сообщить модератору
 Re: Database Comparer: Пакеты  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 2794
slay2012
Куда слать?


На адрес в профиле.
26 сен 19, 17:45    [21980159]     Ответить | Цитировать Сообщить модератору
Все форумы / IBExpert Ответить