Автоматизация миграции динамически формируемых запросов (SECR-2012) — различия между версиями

Материал из 0x1.tv

== Примечания и отзывы ==
<!-- <blockquote>[©]</blockquote> -->

* [http://2012.secr.ru/talks/dynamic-sql-transformation-automatization Страница доклада на сайте конференции]

<references/>




<!-- topub -->
{{stats|disqus_comments=0|refresh_time=2020-07-18T22:15:31.459488|vimeo_comments=0|vimeo_plays=34|youtube_plays=0}}

[[Категория:Базы данных]]
[[Категория:SECR-2012]]
[[Категория:Oracle SQL]]
[[Категория:MS-SQL Server]]

Версия 17:54, 23 июля 2020

Аннотация

Докладчик
Семён Григорьев.jpg
Семён Григорьев

При переносе базы с MS-SQL Server 2005 на Oraclе 11gR2 возникла задача перевода динамического SQL. Исходная система содержала более 3000 динамических запросов в примерно 850 хранимых процедурах. Весь динамический SQL так же должен быть переведён на язык целевой СУБД и преобразован согласовано с основным кодом. Например, должны быть переименованы таблицы.

Для работы с динамически формируемыми строками существуют абстрактный лексический и синтаксический анализы, однако они непосредственно не применимы для задач трансформации, так как не сохраняют привязку к исходному коду. Кроме того, синтаксический анализ не учитывает семантику, которая для трансляции очень важна. Однако, он тоже может быть полезен при миграции: можно уточнить трансляцию, выявив важные для миграции участки (создание временных таблиц, факт присваивания в переменную для уточнения достигающих определений, наличие возвращаемого рекордсета, и пр.).

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

В результате развития идеи абстрактного синтаксического анализа в автоматизированную трансформацию в данном проекте удалось автоматически обработать 50% запросов. Кроме того, удалось провести согласованное переименование временных таблиц и выявить запросы, пораждающие выборки. Последнее позволило автоматически преобразовать их в создание курсора и скорректировать сигнатуры процедур.

Важным аспектом является производительность решения, так как в переводимой системе существовало большое количество динамических запросов со сложной логикой формирования, задействующей десятки и более присваиваний и условных ветвлений. В общем случае алгоритм, непосредственно основанный на абстрактном синтаксическом анализе, требовал экспоненциальные ресурсы. Был предложен и реализован механизм фильтрации результатов синтаксического анализа, который существенно уменьшает количество деревьев для сложных запросов.

Основную сложность вызвало вычисление новых значений для переменных. Во-первых, причиной тому наличие элементов, которые непосредственно не представлены в дереве (запятые, скобки, знаки бинарных операций). Литералы, соответсвующе данным элементам могут являться отдельными переменными при формировании строки динамического запроса. Во-вторых, конструкции, требующие серьёзных структурных преобразовани. Например, при трансляции из T-SQL в PL-SQL это трансляция сложного UPDATE .. SELECT в MERGE. При сильных преобразованиях становится необходимо создавать новые перменные и вычислять их значения согласовано с соответствующими исходными переменными.

В целом можно сказать, что был разработан алгоритм трансформации, позволяющий сэкономить время на ручную миграцию динамического SQL. В докладе будут описаны трудности с которыми авторы столкнулись и описаны опробованные приёмы решения.

Видео







Слайды

Автоматизация миграции динамически формируемых запросов (SECR-2012).pdf Автоматизация миграции динамически формируемых запросов (SECR-2012).pdf Автоматизация миграции динамически формируемых запросов (SECR-2012).pdf Автоматизация миграции динамически формируемых запросов (SECR-2012).pdf Автоматизация миграции динамически формируемых запросов (SECR-2012).pdf Автоматизация миграции динамически формируемых запросов (SECR-2012).pdf Автоматизация миграции динамически формируемых запросов (SECR-2012).pdf Автоматизация миграции динамически формируемых запросов (SECR-2012).pdf Автоматизация миграции динамически формируемых запросов (SECR-2012).pdf Автоматизация миграции динамически формируемых запросов (SECR-2012).pdf Автоматизация миграции динамически формируемых запросов (SECR-2012).pdf Автоматизация миграции динамически формируемых запросов (SECR-2012).pdf Автоматизация миграции динамически формируемых запросов (SECR-2012).pdf Автоматизация миграции динамически формируемых запросов (SECR-2012).pdf

Примечания и отзывы




Plays:34   Comments:0