Postgresql или oracle: СУБД PostgreSQL. Особенности и архитектура Postgres
MySQL и PostgreSQL. Часть 1. Сравнительный анализ
Сергей Яковлев
Опубликовано 27.07.2010
Серия контента:
Этот контент является частью # из серии # статей:
https://www.ibm.com/developerworks/ru/library/?series_title_by=**auto**
Следите за выходом новых статей этой серии.
Этот контент является частью серии:
Следите за выходом новых статей этой серии.
1. История развития MySQL и PostgreSQL
История MySQL начинается в 1979 г., у ее истоков стояла небольшая компания во главе с Monty Widenius. В 1996 г. появился первый релиз 3.11 под солярис с публичной лицензией. Затем MySQL была портирована под другие операционные системы, появилась специальная коммерческая лицензия. В 2000 г., после добавления интерфейса, аналогичного Berkeley DB, база стала транзакционной. Примерно тогда же была добавлена репликация. В 2001 г. в версии 4.0 был добавлен движок InnoDB к уже имеющемуся MyISAM, в результате чего появилось кеширование и возросла производительность. В 2004 г. вышла версия 4.1, в которой появились подзапросы, парциальная индексация для MyISAM, юникод. В версии 5.0 в 2005 г. появились хранимые процедуры, курсоры, триггеры, представления (views). В MySQL развиваются коммерческие тенденции: в 2009 г. MySQL стала торговой маркой компании Oracle.
История постгрес началась в 1977 г. с базы данных Ingress.
В 1986 г. в университете Беркли, Калифорния, она была переименована в PostgreSQL.
В 1995 г. постгрес стала открытой базой данных. Появился интерактивный psql.
В 1996 г. Postgres95 была переименована в PostgreSQL версии 6.0.
У постгреса несколько сотен разработчиков по всему миру.
2. Архитектура MySQL и PostgreSQL
PostgreSQL – унифицированный сервер баз данных, имеющий единый движок – storage engine. Постгрес использует клиент-серверную модель.
Для каждого клиента на сервере создается новый процесс (не поток !). Для работы с такими клиентскими процессами сервер использует семафоры.
Клиентский запрос проходит следующие стадии.
- Коннект.
- Парсинг: проверяется корректность запроса и создается дерево запроса (query tree). В основу парсера положены базовые юниксовые утилиты yacc и lex.
- Rewrite: берется дерево запросов и проверяется наличие в нем правил (rules), которые лежат в системных каталогах. Всякий раз пользовательский запрос переписывается на запрос, получающий доступ к таблицам базы данных.
- Оптимизатор: на каждый запрос создается план запроса – query plan, который передается исполнителю – executor. Смысл плана в том, что в нем перебираются все возможные варианты получения результата (использовать ли индексы, джойны и т.д.), и выбирается самый быстрый вариант.
- Выполнение запроса: исполнитель рекурсивно проходит по дереву и получает результат, используя при этом сортировку, джойны и т.д., и возвращает строки. Постгрес – обьектно-реляционная база данных, каждая таблица в ней представляет класс, между таблицами реализовано наследование. Реализованы стандарты SQL92 и SQL99.
Транзакционная модель построена на основе так называемого multi-version concurrency control (MVCC), что дает максимальную производительность. Ссылочная целостность обеспечена наличием первичных и вторичных ключей.
MySQL имеет два слоя – внешний слой sql и внутренний набор движков, из которых наиболее часто используется движок InnoDb, как наиболее полно поддерживающий ACID.
Реализован стандарт SQL92.
С модульной точки зрения код MySQL можно разделить на следующие модули.
- Инициализация сервера.
- Менеджер коннектов.
- Менеджер потоков.
- Обработчик команд.
- Аутентификация.
- Парсер.
- Кеш.
- Оптимизатор.
- Табличный менеджер.
- Движки (MyISAM, InnoDB, MEMORY, Berkeley DB).
- Логирование.
- Репликация.
- Сетевое API.
- API ядра.
Порядок работы модулей следующий: сначала загружается первый модуль, который читает опции командной строки, конфиг-файлы, выделяет память, инициализирует глобальные структуры, загружает системные таблицы и передает управление менеджеру коннектов.
Когда клиент подсоединяется к базе, управление передается менеджеру потоков, который создает поток (не процесс!) для клиента, и проверяется его аутентификация.
Клиентские запросы в зависимости от их типа на верхнем уровне обрабатываются четвертым модулем (dispatcher). Запросы будут залогированы 11-м модулем. Команда передается парсеру, проверяется кеш. Далее запрос может попасть в оптимизатор, табличный модуль, модуль репликации, и т.д. В результате данные возвращаются клиенту через менеджер потоков.
Наиболее важный код находится в файле sql/mysqld.cc. В нем находятся базовые функции, которые не меняются со времен версии 3.22:
init_common_variables()
init_thread_environment()
init_server_components()
grant_init() // sql/sql_acl.cc
init_slave() // sql/slave.cc
get_options()
handle_connections_sockets()
create_new_thread()
handle_one_connection()
check_connection()
acl_check_host() // sql/sql_acl.cc
create_random_string() // sql/password.cc
check_user() // sql/sql_parse.cc
mysql_parse() // sql/sql_parse.cc
dispatch_command()
Query_cache::store_query() // sql/sql_cache.cc
JOIN::optimize() // sql/sql_select.cc
open_table() // sql/sql_base.cc
mysql_update() // sql/sql_update.cc
mysql_check_table() // sql/sql_table. cc
В хидере sql/sql_class.h определяются базовые классы: Query_arena, Statement, Security_context, Open_tables_state classes, THD. Обьект класса THD представляет собой дескриптор потока и является аргументом большого количества функций.
3. Сравнение MySQL и PostgreSQL: сходство и различия
ACID-стандарт
Стандарт ACID базируется на атомарности, целостности, изоляции и надежности. Эта модель используется для гарантии целостности данных. Реализуется это на основе транзакций. PostgreSQL полностью соответствует стандарту ACID. Для полной поддержки ACID в MySQL в конфиге нужно установить default-storage-engine=innodb.
Производительность (performance)
Базы данных часто оптимизируются в зависимости от окружения, в котором они работают. Обе базы имеют различные технологии для улучшения производительности. Исторически так сложилось, что MySQL начинала разрабатываться с прицелом на скорость, а PostgreSQL с самого начала разрабатывалась как база с большим числом настроек и соответствием стандарту. PostgreSQL имеет ряд настроек, которые повышают скорость доступа:
- парциальные индексы;
- компрессия данных;
- выделение памяти;
- улучшенный кеш.
MySQL имеет частичную поддержку парциальных индексов в InnoDB. Если взять MySQL-ский движок ISAM, он оказывается быстрее на плоских запросах, при этом нет блокировок на инсерты, нет поддержки транзакций, foreign key.
Компрессия
PostgreSQL лучше сжимает и разжимает данные, позволяя сохранить больше данных на дисковом пространстве. При этом компрессионные данные читаются быстрее с диска.
MySQL-компрессия для разных движков частично поддерживается, частично нет, и это зависит от конкретной версии конкретного движка.
SMP
На мульти-процессорности PostgreSQL имеет преимущество над MySQL. Даже сами разработчики MySQL признают, что их движок в этом плане не так хорош.
Типы данных
MySQL: для хранения бинарных данных использует типы TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB, которые отличаются размером (до 4 ГБ).
Character: четыре типа – TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT.
PostgreSQL: поддерживает механизм пользовательских данных с помощью команды CREATE TYPE, тип BOOLEAN, геометрические типы.
Character: TEXT (ограничение – max row size).
Для хранения бинарных данных есть тип BLOB, который хранится в файловой системе. Столбцы таблицы могут быть определены как многомерный массив переменной длины. Обьектно-реляционное расширение: структура таблицы может быть унаследована от другой таблицы.
Хранимые процедуры
И PostgreSQL , и MySQL поддерживают хранимые процедуры. PostgreSQL придерживается стандарта Oracle PL/SQL, MySQL – IBM DB2. MySQL поддерживает extend SQL для написания функций на языке C/C++ с версии 5.1. PostgreSQL: PL/PGSQL, PL/TCL, PL/Perl, SQL, C для написания хранимых процедур.
Ключи
И PostgreSQL , и MySQL поддерживают уникальность Primary Key и Foreign Key. MySQL не поддерживает check constraint плюс вторичные ключи реализованы частично. PostgreSQL: полная реализация плюс поддержка ON DELETE CASCADE и ON UPDATE CASCADE.
Триггеры
MySQL: рудиментарная поддержка. PostgreSQL: декларативные триггеры: SELECT, INSERT, DELETE, UPDATE, INSTEAD OF; процедурные триггеры: CONSTRAINT TRIGGER. События: BEFORE или AFTER на INSERT, DELETE , UPDATE.
Автоинкремент
MySQL: в таблице может быть только один такой столбец, который должен быть проиндексирован. PostgreSQL: SERIAL data type.
Репликации
Поддерживаются и в MySQL, и в PostgreSQL. PostgreSQL имеет модульную архитектуру, и репликация входит в отдельные модули:
Репликация в PostgreSQL основана на триггерах и более медленная, чем в MySQL. В ядро репликацию планируется добавить, начиная с версии 8.4.
В MySQL репликация входит в ядро и имеет две разновидности, начиная с версии 5.1:
- SBR – statement based replication;
- RBR – row based replication.
Первый тип основан на логировании записей в бинарный лог, второй – на логировании изменений. Начиная с версии 5.5, в MySQL поддерживается так называемая полусинхронная репликация, при которой основной сервер (master) делает сброс данных на другой сервер (slave) при каждом коммите. Движок NDB делает полную синхронную двухфазную репликацию.
Транзакции
MySQL: только для для InnoDB. Поддержка SAVEPOINT, ROLLBACK TO SAVEPOINT. Уровни блокировки: table level (MyISAM). PostgreSQL: поддерживается плюс read committed и уровни изоляции. Поддержка ROLLBACK, ROLLBACK TO SAVEPOINT. Уровни блокировки: row level, table level.
Уровни привилегий
PostgreSQL: для пользователя или группы пользователей могут быть назначены привилегии.
Экспорт-импорт данных
MySQL: набор утилит для экспорта: mysqldump, mysqlhotcopy, mysqlsnapshot. Импорт из текстовых файлов, html, dbf. PostgreSQL: экспорт – утилита pg_dump. Импорт между базами данных и файловой системой.
Вложенные запросы
Есть и в MySQL, и в PostgreSQL, но в MySQL могут работать непроизводительно.
Индексация
Хэширование индексов: в MySQL– частичное, в PostgreSQL – полное. Полнотекстовый поиск: в MySQL– частичный, в PostgreSQL – полный. Парциальные индексы: в MySQL не поддерживаются, в PostgreSQL поддерживаются. Многостолбцовые индексы: в MySQL ограничение 16 столбцов, в PostgreSQL – 32. Expression-индексы: в MySQL– эмуляция, в PostgreSQL – полное. Неблокирующий create index: в MySQL – частичное, в PostgreSQL – полное.
Партиционирование (Partitioning)
MySQL поддерживает горизонтальное партиционирование: range, list, hash, key, композитное партиционирование. PostgreSQL поддерживает RANGE и LIST. Автоматическое партиционирование для таблиц и индексов.
Автоматическое восстановление после сбоев
MySQL: частичное для InnoDB – нужно вручную сделать backup. PostgreSQL: Write Ahead Logging (WAL).
Data Storage Engines
PostgreSQL поддерживает один движок – Postgres Storage System. В MySQL 5.1 их несколько:
- MyISAM – используется для хранения системных таблиц;
- InnoDB – максимальное соответствие ACID, хранит данные с первичными ключами, кэширует инсерты, поддерживает компрессию, начиная с версии 5.1 – см. атрибут ROW_FORMAT=COMPRESSED;
- NDB Cluster – движок, ориентированный на работу с памятью, кластерная архитектура, использующая синхронную репликацию;
- ARCHIVE – поддерживает компрессию, не использует индексы;
- а также: MERGE, MEMORY (HEAP), CSV.
InnoDB разрабатывается компанией InnoBase, являющейся дочерней компанией Oracle. В 6-й версии должны появиться два движка – Maria и Falcon. Falcon – движок, основанный на ACID-транзакциях.
Лицензирование
PostgreSQL: BSD (Berkeley Software Distribution) open source. MySQL: GPL (Gnu General Public License) или Commercial. MySQL – это open-source продукт. Postgres – это open-source проект.
Заключение
Подводя итоги, можно сказать следующее: MySQL и PostgreSQL – две наиболее популярные open-source базы данных в мире. Каждая база имеет свои особенности и отличия. Если вам нужно быстрое хранилище для простых запросов с минимальной настройкой, я бы порекомендовал MySQL. Если вам нужно надежное хранилище для большого объема данных с возможностью расширения, репликации, полностью соответствующее современным стандартам языка SQL, я бы предложил использовать PostgreSQL.
Далее мы обсудим вопросы настройки MySQL и PostgreSQL.
Ресурсы для скачивания
PostgreSQL операторы сравнения — Oracle PL/SQL •MySQL •MariaDB •SQL Server •SQLite
В этом руководстве по PostgreSQL рассматриваются все операторы сравнения, используемые для проверки на равенство и неравенство, а также более сложные операторы.
Описание
Операторы сравнения используются в предложении WHERE, чтобы определить, какие записи выбрать. Вот список операторов сравнения, которые вы можете использовать в PostgreSQL :
Операторы сравнения | Описание |
---|---|
= | Равно |
Не равно | |
!= | Не равно |
> | Больше чем |
>= | Больше или равно |
Меньше чем | |
Меньше или равно | |
IN () | Соответствует значению в списке |
NOT | Отрицает условие |
BETWEEN | В пределах диапазона (включительно) |
IS NULL | Значение NULL |
NOT NULL | Не NULL значение |
LIKE | Сопоставление с шаблоном % и _ |
EXISTS | Условие выполнено, если подзапрос возвращает хотя бы одну строку |
Рассмотрим операторы сравнения, которые вы можете использовать в PostgreSQL.
Пример — оператор =
В PostgreSQL вы можете использовать оператор = для проверки на равенство в запросе.
Например:
SELECT *
FROM employees
WHERE first_name = ‘Frosya’;
SELECT * FROM employees WHERE first_name = ‘Frosya’; |
В этом примере приведенный выше оператор SELECT возвращает все строки из таблицы employee, где first_name равно Frosya.
Пример — оператор
В PostgreSQL два способа проверить неравенство в запросе. Вы можете использовать оператор или
!=
.
Например, мы можем проверить неравенство, используя оператор , следующим образом :
SELECT *
FROM employees
WHERE first_name <> ‘Frosya’;
SELECT * FROM employees WHERE first_name <> ‘Frosya’; |
В этом примере оператор SELECT возвращает все строки из таблицы employee, где first_name не равно Frosya.
Или вы можете также написать этот запрос, используя оператор !=
, как показано ниже :
SELECT *
FROM employees
WHERE first_name != ‘Frosya’;
SELECT * FROM employees WHERE first_name != ‘Frosya’; |
Оба этих запроса возвратят одинаковые результаты.
Пример — оператор >
Вы можете использовать оператор >
в PostgreSQL, чтобы проверить выражение больше чем.
SELECT *
FROM products
WHERE product_id > 50;
SELECT * FROM products WHERE product_id > 50; |
В этом примере оператор SELECT вернет все строки из таблицы products, где product_id больше 50. product_id, равный 50, будет не будет включен в набор результатов.
Пример — оператор >=
В PostgreSQL вы можете использовать оператор >=
, чтобы проверить выражение, большее или равное.
SELECT *
FROM products
WHERE product_id >= 50;
SELECT * FROM products WHERE product_id >= 50; |
В этом примере оператор SELECT вернет все строки из таблицы products, где product_id больше или равен 50. В этом случае product_id равный 50 будет включен в набор результатов.
Пример — оператор
Вы можете использовать оператор <
в PostgreSQL, чтобы проверить выражение меньше чем.
SELECT *
FROM inventory
WHERE inventory_id < 25;
SELECT * FROM inventory WHERE inventory_id < 25; |
В этом примере оператор SELECT вернет все строки из таблицы inventory, где inventory_id меньше 25. Значение inventory_id, равное 25, не будет включено в набор результатов.
Пример — оператор
В PostgreSQL вы можете использовать оператор <=
для проверки выражения, которое меньше или равно.
SELECT *
FROM inventory
WHERE inventory_id <= 25;
SELECT * FROM inventory WHERE inventory_id <= 25; |
В этом примере оператор SELECT вернет все строки из таблицы inventory, где inventory_id меньше или равен 25. В этом случае n inventory_id значение 25 будет включено в набор результатов.
Rownum в postgresql
есть ли способ имитировать rownum в postgresql ?
7 ответов
Postgresql > 8.4
SELECT
row_number() OVER (ORDER BY col1) AS i,
e.col1,
e.col2,
...
FROM ...
74
автор: baklarz2048
Я только что протестировал в Postgres 9. 1 решение, близкое к Oracle ROWNUM:
select row_number() over() as id, t.*
from information_schema.tables t;
20
автор: Wolfgang Vollmann
Если вы просто хотите, чтобы номер вернулся, попробуйте это.
create temp sequence temp_seq;
SELECT inline_v1.ROWNUM,inline_v1.c1
FROM
(
select nextval('temp_seq') as ROWNUM, c1
from sometable
)inline_v1;
вы можете добавить порядок в INLINE_V1 SQL, чтобы ваш ROWNUM имел некоторое последовательное значение для ваших данных.
select nextval('temp_seq') as ROWNUM, c1
from sometable
ORDER BY c1 desc;
не может быть быстрым, но это вариант, если вы действительно нуждаетесь в них.
Postgresql имеет ограничение.
код Oracle:
select *
from
tbl
where rownum <= 1000;
то же самое в коде Postgresql:
select *
from
tbl
limit 1000
Postgresql не имеет эквивалента ROWNUM Oracle.
Во многих случаях вы можете достичь того же результата, используя LIMIT и OFFSET в своем запросе.
3
автор: Sachin Shanbhag
Если у вас есть уникальный ключ, вы можете использовать COUNT(*) OVER ( ORDER BY unique_key ) as ROWNUM
SELECT t. *, count(*) OVER (ORDER BY k ) ROWNUM
FROM yourtable t;
| k | n | rownum |
|---|-------|--------|
| a | TEST1 | 1 |
| b | TEST2 | 2 |
| c | TEST2 | 3 |
| d | TEST4 | 4 |
демо
1
автор: Kaushik Nayak
используйте limit clausule, со смещением, чтобы выбрать номер строки -1, поэтому, если вы хотите получить строку 8, используйте:
ограничение 1 смещение 7
0
автор: Lorenzo Zuluaga
Oracle против PostgreSQL | 7 самых поразительных сравнений, которые вы должны изучить
Разница между Oracle и PostgreSQL
Oracle — это продукт от Oracle Corporation, который предоставляет ряд облачных сервисов и сервисов на основе приложений или платформ, тогда как PostgreSQL или Postgres — это система управления реляционными базами данных, созданная как приложение с открытым исходным кодом Регентами глобальной группы разработчиков PostgreSQL при университете Калифорнии. Что касается управления версиями, PostgreSQL время от времени выпускает новые версии, чтобы добавлять или обновлять новые функции в соответствии с меняющимися технологическими стандартами на рынке, а Oracle выпускает последние версии с улучшенными функциональными качествами инструментов.
Что такое Oracle?
Oracle — один из крупнейших поставщиков СУБД (системы управления реляционными базами данных) на рынке ИТ. Она называется базой данных Oracle, Oracle DB или Oracle, продаваемой Oracle. База данных Oracle разработана в 1977 году Лоуренсом Эллисоном и построена на основе реляционной базы данных, в которой пользователи могут получать доступ к данным через приложение или язык запросов под названием SQL (структурированный язык запросов). Корпорация Oracle впервые коммерциализировала СУБД Oracle в 1979 году.База данных Oracle доступна в различных редакциях, таких как Enterprise edition, Standard edition, express edition и oracle lite. База данных Oracle работает на основных платформах, таких как Windows, UNIX, Linux и MacOS. Самым большим конкурентом базы данных Oracle является Microsoft SQL Server.
Что такое PostgreSQL?
PostgreSQL не поддерживает SQL до 1994 года — для запроса данных из него использовался язык QUEL. Позже была добавлена поддержка SQL. PostgreSQL становится открытым в 1996 году.PostgreSQL поддерживает все функции СУБД с добавлением других функций, которые недоступны в СУБД, таких как представления, хранимые процедуры, индексы и триггеры, в дополнение к функциям первичного ключа, внешнего ключа и атомарности. Он работает на основных платформах, таких как UNIX, MacOS, Windows и Linux и т. Д. Он поддерживает видео, текст, аудио, изображения, программные интерфейсы для разных языков, таких как C / C ++, Java, Python, Perl и т. Д., А также открытую базу данных. возможность подключения.
Сравнение Oracle и PostgreSQL (Инфографика)
Ниже приведены 7 основных различий между производительностью Oracle и PostgreSQL
.
Редакционная информация, предоставленная DB-Engines | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Имя | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Описание | Широко используемая СУБД | Широко используемая СУБД с открытым исходным кодом Разработана как объектно-ориентированная СУБД (Postgres), постепенно улучшенная с помощью таких «стандартов», как SQL | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Первичная модель базы данных | Реляционная СУБД | Реляционная СУБД с объектно-ориентированными расширениями, например: типы / функции, определяемые пользователем, и наследование.Обработка пар ключ / значение с помощью модуля hstore. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Вторичные модели баз данных | Хранилище документов СУБД Graph с Oracle Spatial и Graph Хранилище RDF с Oracle Spatial и Graph | Хранилище документов | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Веб-сайт | www.oracle.com/database | www.postgresql.org | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Техническая документация | docs. oracle.com/en/database | www.postgresql.org/docs/manuals | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Разработчик | Oracle | Глобальная группа разработки PostgreSQL www.postgresql.org/developer | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Первоначальный выпуск | 1980 | 1989 1989: Postgres, 1996: PostgreSQL | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Текущий выпуск | 19c, февраль 2019 г. | 13.0, сентябрь 2020 г. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Лицензия Коммерческая или с открытым исходным кодом | Доступна коммерческая ограниченная бесплатная версия | BSD с открытым исходным кодом | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Только в облаке Доступно только в виде облака услуга | нет | нет | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
предложения DBaaS (спонсорские ссылки) База данных как услуга Поставщики предложений DBaaS, пожалуйста, свяжитесь с нами, чтобы попасть в список. |
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Язык реализации | C и C ++ | C | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Серверные операционные системы | AIX HP-UX Linux OS X Solaris Windows z / OS | FreeBSD HP-UX Linux NetBSD OpenBSD OS X Solaris Unix Windows | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Схема данных | да Без схемы в столбцах JSON и XML | да | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Ввод предопределенных типов данных, таких как float или date | да | да | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Поддержка XML Некоторая форма обработки данных в формате XML, например.грамм. поддержка структур данных XML и / или поддержка XPath, XQuery или XSLT. | да | да доступен конкретный тип XML, но нет функции запроса XML. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Вторичные индексы | да | да | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SQL Поддержка SQL | да с проприетарными расширениями | да стандарт с многочисленными расширениями | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
API и другие методы доступа | JDBC ODBC ODP. NET Интерфейс вызовов Oracle (OCI) | ADO.NET JDBC собственная библиотека C ODBC потоковый API для больших объектов | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Поддерживаемые языки программирования | C C # C ++ Clojure Cobol Delphi Eiffel Erlang Fortran Groovy Haskell Java JavaScript Лисп Цель C OCaml Perl PHP Python R Ruby Scala Tcl Visual Basic | .Net C C ++ Delphi Java JDBC JavaScript (Node.js) Perl PHP Python Tcl | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Серверные сценарии Хранимые процедуры | PL / SQL также возможны хранимые процедуры на Java | определяемые пользователем функции, реализованные на собственном языке PL / pgSQL или на распространенных языках, таких как Perl, Python, Tcl и т. Д. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Триггеры | да | да | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Методы секционирования Методы хранения различных данных на разных узлах | горизонтальное секционирование с дополнительным Oracle Partitioning | секционирование по диапазону, списку и (начиная с PostgreSQL 11) по хешу | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Методы репликации Методы для избыточного хранения данных на нескольких узлах | Репликация из нескольких источников Репликация исходная реплика | Репликация источника-реплики другие методы возможны с использованием сторонних расширений | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
MapReduce предлагает API для пользовательских методов Map / Reduce | no can b Реализован в PL / SQL | нет | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Концепции согласованности Методы обеспечения согласованности в распределенной системе | Немедленная согласованность | Немедленная согласованность | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Внешние ключи Ссылочная целостность | да | да | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Транзакция концепции Поддержка обеспечения целостности данных после неатомарных манипуляций с данными | Уровень изоляции ACID может быть параметризован | ACID | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Поддержка параллелизма для одновременной обработки данных | да | да | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Надежность Поддержка создания данных постоянный | да | да | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Возможности в памяти Есть ли возможность определить некоторые или все структуры, которые будут храниться только в памяти. | да Версия 12c представила новую опцию Oracle Database In-Memory | нет | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Пользовательские концепции Контроль доступа | Детальные права доступа в соответствии со стандартом SQL | Детальные права доступа в соответствии со стандартом SQL | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Дополнительная информация предоставляется поставщиком системы | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Конкретные характеристики | База данных Oracle (обычно называемая СУБД Oracle или просто Oracle) является многомодельной… »подробнее | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Модели лицензирования и ценообразования | Oracle Database Cloud Services Клиенты могут выбирать из широкого спектра баз данных … » подробнее | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Приглашаем представителей поставщиков систем связаться с нами для обновления и расширения системной информации, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Сопутствующие продукты и услуги | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Третьи стороны | DBHawk: безопасный доступ к базам данных SQL, NoSQL и Cloud с помощью комплексного решения. »подробнее Navicat для Oracle повышает эффективность и продуктивность разработчиков и администраторов Oracle благодаря оптимизированной рабочей среде. Общий синтаксический анализатор SQL: мгновенное добавление возможностей синтаксического анализа, декодирования, анализа и перезаписи обработки SQL в ваши продукты. | 2ndQuadrant: Mission Critical Databases. »подробнее Navicat для PostgreSQL — это простой в использовании графический инструмент для разработки баз данных PostgreSQL. pgDash: Углубленный мониторинг PostgreSQL. Общий синтаксический анализатор SQL: мгновенное добавление возможностей синтаксического анализа, декодирования, анализа и перезаписи обработки SQL в ваши продукты. База данных Azure для PostgreSQL предоставляет полностью управляемую и готовую к использованию корпоративную базу данных PostgreSQL как услугу. CYBERTEC: ваш профессиональный партнер по службам PostgreSQL и Data Science на базе PostgreSQL с 2000 года. Имеет офисы в Австрии, Уругвае. , Эстония и Швейцария, CYBERTEC работает по всему миру! | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Мы приглашаем представителей продавцов сопутствующих товаров связаться с нами для представления здесь информации о своих предложениях. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Дополнительные ресурсы | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Сообщения в блоге DB-Engines | MySQL — СУБД года 2019 Борьба за гегемонию в империи баз данных Oracle Создание архитектуры платформ электронной коммерции для нулевого простоя в «черную пятницу» и далее показать все | PostgreSQL — СУБД года 2018 PostgreSQL — СУБД года 2017 Microsoft SQL Server — СУБД года показать все | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Конференции и мероприятия | Онлайн-тренинги по PostgreSQL | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последние цитаты в новостях | В кадре Oracle, Amazon рекламирует 300000 миграций баз данных AWS нацеливается на Oracle, нанимая нового руководителя продаж в Америке The FINANCIAL — В новом отчете Oracle является абсолютным лидером по сравнению с Amazon и Microsoft в корпоративных облачных базах данных Oracle запускает высокопроизводительную облачную службу баз данных предоставлено Google News | Swarm64 DA 5.0 переносит HTAP в базу данных PostgreSQL с открытым исходным кодом Представляем гибкий сервер в базе данных Azure для PostgreSQL и MySQL | Azure Friday — Microsoft |
Проблемы при переходе с Oracle на PostgreSQL и способы их решения
Дэвид Рейдер — вице-президент по разработке в OpenSCG.
OpenSCG — партнер-консультант AWS и ведущий эксперт по PostgreSQL, помогающий клиентам переходить на PostgreSQL и другие платформы данных и оптимизировать их как в локальной среде, так и в облаке, а также в работе с ними.
В предыдущих сообщениях мы рассмотрели общий подход к успешной миграции базы данных и то, как выбрать первую базу данных для миграции. В этом посте давайте рассмотрим несколько проблем, связанных с миграцией, и советы по их решению.
Когда организации стремятся перейти с Oracle на базу данных PostgreSQL с открытым исходным кодом, они обычно сосредотачиваются на расширенных функциях, высокой производительности, надежной целостности данных, гибком лицензировании с открытым исходным кодом и легкой доступности от поставщиков общедоступного облака, включая AWS.Но путь к миграции не всегда гладкий, и знание того, как избежать выбоин, может помочь обеспечить успешный переход.
Проблемы, о которых я пишу в этом посте, имеют разные последствия: от удобства и простоты разработки в будущем до снижения производительности перенесенной базы данных и того, что она может сделать миграцию невозможной. Поскольку это самая страшная проблема, давайте начнем с задачи, которая может просто сделать миграцию существующего приложения невозможной.
Пакетные приложения
PostgreSQL поддерживает большинство языков разработки, включая Java, C #, Python, PHP, C / C ++, JavaScript / Node. js, Go и другие. PostgreSQL полностью соответствует требованиям ACID и полностью соответствует стандарту ANSI SQL: 2008. Но если вы используете пакетное программное приложение, поставщик которого не сертифицирован для PostgreSQL, миграция, вероятно, не начнется.
Если вы хотите перенести свое коммерческое приложение ERP / CRM / бухгалтерский учет с Oracle на PostgreSQL, вам, возможно, придется попросить поставщика добавить PostgreSQL в список поддерживаемых баз данных или перейти на новое бизнес-приложение.Но это не проблема для приложений, которые вы контролируете и для которых есть исходный код.
Типы данных и преобразование схем
Теперь, когда мы рассмотрели самую большую проблему, давайте вернемся к одной из самых простых. PostgreSQL имеет полный набор встроенных типов данных и поддержку настраиваемых типов расширений. Основные типы данных Oracle можно легко сопоставить с типами PostgreSQL. Большинство операций по сопоставлению и преобразованию таблиц можно автоматизировать с помощью AWS Schema Conversion Tool (AWS SCT) или другого инструмента миграции.
С некоторыми типами данных PostgreSQL гораздо проще работать, чем с соответствующими типами Oracle. Например, тип Text
может хранить до 1 ГБ текста и может обрабатываться в SQL так же, как поля char
и varchar
. Для них не требуются специальные функции для больших объектов, такие как большие символьные объекты (CLOB).
Однако следует отметить некоторые важные отличия. Поле Numeric
в PostgreSQL может использоваться для отображения любых типов данных Number
.Но когда он используется для соединений (например, для внешнего ключа), он менее эффективен, чем использование int
или bigint
.
Временная метка PostgreSQL с полем
часового пояса немного отличается от поля Oracle Timestamp с полем часового пояса
— фактически она эквивалентна метке времени Oracle с местным часовым поясом
. Эти небольшие различия могут вызвать проблемы с производительностью или небольшие ошибки приложения, требующие тщательного тестирования.
Перенос данных
После преобразования схемы и настройки таблиц в соответствии с конкретным приложением пора переместить данные. Для баз данных меньшего размера (100 ГБ или меньше) этот процесс довольно прост. Используя AWS Data Migration Service (AWS DMS) или такой инструмент, как HVR, вы можете создавать задания миграции данных, которые выполняются на инстансах Amazon EC2, подключаться к вашей локальной базе данных Oracle и передавать данные в инстанс Amazon RDS для PostgreSQL. Вам нужно будет проверить данные в целевой базе данных.Затем запустите миграцию пару раз в среде разработки, тестирования и, наконец, в производственной среде и устраните все возникающие проблемы.
Когда вы освоитесь с процессом миграции, снова запустите его в производственной среде. Перенесите большую часть существующих данных и отслеживайте текущие изменения транзакций с помощью экземпляра репликации AWS DMS. Затем оставьте службу миграции работающей, чтобы целевая база данных оставалась синхронизированной с изменениями в действующей системе.
Большие объемы данных
Для больших объемов данных — например, более 1 ТБ — чисто оперативная миграция данных может занять слишком много времени или занять слишком большую часть доступной полосы пропускания. В этой ситуации вам следует использовать подходы экспорта, перезагрузки и синхронизации. При таком подходе вы экспортируете самые большие таблицы. Затем вы либо сжимаете и отправляете их в Amazon S3, либо используете AWS Snowball, чтобы транспортировать их в регион AWS и загружать в Amazon S3. После того, как данные помещены в Amazon S3, вы можете массово загрузить файлы данных в PostgreSQL.
Использование разделов на основе даты упрощает выбор и изоляцию данных, перемещаемых в автономный режим. Неизменяемые исторические данные, содержащие записи на основе меток времени, можно экспортировать до известного момента времени, а любые данные после этого момента можно перенести с помощью AWS DMS. Или вы можете использовать порядковый номер журнала Oracle (LSN) или последовательный идентификатор приложения в качестве точки отсечки для задания экспорта и миграции.
Очистка архитектуры
Миграция — отличное время для очистки определенных частей вашей архитектуры и приложения.Например, если вы храните файлы (PDF-файлы, изображения и т. Д.) В своей базе данных, сейчас самое время поместить их в надежную корзину хранилища Amazon S3. Уменьшите размер базы данных и время, необходимое для операций резервного копирования и восстановления, а также повысьте гибкость вашего приложения за счет большей гибкости в работе с файлами.
Если у вас есть статические исторические данные, вы можете либо полностью очистить их, если они никогда не использовались вашим приложением, либо переместить их в отдельное хранилище архивных данных.Это хранилище данных может находиться либо в базе данных PostgreSQL с меньшей производительностью (и менее дорогой), либо в системе Amazon Athena или Apache Spark с поддержкой Amazon S3, которая подходит для нечастых запросов к холодным данным.
И, если вы смешали онлайн-обработку транзакций (OLTP) и доступ к данным в стиле аналитики, переход от единого инструмента для всех настроек Oracle к использованию отдельного хранилища для отчетов и аналитики может улучшить как скорость отклика вашего приложения, так и вашу возможности аналитики.Есть варианты создания выделенного хранилища на базе Postgres-XL или использования Amazon Redshift в качестве мощного управляемого хранилища.
В целом, перенос данных требует планирования и практики, но это очень решаемая задача.
Перенос кода
Наиболее интенсивными усилиями при миграции с Oracle на PostgreSQL обычно является перенос кода для работы с PostgreSQL. Это относится к хранимым процедурам, пакетам и функциям в базе данных, а также к коду приложения, которое считывает и записывает в базу данных.
Код базы данных
PostgreSQL во многом похож на Oracle. Основной процедурный язык программирования, PL / pgSQL, достаточно похож на PL / SQL, поэтому большинство администраторов баз данных (DBA) и разработчиков могут легко изучить синтаксис. Автоматизированные инструменты, такие как AWS Schema Conversion Tool (AWS SCT) или Ora2Pg с открытым исходным кодом, обычно могут автоматически преобразовать более 70 процентов кода базы данных для правильной работы.
Автоматическое преобразование включает преобразование специфичных для Oracle функций в стандартные функции ANSI (например, переход от nvl ()
к coalesce ()
), изменение унаследованного синтаксиса, такого как знак плюса (+), используемого для внешних соединений, на стандартные синтаксис внешнего соединения и добавление псевдонимов для подзапросов, которые Oracle считает необязательными, но требует PostgreSQL.В этих случаях преобразованный код совместим как с Oracle, так и с PostgreSQL. Его можно фактически объединить с текущей базой кода приложения и развернуть в существующей базе данных до того, как вы полностью выполните миграцию.
Автоматизированные инструменты также могут преобразовывать код, который использует синтаксис, специфичный для базы данных, такой как обработка последовательности с помощью Oracle sequence.nextval
по сравнению с PostgreSQL nextval (sequence)
или немного другой синтаксис для выполнения динамического SQL внутри хранимой процедуры.Эти изменения несовместимы с Oracle и поэтому используются только в вашей целевой системе PostgreSQL.
Оставшийся код необходимо преобразовать вручную, либо потому, что SQL и PL / SQL были слишком сложными для того, чтобы инструмент мог идеально проанализировать и преобразовать, либо потому, что не существует точного однозначного преобразования, которое можно было бы применить автоматически. Многие такие случаи тривиальны для преобразования опытных разработчиков и администраторов баз данных, если они понимают как подход PostgreSQL, так и используемую логику приложения.
Нишевые функции: автономные транзакции, сбор всех и BFILE
Есть некоторые функции Oracle, которые либо не поддерживаются PostgreSQL, либо обрабатываются с помощью расширения или обходного пути. Например, PostgreSQL не поддерживает напрямую автономные транзакции, которые позволяют фиксировать изменения одной хранимой процедуры внутри более крупной транзакции, которая откатывается. Обычный обходной путь — использовать «удаленное» соединение DBLink с той же базой данных. Вы выполняете функцию, которую хотите зафиксировать, как «удаленный» вызов, который рассматривается как отдельное соединение — и отдельная транзакция.
Точно так же ядро PostgreSQL не поддерживает таблицы с внешней организацией или прямой доступ к файлам в файловой системе базы данных. Однако и то, и другое возможно при использовании оболочки внешних данных (FDW).
Некоторые распространенные пакеты Oracle, такие как DBMS_OUTPUT, поддерживаются расширениями для совместимости с открытым исходным кодом orafce и AWS, которые снижают стоимость преобразования. Другие, такие как UTL_FILE, UTL_HTTP и пакет SMTP, могут поддерживаться через расширения. Но вам следует проверить, является ли это правильным архитектурным решением или архитектура вашего приложения должна быть обновлена в рамках преобразования.Вам необходимо проверить, поддерживается ли рассматриваемое расширение в среде, управляемой Amazon RDS, в противном случае вы не сможете использовать Amazon RDS.
Код приложения
Как отмечалось ранее, PostgreSQL имеет широкую поддержку языков программирования, и есть драйверы, доступные для всех основных языков разработки, а также для многих других. В зависимости от архитектуры вашего приложения и уровня соединения с базой данных вам может потребоваться лишь небольшое количество изменений или у вас могут быть значительные изменения при переносе.
Например, довольно легко преобразовать приложение на основе Java, которое использует общие классы JDBC (а не классы, специфичные для Oracle) и всегда вызывает хранимые процедуры без SQL в коде, будь то динамически построенные или жестко запрограммированные. Если вы используете объектно-реляционное сопоставление (ORM), такое как Hibernate или JCA, переключить диалект с Oracle на PostgreSQL будет тривиально просто. Есть еще небольшие отличия. Например, если вы используете секционирование, требуемые триггеры PostgreSQL изменяют количество записей, возвращаемых при вставке, и обманывают Hibernate.Поэтому вам нужно добавить аннотации к запросам Hibernate, которые обновляют секционированные таблицы.
Для таких простых случаев вы даже можете использовать AWS SCT для сканирования кода Java или .NET, чтобы найти операторы SQL и преобразовать SQL в PostgreSQL-совместимый SQL — аналогично преобразованию, сделанному для PL / SQL.
Однако преобразование кода приложения намного сложнее, если вы используете встроенный SQL, такой как Oracle Pro * C, связываетесь с библиотеками, специфичными для Oracle, такими как OCI или классы Oracle JDBC, или динамически строите SQL на основе условий приложения.PostgreSQL поддерживает C / C ++ либо со встроенным SQL (ECPG), либо с библиотекой libpq. Но они не совместимы с аналогами Oracle.
Аналогичным образом, изменение кода приложения, которое динамически создает SQL, требует глубокого понимания логики приложения и тщательного тестирования, чтобы гарантировать, что функциональность работает должным образом. Мы работали с клиентами над автоматизацией некоторых аспектов этих миграций, но это по-прежнему требует внимания со стороны группы обслуживания приложений.
Управление транзакциями и обработка исключений
Каждое приложение должно обеспечивать надлежащее управление транзакциями и обработку ошибок — именно так мы предотвращаем критические случаи, сбои во время выполнения и неожиданный ввод пользователя от создания неверных данных. PostgreSQL обеспечивает надежную обработку транзакций, поддерживает полную семантику ACID и различные уровни изоляции. PostgreSQL также аккуратно обрабатывает ошибки времени выполнения и выдает надежные коды ошибок и сообщения вызывающему коду — PL / pgSQL или приложениям.Но есть несколько отличий в том, как PostgreSQL решает эти проблемы изнутри, и в том, как Oracle ведет себя, что требует изменений в коде или дизайне приложения.
Во-первых, PostgreSQL не позволяет управлять транзакциями внутри PL / pgSQL — вы не можете зафиксировать или откатить транзакцию внутри хранимой процедуры. Приложение, вызывающее хранимую процедуру, должно выполнять управление транзакциями — запуск и фиксацию или откат. Хранимая процедура выполняется в контексте вызывающей транзакции.Очевидно, что если в вашем существующем коде базы данных есть процедуры управления транзакциями, его необходимо изменить.
Во-вторых, когда в транзакции возникло исключение во время выполнения, вы должны откатить эту транзакцию, прежде чем вы сможете выполнить любой оператор в соединении. Вы часто видите это, когда обнаруживаете в журнале приложения следующее сообщение об ошибке:
ОШИБКА: текущая транзакция прервана, команды игнорируются до конца блока транзакции.
Это сообщение указывает на то, что произошла ошибка, ошибка была проигнорирована и был выполнен другой оператор ( SELECT
, INSERT
, EXECUTE
, что угодно…) Затем второй оператор завершился неудачно, потому что транзакция уже находится в состоянии ошибки (прервано).Увидев это сообщение, внимательно просмотрите вызовы базы данных и обработку исключений. Убедитесь, что в любом месте, где может произойти ошибка (любой вызов базы данных), вы проверяете ошибки или настраиваете обработчик исключений и ROLLBACK
(или ROLLBACK
до точки сохранения или закрытие соединения) перед попыткой другой операции с базой данных.
В-третьих, для логики приложения и устранения указанной выше ошибки у вас должна быть обработка исключений. В PL / pgSQL использование блока BEGIN… EXCEPTION… END
позволяет вашему коду уловить возникающую ошибку.Этот блок автоматически создает точку сохранения перед блоком и откатывается к этой новой точке сохранения при возникновении исключения. Затем вы можете определить, какую логику выполнять, в зависимости от того, произошла ли ошибка. Однако блоки исключений, поскольку они создают точку сохранения, дороги. Если вам не нужно перехватывать ошибку или если вы планируете просто передать сообщение об ошибке вызывающему приложению, вообще не используйте блок исключения. Позвольте исходной ошибке перейти в приложение.
Точно так же Java, встроенный SQL и другие языки имеют механизмы для перехвата исключений.Проверьте приложение, чтобы убедиться в правильной обработке ошибок при вызовах базы данных. Если приложение в настоящее время перехватывает и игнорирует исключение, вы должны изменить его, чтобы откатить транзакцию, прежде чем может быть выполнен новый вызов базы данных. Если приложение ожидает сохранить частичные изменения транзакции до исключения, вам, возможно, придется добавить точки сохранения в код приложения и откатиться к точке сохранения, чтобы продолжить после исключения.
Обратите внимание, что, как и блок исключений в PL / pgSQL, добавление точек сохранения влияет на производительность.Поэтому используйте их там, где это необходимо, но не при каждом обращении к базе данных. Например, предположим, что вы сохраняете запись заголовка вместе с дочерними записями, и вы откатите всю транзакцию, если получите исключение. В этом случае вам не нужно создавать точку сохранения после вставки записи заголовка, потому что в случае сбоя дочерних записей вы откатываете вставку.
Наконец, вы должны отобразить коды ошибок и типы исключений, которые ваше приложение ожидает от Oracle, в PostgreSQL. Некоторые коды ошибок (например, 100, код не найдено) одинаковы для обоих, но другие различаются.В зависимости от вашего языка программирования, если вы перехватываете специфичные для Oracle исключения JDBC, вы должны заменить эти специфические исключения либо общими исключениями между базами данных, либо переключиться на специфичные для PostgreSQL исключения.
Обеспечение правильности обработки транзакций и ошибок в ваших приложениях является важной частью миграции и обычно требует изменений в базе данных и коде приложения.
Навыки
За годы работы ваши администраторы баз данных и разработчики накопили большой опыт в ваших текущих технологиях.Этот опыт включает в себя использование различных расширенных функций, настройку производительности и поддержание стабильности и работоспособности системы. Переход на новую технологию требует изучения новых навыков, разработки новых способов решения проблем и отказа от старых способов ведения дел. Не стоит недооценивать время, необходимое высококвалифицированному администратору баз данных, чтобы привыкнуть к поддержке критически важной системы на новой платформе.
Вы также должны понимать, что, хотя Oracle и PostgreSQL являются реляционными базами данных и поддерживают большую часть одного и того же синтаксиса SQL для создания таблиц и запросов данных, внутреннее устройство отличается.Поэтому в некоторых ситуациях они ведут себя по-разному.
Например, Multiversion Concurrency Control (MVCC) PostgreSQL сильно отличается от сегментов отката Oracle, хотя они оба обеспечивают основу для транзакций ACID. Разработчики, которые привыкли разрабатывать приложения для одного, или администраторы баз данных, которые привыкли оптимизировать производительность для одного, могут столкнуться с неприятными «лежачими полицейскими», если будут использовать те же методы для другого.
Обучение вашей команды работе с PostgreSQL на ранних этапах процесса миграции окупается.Им будет удобнее выполнять миграцию и они смогут быстрее доставить рабочее приложение и базу данных. Кроме того, они могут избежать некоторых из этих неприятных «лежачих полицейских», если они поймут различия до того, как начнут преобразовывать свой код.
Минимизация времени простоя
Ключевое требование для успешной миграции — не нарушить работу вашего бизнеса. Это означает, что вы должны убедиться, что ваши данные переносятся правильно, приложение работает правильно, а производительность обеспечивает хорошее взаимодействие с пользователем.Это также означает сокращение времени простоя, когда ваше приложение недоступно для пользователей или клиентов.
Эти шаги помогают сократить время, необходимое для переключения в производственную среду, от архивации старых данных до использования AWS DMS для миграции и поддержания репликации текущих транзакций, чтобы гарантировать тщательное тестирование вашего кода. Записывая этапы развертывания и повторяя их несколько раз в тестовой и промежуточной средах, вы можете быть уверены, что ваша команда хорошо подготовлена к производственному переходу.А использование ресурсов AWS означает, что вы можете запускать и останавливать эти тестовые среды, не неся полную стоимость установки большого сервера базы данных.
Синхронизация целевой БД
Если вы переносите все данные, используя комбинацию автономных подходов и подходов репликации (например, AWS DMS), у вас может быть полностью заполненная, готовая к использованию копия перенесенной базы данных, прежде чем вы начнете переключение процесс. Вам не нужно будет выполнять пугающее упражнение по подсчету, насколько быстро вы можете преобразовать базу данных размером 1 ТБ, или предоставлять текущие обновления руководству о количестве таблиц, перенесенных в течение субботнего окна обслуживания.
Советы по ускорению миграции
В этом посте я обсудил некоторые проблемы, с которыми вы можете столкнуться при миграции с Oracle на PostgreSQL, а также несколько советов по их преодолению.
Следующие стратегии могут помочь сократить общее время, необходимое для завершения миграции:
Обучение: Ваши ведущие архитекторы, администраторы баз данных и разработчики должны понимать различия между Oracle и PostgreSQL и понимать, как правильно переносить приложения.Недельный учебный курс помогает избежать длительных задержек, поскольку они изо всех сил пытаются обойти неожиданные сюрпризы в конце вашего проекта.
Тестирование: Тестирование приложений — огромная часть общих усилий по миграции. Наличие автоматизированных тестов, которые могут выполняться на уровне приложения или доступа к данным, может помочь значительно сократить время цикла тестирования и повторения.
Двухэтапный: Если у вас есть приложение, которое требует значительных изменений SQL или изменений кода для совместимости, сократите продолжительность обслуживания двух ветвей кода, максимально перейдя к стандартному коду ANSI, который работает как в Oracle, так и в PostgreSQL.Затем разверните эти изменения в существующей производственной системе. Это также уменьшает количество изменений, которые необходимо протестировать при окончательном преобразовании.
Скрипт: Используйте автоматизированные инструменты, такие как AWS SCT. Работайте с партнером, который может создать сценарии автоматического преобразования для очистки вашего основного кода, вместо того, чтобы полагаться на грубую силу для изменения тысяч файлов кода.
PostgreSQL: ИЛИ Условие
В этом руководстве по PostgreSQL объясняется, как использовать условие PostgreSQL OR с синтаксисом и примерами.
Описание
Условие OR PostgreSQL используется для проверки двух или более условий, при которых записи возвращаются при выполнении любого из условий. Его можно использовать в операторах SELECT, INSERT, UPDATE или DELETE.
Синтаксис
Синтаксис условия ИЛИ в PostgreSQL:
ГДЕ условие1 ИЛИ условие2 ... ИЛИ condition_n;
Параметры или аргументы
условие1 , условие2 , условие_n — любые из условий, которые должны быть выполнены для выбора записей.
Примечание
- Условие OR PostgreSQL позволяет проверять 2 или более условий.
- Условие OR PostgreSQL требует, чтобы любое из условий (например: condition1 , condition2 , condition_n ) было выполнено, чтобы запись была включена в набор результатов.
Пример — с оператором SELECT
Первый пример условия OR PostgreSQL, который мы рассмотрим, включает оператор SELECT с двумя условиями:
ВЫБРАТЬ * ИЗ продуктов ГДЕ product_type = 'Оборудование' ИЛИ product_id> 400;
Этот пример условия OR для PostgreSQL вернет все продукты, для которых product_type равно ‘Hardware’ или product_id больше 400.Поскольку * используется в операторе SELECT, все поля из таблицы products появятся в наборе результатов.
Пример — с оператором SELECT (3 условия)
В следующем примере PostgreSQL OR рассматривается оператор SELECT с 3 условиями. Если любое из этих условий выполнено, запись будет включена в набор результатов.
ВЫБЕРИТЕ product_id, product_name ИЗ продуктов ГДЕ product_type = 'Оборудование' ИЛИ product_type = 'Программное обеспечение' ИЛИ product_id> 1000;
Этот пример условия OR PostgreSQL вернет все значения product_id и product_name из таблицы products , где product_type — «Hardware», product_type is «Software», r product_id больше, чем 1000.
Пример — с оператором INSERT
В операторе INSERT можно использовать условие OR PostgreSQL.
Например:
INSERT INTO продукты (product_id, product_name) ВЫБЕРИТЕ inventory_id, product_name ИЗ инвентаря ГДЕ количество> 0 ИЛИ product_name = 'Память';
Этот пример ИЛИ PostgreSQL вставит в таблицу products все записи inventory_id и product_name из таблицы inventory , у которой количество больше 0 или product_name — это «Память».
Пример — с оператором UPDATE
В операторе UPDATE можно использовать условие OR PostgreSQL.
Например:
ОБНОВЛЕНИЕ продуктов SET product_type = 'Оборудование' ГДЕ product_name = 'Память' ИЛИ product_name = 'SSD';
Этот пример условия OR для PostgreSQL обновит все значения product_type в таблице products до «Hardware», где product_name — это «Memory», а product_name — «SSD».
Пример — с оператором DELETE
В операторе DELETE можно использовать условие OR PostgreSQL.
Например:
УДАЛИТЬ ИЗ контактов ГДЕ last_name = 'Андерсон' ИЛИ first_name = 'Сара';
Этот пример условия OR для PostgreSQL удалит все контакты из таблицы contacts , у которых last_name было «Anderson» или first_name было «Sarah».
Учебное пособие по
: миграция Oracle Online в базу данных Azure для PostgreSQL — служба миграции базы данных Azure
- 13 минут на чтение
В этой статье
Службу миграции базы данных Azure можно использовать для миграции баз данных из баз данных Oracle, размещенных локально или на виртуальных машинах, в базу данных Azure для PostgreSQL с минимальным временем простоя.Другими словами, вы можете завершить миграцию с минимальным временем простоя приложения. В этом руководстве вы перенесете образец базы данных HR из локального экземпляра или экземпляра виртуальной машины Oracle 11g в базу данных Azure для PostgreSQL с помощью операции онлайн-миграции в службе миграции базы данных Azure.
Из этого руководства вы узнаете, как:
- Оцените усилия по миграции с помощью инструмента ora2pg.
- Перенесите образец схемы с помощью инструмента ora2pg.
- Создайте экземпляр службы миграции базы данных Azure.
- Создайте проект миграции с помощью службы миграции базы данных Azure.
- Запустите миграцию.
- Отслеживайте миграцию.
Примечание
Использование службы миграции базы данных Azure для онлайн-миграции требует создания экземпляра на основе ценового уровня Premium.
Важно
Для оптимального процесса миграции Microsoft рекомендует создать экземпляр службы миграции базы данных Azure в том же регионе Azure, что и целевая база данных.Перемещение данных между регионами или географическими регионами может замедлить процесс миграции и вызвать ошибки.
Подсказка
При переносе баз данных в Azure с помощью службы миграции баз данных Azure вы можете выполнить миграцию офлайн или онлайн миграцию. При автономной миграции простои приложения начинаются с момента начала миграции. При онлайн-миграции время простоя ограничивается временем, которое нужно сократить в конце миграции. Мы предлагаем вам протестировать автономную миграцию, чтобы определить, приемлемо ли время простоя; если нет, сделайте онлайн-миграцию.
В этой статье описывается, как выполнить онлайн-миграцию с Oracle на базу данных Azure для PostgreSQL.
Предварительные требования
Чтобы пройти это руководство, вам необходимо:
Загрузите и установите Oracle 11g Release 2 (Standard Edition, Standard Edition One или Enterprise Edition).
Загрузите образец базы данных HR отсюда.
Загрузите и установите ora2pg в Windows или Linux.
Создайте экземпляр в базе данных Azure для PostgreSQL.
Подключитесь к экземпляру и создайте базу данных, используя инструкции в этом документе.
Создайте виртуальную сеть Microsoft Azure для службы миграции баз данных Azure с помощью модели развертывания Azure Resource Manager, которая обеспечивает межсайтовое соединение с вашими локальными исходными серверами с помощью ExpressRoute или VPN. Дополнительные сведения о создании виртуальной сети см. В документации по виртуальной сети и особенно в статьях по быстрому запуску с пошаговыми инструкциями.
Примечание
Во время настройки виртуальной сети, если вы используете ExpressRoute с сетевым пирингом с Microsoft, добавьте следующие конечные точки службы в подсеть, в которой будет предоставляться служба:
- Целевая конечная точка базы данных (например, конечная точка SQL, конечная точка Cosmos DB и т. Д.)
- Конечная точка хранения
- Конечная точка служебного автобуса
Эта конфигурация необходима, поскольку в службе миграции базы данных Azure отсутствует подключение к Интернету.
Убедитесь, что правила группы безопасности сети виртуальной сети (NSG) не блокируют следующие порты входящего соединения для службы миграции баз данных Azure: 443, 53, 9354, 445, 12000. Дополнительные сведения о фильтрации трафика NSG виртуальной сети см. статья Фильтрация сетевого трафика с помощью групп безопасности сети.
Настройте брандмауэр Windows для доступа к ядру базы данных.
Откройте брандмауэр Windows, чтобы разрешить службе миграции базы данных Azure доступ к исходному серверу Oracle, который по умолчанию является TCP-портом 1521.
При использовании брандмауэра перед исходными базами данных может потребоваться добавить правила брандмауэра, чтобы служба миграции базы данных Azure могла получить доступ к исходным базам данных для миграции.
Создайте правило брандмауэра на уровне сервера для базы данных Azure для PostgreSQL, чтобы разрешить службе миграции базы данных Azure доступ к целевым базам данных. Укажите диапазон подсети виртуальной сети, используемой для службы миграции базы данных Azure.
Разрешить доступ к исходным базам данных Oracle.
Примечание
Роль администратора базы данных требуется пользователю для подключения к источнику Oracle.
Архивные журналы повтора необходимы для инкрементной синхронизации в службе миграции базы данных Azure для отслеживания изменений данных. Выполните следующие действия, чтобы настроить источник Oracle:
Войдите в систему, используя привилегию SYSDBA, выполнив следующую команду:
sqlplus (пользователь) / (пароль) как sysdba
Завершите работу экземпляра базы данных, выполнив следующую команду.
НЕМЕДЛЕННОЕ ОТКЛЮЧЕНИЕ;
Дождитесь подтверждения
«Экземпляр ORACLE выключен»
.Запустите новый экземпляр и подключите (но не открывайте) базу данных, чтобы включить или отключить архивирование, запустите следующую команду:
ЗАПУСКНАЯ УСТАНОВКА;
База данных должна быть смонтирована; дождитесь подтверждения «Экземпляр Oracle запущен».
Измените режим архивирования базы данных, выполнив следующую команду:
ИЗМЕНЕНИЕ АРХИВЕЛОГА БАЗЫ ДАННЫХ;
Откройте базу данных для нормальной работы, выполнив следующую команду:
ALTER DATABASE OPEN;
Для отображения файла ARC может потребоваться перезагрузка.
Для проверки выполните следующую команду:
ВЫБРАТЬ log_mode FROM v $ database;
Вы должны получить ответ
'ARCHIVELOG'
. Если ответ —'NOARCHIVELOG'
, то требование не выполнено.
Включите дополнительное ведение журнала для репликации с помощью одного из следующих параметров.
Вариант 1 .
Измените дополнительное ведение журнала на уровне базы данных, чтобы охватить все таблицы с PK и уникальным индексом.Запрос на обнаружение вернет'IMPLICIT'
.ИЗМЕНИТЬ БАЗУ ДАННЫХ ДОБАВИТЬ ДОПОЛНИТЕЛЬНЫЕ ДАННЫЕ ЖУРНАЛА (ПЕРВИЧНЫЙ КЛЮЧ, УНИКАЛЬНЫЙ) СТОЛБЦЫ;
Измените дополнительное ведение журнала на уровне таблицы. Выполнять только для таблиц, которые обрабатывают данные и не имеют PK или уникальных индексов.
ALTER TABLE [TABLENAME] ДОБАВИТЬ ДОПОЛНИТЕЛЬНЫЕ ДАННЫЕ ЖУРНАЛА (ВСЕ) КОЛОННЫ;
Вариант 2 .
Измените дополнительное ведение журнала на уровне базы данных, чтобы охватить все таблицы, и запрос на обнаружение вернет«ДА»
.ИЗМЕНИТЬ БАЗУ ДАННЫХ ДОБАВИТЬ ДОПОЛНИТЕЛЬНЫЕ ДАННЫЕ ЖУРНАЛА;
Измените дополнительное ведение журнала на уровне таблицы. Следуйте приведенной ниже логике, чтобы запустить только один оператор для каждой таблицы.
Если таблица имеет первичный ключ:
ИЗМЕНИТЬ ТАБЛИЦУ xxx ДОБАВИТЬ ДОПОЛНИТЕЛЬНЫЕ ДАННЫЕ ЖУРНАЛА (ПЕРВИЧНЫЙ КЛЮЧ) КОЛОННЫ;
Если таблица имеет уникальный индекс:
ALTER TABLE xxx ДОБАВИТЬ ДОПОЛНИТЕЛЬНУЮ ГРУППУ ЖУРНАЛА (первые уникальные столбцы индекса) ВСЕГДА;
В противном случае выполните следующую команду:
ИЗМЕНИТЬ ТАБЛИЦУ xxx ДОБАВИТЬ ДОПОЛНИТЕЛЬНЫЕ ДАННЫЕ ЖУРНАЛА (ВСЕ) КОЛОННЫ;
Для проверки выполните следующую команду:
ВЫБРАТЬ Additional_log_data_min FROM v $ database;
Вы должны получить ответ
«ДА»
.
Оцените усилия по переходу с Oracle на базу данных Azure для миграции PostgreSQL
Мы рекомендуем использовать ora2pg для оценки усилий, необходимых для перехода с Oracle на базу данных Azure для PostgreSQL. Используйте директиву ora2pg -t SHOW_REPORT
для создания отчета, в котором перечислены все объекты Oracle, предполагаемая стоимость миграции (в днях разработки) и некоторые объекты базы данных, которые могут потребовать особого внимания в процессе преобразования.
Большинство клиентов потратят много времени на просмотр оценочного отчета и рассмотрение автоматического и ручного преобразования.
Чтобы настроить и запустить ora2pg для создания отчета об оценке, см. Раздел «Предварительный переход : оценка » в Поваренной книге Oracle to Azure Database for PostgreSQL. Образец отчета об оценке ora2pg доступен для справки здесь.
Экспорт схемы Oracle
Мы рекомендуем использовать ora2pg для преобразования схемы Oracle и других объектов Oracle (типов, процедур, функций и т. Д.) В схему, совместимую с базой данных Azure для PostgreSQL. ora2pg включает в себя множество директив, которые помогут вам предварительно определить определенные типы данных.Например, вы можете использовать директиву DATA_TYPE
, чтобы заменить все NUMBER (*, 0) на bigint, а не на NUMERIC (38).
Вы можете запустить ora2pg для экспорта каждого объекта базы данных в файлы .sql. Затем вы можете просмотреть файлы .sql перед их импортом в базу данных Azure для PostgreSQL с помощью psql или выполнить сценарий .SQL в PgAdmin.
psql -f [FILENAME] -h [AzurePostgreConnection] -p 5432 -U [AzurePostgreUser] -d база данных
Например:
psql -f% пространство имен% \ schema \ sequence \ sequence.sql -h server1-server.postgres.database.azure.com -p 5432 -U имя пользователя @ server1-server -d база данных
Чтобы настроить и запустить ora2pg для преобразования схемы, см. Раздел Migration: Schema and data Cookbook Oracle to Azure Database for PostgreSQL.
Настройка схемы в базе данных Azure для PostgreSQL
Вы можете преобразовать схемы таблиц Oracle, хранимые процедуры, пакеты и другие объекты базы данных, чтобы сделать их совместимыми с Postgres, с помощью ora2pg перед запуском конвейера миграции в службе миграции базы данных Azure.По ссылкам ниже, как работать с ora2pg:
.
Служба миграции базы данных Azure также может создавать схему таблицы PostgreSQL. Служба обращается к схеме таблицы в подключенном источнике Oracle и создает совместимую схему таблицы в базе данных Azure для PostgreSQL. Обязательно проверьте и проверьте формат схемы в базе данных Azure для PostgreSQL после того, как служба миграции базы данных Azure завершит создание схемы и перемещение данных.
Важно
Служба миграции базы данных Azure создает только схему таблицы; другие объекты базы данных, такие как хранимые процедуры, пакеты, индексы и т. д., не создаются.
Также не забудьте удалить внешний ключ в целевой базе данных для полной загрузки. Обратитесь к разделу Миграция образца схемы этой статьи, чтобы узнать о сценарии, который можно использовать для удаления внешнего ключа. Используйте службу миграции базы данных Azure для работы с полной загрузкой и синхронизацией.
Когда схема таблицы PostgreSQL уже существует
Если вы создаете схему PostgreSQL с помощью таких инструментов, как ora2pg, до начала перемещения данных с помощью службы миграции баз данных Azure, сопоставьте исходные таблицы с целевыми таблицами в службе миграции баз данных Azure.
При создании нового проекта миграции Oracle в базу данных Azure для PostgreSQL вам будет предложено выбрать целевую базу данных и целевую схему на шаге «Выбор схем». Заполните целевую базу данных и целевую схему.
Экран Параметры миграции представляет список таблиц в источнике Oracle. Служба миграции базы данных Azure пытается сопоставить таблицы в исходной и целевой таблицах на основе имени таблицы. Если существует несколько совпадающих целевых таблиц с разным регистром, вы можете выбрать, какую целевую таблицу отображать.
Примечание
Если вам нужно сопоставить имена исходных таблиц с таблицами с разными именами, напишите по адресу [email protected], и мы можем предоставить сценарий для автоматизации процесса.
Когда схема таблицы PostgreSQL не существует
Если целевая база данных PostgreSQL не содержит информации о схеме таблицы, служба миграции базы данных Azure преобразует исходную схему и воссоздает ее в целевой базе данных. Помните, что служба миграции базы данных Azure создает только схему таблицы, а не другие объекты базы данных, такие как хранимые процедуры, пакеты и индексы.Чтобы служба миграции базы данных Azure создала схему за вас, убедитесь, что ваша целевая среда включает схему без существующих таблиц. Если служба миграции базы данных Azure обнаруживает какую-либо таблицу, служба предполагает, что схема была создана внешним инструментом, например ora2pg.
Важно
Служба миграции базы данных Azure требует, чтобы все таблицы создавались одинаково, используя либо службу миграции базы данных Azure, либо инструмент, например ora2pg, но не то и другое вместе.
Для начала:
Создайте схему в целевой базе данных в соответствии с требованиями вашего приложения.По умолчанию схема таблиц PostgreSQL и имена столбцов пишутся в нижнем регистре. С другой стороны, схема и столбцы таблицы Oracle по умолчанию написаны заглавными буквами.
На шаге «Выбор схем» укажите целевую базу данных и целевую схему.
На основе схемы, созданной в базе данных Azure для PostgreSQL, служба миграции базы данных Azure использует следующие правила преобразования:
Если имя схемы в источнике Oracle совпадает с именем схемы в базе данных Azure для PostgreSQL, то служба миграции базы данных Azure создает схему таблицы, используя тот же регистр, что и в целевой .
Например:
Исходная схема Oracle Целевая база данных PostgreSQL. Схема DMS создал schema.table.column HR targetHR.public public.countries.country_id HR targetHR.trgthr trgthr.countries.country_id HR цельHR.TARGETHR «TARGETHR». «COUNTRIES». «COUNTRY_ID» HR targetHR.HR «HR». «СТРАНЫ». «COUNTRY_ID» HR цельHR.Hr * Невозможно отобразить смешанные случаи * Чтобы создать схему со смешанным регистром и имена таблиц в целевом PostgreSQL, свяжитесь с [email protected]. Мы можем предоставить сценарий для настройки схемы таблицы со смешанным регистром в целевой базе данных PostgreSQL.
Зарегистрируйте поставщика ресурсов Microsoft.DataMigration
Войдите на портал Azure, выберите Все службы , а затем выберите Подписки .
Выберите подписку, в которой вы хотите создать экземпляр службы миграции базы данных Azure, а затем выберите Поставщики ресурсов .
Найдите миграцию, а затем справа от Microsoft.DataMigration выберите Register .
Создать экземпляр DMS
На портале Azure выберите + Создать ресурс , выполните поиск службы миграции базы данных Azure, а затем выберите Служба миграции базы данных Azure из раскрывающегося списка.
На экране Служба миграции базы данных Azure выберите Создать .
На экране Создать службу миграции укажите имя службы, подписку и новую или существующую группу ресурсов.
Выберите существующую виртуальную сеть или создайте новую.
Виртуальная сеть предоставляет службе миграции базы данных Azure доступ к исходному Oracle и целевой базе данных Azure для экземпляра PostgreSQL.
Дополнительные сведения о том, как создать виртуальную сеть на портале Azure, см. В статье Создание виртуальной сети с помощью портала Azure.
Выберите ценовой уровень.
Для получения дополнительной информации о стоимости и ценах см. Страницу с ценами.
Выберите Создать , чтобы создать службу.
Создать проект миграции
После создания службы найдите ее на портале Azure, откройте ее и затем создайте новый проект миграции.
На портале Azure выберите Все службы , выполните поиск службы миграции базы данных Azure, а затем выберите Службы миграции базы данных Azure .
На экране Службы миграции баз данных Azure найдите имя созданного вами экземпляра службы миграции баз данных Azure, а затем выберите этот экземпляр.
Выберите + Новый проект миграции .
На экране Новый проект миграции укажите имя проекта, в текстовом поле Тип исходного сервера выберите Oracle , в текстовом поле Тип целевого сервера выберите База данных Azure для PostgreSQL .
В разделе Выберите тип действия выберите Онлайн-миграция данных .
Примечание
В качестве альтернативы можно выбрать Создать проект только , чтобы создать проект миграции сейчас и выполнить миграцию позже.
Выберите Сохранить , обратите внимание на требования для успешного использования службы миграции базы данных Azure для выполнения онлайн-миграции, а затем выберите Создать и запустить действие .
Укажите сведения об источнике
Загрузить драйвер Oracle OCI
Выберите Сохранить , а затем на экране Установить драйвер OCI войдите в свою учетную запись Oracle и загрузите драйвер Instantclient-basiclite-windows.x64-12.2.0.1.0.zip (37,128,586 байт (ов)) (контрольная сумма SHA1: 865082268) отсюда.
Загрузите драйвер в общую папку.
Убедитесь, что к папке предоставлен общий доступ с указанным вами именем пользователя с минимальным доступом только для чтения. Служба миграции базы данных Azure обращается к общему ресурсу и считывает его, чтобы загрузить драйвер OCI в Azure, выдавая себя за указанное вами имя пользователя.
Указанное вами имя пользователя должно быть учетной записью Windows.
Укажите детали цели
Выберите Сохранить , а затем на экране Сведения о цели укажите сведения о подключении для целевой базы данных Azure для сервера PostgreSQL, который является предварительно подготовленным экземпляром базы данных Azure для PostgreSQL, для которого используется схема HR был развернут.
Выберите Сохранить , а затем на экране Сопоставить с целевыми базами данных сопоставьте исходную и целевую базы данных для миграции.
Если целевая база данных содержит то же имя, что и исходная, служба миграции баз данных Azure выбирает целевую базу данных по умолчанию.
Выберите Сохранить на экране Сводка миграции в текстовом поле Имя действия укажите имя действия миграции, а затем просмотрите сводку, чтобы убедиться, что исходные и целевые данные соответствуют указанным ранее .
Запустить миграцию
Мониторинг миграции
На экране действий миграции выберите Обновить , чтобы обновить отображение до тех пор, пока Состояние миграции не будет отображаться как Выполняется .
В разделе Имя базы данных выберите конкретную базу данных, чтобы перейти в состояние миграции для Полная загрузка данных и Синхронизация добавочных данных операций.
Полная загрузка данных покажет статус миграции начальной нагрузки, а добавочная синхронизация данных покажет статус отслеживания измененных данных (CDC).
Выполнить переключение миграции
После завершения начальной полной загрузки базы данных помечаются как Готовы к переключению .
Когда вы будете готовы завершить миграцию базы данных, выберите Start Cutover .
Обязательно остановите все входящие транзакции в исходную базу данных; подождите, пока счетчик Pending changes не покажет 0 .
Выберите Подтвердить , а затем выберите Применить .
Когда статус миграции базы данных показывает Завершено , подключите свои приложения к новой целевой базе данных Azure для экземпляра PostgreSQL.
Примечание
Поскольку PostgreSQL по умолчанию имеет schema.table.column в нижнем регистре, вы можете вернуться с верхнего регистра к нижнему регистру с помощью сценария из раздела Настройка схемы в базе данных Azure для PostgreSQL ранее в этой статье.
Следующие шаги
Ora2Pg: переносит Oracle на PostgreSQL
Ora2Pg — преобразователь схемы базы данных Oracle в PostgreSQL
Ora2Pg — это бесплатный инструмент, используемый для миграции базы данных Oracle в схему, совместимую с PostgreSQL. Он подключает вашу базу данных Oracle, автоматически сканирует ее и извлекает ее структуру или данные, а затем генерирует сценарии SQL, которые вы можете загрузить в свою базу данных PostgreSQL.
Ora2Pg можно использовать для чего угодно: от обратного проектирования базы данных Oracle до миграции огромных корпоративных баз данных или простой репликации некоторых данных Oracle в базу данных PostgreSQL.Он действительно прост в использовании и не требует каких-либо знаний о базе данных Oracle, кроме предоставления параметров, необходимых для подключения к базе данных Oracle.
Ora2Pg состоит из сценария Perl (ora2pg) и модуля Perl (Ora2Pg.pm), единственное, что вам нужно изменить, — это файл конфигурации ora2pg.conf, установив DSN для базы данных Oracle и, возможно, имя схемы. Как только это будет сделано, вам просто нужно установить тип экспорта, который вы хотите: ТАБЛИЦА с ограничениями, ВИД, MVIEW, TABLESPACE, SEQUENCE, INDEXES, TRIGGER, GRANT, FUNCTION, PROCEDURE, PACKAGE, PARTITION, TYPE, INSERT или COPY, FDW, QUERY. , ЧАЙНИК, СИНОНИМ.
По умолчанию Ora2Pg экспортирует в файл, который вы можете загрузить в PostgreSQL с помощью клиента psql, но вы также можете импортировать напрямую в базу данных PostgreSQL, установив его DSN в файл конфигурации. Со всеми параметрами конфигурации ora2pg.conf вы полностью контролируете, что и как следует экспортировать.
Включенных функций:
- Экспорт полной схемы базы данных (таблицы, представления, последовательности, индексы) с
уникальный, первичный, внешний ключ и ограничения проверки.- Экспорт грантов / привилегий для пользователей и групп.
- Экспорт диапазонов / списков разделов и подразделов.
- Экспортировать выборку таблицы (указав имена таблиц).
- Экспорт схемы Oracle в схему PostgreSQL 8.4+.
- Экспорт предопределенных функций, триггеров, процедур, пакетов и
упаковка тел.
- Экспорт полных данных или после предложения WHERE.
- Полная поддержка объекта Oracle BLOB как PG BYTEA.
- Экспорт представлений Oracle в виде таблиц PG.- Экспорт пользовательских типов Oracle.
- Обеспечить базовое автоматическое преобразование кода PLSQL в PLPGSQL.
- Работает на любой платформе.
- Экспорт таблиц Oracle как таблиц-обёрток сторонних данных.
- Экспорт материализованного представления.
- Показать отчет о содержимом базы данных Oracle.
- Оценка стоимости миграции базы данных Oracle.
- Оценка уровня сложности миграции базы данных Oracle.
- Оценка стоимости миграции PL / SQL кода из файла.- Оценка стоимости миграции запросов Oracle SQL, хранящихся в файле.
- Создание файлов XML ktr для использования с Penthalo Data Integrator (Kettle)
- Экспорт локатора Oracle и пространственной геометрии в PostGis.
- Экспорт DBLINK как Oracle FDW.
- Экспорт СИНОНИМОВ в виде представлений.
- Экспорт DIRECTORY как внешнюю таблицу или каталог для расширения external_file.
- Полный экспорт MySQL, как и база данных Oracle.
- Отправка списка заказов SQL по нескольким соединениям PostgreSQL
- Выполните различие между базами данных Oracle и PostgreSQL в тестовых целях.
Ora2Pg делает все возможное, чтобы автоматически преобразовать вашу базу данных Oracle в PostgreSQL, но есть еще ручные работы, которые нужно сделать. Специфичный для Oracle код PL / SQL, созданный для функций, процедур, пакетов и триггеров, необходимо проверить на соответствие синтаксису PostgreSQL. Вы найдете несколько полезных рекомендаций по переносу кода Oracle PL / SQL на PostgreSQL PL / PGSQL в разделе «Преобразование из других баз данных в PostgreSQL»: Oracle (http://wiki.postgresql.org/wiki/Main_Page).
См. Http: // ora2pg.darold.net/report.html для примера HTML отчета о миграции базы данных Oracle.
Все модули Perl всегда можно найти на CPAN (http://search.cpan.org/). Просто введите полное имя модуля (например, DBD :: Oracle) в поле ввода поиска, откроется страница для загрузки.
релизов Ora2Pg остаются на SF.net (https://sourceforge.net/projects/ora2pg/).
Под Windows необходимо установить Strawberry Perl (http://strawberryperl.com/) и соответствующие операционные системы клиентов Oracle.Кажется, что компиляция DBD :: Oracle из CPAN в Windows может быть проблемой, и по этому поводу мало документации (в основном устаревшая и не работающая). Установка бесплатной версии ActiveState Perl (http://www.activestate.com/activeperl) может помочь, поскольку кажется, что у них уже есть пакет DBD :: Oracle, который легко установить.
Требование
В системе должен быть установлен Oracle Instant Client или полная установка Oracle. Вы можете загрузить RPM из центра загрузки Oracle:
об / мин -ivh оракул-мгновенный клиент 12.2-базовый-12.2.0.1.0-1.x86_64.rpm
rpm -ivh оракул-Instantclient12.2-devel-12.2.0.1.0-1.x86_64.rpm
об / мин -ivh оракул-мгновенный клиент12.2-jdbc-12.2.0.1.0-1.x86_64.rpm
об / мин -ivh оракул-мгновенный клиент12.2-sqlplus-12.2.0.1.0-1.x86_64.rpm
или просто загрузите соответствующие ZIP-архивы из центра загрузки Oracle и установите их там, где хотите, например: / opt / oracle / instantclient_12_2 /
Вам также понадобится современный дистрибутив Perl (Perl 5.10 и выше). Для подключения к базе данных и перехода к ее миграции вам потребуется модуль DBI Perl> 1.614. Для миграции базы данных Oracle вам необходимо установить модули DBD :: Oracle Perl. Для миграции базы данных MySQL вам потребуются модули DBD :: MySQL Perl. Эти модули используются для подключения к базе данных, но они не являются обязательными, если вы хотите перенести входные файлы DDL.
Чтобы установить DBD :: Oracle и заставить его работать, вам необходимо установить клиентские библиотеки Oracle и определить переменную среды ORACLE_HOME.
Если вы планируете экспортировать базу данных MySQL, вам необходимо установить модуль Perl DBD :: mysql, который требует, чтобы были установлены клиентские библиотеки mysql.
В некоторых дистрибутивах Perl может потребоваться установка модуля Time :: HiRes Perl.
Дополнительно
По умолчанию Ora2Pg выгружает экспорт в плоские файлы, чтобы загрузить их в базу данных PostgreSQL, вам потребуется клиент PostgreSQL (psql). Если у вас его нет на хосте, на котором запущен Ora2Pg, вы всегда можете передать эти файлы на хост с установленным клиентом psql. Если вы предпочитаете загружать экспорт «на лету», потребуется модуль Perl DBD :: Pg.
Ora2Pg позволяет вам сбрасывать весь вывод в сжатый файл gzip, для этого вам понадобится модуль Compress :: Zlib Perl или, если вы предпочитаете использовать сжатие bzip2, программа bzip2 должна быть доступна в вашем PATH.
Установка Ora2Pg
Как и любой другой модуль Perl, Ora2Pg можно установить с помощью следующих команд:
tar xjf ora2pg-x.x.tar.bz2
cd ora2pg-x.x /
perl Makefile.PL
сделать && сделать установить
Это установит Ora2Pg.pm в репозиторий Perl вашего сайта, ora2pg в / usr / local / bin / и ora2pg.conf в / etc / ora2pg /.
В ОС Windows ™ вместо этого можно использовать:
perl Makefile.PL
dmake && dmake install
Это установит скрипты и библиотеки в каталог установки вашего Perl-сайта и файл ora2pg.conf, а также все файлы документации в C: \ ora2pg \
.
Чтобы установить ora2pg в каталог, отличный от каталога по умолчанию, просто используйте эту команду:
perl Makefile.PL PREFIX = <каталог_установки>
сделать && сделать установить
, затем перед использованием Ora2Pg укажите в PERL5LIB путь к вашему установочному каталогу.
экспорт PERL5LIB =
ora2pg -c config / ora2pg.conf -t ТАБЛИЦА -b outdir /
Упаковка
Если вы хотите собрать двоичный пакет для предпочитаемого вами дистрибутива Linux, посмотрите каталог Packaging / исходного tarball. Есть все необходимое для сборки пакетов RPM, Slackware и Debian. См. Файл README в этом каталоге.
Установка DBD :: Oracle
Ora2Pg необходим Perl-модуль DBD :: Oracle для подключения к базе данных Oracle из Perl DBI.Чтобы получить DBD :: Oracle, возьмите его из репозитория модуля Perl из CPAN.
После установки переменных среды ORACLE_HOME и LD_LIBRARY_PATH в качестве пользователя root установите DBD :: Oracle. Действуйте следующим образом:
экспорт LD_LIBRARY_PATH = / usr / lib / oracle / 12.2 / client64 / lib
экспорт ORACLE_HOME = / usr / lib / oracle / 12.2 / client64
perl -MCPAN -e 'установить DBD :: Oracle'
Если вы бежите впервые, он задаст много вопросов; вы можете сохранить настройки по умолчанию, нажав клавишу ENTER, но вам нужно указать один соответствующий сайт-зеркало для CPAN, чтобы загружать модули.Установите через CPAN вручную, если вышеуказанное не работает:
#perl -MCPAN -e оболочка
cpan> получить DBD :: Oracle
cpan> выйти
компакт-диск ~ / .cpan / build / DBD-Oracle *
экспорт LD_LIBRARY_PATH = / usr / lib / oracle / 11.2 / client64 / lib
экспорт ORACLE_HOME = / usr / lib / oracle / 11.2 / client64
perl Makefile.PL
сделать
сделать установку
Для установки DBD :: Oracle требуется, чтобы были установлены три пакета Oracle: мгновенный клиент, SDK и SQLplus, а также библиотека libaio1.
Если вы используете Instant Client из ZIP-архивов, LD_LIBRARY_PATH и ORACLE_HOME будут одинаковыми и должны быть установлены в каталог, в который вы установили файлы. Например: / opt / oracle / instantclient_12_2 /
Для настройки
Ora2Pg достаточно выбрать базу данных Oracle для экспорта и выбрать тип экспорта. Это можно сделать за минуту.
Прочитав эту документацию, вы также сможете:
- Выберите для экспорта только определенные таблицы и / или столбцы.- Переименовать некоторые таблицы и / или столбцы во время экспорта.
- Выберите данные для экспорта после предложения WHERE для каждой таблицы.
- Задержка ограничений базы данных при загрузке данных.
- Сжимайте экспортированные данные для экономии места на диске.
- и многое другое.
Полный контроль над миграцией базы данных Oracle осуществляется с помощью одного файла конфигурации с именем ora2pg.conf. Формат этого файла состоит из имени директивы в верхнем регистре, за которым следует символ табуляции и значение.Комментарии — это строки, начинающиеся с символа #.
Нет определенного порядка для размещения директив конфигурации, они устанавливаются во время чтения в файле конфигурации.
Для директив конфигурации, которые принимают только одно значение, вы можете использовать их несколько раз в файле конфигурации, но будет использоваться только последнее вхождение, найденное в файле. Для директив конфигурации, которые разрешают список значений, вы можете использовать его несколько раз, значения будут добавлены в список.Если вы используете директиву IMPORT для загрузки пользовательского файла конфигурации, директивы, определенные в этом файле, будут сохраняться из того места, где находится директива IMPORT, поэтому лучше поместить ее в конец файла конфигурации.
Значения, заданные в параметрах командной строки, переопределяют значения из файла конфигурации.
Использование Ora2Pg
Прежде всего убедитесь, что путь к библиотекам и двоичным файлам включает установку Oracle Instant Client:
экспорт LD_LIBRARY_PATH = / usr / lib / oracle / 11.2 / client64 / lib
экспорт PATH = "/ usr / lib / oracle / 11.2 / client64 / bin: $ PATH"
По умолчанию Ora2Pg будет искать файл конфигурации /etc/ora2pg/ora2pg.conf, если файл существует, вы можете просто выполнить:
/ usr / local / bin / ora2pg
или под Windows ™ запустите файл ora2pg.bat, расположенный в каталоге bin вашего perl. Пользователи Windows ™ также могут найти файл конфигурации шаблона в C: \ ora2pg
Если вы хотите вызвать другой файл конфигурации, просто укажите путь в качестве аргумента командной строки:
/ usr / local / bin / ora2pg -c / etc / ora2pg / new_ora2pg.conf
Вот все параметры командной строки, доступные при использовании ora2pg:
Использование: ora2pg [-dhpqv —estimate_cost —dump_as_html] [—option value]
-a | --allow str: разделенный запятыми список объектов, разрешенных для экспорта.
Также можно использовать с SHOW_COLUMN.
-b | --basedir dir: установить выходной каталог по умолчанию, в котором файлы
в результате экспорта будут храниться.
-c | --conf file: установить альтернативный файл конфигурации, отличный от
по умолчанию / etc / ora2pg / ora2pg.конф.
-d | --debug: включить подробный вывод.
-D | --data_type STR: разрешить замену пользовательского типа в командной строке.
-e | --exclude str: разделенный запятыми список объектов, которые нужно исключить из экспорта.
Также можно использовать с SHOW_COLUMN.
-h | --help: распечатать эту краткую справку.
-g | --grant_object type: извлечь привилегию из данного типа объекта.
Смотрите возможные значения в конфигурации GRANT_OBJECT.
-i | --input file: файл, содержащий код Oracle PL / SQL для преобразования
соединение с базой данных Oracle не инициировано.-j | --jobs num: Количество параллельных процессов для отправки данных в PostgreSQL.
-J | --copies num: количество параллельных соединений для извлечения данных из Oracle.
-l | --log file: установить файл журнала. По умолчанию - стандартный вывод.
-L | --limit num: количество кортежей, извлеченных из Oracle и сохраненных в
память перед записью, по умолчанию: 10000.
-м | --mysql: экспортировать базу данных MySQL вместо схемы Oracle.
-n | --namespace schema: установить схему Oracle для извлечения.-N | --pg_schema schema: установить путь_поиска PostgreSQL.
-о | --out file: установить путь к выходному файлу, в котором SQL будет
быть написанным. По умолчанию: output.sql в рабочем каталоге.
-p | --plsql: включить преобразование кода PLSQL в PLPGSQL.
-P | --parallel num: Количество параллельных таблиц для одновременного извлечения.
-q | --quiet: отключить индикатор выполнения.
-r | --relative: использовать \ ir вместо \ i в сгенерированных скриптах psql.
-s | --source DSN: Позволяет установить источник данных Oracle DBI.-t | --type export: установить тип экспорта. Это переопределит один
указано в файле конфигурации (TYPE).
-T | --temp_dir DIR: установить отдельный временный каталог, когда два
или несколько ora2pg запускаются параллельно.
-u | --user name: установить пользователя подключения к базе данных Oracle.
Вместо этого можно использовать переменную окружения ORA2PG_USER.
-v | --version: показать версию Ora2Pg и выйти.
-w | --password pwd: установить пароль пользователя базы данных Oracle.Вместо этого можно использовать переменную окружения ORA2PG_PASSWD.
--forceowner: Заставить ora2pg установить владельца таблиц и последовательностей, как в
База данных Oracle. Если установлено значение имени пользователя, это
будет использоваться как владелец объекта. По умолчанию это пользователь
используется для подключения к базе данных Pg, которая будет владельцем.
--nls_lang code: установить клиентскую кодировку Oracle NLS_LANG.
--client_encoding code: установить клиентскую кодировку PostgreSQL.--view_as_table str: разделенный запятыми список представлений для экспорта в виде таблицы.
--estimate_cost: активировать оценку стоимости миграции с помощью SHOW_REPORT
--cost_unit_value minutes: Количество минут для единицы оценки стоимости.
по умолчанию: 5 минут, соответствует переносу, выполненному
Эксперт по PostgreSQL. Установите значение 10, если это ваша первая миграция.
--dump_as_html: заставить ora2pg выгрузить отчет в HTML, используется только с
SHOW_REPORT.По умолчанию отчет выводится в виде простого текста.
--dump_as_csv: То же, что и выше, но заставляет ora2pg выгрузить отчет в CSV.
--dump_as_sheet: отчет об оценке миграции с одной строкой CSV для каждой базы данных.
--init_project NAME: Инициализировать типичное дерево проекта ora2pg. Верхний каталог
будет создан в базе проекта dir.
--project_base DIR: определить базовый каталог для деревьев проекта ora2pg. По умолчанию
это текущий каталог.
--print_header: используется с --dump_as_sheet для печати заголовка CSV
особенно для первого запуска ora2pg.--human_days_limit num: установить ограничение на количество человеко-дней, в которое выполняется миграция.
переключение уровня оценки с B на C. По умолчанию установлено на
5 человеко-дней.
--audit_user СПИСОК: разделенный запятыми список имен пользователей для фильтрации запросов в
таблица DBA_AUDIT_TRAIL. Используется только с SHOW_REPORT
и тип экспорта QUERY.
--pg_dsn DSN: установить источник данных PostgreSQL для прямого импорта.
--pg_user name: установить пользователя PostgreSQL для использования.--pg_pwd пароль: установить пароль PostgreSQL для использования.
--count_rows: Заставить ora2pg выполнить реальное количество строк в действии TEST.
--no_header: не добавлять заголовок Ora2Pg в выходной файл
--oracle_speed: используется, чтобы узнать, с какой скоростью Oracle может отправлять
данные. Никакие данные не будут обрабатываться или записываться.
--ora2pg_speed: используется, чтобы узнать, с какой скоростью Ora2Pg может отправлять
преобразованные данные. Ничего не будет написано.
См. Полную документацию по адресу http: // ora2pg.darold.net/ для получения дополнительной помощи или см. справочную страницу с man ora2pg.
ora2pg вернет 0 в случае успеха, 1 в случае ошибки. Он вернет 2, когда дочерний процесс был прерван и вы получили предупреждающее сообщение: «ВНИМАНИЕ: во время экспорта данных произошла ошибка. Проверьте, что произошло». В большинстве случаев это проблема OOM, сначала попробуйте уменьшить значение DATA_LIMIT.
Разработчики могут добавить свои собственные параметры в сценарий Perl ora2pg в качестве любой директивы конфигурации из ora2pg.conf можно передать в нижнем регистре новому экземпляру объекта Ora2Pg. См. Код ora2pg о том, как добавить свой вариант.
Обратите внимание, что производительность можно улучшить, обновив статистику на oracle:
НАЧАТЬ
DBMS_STATS.GATHER_SCHEMA_STATS
DBMS_STATS.GATHER_DATABASE_STATS
DBMS_STATS.GATHER_DICTIONARY_STATS
КОНЕЦ;
Создание шаблона миграции
Две опции —project_base и —init_project при использовании указывают ora2pg, что он должен создать шаблон проекта с рабочим деревом, файлом конфигурации и сценарием для экспорта всех объектов из базы данных Oracle.Вот пример использования команды:
ora2pg --project_base / app / migration / --init_project test_project
Создание проекта test_project.
/ приложение / миграция / test_project /
схема /
dblinks /
каталоги /
функции /
гранты /
mviews /
пакеты /
перегородки /
процедуры /
последовательности /
синонимы /
столы /
табличные пространства /
триггеры /
типы /
Просмотры/
источники /
функции /
mviews /
пакеты /
перегородки /
процедуры /
триггеры /
типы /
Просмотры/
данные/
config /
отчеты /
Создание универсального файла конфигурации
Создание скрипта export_schema.sh для автоматизации всего экспорта.
Создание скрипта import_all.sh для автоматизации всего импорта.
Он создает общий файл конфигурации, в котором вам просто нужно определить соединение с базой данных Oracle и сценарий оболочки с именем export_schema.sh. Каталог sources / будет содержать код Oracle, а схема / будет содержать код, перенесенный на PostgreSQL. Каталог reports / будет содержать отчеты в формате html с оценкой стоимости миграции.
Если вы хотите использовать свой собственный файл конфигурации по умолчанию, используйте параметр -c, чтобы указать путь к этому файлу.Переименуйте его с суффиксом .dist, если вы хотите, чтобы ora2pg применял общие значения конфигурации, в противном случае файл конфигурации будет скопирован без изменений.
После того, как вы установили соединение с базой данных Oracle, вы можете выполнить сценарий export_schema.sh, который будет экспортировать все типы объектов из вашей базы данных Oracle и выводить файлы DDL в подкаталоги схемы. В конце экспорта он даст вам команду экспортировать данные позже, когда импорт схемы будет выполнен и проверен.
Вы можете загрузить сгенерированные вручную файлы DDL или использовать второй сценарий import_all.sh для интерактивного импорта этих файлов. Если этот вид миграции не является для вас чем-то актуальным, рекомендуется использовать эти сценарии.
Подключение к базе данных Oracle
Есть 5 конфигурационных директив для управления доступом к базе данных Oracle.
- ORACLE_HOME
Используется для установки переменной среды ORACLE_HOME для библиотек Oracle, необходимых для модуля DBD :: Oracle Perl.
- ORACLE_DSN
Эта директива используется для установки имени источника данных в форме стандартного DBI DSN. Например:
dbi: Oracle: host = oradb_host.myhost.com; sid = DB_SID; port = 1521
или
dbi: Oracle: DB_SID
На 18c это может быть, например:
dbi: Oracle: host = 192.168.1.29; service_name = pdb1; port = 1521
для второй записи, SID должен быть объявлен в хорошо известном файле $ ORACLE_HOME / network / admin / tnsnames.ora или в пути, указанном в переменной среды TNS_ADMIN.
Для MySQL DSN будет выглядеть так:
dbi: mysql: host = 192.168.1.10; database = sakila; port = 3306
часть ‘sid’ заменяется на ‘database’.
- ORACLE_USER и ORACLE_PWD
Эти две директивы используются для определения пользователя и пароля для подключения к базе данных Oracle. Обратите внимание: если вы можете, лучше войти в систему как суперадминистратор Oracle, чтобы избежать проблем с грантами во время сканирования базы данных и убедиться, что ничего не пропало.
Если вы не предоставите учетные данные в ORACLE_PWD и установили Perl-модуль Term :: ReadKey, Ora2Pg запросит пароль в интерактивном режиме. Если ORACLE_USER не установлен, он также будет задан интерактивно.
Чтобы подключиться к локальному экземпляру ORACLE с подключениями «как sysdba», вы должны установить ORACLE_USER в «/» и пустой пароль.
- ПОЛЬЗОВАТЕЛИ_ГРАНТОВ
Установите для этой директивы значение 1, если вы подключаете базу данных Oracle как простой пользователь и у вас недостаточно грантов для извлечения данных из DBA_… столы. Вместо этого он будет использовать таблицы ALL _…
Предупреждение: если вы используете тип экспорта GRANT, вы должны установить для этой опции конфигурации значение 0, иначе она не будет работать.
- ОПЕРАЦИЯ
Эта директива может использоваться, если вы хотите изменить уровень изоляции по умолчанию для транзакции экспорта данных. По умолчанию теперь устанавливается уровень сериализуемой транзакции для обеспечения согласованности данных. Допустимые значения для этой директивы:
только чтение: «УСТАНОВИТЬ ТРАНЗАКЦИЮ ТОЛЬКО ДЛЯ ЧТЕНИЯ», readwrite: 'УСТАНОВИТЬ ТРАНЗАКЦИЮ ЧТЕНИЕ ЗАПИСЬ', сериализуемый: 'SET TRANSACTION ISOLATION LEVEL SERIALIZABLE' совершено: 'SET TRANSACTION ISOLATION LEVEL READ COMMITTED',
Выпуски до 6.2 использовался для установки уровня изоляции транзакции ТОЛЬКО ДЛЯ ЧТЕНИЯ, но в некоторых случаях это нарушало согласованность данных, поэтому теперь по умолчанию установлено значение SERIALIZABLE.
- INPUT_FILE
Эта директива не управляла подключением к базе данных Oracle или если она не запрещает использование любой базы данных Oracle, принимая файл в качестве аргумента. Установите эту директиву в файл, содержащий PL / SQL код Oracle, например функцию, процедуру или полное тело пакета, чтобы предотвратить подключение Ora2Pg к базе данных Oracle, и просто примените его инструмент преобразования к содержимому файла.Это может использоваться с большинством типов экспорта: ТАБЛИЦА, ТРИГГЕР, ПРОЦЕДУРА, ПРОСМОТР, ФУНКЦИЯ или ПАКЕТ и т. Д.
- ORA_INITIAL_COMMAND
Эта директива может использоваться для отправки начальной команды в Oracle сразу после соединения. Например, чтобы разблокировать политику перед чтением объектов или установить некоторые параметры сеанса. Эту директиву можно использовать несколько раз.
Шифрование данных с сервером Oracle
Если ваш файл конфигурации клиента Oracle уже включает метод шифрования, то DBD: Oracle использует эти параметры для шифрования соединения при извлечении данных.Например, если вы настроили файл конфигурации клиента Oracle (sqlnet.or или .sqlnet) со следующей информацией:
# Настроить шифрование подключений к Oracle
SQLNET.ENCRYPTION_CLIENT = требуется
SQLNET.ENCRYPTION_TYPES_CLIENT = (AES256, RC4_256)
SQLNET.CRYPTO_SEED = 'должно состоять из 10-70 случайных символов'
Любой инструмент, использующий клиент Oracle для связи с базой данных, будет зашифрован, если вы настроите шифрование сеанса, как описано выше.
Например, Perl DBI использует DBD-Oracle, который использует клиент Oracle для фактической обработки связи с базой данных. Если установка клиента Oracle, используемого Perl, настроена на запрос зашифрованных соединений, то ваше соединение Perl с базой данных Oracle также будет зашифровано.
Полная информация на https://kb.berkeley.edu/jivekb/entry.jspa?externalID=1005
Тестовое соединение
После того, как вы установили DSN базы данных Oracle, вы можете запустить ora2pg, чтобы проверить, работает ли он:
ora2pg -t SHOW_VERSION -c config / ora2pg.conf
покажет версию сервера базы данных Oracle. Найдите здесь некоторое время, чтобы протестировать вашу установку, так как здесь возникает большинство проблем, остальные шаги по настройке более технические.
Поиск и устранение неисправностей
Если файл output.sql не экспортировал ничего, кроме заголовка транзакции Pg и нижнего колонтитула, есть две возможные причины. Perl-скрипт ora2pg выводит ошибку ORA-XXX, что означает, что ваш DSN или данные для входа неверны, проверьте ошибку и свои настройки и повторите попытку.Сценарий perl ничего не говорит, а выходной файл пуст: у пользователя нет разрешения на извлечение чего-либо из базы данных. Попробуйте подключиться к Oracle как суперпользователь или взгляните на директиву USER_GRANTS выше и в следующем разделе, особенно директиву SCHEMA.
- ЛОГФАЙЛ
По умолчанию все сообщения отправляются на стандартный вывод. Если вы укажете путь к этой директиве, весь вывод будет добавлен в этот файл.
Схема Oracle для экспорта
Экспорт базы данных Oracle может быть ограничен определенной схемой или пространством имен, это может быть обязательным после пользователя, подключенного к базе данных.
- СХЕМА
Эта директива используется для установки имени схемы, используемой во время экспорта. Например:
СХЕМА ПРИЛОЖЕНИЙ
будет извлекать объекты, связанные со схемой APPS.
Если имя схемы не указано и включен EXPORT_SCHEMA, Ora2Pg экспортирует все объекты из всей схемы экземпляра Oracle с их именами, начинающимися с имени схемы.
- EXPORT_SCHEMA
По умолчанию схема Oracle не экспортируется в базу данных PostgreSQL, и все объекты создаются в пространстве имен Pg по умолчанию.Если вы хотите также экспортировать эту схему и создать все объекты в этом пространстве имен, установите для директивы EXPORT_SCHEMA значение 1. Это установит схему search_path в верхней части файла экспорта SQL равным имени схемы, заданному в директиве SCHEMA, со схемой pg_catalog по умолчанию. Если вы хотите изменить этот путь, используйте директиву PG_SCHEMA.
- CREATE_SCHEMA
Включение / отключение команды CREATE SCHEMA SQL при запуске выходного файла. Он включен по умолчанию и относится к типу экспорта ТАБЛИЦА.
- COMPILE_SCHEMA
По умолчанию Ora2Pg экспортирует только действительный код PL / SQL. Вы можете заставить Oracle снова скомпилировать недействительный код, чтобы получить возможность получить действительный статус и затем экспортировать его.
Включите эту директиву, чтобы Oracle скомпилировал схему перед экспортом кода. Когда эта директива включена и для SCHEMA задано определенное имя схемы, только недопустимые объекты в этой схеме будут перекомпилированы. Если SCHEMA не установлен, то вся схема будет перекомпилирована.Чтобы принудительно перекомпилировать недопустимый объект в определенной схеме, установите COMPILE_SCHEMA на имя схемы, которую вы хотите перекомпилировать.
Это попросит Oracle проверить PL / SQL, который мог быть признан недействительным, например, после экспорта / импорта. Статус «VALID» или «INVALID» применяется к функциям, процедурам, пакетам и пользовательским типам.
- EXPORT_INVALID
Если указанной выше директивы конфигурации недостаточно для проверки кода PL / SQL, включите эту директиву конфигурации, чтобы разрешить экспорт всего кода PL / SQL, даже если он помечен как недопустимый.Статус «VALID» или «INVALID» применяется к функциям, процедурам, пакетам и пользовательским типам.
- PG_SCHEMA
Позволяет вам определить / принудительно использовать схему PostgreSQL. По умолчанию, если вы установите EXPORT_SCHEMA в 1, PostgreSQL search_path будет установлен на имя экспортированной схемы, установленное как значение директивы SCHEMA.
Значение может быть списком имен схемы, разделенным запятыми, но не при использовании типа экспорта TABLE, потому что в этом случае он будет генерировать оператор CREATE SCHEMA и не поддерживает несколько имен схем.Например, если вы установите PG_SCHEMA на что-то вроде «user_schema, public», путь поиска будет установлен следующим образом:
SET search_path = user_schema, общедоступный;
, принудительное использование схемы (здесь user_schema), отличной от схемы Oracle, установленной в директиве SCHEMA.
Вы также можете установить search_path по умолчанию для пользователя PostgreSQL, которого вы используете для подключения к целевой базе данных, используя:
ALTER ROLE имя пользователя SET search_path TO user_schema, public;
в этом случае вам не нужно устанавливать PG_SCHEMA.
- SYSUSERS
Без явной схемы Ora2Pg будет экспортировать все объекты, которые не принадлежат системной схеме или роли:
CTXSYS, DBSNMP, EXFSYS, LBACSYS, MDSYS, MGMT_VIEW, OLAPSYS, ORDDATA, OWBSYS, ORDPLUGINS, ORDSYS, OUTLN, SI_INFORMTN_SCHEMA, SYS, SYSMAN, SYSTEM, WK_TEST, WKSYS, WKPROXY, WMSYS, XDB, APEX_PUBLIC_USER, DIP, FLOWS_020100, FLOWS_030000, FLOWS_040100, FLOWS_010600, FLOWS_FILES, MDDATA, ORACLE_OCM, SPATIAL_CSW_ADMIN_USR, SPATIAL_WFS_ADMIN_USR, XS $ NULL, PERFSTAT, SQLTXPLAIN, DMSYS, TSMSYS, WKSYS, APEX_040200, DVSYS, OJVMSYS, GSMADMIN_INTERNAL, APPQOSSYS, MGMT_VIEW, ODM, ODM_MTR, TRACESRV, MTMSYS, OWBSYS_AUDIT, WEBSYS, WK_PROXY, OSE $ HTTP $ ADMIN, AURORA $ JIS $ UTILITY $, AURORA $ ORB $ UNAUTHENTICATED, DBMS_PRIVILEGE_CAPTURE
После установки Oracle у вас может быть определено несколько других системных ролей.Чтобы добавить этих пользователей в список исключений схемы, просто установите в директиве конфигурации SYSUSERS список исключенных системных пользователей, разделенных запятыми. Например:
SYSUSERS ВНУТРЕННИЙ, SYSDBA, BI, HR, IX, OE, PM, SH
добавит пользователей INTERNAL и SYSDBA в список исключений схемы.
- FORCE_OWNER
По умолчанию владельцем объектов базы данных является тот, который вы используете для подключения к PostgreSQL с помощью команды psql.Если вы используете другого пользователя (например, postgres), вы можете заставить Ora2Pg установить владельцем объекта тот, который используется в базе данных Oracle, установив для директивы значение 1, или совершенно другое имя пользователя, установив значение директивы для этого имени пользователя .
- FORCE_SECURITY_INVOKER
Ora2Pg использует привилегии безопасности функции, установленные в Oracle, и часто определяется как SECURITY DEFINER.