Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
19.08.2019, 20:54
|
|||
---|---|---|---|
|
|||
Можно ли получить sql-diff старого и нового состояния БД на уровне данных? |
|||
#18+
Структура не меняется, только данные. Есть некоторое исходное состяние. И около тысячи тестовых сценариев, для каждого нужна слегка видоизмененная от исходной база (сотня-другая insert, update, delete). Есть программа, которая генерирует эти изменения, только ее нужно дебажить, останавливать в нужном месте. Раньше думали, останавливать и снимать полный дамп базы. Но он весит около 50 Mb, и у начальства возникло опасение, что 1000 * 50Mb размер пакета клиентам не понравится. // Мне вообще кажется, что идея бредовая и без полных дампов не обойтись, там по крайней мере все просто - expdp, impdp. Пытался протрэйсить запросы с помощью V$SQL, sql-trace и аудита. Но везде вылезают в некоторых запросах биндинги - переменные, что делает запросы бесполезными в плане diff-sql. Смотрю в сторону Liquibase, но он вроде только изменения структуры отслеживает. Последняя идея - отслеживать, какие таблицы поменялись, и сохранять/заменять только их, предварительно сделав им drop или truncate. Внешних ключей вроде почти нет, но в случае чего придется их все удалять, а после заменения таблиц восстанавливать. Или делать для каждой таблицы select minus select, но это ж ручной работы сколько. Вот, какие будут идеи? Аргументы, почему так делать не надо либо задача сложнее чем кажется, интересны тоже :) ... |
|||
:
Нравится:
Не нравится:
|
|||
|
20.08.2019, 00:00
|
|||
---|---|---|---|
Можно ли получить sql-diff старого и нового состояния БД на уровне данных? |
|||
#18+
Diginom Есть программа, которая генерируетСия последовательность символов есть результат работы этого бессмыслицегенератора? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
20.08.2019, 06:30
|
|||
---|---|---|---|
Можно ли получить sql-diff старого и нового состояния БД на уровне данных? |
|||
#18+
Для хитрой задачи простых инструментов нет. Diginomдля каждой таблицы select minus select, но это ж ручной работы сколько. Автоматизация делается по словарю на коленке. Если задача в том, чтобы отследить действия закрытого приложения в БД (насколько понял ваши многабукв), есть еще аудит. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
20.08.2019, 08:29
|
|||
---|---|---|---|
|
|||
Можно ли получить sql-diff старого и нового состояния БД на уровне данных? |
|||
#18+
dmdmdmЕсли задача в том, чтобы отследить действия закрытого приложения в БД (насколько понял ваши многабукв), есть еще аудит. Не просто отследить, но записать их в sql-файл diff.sql, чтобы потом их воспроизвести снова с помощью imp ... diff.sql Аудит и трэйс возвращают, к сожалению, биндинги, типа insert ... values (:p1). :p1 - это как я понимаю ранее выуженная селектом переменная. То есть весь запрос в результате непригоден для воспроизведения, так как неоткуда взять значение :p1 Есть Oracle streams, но они вроде для прямой трансляции изменений в другую базу, а не в sql-файл. Есть еще change data capture (CDC)... Но видимо задача действительно нетривиальная, постараюсь спихнуть в отдел баз данных, что с меня программиста взять. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
20.08.2019, 08:52
|
|||
---|---|---|---|
Можно ли получить sql-diff старого и нового состояния БД на уровне данных? |
|||
#18+
DiginomНе просто отследить, но записать их в sql-файл diff.sql, чтобы потом их воспроизвести снова с помощью imp ... diff.sql Непонятна конечная цель этого геморроя. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
20.08.2019, 09:00
|
|||
---|---|---|---|
|
|||
Можно ли получить sql-diff старого и нового состояния БД на уровне данных? |
|||
#18+
DiginomЕсть программа, которая генерирует эти изменения, только ее нужно дебажить, останавливать в нужном месте.Хм... А что, сценарии просто нельзя сгенерить и записать в файл/ы ? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
20.08.2019, 10:11
|
|||
---|---|---|---|
Можно ли получить sql-diff старого и нового состояния БД на уровне данных? |
|||
#18+
Allround PL/SQL Developer. Tools /compare table data. Раньше не пользовался, т.к. задачи такой не возникало. Требует наличия PK. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
20.08.2019, 10:21
|
|||
---|---|---|---|
|
|||
Можно ли получить sql-diff старого и нового состояния БД на уровне данных? |
|||
#18+
DiginomdmdmdmЕсли задача в том, чтобы отследить действия закрытого приложения в БД (насколько понял ваши многабукв), есть еще аудит. Не просто отследить, но записать их в sql-файл diff.sql, чтобы потом их воспроизвести снова с помощью imp ... diff.sql Аудит и трэйс возвращают, к сожалению, биндинги, типа insert ... values (:p1). :p1 - это как я понимаю ранее выуженная селектом переменная. То есть весь запрос в результате непригоден для воспроизведения, так как неоткуда взять значение :p1 Есть Oracle streams, но они вроде для прямой трансляции изменений в другую базу, а не в sql-файл. Есть еще change data capture (CDC)... Но видимо задача действительно нетривиальная, постараюсь спихнуть в отдел баз данных, что с меня программиста взять. Конечная цель манипуляций какой? патч для наката на продуктив все что наплодили "разработчики"? Если да, то это решается другими средствами, например таким: 1) разрабатываются регламенты для оформления всех разработок в виде патча. 2) раз в неделю, база разработки сносится, и накатываются патчи, в которых разработчики должны сохранять свои наработки. нет патча, нет работы, с соответствующей проктологической процедурой. Сначала будет много вони, но постепенно привыкнут оформлять свой поток создания в виде документов и патчей. В результате резко повысится качество разработки и ее управляемость. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
20.08.2019, 11:48
|
|||
---|---|---|---|
Можно ли получить sql-diff старого и нового состояния БД на уровне данных? |
|||
#18+
Diginom, авторНо он весит около 50 Mb, и у начальства возникло опасение, что 1000 * 50Mb размер пакета клиентам не понравится. Вам в сторону виртуализации баз данных, см. delphix как пример. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
20.08.2019, 12:23
|
|||
---|---|---|---|
|
|||
Можно ли получить sql-diff старого и нового состояния БД на уровне данных? |
|||
#18+
DiginomЕсть некоторое исходное состяние. И около тысячи тестовых сценариев, для каждого нужна слегка видоизмененная от исходной база (сотня-другая insert, update, delete). Не вполне понятно какую именно задачу пытаетесь решить, но если речь о тестировании - то посмотрите на https://www.oracle.com/technetwork/database/options/real-application-testing-option-2355173.html Кроме того, возможно, в рамках организации тестирования Вас заинтересует pdb snapshot copy ... |
|||
:
Нравится:
Не нравится:
|
|||
|
20.08.2019, 21:21
|
|||
---|---|---|---|
|
|||
Можно ли получить sql-diff старого и нового состояния БД на уровне данных? |
|||
#18+
Спасибо всем за ответы. Мне даже неловко, все сомневаются в серьезности этого мероприятия. Цель - тесты. Есть около 1000 тестовых сценариев. На исходной тестовой базе (для которой есть дамп initial.sql, то есть ее можно приводить в исходное состояние снова и снова) перед каждым тестом выполняются подготовительные sql-запросы, несколько сотен. Только после этого можно начинать тест. Эти запросы выполняются сейчас скриптами на Perl, от которых решено избавиться и в которые никто вникать не хочет. В принципе можно сохранить для каждого из 1000 тестов его начальный дамп, и вместо выполнения скриптов загружать эти дампы. То есть если раньше было 1. загрузить initial.sql 2. запустить перл-скрипт для подготовки теста 1 3. выполнить тест 1 4. загрузить initial.sql 5. запустить перл-скрипт для подготовки теста 2 6. выполнить тест 2 и т.д. то сейчас будет 1. загрузить dump1.sql (заготовленный начальный дамп для теста 1) 2. выполнить тест 1 3. загрузить dump2.sql (заготовленный начальный дамп для теста 2) 4. выполнить тест 2 и т.д. Но тогда размер данных увеличивается примерно в 1000 раз (размер initial.sql * 1000). И это типа плохо из-за размера, клиенты скажут, у нас были раньше один дамп на 50 мб и сотня килобайт скриптов, а теперь что? Поэтому идея для каждого теста построить дифф к initial.sql, эти диффы будут очень небольшими по сравнению с initial.sql Тогда получится 1. загрузить initial.sql 2. загрузить diff1.sql 3. выполнить тест 1 4. загрузить initial.sql 5. загрузить diff2.sql 6. выполнить тест 2 и т.д. Структура нигде не меняется, только данные. Перед каждой загрузкой initial.sql вся схема удаляется, создается новый пустой юзер, все с нуля начинается. Пока я нашел, что в аудите в поле sql_text запросы, а в поле sql_bind - bind variables к каждому запросу. В принципе, можно распарсить и реконструировать полный текст каждого запроса. Я конфронтировал начальство с необходимостью писать для этого дополнительную программу. Как-то так: https://discuss.elastic.co/t/parsing-field-sql-bind-into-sql-text/97447 Начальство будет думать, может еще передумают. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
21.08.2019, 08:42
|
|||
---|---|---|---|
Можно ли получить sql-diff старого и нового состояния БД на уровне данных? |
|||
#18+
По современным меркам 50 МБ и 50 ГБ одинаково "ни о чем". Это 1000 наборов данных для тестов можно хранить в одной БД, которую развернуть так же просто, как данные одной схемы. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=52&mobile=1&tid=1882171]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 161ms |
0 / 0 |