|
DatabaseComparer даёт разные результаты сравнения
|
|||
---|---|---|---|
#18+
IBE 2016.5.28.1. Есть некая целевая база. Иногда удобнее сравнивать при ручном апгрейде эталонные метаданные (скрипт) с целевой базой, а иногда саму эталонную базу с этой целевой базой. DatabaseComparer даёт разные результаты при сравнении скрипта с базой и базы с базой, и что самое напряжное - ошибочно генерирует некоторые DDL-операторы при сравнении скрипта с базой: Код: plsql 1. 2. 3.
- где тип?! Комментарий, запятая... Причём ряд параметров нормально представлен, ряд - нет. Александр, я воспроизводимый пример подготовил. Ссылку в почту готов отправить. -- "И это пройдет" ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2016, 12:05 |
|
DatabaseComparer даёт разные результаты сравнения
|
|||
---|---|---|---|
#18+
Присылай. Но, вообще, сравнивать базу со скриптом - заведомо плохая идея. Ибо в этом случае ты сравниваешь базу с представлением о ней эксперта. Которое на практике всяко будет отличаться от представления сервера. Хотя вот таких косяков быть не должно, конечно. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2016, 05:02 |
|
DatabaseComparer даёт разные результаты сравнения
|
|||
---|---|---|---|
#18+
У нас именно сравнение скрипта эталонных метаданных с реальной базой через ibescript.dll и является самым используемым методом апгрейда баз данных пользователей при установке обновлений ПО. У нас эталонная база весит под 20Мб. А скрипт - всего пара мегабайт текста. Два метра-то вынуть с ftp ноют с ADSL-коннектами в районах... Так что готов тестовые скрипты и базы предоставить. Проявилось это после объявленной кардинальной переделки компарера. Заметил с полгода назад. На версиях IBE 2012-2013 годов таких ошибок в разностном скрипте не появляется. А также по причине того, что я использую ibescript.dll "2013 года выпуска", роботам моим этот появившийся глюк в IBE по боку. Не то, чтобы срочно... Просто вручную иногда возникает необходимость поработать и сравнить скрипт с клиентской базой в IBExpert, если робот не справляется по каким-то причинам с подготовкой обновления. Я, конечно, могу откатиться для таких работ на IBExpert ранних версий. Но вроде как раз для того снапшоты и ставлю более-менее свежие, чтобы вылавливать проблемы :) Надо сегодня IBE от июня 2016 таки поставить будет. Давно уж рапортует... :) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2016, 09:06 |
|
DatabaseComparer даёт разные результаты сравнения
|
|||
---|---|---|---|
#18+
Нашёл. Проблема в моем случае возникает при формировании ALTER PROCEDURE таких процедур, у которых есть параметры, которые описаны как TYPE OF COLUMN, а соответствующие поля описаны доменами. В этом случае при отличиях в скрипте-источнике для таких процедур формируется некорректный ALTER PROCEDURE с пустым телом в секции скрипта Altering stored procedures (with empty bodies) как раз в части параметров, тип которых указан как TYPE OF COLUMN - теряется тип из домена поля таблицы. Например, была таблица с полем, описанным доменом и селективная процедура. Извлекли метаданные. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42.
Добавляем поле F2 в таблицу и в выходные параметры процедуры. Модифицируем только эталонный скрипт - не базу. Ну, надо ж нам сэмулировать, что приплыли откуда-то актуальные метаданные, которые нам предстоит накатить на базу. Добавляем в таблицу, в выходные параметры процедуры и в текст процедуры поле F2. Для примера аналогичное полю F1. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37.
И сравнивая модифицированный скрипт с предыдущей базой получаем в разностном скрипте: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33.
Искомая ошибка в ALTER PROCEDURE в секции скрипта Altering stored procedures (with empty bodies) Потеря типа параметра. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2016, 10:05 |
|
|
start [/forum/topic.php?fid=42&fpage=22&tid=1599272]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
26ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 115ms |
0 / 0 |