Миграция из Oracle в Базу данных Azure для PostgreSQL

ОБЛАСТЬ ПРИМЕНЕНИЯ: База данных Azure для PostgreSQL — отдельный сервер База данных Azure для PostgreSQL — гибкий сервер

Это руководство призвано помочь вам осуществить миграцию схемы Oracle в Базу данных Azure для PostgreSQL.

Подробные и исчерпывающие инструкции по миграции см. в материалах руководства по миграции.

Предварительные требования

Для переноса схемы Oracle в Базу данных Azure для PostgreSQL необходимо:

  • убедиться в том, что исходная среда поддерживается;
  • скачать последнюю версию ora2pg;
  • иметь в наличии последнюю версию модуля DBD.

Обзор

PostgreSQL — одна из самых продвинутых баз данных с открытым исходным кодом в мире. В этой статье описывается, как использовать бесплатный инструмент ora2pg для переноса базы данных Oracle в PostgreSQL. Ora2pg можно использовать для переноса базы данных Oracle или базы данных MySQL в схему, совместимую с PostgreSQL.

Инструмент ora2pg подключает базу данных Oracle, автоматически сканирует ее и извлекает ее структуру или данные. Затем ora2pg создает скрипты SQL, которые можно загрузить в базу данных PostgreSQL. Ora2pg можно использовать для таких задач, как реконструирование базы данных Oracle, перенос огромной базы данных предприятия или просто репликация некоторых данных Oracle в базу данных PostgreSQL. Этот инструмент прост в использовании и не требует обладания знаниями о базах данных Oracle, кроме способности указать параметры, необходимые для подключения к базе данных Oracle.

Примечание

Дополнительные сведения об использовании последней версии ora2pg см. в документации по ora2pg.

Типичная архитектура миграции ora2pg

Снимок экрана с архитектурой миграции ora2pg.

После подготовки виртуальной машины и Базы данных Azure для PostgreSQL, понадобятся две конфигурации для обеспечения подключения между ними: Разрешить доступ к службам Azure и Принудительно использовать SSL-соединение.

  • Колонка Безопасность подключения > >Разрешить доступ к службам Azure>ВКЛ

  • Колонка Безопасность подключения > >Параметры SSL>Принудительно использовать SSL-соединение>ОТКЛЮЧЕНО

Рекомендации

  • Чтобы повысить производительность операций оценки или экспорта на сервере Oracle, выполните сбор статистики:

    BEGIN
    
       DBMS_STATS.GATHER_SCHEMA_STATS
       DBMS_STATS.GATHER_DATABASE_STATS
       DBMS_STATS.GATHER_DICTIONARY_STATS
       END;
    
  • Экспортируйте данные с помощью команды COPY вместо INSERT.

  • Избегайте экспорта таблиц с внешними ключами (FK), ограничениями и индексами. Эти элементы замедляют процесс импорта данных в PostgreSQL.

  • Создайте материализованные представления с помощью предложения без данных. Затем обновите представления.

  • По возможности используйте уникальные индексы в материализованных представлениях. Эти индексы могут ускорить обновление при использовании синтаксиса REFRESH MATERIALIZED VIEW CONCURRENTLY.

Подготовка к миграции

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

  1. Обнаружить: проведите инвентаризацию баз данных, которые необходимо перенести.
  2. Оценить: оцените эти базы данных, чтобы избежать потенциальных ошибок миграции или проблем, препятствующих переносу.
  3. Преобразовать: устраните все обнаруженные проблемы.

Для неоднородных миграций, таких как из Oracle в Базу данных Azure для PostgreSQL, на этом этапе также предполагается, что схемы баз данных-источников совместимы с целевой средой.

Обнаружить

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

Скрипты предварительной оценки Майкрософт для Oracle выполняются в базе данных Oracle. Скрипты предварительной оценки запрашивают метаданные Oracle. Скрипты предоставляют следующее:

  • Данные инвентаризации базы данных, включая количество объектов по схеме, типу и состоянию.
  • Приблизительная оценка необработанных данных в каждой схеме на основе статистики.
  • Размер таблиц в каждой схеме.
  • Количество строк кода для каждого пакета, функции, процедуры и т. д.

Скачайте связанные сценарии из GitHub.

Оценка

После проведения инвентаризации баз данных Oracle вы получите представление о их размере и возможных проблемах. Следующим этапом будет выполнение оценки.

Оценить затраты на миграцию из Oracle в PostgreSQL непросто. Чтобы оценить затраты на миграцию, ora2pg проверяет все объекты базы данных, функции и хранимые процедуры для объектов, а также код PL/SQL, который не может быть преобразован автоматически.

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

Чтобы активировать режим анализа и создания отчета, используйте экспортированный тип SHOW_REPORT, как показано в следующей команде:

ora2pg -t SHOW_REPORT

Средство ora2pg может преобразовать код SQL и PL/SQL из синтаксиса Oracle в PostgreSQL. Итак, после анализа базы данных ora2pg может оценить проблемы с кодом и время, необходимое для миграции всей базы данных.

Чтобы оценить затраты на миграцию в человеко-днях, ora2pg позволяет использовать директиву конфигурации с именем ESTIMATE_COST. Эту директиву также можно включить в командной строке:

ora2pg -t SHOW_REPORT --estimate_cost

Единица миграции по умолчанию составляет около пяти минут для эксперта PostgreSQL. Если перенос выполняется впервые, можно увеличить единицу миграции по умолчанию с помощью директивы конфигурации COST_UNIT_VALUE или параметра командной строки --cost_unit_value.

В последней строке отчета отображается общий предполагаемый код миграции в человеко-днях. Оценка учитывает количество расчетных единиц миграции для каждого объекта.

В следующем примере кода показаны некоторые варианты оценки:

  • Оценка таблиц
  • Оценка столбцов
  • Оценка схемы, использующая единицу затрат по умолчанию, равную 5 минутам
  • Оценка схемы, использующая единицу затрат, равную 10 минутам
ora2pg -t SHOW_TABLE -c c:\ora2pg\ora2pg_hr.conf > c:\ts303\hr_migration\reports\tables.txt 
ora2pg -t SHOW_COLUMN -c c:\ora2pg\ora2pg_hr.conf > c:\ts303\hr_migration\reports\columns.txt
ora2pg -t SHOW_REPORT -c c:\ora2pg\ora2pg_hr.conf --dump_as_html --estimate_cost > c:\ts303\hr_migration\reports\report.html
ora2pg -t SHOW_REPORT -c c:\ora2pg\ora2pg_hr.conf –-cost_unit_value 10 --dump_as_html --estimate_cost > c:\ts303\hr_migration\reports\report2.html

Ниже приведены выходные данные уровня миграции B-5 по оценке схемы.

  • Уровни миграции:

    • A — миграция, которую можно выполнить автоматически

    • B — миграция с переписыванием кода и затратами в человеко-днях до 5 дней

    • C — миграция с переписыванием кода и затратами в человеко-днях больше 5 дней

  • Технические уровни:

    • 1 = Тривиальный: нет хранимых функций и триггеров

    • 2 = Простой: нет хранимых функций, за исключением триггеров; без перезаписи вручную

    • 3 = Обычный: есть хранимые функции и (или) триггеры; без перезаписи вручную

    • 4 = Ручной: нет хранимых функций, но есть триггеры или представления с перезаписью кода

    • 5 = Сложный: есть хранимые функции и (или) триггеры с перезаписью кода

Оценка включает в себя следующее:

  • Буква (A или B), указывающая, нуждается ли миграция в ручной перезаписи.

  • Число от 1 до 5, указывающее на техническую сложность.

Другой параметр, -human_days_limit, указывает ограничение в человеко-днях. Здесь задайте уровень миграции C, чтобы указать, что для миграции требуется большой объем работы, полное управление проектом и поддержка миграции. По умолчанию — 10 человеко-дней. Можно использовать директиву конфигурации HUMAN_DAYS_LIMIT для постоянного изменения значения по умолчанию.

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

Convert

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

На этом этапе миграции код Oracle и скрипты DDL конвертируются или преобразуются в PostgreSQL. Инструмент ora2pg автоматически экспортирует объекты Oracle в формате PostgreSQL. Некоторые созданные объекты не могут быть скомпилированы в базе данных PostgreSQL без внесения изменений вручную.

Чтобы понять, какие элементы требуют вмешательства вручную, сначала скомпилируйте файлы, созданные ora2pg, в базе данных PostgreSQL. Проверьте журнал и внесите необходимые изменения, чтобы обеспечить совместимость структуры схемы с синтаксисом PostgreSQL.

Создание шаблона миграции

Мы рекомендуем использовать шаблон миграции, предоставляемый ora2pg. При использовании параметров --project_base и --init_project ora2pg создает шаблон проекта с деревом работ, файлом конфигурации и скриптом для экспорта всех объектов из базы данных Oracle. Дополнительные сведения см. в документации по ora2pg.

Используйте следующую команду:

ora2pg --project_base /app/migration/ --init_project test_project

Ниже приведен пример выходных данных:

ora2pg --project_base /app/migration/ --init_project test_project
        Creating project test_project.
        /app/migration/test_project/
                schema/
                        dblinks/
                        directories/
                        functions/
                        grants/
                        mviews/
                        packages/
                        partitions/
                        procedures/
                        sequences/
                        synonyms/
                        tables/
                        tablespaces/
                        triggers/
                        types/
                        views/
                sources/
                        functions/
                        mviews/
                        packages/
                        partitions/
                        procedures/
                        triggers/
                        types/
                        views/
                data/
                config/
                reports/

        Generating generic configuration file
        Creating script export_schema.sh to automate all exports.
        Creating script import_all.sh to automate all imports.

Каталог sources/ содержит код Oracle. Каталог schema/ содержит код, перенесенный в PostgreSQL. Каталог reports/ содержит отчеты в формате HTML и оценку затрат на миграцию.

После создания структуры проекта создается универсальный файл конфигурации. Определите подключение к базе данных Oracle и соответствующие параметры конфигурации в файле конфигурации. Дополнительные сведения о файле конфигурации см. в документации по ora2pg.

Экспорт объектов Oracle

Затем экспортируйте объекты Oracle как объекты PostgreSQL, запустив файл export_schema.sh.

cd /app/migration/mig_project
./export_schema.sh

Запустите следующую команду вручную.

SET namespace="/app/migration/mig_project"

ora2pg -p -t DBLINK -o dblink.sql -b %namespace%/schema/dblinks -c %namespace%/config/ora2pg.conf
ora2pg -p -t DIRECTORY -o directory.sql -b %namespace%/schema/directories -c %namespace%/config/ora2pg.conf
ora2pg -p -t FUNCTION -o functions2.sql -b %namespace%/schema/functions -c %namespace%/config/ora2pg.conf 
ora2pg -p -t GRANT -o grants.sql -b %namespace%/schema/grants -c %namespace%/config/ora2pg.conf 
ora2pg -p -t MVIEW -o mview.sql -b %namespace%/schema/mviews -c %namespace%/config/ora2pg.conf
ora2pg -p -t PACKAGE -o packages.sql -b %namespace%/schema/packages -c %namespace%/config/ora2pg.conf
ora2pg -p -t PARTITION -o partitions.sql -b %namespace%/schema/partitions -c %namespace%/config/ora2pg.conf
ora2pg -p -t PROCEDURE -o procs.sql -b %namespace%/schema/procedures -c %namespace%/config/ora2pg.conf
ora2pg -p -t SEQUENCE -o sequences.sql -b %namespace%/schema/sequences -c %namespace%/config/ora2pg.conf
ora2pg -p -t SYNONYM -o synonym.sql -b %namespace%/schema/synonyms -c %namespace%/config/ora2pg.conf
ora2pg -p -t TABLE -o table.sql -b %namespace%/schema/tables -c %namespace%/config/ora2pg.conf 
ora2pg -p -t TABLESPACE -o tablespaces.sql -b %namespace%/schema/tablespaces -c %namespace%/config/ora2pg.conf
ora2pg -p -t TRIGGER -o triggers.sql -b %namespace%/schema/triggers -c %namespace%/config/ora2pg.conf 
ora2pg -p -t TYPE -o types.sql -b %namespace%/schema/types -c %namespace%/config/ora2pg.conf 
ora2pg -p -t VIEW -o views.sql -b %namespace%/schema/views -c %namespace%/config/ora2pg.conf

Извлеките данные, используя следующую команду.

ora2pg -t COPY -o data.sql -b %namespace%/data -c %namespace/config/ora2pg.conf

Компиляция файлов

Наконец, скомпилируйте все файлы на сервере базы данных Azure для PostgreSQL. Можно выбрать загрузку созданных вручную файлов DDL или использовать второй скрипт import_all.sh для интерактивного импорта этих файлов.

psql -f %namespace%\schema\sequences\sequence.sql -h server1-server.postgres.database.azure.com -p 5432 -U username@server1-server -d database -L %namespace%\ schema\sequences\create_sequences.log

psql -f %namespace%\schema\tables\table.sql -h server1-server.postgres.database.azure.com -p 5432 -U username@server1-server -d database -L %namespace%\schema\tables\create_table.log

Ниже приведена команда импорта данных.

psql -f %namespace%\data\table1.sql -h server1-server.postgres.database.azure.com -p 5432 -U username@server1-server -d database -l %namespace%\data\table1.log

psql -f %namespace%\data\table2.sql -h server1-server.postgres.database.azure.com -p 5432 -U username@server1-server -d database -l %namespace%\data\table2.log

Во время компиляции файлов проверяйте журналы и исправляйте синтаксис, который ora2pg не смог преобразовать самостоятельно.

Дополнительные сведения см. в статье Решения по миграции из Oracle в Базу данных Azure для PostgreSQL.

Миграция

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

Миграция схемы и данных

После внесения необходимых исправлений стабильная сборка базы данных будет готова к развертыванию. Выполните команды импорта psql, указывающие на файлы с измененным кодом. Эта задача компилирует объекты базы данных в базу данных PostgreSQL и импортирует данные.

На этом этапе можно реализовать уровень параллелизма при импорте данных.

Синхронизация данных и переход

При миграции в оперативном режиме (с минимальным временем простоя) источник миграции продолжает изменяться. Он отклоняется от целевого объекта с точки зрения данных и схемы после однократной миграции.

На этапе синхронизации данных убедитесь, что все изменения в источнике фиксируются и применяются к целевому объекту практически в реальном времени. Убедившись, что все изменения применены, можно выполнить переход из источника в целевую среду.

Чтобы выполнить оперативную миграцию, обратитесь за помощью по адресу AskAzureDBforPostgreSQL@service.microsoft.com.

При разностной или поэтапной миграции, использующей ora2pg, для каждой таблицы применяется запрос, который фильтрует (вырезает) по дате, времени или другому параметру. Затем завершите миграцию, используя второй запрос, который переносит оставшиеся данные.

В таблице исходных данных сначала перенесите все исторические данные. Ниже приведен пример:

select * from table1 where filter_data < 01/01/2019

Вы можете запросить изменения с момента первоначальной миграции, выполнив следующую команду:

select * from table1 where filter_data >= 01/01/2019

В этом случае рекомендуется повысить уровень проверки, сверяя четность данных с обеих сторон — в источнике и целевом объекте.

После миграции

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

Исправление приложений

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

Тест

После переноса данных в целевой объект запустите тесты для баз данных, чтобы убедиться в правильной работе этих приложений с целевым объектом. Убедитесь, что исходный и целевой объекты были перенесены надлежащим образом, запустив ручные скрипты проверки данных в исходной базе данных Oracle и целевой базе данных PostgreSQL.

Если исходная и целевая базы данных имеют сетевой путь, для проверки данных предпочтительно использовать ora2pg. С помощью действия TEST можно убедиться, что все объекты базы данных Oracle были созданы в PostgreSQL.

Выполните следующую команду:

ora2pg -t TEST -c config/ora2pg.conf > migration_diff.txt

Оптимизация

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

Ресурсы, посвященные миграции

Дополнительные сведения об этом сценарии миграции можно получить в приведенных ниже ресурсах. Они содержат вспомогательные материалы по реализации реальных проектов миграции.

Ресурс Описание
Руководство по миграции из Oracle в Базу данных Azure для PostgreSQL Этот документ поможет архитекторам, консультантам, администраторам баз данных и связанным ролям быстро переносить рабочие нагрузки из Oracle в Базу данных Azure для PostgreSQL с помощью ora2pg.
Решения по миграции из Oracle в Базу данных Azure для PostgreSQL Этот документ поможет архитекторам, консультантам, администраторам баз данных и связанным ролям быстро устранять или обходить проблемы при переносите рабочих нагрузок из Oracle в Базу данных Azure для PostgreSQL.
Инструкции по установке ora2pg в Windows или Linux Этот документ содержит краткое руководство по установке для миграции схемы и данных из Oracle в Базу данных Azure для PostgreSQL с помощью ora2pg в Windows или Linux. Дополнительные сведения см. в документации по ora2pg.

Эти ресурсы разработали специалисты по разработке данных SQL. Основная задача этой команды — включить и ускорить комплексную модернизацию проектов миграции платформы данных на платформу данных Microsoft Azure.

Дополнительная поддержка

Чтобы получить справку по миграции, не связанную с инструментарием ora2pg, отправьте письмо по следующему адресу: @Ask Azure DB for PostgreSQL.

Дальнейшие действия

Матрица служб и инструментов для миграции баз данных и данных, а также для специализированных задач приведена в статье Службы и инструменты для миграции данных.

Документация.