H.1. oracle_fdw â доÑÑÑп к базам даннÑÑ Oracle #
ÐодÑÐ»Ñ oracle_fdw â ÑÑо ÑаÑÑиÑение Postgres Pro, коÑоÑое пÑедоÑÑавлÑÐµÑ Ð¾Ð±ÑÑÑÐºÑ ÑÑоÑонниÑ
даннÑÑ
Ð´Ð»Ñ Ð¿ÑоÑÑого и ÑÑÑекÑивного доÑÑÑпа к базам даннÑÑ
Oracle, вклÑÑÐ°Ñ Ð²ÑнеÑение наÑÑÐ¶Ñ ÑÑловий WHERE и обÑаÑений к ÑÑолбÑам, а Ñакже полноÑеннÑÑ Ð¿Ð¾Ð´Ð´ÐµÑÐ¶ÐºÑ EXPLAIN.
H.1.1. УÑÑановка #
oracle_fdw поÑÑавлÑеÑÑÑ Ð²Ð¼ÐµÑÑе Ñ Postgres Pro Standard в виде оÑделÑного пакеÑа oracle-fdw-std-16 (подÑобнÑе инÑÑÑÑкÑии по ÑÑÑановке пÑÐ¸Ð²ÐµÐ´ÐµÐ½Ñ Ð² Ðлаве 16). ÐÐ»Ñ oracle_fdw ÑÑебÑеÑÑÑ Oracle Instant Client веÑÑии 19.5.
ÐÐ»Ñ ÑиÑÑем на базе RPM (RHEL, SUSE, Ð ÐÐ ÐС, ROSA, ÐлÑÑ ÐинÑкÑ) загÑÑзиÑе RPM-Ð¿Ð°ÐºÐµÑ oracle-instantclient и ÑÑÑановиÑе его Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ rpm. ÐÑли Ð²Ñ Ð¸ÑполÑзÑеÑе ÑиÑÑÐµÐ¼Ñ Ð½Ð° базе Debian (Ubuntu, Astra Linux), нÑжно либо пÑеобÑазоваÑÑ RPM-Ð¿Ð°ÐºÐµÑ Ð² Debian-Ð¿Ð°ÐºÐµÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ alien, а заÑем ÑÑÑановиÑÑ ÐµÐ³Ð¾ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ dpkg, либо загÑÑзиÑÑ ZIP-аÑÑ
ив Ñ ÐºÐ»Ð¸ÐµÐ½Ñом и извлеÑÑ ÑодеÑжимое аÑÑ
ива в каÑалог /opt/oracle.
ÐоÑле ÑÑÑановки Postgres Pro Standard ÑоздайÑе ÑаÑÑиÑение oracle_fdw:
CREATE EXTENSION oracle_fdw;
ÐÑи ÑÑом опÑеделÑÑÑÑÑ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ñе ÑÑнкÑии и ÑоздаÑÑÑÑ Ð¾Ð±Ð¾Ð»Ð¾Ñка ÑÑоÑÐ¾Ð½Ð½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ .
ÐбÑаÑиÑе внимание, ÑÑо веÑÑÐ¸Ñ ÑаÑÑиÑениÑ, вÑÐ²Ð¾Ð´Ð¸Ð¼Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹ psql \dx или в ÑиÑÑемном каÑалоге pg_available_extensions, не ÑвлÑеÑÑÑ ÑÑÑановленной веÑÑией oracle_fdw. ЧÑÐ¾Ð±Ñ ÑзнаÑÑ Ð²ÐµÑÑÐ¸Ñ oracle_fdw, иÑполÑзÑйÑе ÑÑнкÑÐ¸Ñ oracle_diag.
H.1.2. ÐнÑÑÑеннее ÑÑÑÑойÑÑво #
oracle_fdw задаÑÑ Ð´Ð»Ñ Ð¿Ð°ÑамеÑÑа MODULE ÑеанÑа Oracle знаÑение postgres, а Ð´Ð»Ñ Ð¿Ð°ÑамеÑÑа ACTION â Ð½Ð¾Ð¼ÐµÑ Ð²Ð½ÑÑÑеннего пÑоÑеÑÑа. ÐÑо Ð¿Ð¾Ð¼Ð¾Ð³Ð°ÐµÑ Ð¸Ð´ÐµÐ½ÑиÑиÑиÑоваÑÑ ÑÐµÐ°Ð½Ñ Oracle и позволÑÐµÑ Ð¾ÑÑлеживаÑÑ ÐµÐ³Ð¾ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ DBMS_MONITOR.SERV_MOD_ACT_TRACE_ENABLE.
oracle_fdw иÑполÑзÑÐµÑ Ð¸Ð½ÑеÑÑÐµÐ¹Ñ Ð¼Ð°ÑÑивов Oracle, ÑÑÐ¾Ð±Ñ Ð¼Ð¸Ð½Ð¸Ð¼Ð¸Ð·Ð¸ÑоваÑÑ Ð²Ð·Ð°Ð¸Ð¼Ð¾Ð´ÐµÐ¹ÑÑвие клиенÑ-ÑеÑвеÑ. Ð Ð°Ð·Ð¼ÐµÑ Ð¿Ð°ÐºÐµÑа можно наÑÑÑоиÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¿Ð°ÑамеÑÑа ÑаблиÑÑ prefetch, коÑоÑÑй по ÑмолÑÐ°Ð½Ð¸Ñ Ñавен 50.
ÐмеÑÑо иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ PLAN_TABLE Ð´Ð»Ñ Ð¿Ð¾ÑÑÑÐ¾ÐµÐ½Ð¸Ñ Ð¿Ð»Ð°Ð½Ð° запÑоÑа Oracle (ÑÑо поÑÑебовало Ð±Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑооÑвеÑÑÑвÑÑÑей ÑаблиÑÑ Ð² базе даннÑÑ
Oracle), oracle_fdw пÑименÑÐµÑ Ð¿Ð»Ð°Ð½Ñ Ð²ÑполнениÑ, Ñ
ÑанÑÑиеÑÑ Ð² кеÑе библиоÑеки. ÐÐ»Ñ ÑÑого запÑÐ¾Ñ Oracle опиÑÑваеÑÑÑ Ñвно, ÑÑо иниÑииÑÑÐµÑ ÐµÐ³Ð¾ анализ. СложноÑÑÑ Ð·Ð°ÐºÐ»ÑÑаеÑÑÑ Ð² опÑеделении SQL_ID и CHILD_NUMBER опеÑаÑоÑа в V$SQL, поÑколÑÐºÑ ÑÑÐ¾Ð»Ð±ÐµÑ SQL_TEXT огÑаниÑен пеÑвÑми 1000 байÑами запÑоÑа. ÐоÑÑÐ¾Ð¼Ñ oracle_fdw добавлÑÐµÑ Ðº запÑоÑÑ ÐºÐ¾Ð¼Ð¼ÐµÐ½ÑаÑий Ñ Ñ
еÑем ÑекÑÑа запÑоÑа. ÐÑÐ¾Ñ Ñ
ÐµÑ Ð¸ÑполÑзÑеÑÑÑ Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка в V$SQL. ФакÑиÑеÑкий план вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ инÑоÑмаÑÐ¸Ñ Ð¾ ÑÑоимоÑÑи извлекаеÑÑÑ Ð¸Ð· V$SQL_PLAN.
oracle_fdw иÑполÑзÑÐµÑ ÑÑÐ¾Ð²ÐµÐ½Ñ Ð¸Ð·Ð¾Ð»ÑÑии ÑÑанзакÑий SERIALIZABLE на ÑÑоÑоне Oracle, коÑоÑÑй ÑооÑвеÑÑÑвÑÐµÑ ÑÑÐ¾Ð²Ð½Ñ REPEATABLE READ в Postgres Pro. ÐÑо необÑ
одимо Ð´Ð»Ñ Ð¾Ð±ÐµÑпеÑÐµÐ½Ð¸Ñ ÑоглаÑованноÑÑи даннÑÑ
, поÑколÑÐºÑ Ð¾Ð´Ð¸Ð½ запÑÐ¾Ñ Postgres Pro Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿ÑеобÑазован в неÑколÑко запÑоÑов к Oracle (напÑимеÑ, пÑи Ñоединении вложеннÑм Ñиклом). Ðднако ÑеализаÑÐ¸Ñ SERIALIZABLE в Oracle Ð¸Ð¼ÐµÐµÑ Ð½ÐµÐºÐ¾ÑоÑÑе оÑобенноÑÑи â за подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº ÑÐ°Ð·Ð´ÐµÐ»Ñ ÐÑоблемÑ.
ТÑанзакÑÐ¸Ñ Oracle ÑикÑиÑÑеÑÑÑ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвенно пеÑед ÑикÑаÑией локалÑной ÑÑанзакÑии, поÑÑÐ¾Ð¼Ñ Ð·Ð°Ð²ÐµÑÑÑÐ½Ð½Ð°Ñ ÑÑанзакÑÐ¸Ñ Postgres Pro гаÑанÑиÑÑÐµÑ Ð·Ð°Ð²ÐµÑÑение ÑÑанзакÑии Oracle. Ðднако оÑÑаÑÑÑÑ Ð½ÐµÐ±Ð¾Ð»ÑÑÐ°Ñ Ð²ÐµÑоÑÑноÑÑÑ, ÑÑо ÑÑанзакÑÐ¸Ñ Postgres Pro не ÑÐ¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð²ÐµÑÑиÑÑÑÑ, даже еÑли ÑÑанзакÑÐ¸Ñ Oracle Ñже бÑла заÑикÑиÑована. ÐзбежаÑÑ ÑÑого можно ÑолÑко Ñ Ð¸ÑполÑзованием двÑÑ ÑазнÑÑ ÑÑанзакÑий и менеджеÑа ÑÑанзакÑий, ÑÑо вÑÑ Ð¾Ð´Ð¸Ñ Ð·Ð° Ñамки возможноÑÑей обÑÑÑки ÑÑоÑÐ¾Ð½Ð½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ . ÐодгоÑовленнÑе опеÑаÑоÑÑ Ñ ÑÑаÑÑием Oracle не поддеÑживаÑÑÑÑ Ð¿Ð¾ Ñой же пÑиÑине.
H.1.3. ÐÑоÑÑой пÑÐ¸Ð¼ÐµÑ #
Ðиже пÑедÑÑавлен пÑÐ¸Ð¼ÐµÑ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ oracle_fdw. ÐÐ»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð±Ð¾Ð»ÐµÐµ деÑалÑной инÑоÑмаÑии обÑаÑиÑеÑÑ Ðº Ñазделам ÐаÑамеÑÑÑ Ð¸ ÐÑполÑзование. Также ÑледÑÐµÑ Ð¾Ð·Ð½Ð°ÐºÐ¾Ð¼Ð¸ÑÑÑÑ Ñ Ð´Ð¾ÐºÑменÑаÑией по ÑабоÑе Ñо ÑÑоÑонними даннÑми и ÑпомÑнÑÑÑми в ней командами.
Рданном пÑимеÑе пÑедполагаеÑÑÑ, ÑÑо Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе подклÑÑиÑÑÑÑ Ðº Oracle, вÑполнив ÑледÑÑÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð¾Ñ Ð¸Ð¼ÐµÐ½Ð¸ полÑзоваÑÐµÐ»Ñ Ð¾Ð¿ÐµÑаÑионной ÑиÑÑемÑ, коÑоÑÑй Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð¿ÑÑкаÑÑ ÑеÑÐ²ÐµÑ Postgres Pro (напÑимеÑ, postgres):
sqlplus orauser/orapwd@//dbserver.mydomain.com:1521/ORADB
ÐÑли Ð²Ñ ÑÑпеÑно подклÑÑилиÑÑ, знаÑÐ¸Ñ ÐºÐ»Ð¸ÐµÐ½Ñ Oracle и ÑÑеда наÑÑÑÐ¾ÐµÐ½Ñ Ð¿ÑавилÑно. Также пÑедполагаеÑÑÑ, ÑÑо Ð¿Ð°ÐºÐµÑ Ñ ÑаÑÑиÑением oracle_fdw Ñже ÑÑÑановлен (Ñм. Ñаздел УÑÑановка).
ÐÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼ доÑÑÑп к Ñакой ÑаблиÑе:
SQL> DESCRIBE oratab Name Null? Type ------------------------------- -------- ------------ ID NOT NULL NUMBER(5) TEXT VARCHAR2(30) FLOATING NOT NULL NUMBER(7,2)
ÐаÑÑÑойÑе oracle_fdw Ð¾Ñ Ð¸Ð¼ÐµÐ½Ð¸ ÑÑпеÑполÑзоваÑÐµÐ»Ñ Postgres Pro ÑледÑÑÑим обÑазом:
pgdb=# CREATE EXTENSION oracle_fdw;
pgdb=# CREATE SERVER oradb FOREIGN DATA WRAPPER oracle_fdw
OPTIONS (dbserver '//dbserver.mydomain.com:1521/ORADB');Ðожно иÑполÑзоваÑÑ Ð´ÑÑгие ваÑианÑÑ ÑÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð¸Ð¼ÐµÐ½Ð¸ или локалÑнÑе ÑоединениÑ, Ñм. опиÑание dbserver ниже.
РекомендÑеÑÑÑ ÑабоÑаÑÑ Ð¾Ñ Ð¸Ð¼ÐµÐ½Ð¸ ÑÑпеÑполÑзоваÑелÑ, ÑолÑко когда ÑÑо дейÑÑвиÑелÑно Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾, поÑÑÐ¾Ð¼Ñ Ð¿ÑедлагаеÑÑÑ ÑазÑеÑиÑÑ Ð¾Ð±ÑÑÐ½Ð¾Ð¼Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ð¸ÑполÑзоваÑÑ ÑÑоÑонний ÑеÑÐ²ÐµÑ (ÑÑо необÑзаÑелÑно Ð´Ð»Ñ ÑабоÑÑ Ð¿ÑимеÑа, но ÑекомендÑеÑÑÑ):
pgdb=# GRANT USAGE ON FOREIGN SERVER oradb TO pguser;
ÐаÑем можно подклÑÑиÑÑÑÑ Ðº Postgres Pro Ð¾Ñ Ð¸Ð¼ÐµÐ½Ð¸ pguser и задаÑÑ ÑледÑÑÑие паÑамеÑÑÑ:
pgdb=> CREATE USER MAPPING FOR pguser SERVER oradb
OPTIONS (user 'orauser', password 'orapwd');ЧÑÐ¾Ð±Ñ Ð½Ðµ Ñ ÑаниÑÑ Ð¿Ð°Ñоли Oracle, можно иÑполÑзоваÑÑ Ð²Ð½ÐµÑнÑÑ Ð°ÑÑенÑиÑикаÑиÑ.
pgdb=> CREATE FOREIGN TABLE oratab (
id integer OPTIONS (key 'true') NOT NULL,
text character varying(30),
floating double precision NOT NULL
) SERVER oradb OPTIONS (schema 'ORAUSER', table 'ORATAB');ÐомниÑе, ÑÑо Ð¸Ð¼Ñ ÑаблиÑÑ Ð¸ Ð¸Ð¼Ñ ÑÑ ÐµÐ¼Ñ (поÑледнее необÑзаÑелÑно), как пÑавило, пиÑÑÑÑÑ Ð·Ð°Ð³Ð»Ð°Ð²Ð½Ñми бÑквами.
ТепеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ обÑаÑаÑÑÑÑ Ðº ÑÑой ÑаблиÑе, как к обÑÑной ÑаблиÑе Postgres Pro.
H.1.4. ÐÑполÑзование #
H.1.4.1. РазÑеÑÐµÐ½Ð¸Ñ Oracle #
ÐолÑзоваÑÐµÐ»Ñ Oracle поÑÑебÑеÑÑÑ Ð¿Ñаво CREATE SESSION, а Ñакже доÑÑÑп к ÑаÑÑмаÑÑиваемой ÑаблиÑе или пÑедÑÑавлениÑ. ÐбÑаÑиÑе внимание, ÑÑо oracle_fdw обÑаÑаеÑÑÑ Ðº ÑаблиÑе Oracle во вÑÐµÐ¼Ñ Ð¿Ð»Ð°Ð½Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð·Ð°Ð¿ÑоÑа, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ ÐµÑ Ð¾Ð¿Ñеделение. ÐÑо пÑоиÑÑ
Ð¾Ð´Ð¸Ñ Ð´Ð¾ пÑовеÑки пÑав Ð´Ð»Ñ Ð²Ð½ÐµÑней ÑаблиÑÑ. ÐоÑÑÐ¾Ð¼Ñ ÐµÑли Ð²Ñ Ð¿Ð¾Ð¿ÑÑаеÑеÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ Ð´Ð¾ÑÑÑп к внеÑней ÑаблиÑе без ÑооÑвеÑÑÑвÑÑÑиÑ
пÑав в Postgres Pro, Ð¼Ð¾Ð¶ÐµÑ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ½ÑÑÑ Ð¾Ñибка Oracle. ÐÑо ожидаемо и не пÑедÑÑавлÑÐµÑ ÑгÑÐ¾Ð·Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи.
ÐÐ»Ñ EXPLAIN VERBOSE полÑзоваÑÐµÐ»Ñ Ñакже поÑÑебÑÑÑÑÑ Ð¿Ñава SELECT Ð´Ð»Ñ V$SQL и V$SQL_PLAN.
H.1.4.2. Ð¡Ð¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ #
oracle_fdw кеÑиÑÑÐµÑ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Oracle, поÑколÑÐºÑ ÑоздаваÑÑ ÑÐµÐ°Ð½Ñ Oracle Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ оÑделÑного запÑоÑа ÑлиÑком доÑого. ÐÑе ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð°Ð²ÑомаÑиÑеÑки закÑÑваÑÑÑÑ Ð¿Ð¾ завеÑÑении ÑеанÑа Postgres Pro.
ЧÑÐ¾Ð±Ñ Ð·Ð°ÐºÑÑÑÑ Ð²Ñе кеÑиÑованнÑе ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Oracle, можно иÑполÑзоваÑÑ ÑÑнкÑÐ¸Ñ close_connections. ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾ Ð´Ð»Ñ Ð´Ð»Ð¸ÑелÑнÑÑ
ÑеанÑов, коÑоÑÑе вÑÐµÐ¼Ñ Ð¾Ñ Ð²Ñемени обÑаÑаÑÑÑÑ Ðº ÑÑоÑонним ÑаблиÑам, ÑÑÐ¾Ð±Ñ Ð¸Ð·Ð±ÐµÐ¶Ð°ÑÑ Ð±Ð»Ð¾ÐºÐ¸Ñовки ÑеÑÑÑÑов, необÑ
одимÑÑ
Ð´Ð»Ñ Ð¾ÑкÑÑÑого ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Oracle. ÐÑзÑваÑÑ ÑÑÑ ÑÑнкÑÐ¸Ñ Ð²Ð½ÑÑÑи ÑÑанзакÑии, изменÑÑÑей даннÑе Oracle, нелÑзÑ.
H.1.4.3. СÑолбÑÑ #
ÐÑи опÑеделении ÑÑоÑонней ÑаблиÑÑ Ð²ÑполнÑеÑÑÑ ÑопоÑÑавление ÑÑолбÑов ÑаблиÑÑ Oracle Ñо ÑÑолбÑами Postgres Pro в поÑÑдке Ð¸Ñ Ð¾Ð¿ÑеделениÑ.
oracle_fdw вклÑÑÐ¸Ñ Ð² запÑÐ¾Ñ Ðº Oracle ÑолÑко Ñе ÑÑолбÑÑ, коÑоÑÑе дейÑÑвиÑелÑно Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ñ Ð·Ð°Ð¿ÑоÑÑ Postgres Pro.
Ð ÑаблиÑе Postgres Pro Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð±Ð¾Ð»ÑÑе или менÑÑе ÑÑолбÑов, Ñем в ÑаблиÑе Oracle. ÐÑли в ней болÑÑе ÑÑолбÑов, и ÑÑи ÑÑолбÑÑ Ð¸ÑполÑзÑÑÑÑÑ, вÑводиÑÑÑ Ð¿ÑедÑпÑеждение и возвÑаÑаÑÑÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ NULL.
ÐÑежде Ñем вÑполниÑÑ UPDATE или DELETE, пÑовеÑÑÑе, ÑÑо паÑамеÑÑ key ÑÑÑановлен Ð´Ð»Ñ Ð²ÑеÑ
ÑÑолбÑов, вÑ
одÑÑиÑ
в пеÑвиÑнÑй клÑÑ ÑаблиÑÑ. ÐÑли ÑÑо ÑÑловие не ÑоблÑдено, вÑполнение опеÑаÑий пÑиведÑÑ Ðº оÑибкам.
H.1.4.4. Ð¢Ð¸Ð¿Ñ Ð´Ð°Ð½Ð½ÑÑ #
СÑолбÑÑ Ð² Postgres Pro Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ñ Ñ Ñипами даннÑÑ
, коÑоÑÑе oracle_fdw Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑеобÑазовÑваÑÑ (Ñм. ÑаблиÑÑ Ð¿ÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½Ð¸Ð¶Ðµ). ÐÑо огÑаниÑение дейÑÑвÑÐµÑ ÑолÑко Ð´Ð»Ñ Ð¸ÑполÑзÑемÑÑ
ÑÑолбÑов, поÑÑÐ¾Ð¼Ñ Ð¼Ð¾Ð¶Ð½Ð¾ опÑеделиÑÑ Â«ÑикÑивнÑе» ÑÑолбÑÑ Ð´Ð»Ñ Ð½ÐµÐ¿ÑеобÑазÑемÑÑ
Ñипов даннÑÑ
, пока к ним не пÑоизводиÑÑÑ Ð¾Ð±ÑаÑение (ÑÑÐ¾Ñ Ð¿Ð¾Ð´Ñ
од ÑабоÑÐ°ÐµÑ ÑолÑко Ð´Ð»Ñ SELECT, но не пÑи изменении ÑÑоÑонниÑ
даннÑÑ
). ÐÑли знаÑение Oracle пÑевÑÑÐ°ÐµÑ ÑÐ°Ð·Ð¼ÐµÑ ÑÑолбÑа Postgres Pro (напÑимеÑ, Ð´Ð»Ð¸Ð½Ñ ÑÑолбÑа varchar или макÑималÑное знаÑение integer), ÑÑо пÑиведÑÑ Ðº оÑибке вÑемени вÑполнениÑ.
РаÑÑиÑение oracle_fdw авÑомаÑиÑеÑки обÑабаÑÑÐ²Ð°ÐµÑ ÑледÑÑÑие пÑеобÑазованиÑ:
Тип Oracle | ÐозможнÑе ÑÐ¸Ð¿Ñ PostgreSQL
-------------------------+--------------------------------------------------
CHAR | char, varchar, text
NCHAR | char, varchar, text
VARCHAR | char, varchar, text
VARCHAR2 | char, varchar, text, json
NVARCHAR2 | char, varchar, text
CLOB | char, varchar, text, json
LONG | char, varchar, text
RAW | uuid, bytea
BLOB | bytea
BFILE | bytea (read-only)
LONG RAW | bytea
NUMBER | numeric, float4, float8, char, varchar, text
NUMBER(n,m) with m<=0 | numeric, float4, float8, int2, int4, int8,
| boolean, char, varchar, text
FLOAT | numeric, float4, float8, char, varchar, text
BINARY_FLOAT | numeric, float4, float8, char, varchar, text
BINARY_DOUBLE | numeric, float4, float8, char, varchar, text
DATE | date, timestamp, timestamptz, char, varchar, text
TIMESTAMP | date, timestamp, timestamptz, char, varchar, text
TIMESTAMP WITH TIME ZONE | date, timestamp, timestamptz, char, varchar, text
TIMESTAMP WITH | date, timestamp, timestamptz, char, varchar, text
LOCAL TIME ZONE |
INTERVAL YEAR TO MONTH | interval, char, varchar, text
INTERVAL DAY TO SECOND | interval, char, varchar, text
XMLTYPE | xml, char, varchar, text
MDSYS.SDO_GEOMETRY | geometry (Ñм. "поддеÑжка PostGIS" ниже)ÐÑи пÑеобÑазовании Ñипа NUMBER в boolean знаÑение 0 инÑеÑпÑеÑиÑÑеÑÑÑ ÐºÐ°Ðº false, а лÑбое дÑÑгое знаÑение â как true.
ÐÑÑавка или изменение даннÑÑ
XMLTYPE возможно ÑолÑко Ð´Ð»Ñ Ð·Ð½Ð°Ñений, длина коÑоÑÑÑ
не пÑевÑÑÐ°ÐµÑ Ð¼Ð°ÐºÑималÑного ÑазмеÑа Ñипа VARCHAR2 (4000 или 32767, в завиÑимоÑÑи Ð¾Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¿Ð°ÑамеÑÑа MAX_STRING_SIZE.
РнаÑÑоÑÑее вÑÐµÐ¼Ñ Ñип NCLOB не поддеÑживаеÑÑÑ, Ñак как Oracle не вÑполнÑÐµÑ Ð°Ð²ÑомаÑиÑеÑкое пÑеобÑазование ÑÑого Ñипа в клиенÑÑкÑÑ ÐºÐ¾Ð´Ð¸ÑовкÑ.
ÐÑли ÑÑебÑеÑÑÑ Ð¿ÑеобÑазоваÑÑ TIMESTAMP WITH LOCAL TIMEZONE в timestamp, ÑекомендÑеÑÑÑ ÑÑÑановиÑÑ Ð¿Ð°ÑамеÑÑ set_timezone на ÑÑоÑоннем ÑеÑвеÑе.
ÐÑли ÑÑебÑÑÑÑÑ Ð¿ÑеобÑазованиÑ, не ÑказаннÑе вÑÑе, опÑеделиÑе ÑооÑвеÑÑÑвÑÑÑее пÑедÑÑавление в Oracle или Postgres Pro.
H.1.4.5. УÑÐ»Ð¾Ð²Ð¸Ñ WHERE и пÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ORDER BY #
Postgres Pro бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑ Ð²Ñе подÑ
одÑÑие ÑаÑÑи пÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ WHERE в каÑеÑÑве ÑилÑÑÑа Ð´Ð»Ñ ÑканиÑованиÑ. ÐапÑÐ¾Ñ Oracle, ÑÑоÑмиÑованнÑй oracle_fdw, бÑÐ´ÐµÑ Ð²ÐºÐ»ÑÑаÑÑ Ð¿Ñедложение WHERE, ÑооÑвеÑÑÑвÑÑÑее ÑÑим ÑилÑÑÑам, еÑли Ñакое ÑÑловие можно без пÑоблем пÑеобÑазоваÑÑ Ð² SQL Oracle. ÐÑа ÑÑнкÑиÑ, извеÑÑÐ½Ð°Ñ ÐºÐ°Ðº вÑнеÑение наÑÑÐ¶Ñ Ð¿Ñедложений WHERE, Ð¼Ð¾Ð¶ÐµÑ Ð·Ð½Ð°ÑиÑелÑно ÑокÑаÑиÑÑ ÐºÐ¾Ð»Ð¸ÑеÑÑво ÑÑÑок, извлекаемÑÑ
из Oracle, а Ñакже помоÑÑ Ð¾Ð¿ÑимизаÑоÑÑ Oracle вÑбÑаÑÑ Ñ
оÑоÑий план доÑÑÑпа к необÑ
одимÑм ÑаблиÑам.
ÐÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ORDER BY бÑдÑÑ Ð°Ð½Ð°Ð»Ð¾Ð³Ð¸Ñно вÑноÑиÑÑÑÑ Ð½Ð°ÑÑÐ¶Ñ Ð² Oracle, когда ÑÑо возможно. ÐбÑаÑиÑе внимание, ÑÑо ÑÑÐ»Ð¾Ð²Ð¸Ñ ORDER BY, ÑоÑÑиÑÑÑÑие по ÑÑÑокам Ñимволов, не бÑдÑÑ Ð²ÑноÑиÑÑÑÑ Ð½Ð°ÑÑжÑ, поÑколÑÐºÑ Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ гаÑанÑиÑоваÑÑ, ÑÑо поÑÑдок ÑоÑÑиÑовки в Postgres Pro ÑовпадÑÑ Ñ Ð¿Ð¾ÑÑдком в Oracle.
ÐÐ»Ñ ÑÑпеÑного вÑнеÑÐµÐ½Ð¸Ñ Ð½Ð°ÑÑÐ¶Ñ ÑÐ°ÐºÐ¸Ñ Ð¿Ñедложений ÑекомендÑеÑÑÑ Ð¸ÑполÑзоваÑÑ Ð¿ÑоÑÑÑе ÑÑÐ»Ð¾Ð²Ð¸Ñ Ð´Ð»Ñ ÑÑоÑонней ÑаблиÑÑ. ÐÑбиÑайÑе ÑÐ¸Ð¿Ñ Ð´Ð°Ð½Ð½ÑÑ ÑÑолбÑов Postgres Pro, ÑооÑвеÑÑÑвÑÑÑие Ñипам Oracle, поÑколÑÐºÑ Ð² пÑоÑивном ÑлÑÑае ÑÑÐ»Ð¾Ð²Ð¸Ñ Ð½Ðµ ÑмогÑÑ Ð±ÑÑÑ Ð¿ÑеобÑазованÑ.
ÐÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ now(), transaction_timestamp(), current_timestamp, current_date и localtimestamp бÑдÑÑ Ð¿ÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ñ ÐºÐ¾ÑÑекÑно.
РвÑводе EXPLAIN бÑÐ´ÐµÑ Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½ запÑоÑ, оÑпÑавленнÑй в Oracle, ÑÑо позволÑÐµÑ ÑвидеÑÑ, какие ÑÑÐ»Ð¾Ð²Ð¸Ñ Ð±Ñли пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ñ Ð² Oracle и каким обÑазом.
H.1.4.6. Ð¡Ð¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ ÑÑоÑÐ¾Ð½Ð½Ð¸Ñ ÑÐ°Ð±Ð»Ð¸Ñ #
РаÑÑиÑение oracle_fdw поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð²ÑÐ½Ð¾Ñ Ñоединений на ÑеÑÐ²ÐµÑ Oracle. ÐÑо ознаÑаеÑ, ÑÑо Ñоединение ÑÑоÑÐ¾Ð½Ð½Ð¸Ñ ÑÐ°Ð±Ð»Ð¸Ñ Ð±ÑÐ´ÐµÑ Ð²Ñполнено в ÑÐ°Ð¼ÐºÐ°Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ запÑоÑа Oracle на ÑÑоÑоне Oracle.
Ðднако Ð´Ð»Ñ Ð²ÑноÑа Ñоединений наÑÑÐ¶Ñ ÐµÑÑÑ ÑледÑÑÑие огÑаниÑениÑ:
Ðбе ÑаблиÑÑ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ñ Ð½Ð° одном и Ñом же ÑÑоÑоннем ÑеÑвеÑе.
Ð¡Ð¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñ ÑÑÐµÐ¼Ñ Ð¸ более ÑаблиÑами не вÑноÑÑÑÑÑ Ð½Ð°ÑÑжÑ.
Соединение должно бÑÑÑ Ð² ÑÐ°Ð¼ÐºÐ°Ñ Ð¾Ð¿ÐµÑаÑоÑа
SELECT.РаÑÑиÑение oracle_fdw должно имеÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð²ÑнеÑÑи наÑÑÐ¶Ñ Ð²Ñе ÑÑÐ»Ð¾Ð²Ð¸Ñ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¸ вÑе пÑедложениÑ
WHERE.ÐеÑекÑÑÑÑнÑе ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð±ÐµÐ· ÑÑловий ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð½Ðµ вÑноÑÑÑÑÑ Ð½Ð°ÑÑжÑ.
ÐÑли Ñоединение пеÑедано на ÑеÑвеÑ, пÑедложениÑ
ORDER BYне вÑноÑÑÑÑÑ Ð½Ð°ÑÑжÑ.
Ðажно ÑобиÑаÑÑ ÑÑаÑиÑÑÐ¸ÐºÑ Ð´Ð»Ñ Ð¾Ð±ÐµÐ¸Ñ
ÑÑоÑонниÑ
ÑÐ°Ð±Ð»Ð¸Ñ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ ANALYZE, Ñогда Postgres Pro ÑÐ¼Ð¾Ð¶ÐµÑ Ð²ÑбÑаÑÑ Ð½Ð°Ð¸Ð±Ð¾Ð»ÐµÐµ опÑималÑнÑÑ ÑÑÑаÑÐµÐ³Ð¸Ñ ÑоединениÑ.
H.1.4.7. Ðзменение ÑÑоÑÐ¾Ð½Ð½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ #
РаÑÑиÑение oracle_fdw поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ INSERT, UPDATE и DELETE Ð´Ð»Ñ ÑÑоÑонниÑ
ÑаблиÑ. Ðни ÑазÑеÑÐµÐ½Ñ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ (как и в базаÑ
даннÑÑ
, обновлÑннÑÑ
Ñ Ð±Ð¾Ð»ÐµÐµ Ñанней веÑÑии Postgres Pro) и могÑÑ Ð±ÑÑÑ Ð¾ÑклÑÑÐµÐ½Ñ Ð² паÑамеÑÑе ÑаблиÑÑ readonly.
ЧÑÐ¾Ð±Ñ UPDATE и DELETE ÑабоÑали, ÑÑолбÑÑ, ÑооÑвеÑÑÑвÑÑÑие ÑÑолбÑам пеÑвиÑного клÑÑа ÑаблиÑÑ Oracle, Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð¿Ð¾Ð¼ÐµÑÐµÐ½Ñ Ð¿Ð°ÑамеÑÑом key. ÐÑи ÑÑолбÑÑ Ð¸ÑполÑзÑÑÑÑÑ Ð´Ð»Ñ Ð¸Ð´ÐµÐ½ÑиÑикаÑии ÑÑÑок ÑÑоÑонней ÑаблиÑÑ, поÑÑÐ¾Ð¼Ñ ÑбедиÑеÑÑ, ÑÑо ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ ÑÑÑановлен Ð´Ð»Ñ Ð²ÑеÑ
ÑÑолбÑов пеÑвиÑного клÑÑа.
ÐÑли не ÑказаÑÑ ÑÑÐ¾Ð»Ð±ÐµÑ ÑÑоÑонней ÑаблиÑÑ Ð²Ð¾ вÑÐµÐ¼Ñ INSERT, Ð´Ð»Ñ ÑÑого ÑÑолбÑа ÑÑÑанавливаеÑÑÑ Ð·Ð½Ð°Ñение, опÑеделÑнное в пÑедложении DEFAULT в ÑÑоÑонней ÑаблиÑе Postgres Pro (или NULL, еÑли Ð½ÐµÑ Ð¿ÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ DEFAULT). ÐÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ DEFAULT в ÑооÑвеÑÑÑвÑÑÑиÑ
ÑÑолбÑаÑ
Oracle не иÑполÑзÑÑÑÑÑ. ÐÑли ÑÑоÑоннÑÑ ÑаблиÑа Postgres Pro не вклÑÑÐ°ÐµÑ Ð²Ñе ÑÑолбÑÑ ÑаблиÑÑ Oracle, пÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ DEFAULT из Oracle бÑдÑÑ Ð¸ÑполÑзоваÑÑÑÑ Ð´Ð»Ñ ÑÑолбÑов, не вклÑÑÑннÑÑ
в опÑеделение ÑÑоÑонней ÑаблиÑÑ.
ÐÑедложение RETURNING в командаÑ
INSERT, UPDATE и DELETE поддеÑживаеÑÑÑ, но не Ð´Ð»Ñ ÑÑолбÑов Ñ Ñипами даннÑÑ
Oracle LONG и LONG RAW (Oracle не поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ ÑÑи ÑÐ¸Ð¿Ñ Ð´Ð°Ð½Ð½ÑÑ
в пÑедложении RETURNING).
ТÑиггеÑÑ Ð´Ð»Ñ ÑÑоÑонниÑ
ÑÐ°Ð±Ð»Ð¸Ñ Ð¿Ð¾Ð´Ð´ÐµÑживаÑÑÑÑ. ТÑиггеÑÑ, опÑеделÑннÑе Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ AFTER и FOR EACH ROW, ÑÑебÑÑÑ Ð¾ÑÑÑÑÑÑÐ²Ð¸Ñ Ð² ÑÑоÑонней ÑаблиÑе ÑÑолбÑов Ñ Ñипом даннÑÑ
Oracle LONG или LONG RAW. ÐÑо ÑвÑзано Ñ Ð¸ÑполÑзованием в ÑакиÑ
ÑÑиггеÑаÑ
пÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ RETURNING.
ХоÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ðµ ÑÑоÑÐ¾Ð½Ð½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ Ð¿Ð¾Ð´Ð´ÐµÑживаеÑÑÑ, пÑоизводиÑелÑноÑÑÑ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½Ð¸Ð·ÐºÐ¾Ð¹, оÑобенно пÑи обÑабоÑке болÑÑого колиÑеÑÑва ÑÑÑок. ÐÑо ÑвÑзано Ñ Ð¾ÑобенноÑÑÑми ÑабоÑÑ Ð¾Ð±ÑÑÑки ÑÑоÑÐ¾Ð½Ð½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ , коÑоÑÐ°Ñ ÑÑебÑÐµÑ Ð¾Ð±ÑабоÑки каждой ÑÑÑоки оÑделÑно.
ТÑанзакÑии пеÑенапÑавлÑÑÑÑÑ Ð² Oracle, поÑÑÐ¾Ð¼Ñ BEGIN, COMMIT, ROLLBACK и SAVEPOINT ÑабоÑаÑÑ ÐºÐ°Ðº обÑÑно. ÐодгоÑовленнÑе опеÑаÑоÑÑ Ñ Ð¿ÐµÑенапÑавлением в Oracle не поддеÑживаÑÑÑÑ. Ðа подÑобной инÑоÑмаÑией обÑаÑиÑеÑÑ Ðº ÑÐ°Ð·Ð´ÐµÐ»Ñ ÐнÑÑÑеннее ÑÑÑÑойÑÑво.
ÐоÑколÑÐºÑ oracle_fdw по ÑмолÑÐ°Ð½Ð¸Ñ Ð¸ÑполÑзÑÐµÑ ÑеÑиализÑемÑе ÑÑанзакÑии, опеÑаÑоÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ Ð¼Ð¾Ð³ÑÑ Ð¿ÑивеÑÑи к ÑÐ±Ð¾Ñ ÑеÑиализаÑии:
ORA-08177: can't serialize access for this transaction
Сбой Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑоизойÑи, еÑли паÑаллелÑнÑе ÑÑанзакÑии изменÑÑÑ Ð¾Ð´Ð½Ñ Ð¸ ÑÑ Ð¶Ðµ ÑаблиÑÑ. ÐеÑоÑÑноÑÑÑ ÑÐ±Ð¾Ñ Ð²Ð¾Ð·ÑаÑÑÐ°ÐµÑ Ð² ÑлÑÑае длиÑелÑнÑÑ
ÑÑанзакÑий. Такие Ñбои можно иденÑиÑиÑиÑоваÑÑ Ð¿Ð¾ ÐºÐ¾Ð´Ñ SQLSTATE (40001). ÐÑиложение, иÑполÑзÑÑÑее oracle_fdw, должно повÑоÑиÑÑ ÑÑанзакÑии, завеÑÑивÑиеÑÑ Ñаким Ñбоем.
Ðожно иÑполÑзоваÑÑ Ð´ÑÑгой ÑÑÐ¾Ð²ÐµÐ½Ñ Ð¸Ð·Ð¾Ð»ÑÑии ÑÑанзакÑий, за подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº ÑÐ°Ð·Ð´ÐµÐ»Ñ ÐаÑамеÑÑÑ Ð²Ð½ÐµÑнего ÑеÑвеÑа.
H.1.4.8. EXPLAIN #
Postgres Pro EXPLAIN показÑÐ²Ð°ÐµÑ Ð·Ð°Ð¿ÑоÑ, коÑоÑÑй ÑакÑиÑеÑки оÑпÑавлен в Oracle. EXPLAIN VERBOSE показÑÐ²Ð°ÐµÑ Ð¿Ð»Ð°Ð½ вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Oracle (ÑÑа возможноÑÑÑ Ð½ÐµÐ´Ð¾ÑÑÑпна Ð´Ð»Ñ ÑеÑвеÑов Oracle 9i или более Ñанней веÑÑии, Ñм. ÐÑоблемÑ).
H.1.4.9. ANALYZE #
ÐÐ»Ñ ÑбоÑа ÑÑаÑиÑÑик по ÑÑоÑонним ÑаблиÑам можно иÑполÑзоваÑÑ ANALYZE, коÑоÑÐ°Ñ Ð¿Ð¾Ð´Ð´ÐµÑживаеÑÑÑ Ð² oracle_fdw.
Ðез ÑÑаÑиÑÑики Postgres Pro не Ð¼Ð¾Ð¶ÐµÑ Ð¾ÑениÑÑ ÐºÐ¾Ð»Ð¸ÑеÑÑво ÑÑÑок, возвÑаÑаемÑÑ Ð·Ð°Ð¿ÑоÑами к ÑÑоÑонней ÑаблиÑе, ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑивеÑÑи к вÑбоÑÑ Ð½ÐµÐ¾Ð¿ÑималÑнÑÑ Ð¿Ð»Ð°Ð½Ð¾Ð² вÑполнениÑ.
Postgres Pro не бÑÐ´ÐµÑ Ð°Ð²ÑомаÑиÑеÑки ÑобиÑаÑÑ ÑÑаÑиÑÑÐ¸ÐºÑ Ð´Ð»Ñ ÑÑоÑонниÑ
ÑÐ°Ð±Ð»Ð¸Ñ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð´ÐµÐ¼Ð¾Ð½Ð° авÑооÑиÑÑки, как ÑÑо пÑоиÑÑ
Ð¾Ð´Ð¸Ñ Ñ Ð¾Ð±ÑÑнÑми ÑаблиÑами. ÐоÑÑÐ¾Ð¼Ñ Ð¾Ñобенно важно запÑÑкаÑÑ ANALYZE Ð´Ð»Ñ ÑÑоÑонниÑ
ÑÐ°Ð±Ð»Ð¸Ñ Ð¿Ð¾Ñле иÑ
ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¸ каждÑй Ñаз, когда ÑдалÑÐ½Ð½Ð°Ñ ÑаблиÑа знаÑиÑелÑно изменÑеÑÑÑ.
ÐмейÑе в видÑ, ÑÑо анализ ÑÑоÑонней ÑаблиÑÑ Oracle вÑполнÑеÑÑÑ ÑеÑез полное поÑледоваÑелÑное ÑканиÑование ÑаблиÑÑ. ЧÑÐ¾Ð±Ñ ÑÑкоÑиÑÑ Ð¿ÑоÑеÑÑ, можно задаÑÑ Ð¿Ð°ÑамеÑÑ sample_percent, коÑоÑÑй позволÑÐµÑ Ð¸ÑполÑзоваÑÑ Ð»Ð¸ÑÑ Ð²ÑбоÑÐºÑ Ð´Ð°Ð½Ð½ÑÑ Ð¸Ð· ÑаблиÑÑ Oracle.
H.1.4.10. ÐоддеÑжка PostGIS #
Тип даннÑÑ
geometry доÑÑÑпен, ÑолÑко еÑли ÑÑÑановлено ÑаÑÑиÑение PostGIS.
ÐоддеÑживаÑÑÑÑ ÑледÑÑÑие геомеÑÑиÑеÑкие ÑÐ¸Ð¿Ñ Ð´Ð°Ð½Ð½ÑÑ
: POINT, LINE, POLYGON, MULTIPOINT, MULTILINE и MULTIPOLYGON в двÑÑ
меÑном и ÑÑÑÑ
меÑном пÑедÑÑавлении. ÐÑÑÑÑе геомеÑÑии PostGIS не поддеÑживаÑÑÑÑ, поÑколÑÐºÑ Ð´Ð»Ñ Ð½Ð¸Ñ
Ð½ÐµÑ Ð°Ð½Ð°Ð»Ð¾Ð³Ð¾Ð² в Oracle Spatial.
ÐнаÑÐµÐ½Ð¸Ñ NULL Ð´Ð»Ñ SRID в Oracle бÑдÑÑ Ð¿ÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ñ Ð² 0 и наобоÑоÑ. ÐÐ»Ñ Ð´ÑÑгиÑ
пÑеобÑазований SRID Oracle и PostGIS ÑоздайÑе Ñайл srid.map в каÑалоге share в Postgres Pro. ÐÐ°Ð¶Ð´Ð°Ñ ÑÑÑока ÑÑого Ñайла должна ÑодеÑжаÑÑ SRID Oracle и ÑооÑвеÑÑÑвÑÑÑий SRID PostGIS, ÑазделÑннÑе пÑобелом. ÐÐ»Ñ Ð¾Ð±ÐµÑпеÑÐµÐ½Ð¸Ñ Ð²ÑÑокой пÑоизводиÑелÑноÑÑи Ñайл ÑекомендÑеÑÑÑ Ð´ÐµÑжаÑÑ Ð½ÐµÐ±Ð¾Ð»ÑÑим.
H.1.4.11. ÐоддеÑжка ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ IMPORT FOREIGN SCHEMA #
Ðоманда IMPORT FOREIGN SCHEMA поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð¼Ð°ÑÑовÑй импоÑÑ Ð¾Ð¿Ñеделений вÑеÑ
ÑÐ°Ð±Ð»Ð¸Ñ Ð¸Ð· ÑÑ
ÐµÐ¼Ñ Oracle. Рдополнение к докÑменÑаÑии ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ IMPORT FOREIGN SCHEMA ÑледÑÐµÑ ÑÑиÑÑваÑÑ ÑледÑÑÑие оÑобенноÑÑи:
IMPORT FOREIGN SCHEMAÑоздаÑÑ Ð²Ð½ÐµÑние ÑаблиÑÑ Ð´Ð»Ñ Ð²ÑÐµÑ Ð¾Ð±ÑекÑов, найденнÑÑ Ð²ALL_TAB_COLUMNS. СÑда Ð²Ñ Ð¾Ð´ÑÑ ÑаблиÑÑ, пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸ маÑеÑиализованнÑе пÑедÑÑавлениÑ, но не ÑинонимÑ.ÐÐ»Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ
IMPORT FOREIGN SCHEMAподдеÑживаÑÑÑÑ ÑледÑÑÑие паÑамеÑÑÑ:ÐеÑеменнаÑ
caseÑпÑавлÑÐµÑ ÑегиÑÑÑом Ð´Ð»Ñ Ð¸Ð¼Ñн ÑÐ°Ð±Ð»Ð¸Ñ Ð¸ ÑÑолбÑов во вÑÐµÐ¼Ñ Ð¸Ð¼Ð¿Ð¾ÑÑа.ÐозможнÑе знаÑениÑ:
keep: оÑÑавиÑÑ Ð¸Ð¼ÐµÐ½Ð° Ñакими же, как в Oracle, обÑÑно в веÑÑ Ð½ÐµÐ¼ ÑегиÑÑÑе.lower: пеÑевеÑÑи вÑе имена ÑÐ°Ð±Ð»Ð¸Ñ Ð¸ ÑÑолбÑов в нижний ÑегиÑÑÑ.smart: пеÑевеÑÑи ÑолÑко Ñе имена, коÑоÑÑе в Oracle полноÑÑÑÑ Ð½Ð°Ð¿Ð¸ÑÐ°Ð½Ñ Ð² веÑÑ Ð½ÐµÐ¼ ÑегиÑÑÑе (ÑÑо знаÑение по ÑмолÑаниÑ).
collationâ ÑÑо пÑавило ÑоÑÑиÑовки, иÑполÑзÑемое Ð´Ð»Ñ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÑегиÑÑÑомlowerиsmartпаÑамеÑÑаcase.ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ â
default, коÑоÑое ÑооÑвеÑÑÑвÑÐµÑ Ð¿ÑÐ°Ð²Ð¸Ð»Ñ ÑоÑÑиÑовки по ÑмолÑÐ°Ð½Ð¸Ñ Ð´Ð»Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ . ÐоддеÑживаÑÑÑÑ ÑолÑко пÑавила ÑоÑÑиÑовки в ÑÑ ÐµÐ¼Ðµpg_catalog. ÐÐ»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ ÑпиÑка возможнÑÑ Ð·Ð½Ð°Ñений обÑаÑиÑеÑÑ Ðº полÑcollnameв каÑалогеpg_collation.dblinkâ ÑÑо ÑÑÑлка на Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ Oracle, ÑеÑез коÑоÑÑÑ Ð¾ÑÑÑеÑÑвлÑеÑÑÑ Ð´Ð¾ÑÑÑп к ÑÑ ÐµÐ¼Ðµ.ÐапиÑание ÑÑого имени должно бÑÑÑ Ñаким же, как в ÑиÑÑемном каÑалоге Oracle, коÑоÑое обÑÑно ÑоÑÑÐ¾Ð¸Ñ ÑолÑко из заглавнÑÑ Ð±Ñкв.
readonlyÑÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð¿Ð°ÑамеÑÑ readonly Ð´Ð»Ñ Ð²ÑÐµÑ Ð¸Ð¼Ð¿Ð¾ÑÑиÑÑемÑÑ ÑаблиÑ.skip_tables(по ÑмолÑаниÑfalse): не импоÑÑиÑоваÑÑ ÑаблиÑÑ.skip_views(по ÑмолÑаниÑfalse): не импоÑÑиÑоваÑÑ Ð¿ÑедÑÑавлениÑ.skip_matviews(по ÑмолÑаниÑfalse): не импоÑÑиÑоваÑÑ Ð¼Ð°ÑеÑиализованнÑе пÑедÑÑавлениÑ.max_longÑÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð¿Ð°ÑамеÑÑ max_long Ð´Ð»Ñ Ð²ÑÐµÑ Ð¸Ð¼Ð¿Ð¾ÑÑиÑÑемÑÑ ÑаблиÑ.sample_percentÑÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð¿Ð°ÑамеÑÑ sample_percent Ð´Ð»Ñ Ð²ÑÐµÑ Ð¸Ð¼Ð¿Ð¾ÑÑиÑÑемÑÑ ÑаблиÑ.prefetchÑÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð¿Ð°ÑамеÑÑ prefetch Ð´Ð»Ñ Ð²ÑÐµÑ Ð¸Ð¼Ð¿Ð¾ÑÑиÑÑемÑÑ ÑаблиÑ.lob_prefetchÑÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð¿Ð°ÑамеÑÑ lob_prefetch Ð´Ð»Ñ Ð²ÑÐµÑ Ð¸Ð¼Ð¿Ð¾ÑÑиÑÑемÑÑ ÑаблиÑ.ncharÑÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð¿Ð°ÑамеÑÑ nchar Ð´Ð»Ñ Ð²ÑÐµÑ Ð¸Ð¼Ð¿Ð¾ÑÑиÑÑемÑÑ ÑаблиÑ.set_timezoneÑÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð¿Ð°ÑамеÑÑ set_timezone Ð´Ð»Ñ Ð²ÑÐµÑ Ð¸Ð¼Ð¿Ð¾ÑÑиÑÑемÑÑ ÑаблиÑ.
ÐÐ¼Ñ ÑÑ ÐµÐ¼Ñ Oracle должно бÑÑÑ Ð½Ð°Ð¿Ð¸Ñано ÑоÑно Ñак же, как в Oracle, Ñо еÑÑÑ, как пÑавило, в веÑÑ Ð½ÐµÐ¼ ÑегиÑÑÑе. Так как Postgres Pro пеÑÐµÐ²Ð¾Ð´Ð¸Ñ Ð¸Ð¼ÐµÐ½Ð° в нижний ÑегиÑÑÑ Ð¿ÐµÑед обÑабоÑкой, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ заклÑÑиÑÑ Ð¸Ð¼Ñ ÑÑ ÐµÐ¼Ñ Ð² двойнÑе кавÑÑки (напÑимеÑ,
"SCOTT").Ðмена ÑÐ°Ð±Ð»Ð¸Ñ Ð² пÑедложении
LIMIT TOилиEXCEPTÐ´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð·Ð°Ð¿Ð¸ÑÐ°Ð½Ñ Ð² Ñом виде, в коÑоÑом они бÑдÑÑ Ð¾ÑобÑажаÑÑÑÑ Ð² Postgres Pro поÑле пÑÐ¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¿Ñавил ÑÑÑÑа ÑегиÑÑÑа, опиÑаннÑÑ Ð²ÑÑе.
ÐбÑаÑиÑе внимание, ÑÑо IMPORT FOREIGN SCHEMA не поддеÑживаеÑÑÑ Ð´Ð»Ñ ÑеÑвеÑов Oracle веÑÑии 8i; за подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº ÑÐ°Ð·Ð´ÐµÐ»Ñ ÐÑоблемÑ.
H.1.5. СпÑавка #
H.1.5.1. СоздаваемÑе ÑаÑÑиÑением обÑекÑÑ #
-
oracle_fdw_handler() RETURNS fdw_handler
oracle_fdw_validator(text[], oid) RETURNS void# ÐÑи ÑÑнкÑии пÑедÑÑавлÑÑÑ Ñобой ÑÑнкÑиÑ-обÑабоÑÑик и ÑÑнкÑÐ¸Ñ Ð¿ÑовеÑки, коÑоÑÑе Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ñ Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¾Ð±ÑÑÑки ÑÑоÑÐ¾Ð½Ð½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ .
FOREIGN DATA WRAPPER oracle_fdw HANDLER oracle_fdw_handler VALIDATOR oracle_fdw_validator
РаÑÑиÑение авÑомаÑиÑеÑки ÑоздаÑÑ Ð¾Ð±ÑÑÑÐºÑ ÑÑоÑÐ¾Ð½Ð½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼
oracle_fdw. ÐбÑÑно поÑле ÑÑого можно пеÑейÑи к опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÑÑоÑÐ¾Ð½Ð½Ð¸Ñ ÑеÑвеÑов. Ðожно Ñакже ÑоздаÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе обÑÑÑки ÑÑоÑÐ¾Ð½Ð½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ Oracle, напÑимеÑ, еÑли нÑжно ÑÑÑановиÑÑ Ð¿Ð°ÑамеÑÑ nls_lang. ХоÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ измениÑÑ ÑÑÑеÑÑвÑÑÑÑÑ Ð¾Ð±ÑÑÑкÑoracle_fdw, ÑледÑÐµÑ Ð¿Ð¾Ð¼Ð½Ð¸ÑÑ, ÑÑо в ÑÑом ÑлÑÑае вÑе Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð±ÑдÑÑ Ð¿Ð¾ÑеÑÑÐ½Ñ Ð¿Ð¾Ñле вÑгÑÑзки/воÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð±Ð°Ð·Ñ.-
oracle_close_connections() RETURNS void# ÐÑÑ ÑÑнкÑÐ¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ иÑполÑзоваÑÑ Ð´Ð»Ñ Ð·Ð°ÐºÑÑÑÐ¸Ñ Ð²ÑÐµÑ Ð¾ÑкÑÑÑÑÑ Ñоединений Oracle в ÑÑом ÑеанÑе. Ðа дополниÑелÑнÑе ÑведениÑми обÑаÑиÑеÑÑ Ðº ÑÐ°Ð·Ð´ÐµÐ»Ñ ÐÑполÑзование.
-
oracle_diag(name DEFAULT NULL) RETURNS text# ÐÐ°Ð½Ð½Ð°Ñ ÑÑнкÑÐ¸Ñ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð° ÑолÑко Ð´Ð»Ñ Ð´Ð¸Ð°Ð³Ð½Ð¾ÑÑиÑеÑÐºÐ¸Ñ Ñелей. Ðна возвÑаÑÐ°ÐµÑ Ð²ÐµÑÑии ÑеÑвеÑа oracle_fdw, Postgres Pro и клиенÑа Oracle. ÐÑи вÑзове без аÑгÑменÑов или Ñ NULL Ñакже возвÑаÑаÑÑÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð½ÐµÐºÐ¾ÑоÑÑÑ Ð¿ÐµÑеменнÑÑ ÑÑедÑ, иÑполÑзÑемÑÑ Ð´Ð»Ñ ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ñоединений Ñ Oracle. ÐÑи вÑзове Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ ÑÑоÑоннего ÑеÑвеÑа Ñакже возвÑаÑаеÑÑÑ Ð²ÐµÑÑÐ¸Ñ ÑеÑвеÑа Oracle.
-
oracle_execute(server name, stmt text) RETURNS void# ÐÑÑ ÑÑнкÑÐ¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ иÑполÑзоваÑÑ Ð´Ð»Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿ÑоизволÑнÑÑ Ð¾Ð¿ÐµÑаÑоÑов SQL на ÑдалÑнном ÑеÑвеÑе Oracle. Ðна бÑÐ´ÐµÑ ÑабоÑаÑÑ ÑолÑко Ñ Ð¾Ð¿ÐµÑаÑоÑами, коÑоÑÑе не возвÑаÑаÑÑ ÑезÑлÑÑаÑÑ (обÑÑно опеÑаÑоÑÑ DDL).
ÐÑдÑÑе оÑÑоÑÐ¾Ð¶Ð½Ñ Ð¿Ñи иÑполÑзовании ÑÑой ÑÑнкÑии, поÑколÑÐºÑ Ð¾Ð½Ð° Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð²Ð»Ð¸ÑÑÑ Ð½Ð° пÑоÑеÑÑ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÑÑанзакÑиÑми oracle_fdw. ÐомниÑе, ÑÑо вÑполнение DDL-опеÑаÑоÑов в Oracle ÑопÑовождаеÑÑÑ Ð½ÐµÑвной командой
COMMIT. Ðе ÑекомендÑеÑÑÑ Ð¸ÑполÑзоваÑÑ ÑÑÑ ÑÑнкÑÐ¸Ñ Ð² ÑÑанзакÑиÑÑ Ñ Ð½ÐµÑколÑкими опеÑаÑоÑами.
H.1.5.2. ÐаÑамеÑÑÑ #
H.1.5.2.1. ÐаÑамеÑÑÑ Ð¾Ð±ÑÑÑки ÑÑоÑÐ¾Ð½Ð½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ #
Ðажно
ÐÑли Ð²Ñ Ð¸Ð·Ð¼ÐµÐ½Ð¸Ñе ÑÑандаÑÑнÑÑ Ð¾Ð±ÑÑÑÐºÑ ÑÑоÑонниÑ
даннÑÑ
oracle_fdw, вÑе Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð±ÑдÑÑ Ð¿Ð¾ÑеÑÑÐ½Ñ Ð¿Ñи вÑгÑÑзке/воÑÑÑановлении. ЧÑÐ¾Ð±Ñ ÑоÑ
ÑаниÑÑ Ð¿Ð°ÑамеÑÑÑ, ÑоздайÑе новÑÑ Ð¾Ð±ÑÑÑÐºÑ ÑÑоÑонниÑ
даннÑÑ
. УÑÑановоÑнÑй ÑкÑÐ¸Ð¿Ñ ÑодеÑÐ¶Ð¸Ñ Ð¾Ð¿ÐµÑаÑÐ¾Ñ CREATE FOREIGN DATA WRAPPER, коÑоÑÑй можно взÑÑÑ Ð·Ð° оÑÐ½Ð¾Ð²Ñ Ð¿Ñи Ñоздании ÑобÑÑвенной обÑÑÑки.
[nls_lang]#УÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ñказанное знаÑение Ð´Ð»Ñ Ð¿ÐµÑеменной ÑÑедÑ
NLS_LANGв Oracle. ФоÑмаÑNLS_LANGâÑзÑк_ÑеÑÑиÑоÑиÑ.набоÑÑимволов(напÑимеÑ,AMERICAN_AMERICA.AL32UTF8). ÐнаÑение должно ÑооÑвеÑÑÑвоваÑÑ ÐºÐ¾Ð´Ð¸Ñовке ваÑей Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ . ÐÑли ÑÑо знаÑение не ÑÑÑановлено, oracle_fdw авÑомаÑиÑеÑки опÑÐµÐ´ÐµÐ»Ð¸Ñ ÐµÐ³Ð¾, еÑли ÑможеÑ, и вÑдаÑÑ Ð¿ÑедÑпÑеждение в пÑоÑивном ÑлÑÑае. УÑÑанавливайÑе ÑÑо знаÑение, ÑолÑко еÑли понимаеÑе, как оно ÑабоÑаеÑ. См. Ñакже Ñаздел ÐÑоблемÑ.
H.1.5.2.2. ÐаÑамеÑÑÑ ÑÑоÑоннего ÑеÑвеÑа #
dbserver#СÑÑока подклÑÑÐµÐ½Ð¸Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ Oracle Ð´Ð»Ñ ÑдалÑнной Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ , коÑоÑÐ°Ñ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð»Ñбого вида, поддеÑживаемого Oracle, еÑли ÐºÐ»Ð¸ÐµÐ½Ñ Oracle наÑÑÑоен ÑооÑвеÑÑÑвÑÑÑим обÑазом. ÐÐ»Ñ Ð»Ð¾ÐºÐ°Ð»ÑнÑÑ (
BEQUEATH) Ñоединений задайÑе пÑÑÑÑÑ ÑÑÑокÑ.[isolation_level]#УÑÐ¾Ð²ÐµÐ½Ñ Ð¸Ð·Ð¾Ð»ÑÑии ÑÑанзакÑий, иÑполÑзÑемÑй в базе даннÑÑ Oracle:
serializable,read_committedилиread_only. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ âserializable.ÐбÑаÑиÑе внимание, ÑÑо один опеÑаÑÐ¾Ñ Postgres Pro Ð¼Ð¾Ð¶ÐµÑ Ð¾Ð±ÑаÑаÑÑÑÑ Ðº ÑаблиÑе Oracle более одного Ñаза (напÑимеÑ, опеÑаÑÐ¾Ñ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð½Ñм Ñиклом). ЧÑÐ¾Ð±Ñ Ð¸Ð·Ð±ÐµÐ¶Ð°ÑÑ Ð½ÐµÑоглаÑованноÑÑи даннÑÑ Ð² ÑÑловиÑÑ Ð³Ð¾Ð½ÐºÐ¸ Ñ Ð¿Ð°ÑаллелÑнÑми ÑÑанзакÑиÑми, ÑÑÐ¾Ð²ÐµÐ½Ñ Ð¸Ð·Ð¾Ð»ÑÑии ÑÑанзакÑий должен гаÑанÑиÑоваÑÑ ÑÑабилÑноÑÑÑ ÑÑениÑ. ÐÑо возможно ÑолÑко Ñ ÑÑовнÑми изолÑÑии Oracle
SERIALIZABLEилиREAD ONLY.Ð ÑожалениÑ, ÑеализаÑÐ¸Ñ ÑÑÐ¾Ð²Ð½Ñ Ð¸Ð·Ð¾Ð»ÑÑии
SERIALIZABLEв Oracle Ð¸Ð¼ÐµÐµÑ ÑÑд недоÑÑаÑков и Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑиводиÑÑ Ðº оÑибкам ÑеÑиализаÑии (ORA-08177) в непÑедвиденнÑÑ ÑиÑÑаÑиÑÑ , напÑÐ¸Ð¼ÐµÑ Ð¿Ñи вÑÑÐ°Ð²ÐºÐ°Ñ Ð² ÑаблиÑÑ. ÐÑполÑзование ÑÑовнÑREAD COMMITTEDÑеÑÐ°ÐµÑ ÑÑÑ Ð¿ÑоблемÑ, но Ñ ÑиÑком неÑоглаÑованноÑÑи даннÑÑ . ÐÑли Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ иÑполÑзоваÑÑ ÑÑÐ¾Ñ ÑÑÐ¾Ð²ÐµÐ½Ñ Ð¸Ð·Ð¾Ð»ÑÑии, ÑледÑÐµÑ ÑбедиÑÑÑÑ, ÑÑо Ð¿Ð»Ð°Ð½Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿ÑоÑов не пÑедполагаÑÑ Ð¼Ð½Ð¾Ð³Ð¾ÐºÑаÑного вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð²Ð½ÐµÑнего ÑканиÑованиÑ.[nchar]#Со знаÑением
onÐ´Ð»Ñ ÑÑого паÑамеÑÑа бÑÐ´ÐµÑ Ð²ÑбиÑаÑÑÑÑ Ð±Ð¾Ð»ÐµÐµ доÑогое пÑеобÑазование Ñимволов на ÑÑоÑоне Oracle. ÐÑо Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾, когда в ÑаблиÑÐ°Ñ Oracle еÑÑÑ ÑÑолбÑÑNCHARилиNVARCHAR2, ÑодеÑжаÑие ÑимволÑ, коÑоÑÑе не могÑÑ Ð±ÑÑÑ Ð¿ÑедÑÑÐ°Ð²Ð»ÐµÐ½Ñ Ð² набоÑе Ñимволов Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ Oracle. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ âoff.УÑÑановка знаÑениÑ
onдлÑncharÑÑÑеÑÑвенно ÑÐ½Ð¸Ð¶Ð°ÐµÑ Ð¿ÑоизводиÑелÑноÑÑÑ Ð¸ вÑзÑÐ²Ð°ÐµÑ Ð¾Ñибки ORA-01461 пÑи иÑполÑзовании опеÑаÑоÑовUPDATEÐ´Ð»Ñ ÑÑÑок длиной более 2000 Ð±Ð°Ð¹Ñ (или 16383, еÑлиMAX_STRING_SIZE = EXTENDED). ÐÑо пÑоблема вÑзвана огÑаниÑением в Oracle.[set_timezone]#ÐÑи Ñказании Ð´Ð»Ñ ÑÑого паÑамеÑÑа знаÑениÑ
onÑаÑовой поÑÑ ÑеанÑа Oracle пÑи подклÑÑении бÑÐ´ÐµÑ ÑооÑвеÑÑÑвоваÑÑ ÑекÑÑÐµÐ¼Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¿Ð°ÑамеÑÑаtimezoneв Postgres Pro. ÐÑо полезно, ÑолÑко еÑли планиÑÑеÑÑÑ Ð¸ÑполÑзоваÑÑ ÑÑолбÑÑ Oracle ÑипаTIMESTAMP WITH LOCAL TIME ZONEи нÑжно пÑеобÑазоваÑÑ Ð¸Ñ Ð²timestamp without time zoneв Postgres Pro. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ âoff.ÐбÑаÑиÑе внимание, ÑÑо еÑли измениÑÑ
timezoneпоÑле подклÑÑÐµÐ½Ð¸Ñ Ðº Oracle, oracle_fdw не Ð¸Ð·Ð¼ÐµÐ½Ð¸Ñ ÑаÑовой поÑÑ ÑеанÑа Oracle. Ð ÑÑом ÑлÑÑае, ÑÑÐ¾Ð±Ñ Ð¾ÑкÑÑÑÑ Ð½Ð¾Ð²Ð¾Ðµ Ñоединение пÑи ÑледÑÑÑем обÑаÑении к ÑÑоÑонней ÑаблиÑе, вÑзовиÑеoracle_close_connections() RETURNS void.ÐÑли Oracle не Ð¼Ð¾Ð¶ÐµÑ ÑаÑпознаÑÑ ÑаÑовой поÑÑ, попÑÑки ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ð²ÐµÑÑаÑÑÑÑ Ð¾Ñибкой вида «ORA-01882: timezone region not found» (ORA-01882: Ñегион ÑаÑового поÑÑа не найден).
Ð ÑÑом ÑлÑÑае либо иÑполÑзÑйÑе дÑÑгое знаÑение
timezone, либо оÑÑавÑÑе знаÑениеoffи задайÑе Ð´Ð»Ñ Ð¿ÐµÑеменной ÑÑедÑORA_SDTZÑооÑвеÑÑÑвÑÑÑее знаÑение в конÑигÑÑаÑии ÑÑÐµÐ´Ñ ÑеÑвеÑа Postgres Pro.
H.1.5.2.3. ÐаÑамеÑÑÑ ÑопоÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑзоваÑелей #
user#ÐÐ¼Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Oracle Ð´Ð»Ñ ÑеанÑа. ÐÑли Ð²Ñ Ð½Ðµ Ñ Ð¾ÑиÑе Ñ ÑаниÑÑ ÑÑÑÑнÑе даннÑе Oracle в базе даннÑÑ Postgres Pro, ÑкажиÑе пÑÑÑÑÑ ÑÑÑÐ¾ÐºÑ Ð´Ð»Ñ Ð²Ð½ÐµÑней аÑÑенÑиÑикаÑии (один из пÑоÑÑÑÑ ÑпоÑобов â внеÑнее Ñ ÑанилиÑе паÑолей).
password#ÐаÑÐ¾Ð»Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Oracle.
H.1.5.2.4. ÐаÑамеÑÑÑ ÑÑоÑонней ÑаблиÑÑ #
table#ÐÐ¼Ñ ÑаблиÑÑ Oracle, коÑоÑое должно бÑÑÑ Ñказано в Ñом же ÑегиÑÑÑе, ÑÑо и в ÑиÑÑемном каÑалоге Oracle, Ñо еÑÑÑ Ð¾Ð±ÑÑно заглавнÑми бÑквами.
ЧÑÐ¾Ð±Ñ Ð¾Ð¿ÑеделиÑÑ ÑÑоÑоннÑÑ ÑаблиÑÑ Ð½Ð° оÑнове пÑоизволÑного запÑоÑа Oracle, ÑделайÑе знаÑением ÑÑого паÑамеÑÑа ÑекÑÑ Ð·Ð°Ð¿ÑоÑа, заклÑÑÑннÑй в кÑÑглÑе Ñкобки, напÑимеÑ:
OPTIONS (table '(SELECT col FROM tab WHERE val = ''string'')')
Ð ÑÑом ÑлÑÑае не ÑÑÑанавливайÑе паÑамеÑÑ schema. ÐомандÑ
INSERT,UPDATEиDELETEбÑдÑÑ ÑабоÑаÑÑ Ñо ÑÑоÑонними ÑаблиÑами, опÑеделÑннÑми в пÑоÑÑÑÑ Ð·Ð°Ð¿ÑоÑÐ°Ñ . ÐÑли ÑабоÑаÑÑ Ñ Ñакими ÑаблиÑами не нÑжно (или Ñ Ð¾ÑеÑÑÑ Ð¸Ð·Ð±ÐµÐ¶Ð°ÑÑ Ð·Ð°Ð¿ÑÑаннÑÑ ÑообÑений об оÑÐ¸Ð±ÐºÐ°Ñ Oracle Ð´Ð»Ñ Ð±Ð¾Ð»ÐµÐµ ÑложнÑÑ Ð·Ð°Ð¿ÑоÑов), ÑÑÑановиÑе Ð´Ð»Ñ ÑаблиÑÑ Ð¿Ð°ÑамеÑÑ readonly.dblink#СÑÑлка на Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ Oracle, ÑеÑез коÑоÑÑÑ Ð¾ÑÑÑеÑÑвлÑеÑÑÑ Ð´Ð¾ÑÑÑп к ÑаблиÑе. СÑÑлка должна бÑÑÑ Ñказана Ñак же, как в ÑиÑÑемном каÑалоге Oracle, Ñо еÑÑÑ Ð¾Ð±ÑÑно заглавнÑми бÑквами.
[schema]#Ð¡Ñ ÐµÐ¼Ð° (или владелеÑ) ÑаблиÑÑ. ÐÑполÑзÑеÑÑÑ Ð´Ð»Ñ Ð´Ð¾ÑÑÑпа к ÑаблиÑам, владелÑÑем коÑоÑÑÑ Ð½Ðµ ÑвлÑеÑÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑаÑÑийÑÑ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Oracle. ÐнаÑение должно бÑÑÑ Ñказано Ñак же, как в ÑиÑÑемном каÑалоге Oracle, Ñо еÑÑÑ Ð¾Ð±ÑÑно заглавнÑми бÑквами.
[max_long]#ÐакÑималÑÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð° лÑбÑÑ ÑÑолбÑов
LONG,LONG RAWиXMLTYPEв ÑаблиÑе Oracle. ÐозможнÑе знаÑÐµÐ½Ð¸Ñ â ÑелÑе ÑиÑла Ð¾Ñ 1 до 1073741823 (макÑималÑнÑй ÑазмеÑbyteaв Postgres Pro). ÐÑÐ¾Ñ Ð¾Ð±ÑÑм памÑÑи бÑÐ´ÐµÑ Ð²Ñделен как минимÑм дваждÑ, Ñак ÑÑо болÑÑие знаÑÐµÐ½Ð¸Ñ Ð¿Ð¾ÑÑебÑÑÑ Ð²ÑÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð·Ð½Ð°ÑиÑелÑнÑÑ Ð¾Ð±ÑÑмов памÑÑи. ÐÑли max_long менÑÑе Ð´Ð»Ð¸Ð½Ñ Ñамого длинного полÑÑаемого знаÑениÑ, бÑÐ´ÐµÑ Ð²Ñведено ÑообÑение об оÑибке «ORA-01406: fetched column value was truncated» (ORA-01406: знаÑение извлеÑÑнного ÑÑолбÑа бÑло ÑÑеÑено). Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¸ÑполÑзÑеÑÑÑ32767.[readonly]#ÐомандÑ
INSERT,UPDATEиDELETEподдеÑживаÑÑÑÑ ÑолÑко Ð´Ð»Ñ ÑаблиÑ, где знаÑение ÑÑого паÑамеÑÑа оÑлиÑаеÑÑÑ Ð¾Ñ yes/on/true. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¸ÑполÑзÑеÑÑÑfalse.[sample_percent]#ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð²Ð»Ð¸ÑÐµÑ ÑолÑко на вÑполнение
ANALYZEи Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·ÐµÐ½ Ð´Ð»Ñ ÑокÑаÑÐµÐ½Ð¸Ñ Ð²Ñемени ÑабоÑÑANALYZEÑ Ð¾ÑÐµÐ½Ñ Ð±Ð¾Ð»ÑÑими ÑаблиÑами.ÐнаÑение должно Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑÑ Ð² диапазоне Ð¾Ñ 0,000001 до 100. Ðно опÑеделÑÐµÑ Ð¿ÑоÑÐµÐ½Ñ Ð±Ð»Ð¾ÐºÐ¾Ð² ÑаблиÑÑ Oracle, коÑоÑÑе бÑдÑÑ Ð²ÑбÑÐ°Ð½Ñ ÑлÑÑайнÑм обÑазом Ð´Ð»Ñ ÑаÑÑÑÑа ÑÑаÑиÑÑики ÑаблиÑÑ Postgres Pro. Ð Oracle Ð´Ð»Ñ Ð²ÑбоÑки блоков иÑполÑзÑеÑÑÑ Ð¿Ñедложение
SAMPLE BLOCK (x). ÐнаÑение по ÑмолÑаниÑ:100.ANALYZEзавеÑÑиÑÑÑ Ð¾Ñибкой ORA-00933 Ð´Ð»Ñ ÑаблиÑ, опÑеделÑннÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð·Ð°Ð¿ÑоÑов Oracle, и Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð²ÐµÑÑиÑÑÑÑ Ð¾Ñибкой ORA-01446 Ð´Ð»Ñ ÑаблиÑ, опÑеделÑннÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÑложнÑÑ Ð¿ÑедÑÑавлений Oracle.[prefetch]#ÐадаÑÑ ÐºÐ¾Ð»Ð¸ÑеÑÑво ÑÑÑок, коÑоÑÑе бÑдÑÑ Ð¸Ð·Ð²Ð»ÐµÑÐµÐ½Ñ Ð·Ð° один Ñикл пеÑедаÑи даннÑÑ Ð¼ÐµÐ¶Ð´Ñ Postgres Pro и Oracle во вÑÐµÐ¼Ñ ÑканиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑÑоÑонней ÑаблиÑÑ. ÐнаÑение должно Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑÑ Ð² диапазоне Ð¾Ñ 1 до 1000, где нÑлевое знаÑение оÑклÑÑÐ°ÐµÑ Ð¿ÑедваÑиÑелÑнÑÑ Ð²ÑбоÑкÑ. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ â
50.С более вÑÑокими знаÑениÑми пÑоизводиÑелÑноÑÑÑ Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð²ÑÑиÑÑÑÑ, но бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð±Ð¾Ð»ÑÑе памÑÑи на ÑеÑвеÑе Postgres Pro.
ÐбÑаÑиÑе внимание, ÑÑо пÑедваÑиÑелÑÐ½Ð°Ñ Ð²ÑбоÑка не вÑполнÑеÑÑÑ, еÑли ÑаблиÑа Oracle ÑодеÑÐ¶Ð¸Ñ ÑÑолбÑÑ Ñипа
MDSYS.SDO_GEOMETRY.[lob_prefetch]#УÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ ÑиÑло байÑ, коÑоÑÑе пÑедваÑиÑелÑно вÑбиÑаÑÑÑÑ Ð´Ð»Ñ Ð·Ð½Ð°Ñений
BLOB,CLOBиBFILE. ÐÑли знаÑÐµÐ½Ð¸Ñ LOB пÑевÑÑаÑÑ ÑÑÐ¾Ñ ÑазмеÑ, поÑÑебÑÑÑÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе ÑÐ¸ÐºÐ»Ñ Ð¿ÐµÑедаÑи даннÑÑ Ð¼ÐµÐ¶Ð´Ñ Postgres Pro и Oracle, поÑÑÐ¾Ð¼Ñ ÑÑÑановка знаÑениÑ, пÑевÑÑаÑÑего обÑÑно иÑполÑзÑемÑй ÑÐ°Ð·Ð¼ÐµÑ LOB, Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð²ÑÑиÑÑ Ð¿ÑоизводиÑелÑноÑÑÑ. ÐÑÐ±Ð¾Ñ Ð±Ð¾Ð»ÑÑÐ¸Ñ Ð·Ð½Ð°Ñений Ð´Ð»Ñ ÑÑого паÑамеÑÑа ÑвелиÑÐ¸Ñ Ð¿Ð¾ÑÑебление памÑÑи на ÑÑоÑоне ÑеÑвеÑа, но повÑÑÐ¸Ñ Ð¿ÑоизводиÑелÑноÑÑÑ Ð¿Ñи ÑабоÑе Ñ Ð±Ð¾Ð»ÑÑими LOB. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ â1048576.
H.1.5.2.5. ÐаÑамеÑÑÑ ÑÑолбÑов #
[key]#ÐÑли ÑÑÑановлено знаÑение yes/on/true, ÑооÑвеÑÑÑвÑÑÑий ÑÑÐ¾Ð»Ð±ÐµÑ ÑÑоÑонней ÑаблиÑÑ Oracle ÑÑиÑаеÑÑÑ ÑаÑÑÑÑ Ð¿ÐµÑвиÑного клÑÑа. ЧÑобÑ
UPDATEиDELETEÑабоÑали, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ ÑÑÑановиÑÑ ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð´Ð»Ñ Ð²ÑÐµÑ ÑÑолбÑов, Ð²Ñ Ð¾Ð´ÑÑÐ¸Ñ Ð² пеÑвиÑнÑй клÑÑ ÑаблиÑÑ. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ âfalse.[strip_zeros]#ÐÑли ÑÑÑановлено знаÑение yes/on/true, ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ ASCII 0 бÑдÑÑ ÑÐ´Ð°Ð»ÐµÐ½Ñ Ð¸Ð· ÑÑÑоки во вÑÐµÐ¼Ñ Ð¿ÐµÑедаÑи. Такие ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð´Ð¾Ð¿ÑÑÑÐ¸Ð¼Ñ Ð² Oracle, но не в Postgres Pro, поÑÑÐ¾Ð¼Ñ Ð¾Ð½Ð¸ вÑзовÑÑ Ð¾ÑÐ¸Ð±ÐºÑ Ð¿Ñи ÑÑении oracle_fdw. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¸Ð¼ÐµÐµÑ ÑмÑÑл иÑполÑзоваÑÑ ÑолÑко Ð´Ð»Ñ ÑÑолбÑов
character,character varyingиtext. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ âfalse.
H.1.6. ÐÑÐ¾Ð±Ð»ÐµÐ¼Ñ #
H.1.6.1. ÐодиÑовка #
СимволÑ, Ñ ÑанÑÑиеÑÑ Ð² базе даннÑÑ Oracle, коÑоÑÑе не могÑÑ Ð±ÑÑÑ Ð¿ÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ñ Ð² кодиÑÐ¾Ð²ÐºÑ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ Postgres Pro, бÑдÑÑ Ð°Ð²ÑомаÑиÑеÑки Ð·Ð°Ð¼ÐµÐ½ÐµÐ½Ñ Ð½Ð° подÑÑановоÑнÑе ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Oracle, обÑÑно ÑÑо пÑÑмÑе или обÑаÑнÑе вопÑоÑиÑелÑнÑе знаки. ÐÑи ÑÑом не бÑÐ´ÐµÑ Ð²ÑводиÑÑÑÑ Ð½Ð¸ÐºÐ°ÐºÐ¸Ñ Ð¿ÑедÑпÑеждений или ÑообÑений об оÑÐ¸Ð±ÐºÐ°Ñ .
ÐÑли иÑполÑзÑеÑÑÑ ÐºÐ¾Ð´Ð¸Ñовка Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
Postgres Pro, коÑоÑÐ°Ñ Ð½Ðµ поддеÑживаеÑÑÑ Oracle (в наÑÑоÑÑее вÑÐµÐ¼Ñ ÑÑо EUC_CN, EUC_KR, LATIN10, MULE_INTERNAL, WIN874 и SQL_ASCII), ÑимволÑ, оÑлиÑнÑе Ð¾Ñ ASCII, не могÑÑ Ð±ÑÑÑ ÐºÐ¾Ð½Ð²ÐµÑÑиÑованÑ. Ð ÑÑом ÑлÑÑае бÑÐ´ÐµÑ Ð²Ñдано пÑедÑпÑеждение, и ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð±ÑдÑÑ Ð·Ð°Ð¼ÐµÐ½ÐµÐ½Ñ Ð½Ð° подÑÑановоÑнÑе, как опиÑано вÑÑе.
Ðожно ÑÑÑановиÑÑ Ð¿Ð°ÑамеÑÑ nls_lang внеÑней оболоÑки даннÑÑ
, ÑÑÐ¾Ð±Ñ Ð¿ÑинÑдиÑелÑно иÑполÑзоваÑÑ Ð¾Ð¿ÑеделÑннÑÑ ÐºÐ¾Ð´Ð¸ÑÐ¾Ð²ÐºÑ Oracle, но иÑоговÑе ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð² болÑÑинÑÑве ÑлÑÑаев бÑдÑÑ Ð½ÐµÐºÐ¾ÑÑекÑнÑми и пÑиведÑÑ Ðº ÑообÑениÑм об оÑибкаÑ
Postgres Pro. ÐеÑоÑÑно, ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾ ÑолÑко Ð´Ð»Ñ ÐºÐ¾Ð´Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ SQL_ASCII, Ñак ÑÑо иÑполÑзоваÑÑ ÑÑо ÑледÑеÑ, ÑолÑко еÑли Ð²Ñ ÑоÑно понимаеÑе, ÑÑо делаеÑе.
H.1.6.2. ÐгÑаниÑÐµÐ½Ð½Ð°Ñ ÑÑнкÑионалÑноÑÑÑ Ð² ÑÑаÑÑÑ Ð²ÐµÑÑиÑÑ Oracle #
ÐпÑеделение ÑиÑÑемнÑÑ
каÑалогов Oracle V$QL и V$QL_PLAN изменилоÑÑ Ð² Oracle 10.1. ÐÑполÑзование EXPLAIN VERBOSE Ñо ÑÑаÑÑми веÑÑиÑми ÑеÑвеÑа Oracle пÑиведÑÑ Ðº оÑибкам, напÑимеÑ:
ERROR: error describing query: OCIStmtExecute failed to execute
remote query for sql_id
DETAIL: ORA-00904: "LAST_ACTIVE_TIME": invalid identifierÐÑо не планиÑÑеÑÑÑ Ð¸ÑпÑавлÑÑÑ, поÑколÑÐºÑ ÑаÑÑиÑÐµÐ½Ð½Ð°Ñ Ð¿Ð¾Ð´Ð´ÐµÑжка Oracle 9i оÑÑÑÑÑÑвÑÐµÑ Ñ 2010 года, и ÑÑа ÑÑнкÑионалÑноÑÑÑ Ð½Ðµ ÑвлÑеÑÑÑ ÑÑÑеÑÑвенной.
IMPORT FOREIGN SCHEMA вÑдаÑÑ ÑледÑÑÑÑÑ Ð¾ÑÐ¸Ð±ÐºÑ Ñ ÑеÑвеÑом Oracle 8i:
ERROR: error importing foreign schema: OCIStmtExecute failed to execute
column query
DETAIL: ORA-00904: invalid column nameÐÑо ÑвÑзано Ñ Ñем, ÑÑо в пÑедÑÑавлении ALL_TAB_COLUMNS оÑÑÑÑÑÑвÑÐµÑ ÑÑÐ¾Ð»Ð±ÐµÑ CHAR_LENGTH, коÑоÑÑй бÑл добавлен в Oracle 9i.
H.1.6.3. ÐиблиоÑеки LDAP #
ÐбÑÐ°Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñека клиенÑа Oracle поÑÑавлÑеÑÑÑ Ñ ÑобÑÑвенной клиенÑÑкой LDAP-ÑеализаÑией, ÑооÑвеÑÑÑвÑÑÑей RFC 1823, поÑÑÐ¾Ð¼Ñ Ñ ÑÑиÑ
ÑÑнкÑий Ñе же имена, ÑÑо и в OpenLDAP. ÐÑо пÑиведÑÑ Ðº конÑликÑÑ Ð¸Ð¼Ñн, еÑли ÑеÑÐ²ÐµÑ Postgres Pro бÑл ÑконÑигÑÑиÑован Ñ Ð¿Ð°ÑамеÑÑом --with-ldap.
ÐонÑÐ»Ð¸ÐºÑ Ð¸Ð¼Ñн не бÑÐ´ÐµÑ Ð²ÑÑвлен, поÑколÑÐºÑ oracle_fdw загÑÑжаеÑÑÑ Ð²Ð¾ вÑÐµÐ¼Ñ Ð²ÑполнениÑ. Ðднако еÑли бÑÐ´ÐµÑ Ð²Ñзвана ÑÑнкÑÐ¸Ñ LDAP, возникнÑÑ Ð¿ÑоблемÑ. Ðак пÑавило, ÑнаÑала загÑÑжаеÑÑÑ OpenLDAP, поÑÑÐ¾Ð¼Ñ ÐµÑли Oracle вÑзÑÐ²Ð°ÐµÑ ÑÑнкÑÐ¸Ñ LDAP (напÑимеÑ, еÑли иÑполÑзÑеÑÑÑ ÑазÑеÑение имÑн по пÑавилам Ð¸Ð¼ÐµÐ½Ð¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ°Ñалогов), пÑоизойдÑÑ Ñбой ÑеÑвеÑа. ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑивеÑÑи к поÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð² жÑÑнале ÑеÑвеÑа Postgres Pro ÑообÑений подобного Ñода (напÑимеÑ, в Linux):
../../../libraries/libldap/getentry.c:29: ldap_first_entry: Assertion `( (ld)->ld_options.ldo_valid == 0x2 )' failed.
Так как ÑбоÑка Postgres Pro вÑполнена Ñ Ñказанием --with-ldap, она Ð¼Ð¾Ð¶ÐµÑ ÑабоÑаÑÑ, пока не иÑполÑзÑÑÑÑÑ ÐºÐ°ÐºÐ¸Ðµ-либо ÑÑнкÑионалÑнÑе возможноÑÑи клиенÑа LDAP в Oracle. Ðа некоÑоÑÑÑ
плаÑÑоÑмаÑ
можно пÑинÑдиÑелÑно загÑÑзиÑÑ Ð¾Ð±ÑÑÑ ÐºÐ»Ð¸ÐµÐ½ÑÑкÑÑ Ð±Ð¸Ð±Ð»Ð¸Ð¾ÑÐµÐºÑ Oracle до запÑÑка ÑеÑвеÑа Postgres Pro (LD_PRELOAD в Linux). ÐаÑем Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¸ÑполÑзоваÑÑÑÑ ÑÑнкÑии LDAP Oracle. Ð ÑÑом ÑлÑÑае Oracle Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑ ÑÑнкÑионалÑнÑе возможноÑÑи LDAP, но иÑполÑзование LDAP из Postgres Pro пÑиведÑÑ Ðº ÑÐ±Ð¾Ñ ÑеÑвеÑа.
ÐÑполÑзоваÑÑ ÑÑнкÑионалÑноÑÑÑ LDAP одновÑеменно и в Postgres Pro, и в Oracle не допÑÑкаеÑÑÑ.
H.1.6.4. ÐÑибки ÑеÑиализаÑии #
Ð Oracle веÑÑии 11.2 или вÑÑе пÑи вÑÑавке пеÑвой ÑÑÑоки в ÑозданнÑÑ ÑаблиÑÑ Oracle Ñ oracle_fdw Ð²Ð¾Ð·Ð½Ð¸ÐºÐ½ÐµÑ Ð¾Ñибка ÑеÑиализаÑии.
ÐÑо ÑвÑзано Ñ ÑÑнкÑионалÑноÑÑÑÑ Oracle оÑложенное Ñоздание ÑегменÑа, пÑи коÑоÑом вÑделение диÑкового пÑоÑÑÑанÑÑва Ð´Ð»Ñ Ð½Ð¾Ð²Ð¾Ð¹ ÑаблиÑÑ Ð¾ÑкладÑваеÑÑÑ Ð´Ð¾ вÑÑавки пеÑвой ÑÑÑоки. Ð ÑезÑлÑÑаÑе пÑи иÑполÑзовании ÑеÑиализÑемÑÑ ÑÑанзакÑий Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ Ð¾Ñибка ÑеÑиализаÑии.
ÐÑо не ÑеÑÑÑÐ·Ð½Ð°Ñ Ð¿Ñоблема. ÐÑ Ð¼Ð¾Ð¶Ð½Ð¾ избежаÑÑ, либо пÑоигноÑиÑовав ÑÑÑ Ð¿ÐµÑвÑÑ Ð¾ÑибкÑ, либо Ñоздав ÑаблиÑÑ Ñ Ð¿Ð°ÑамеÑÑом SEGMENT CREATION IMMEDIATE.
ÐоÑаздо более ÑеÑÑÑÐ·Ð½Ð°Ñ Ð¿Ñоблема заклÑÑаеÑÑÑ Ð² Ñом, ÑÑо одновÑеменнÑе вÑÑавки могÑÑ Ð¸Ð½Ð¾Ð³Ð´Ð° вÑзÑваÑÑ Ð¾Ñибки ÑеÑиализаÑии, когда Ñазделение ÑÑÑаниÑÑ Ð¸Ð½Ð´ÐµÐºÑа пÑоиÑÑ Ð¾Ð´Ð¸Ñ Ð¾Ð´Ð½Ð¾Ð²Ñеменно Ñ Ð¼Ð¾Ð´Ð¸ÑиÑиÑÑемой ÑеÑиализÑемой ÑÑанзакÑией.
Oracle ÑÑвеÑждаеÑ, ÑÑо ÑÑо не оÑибка, и пÑедлагаемое ÑеÑение â повÑоÑиÑÑ ÑÑанзакÑиÑ, коÑоÑÐ°Ñ Ð¿Ð¾Ð»ÑÑила оÑÐ¸Ð±ÐºÑ ÑеÑиализаÑии.
H.1.6.5. ÐÑибки Oracle #
ÐÑо ÑпиÑок оÑибок Oracle, коÑоÑÑе влиÑÑÑ Ð¸Ð»Ð¸ влиÑли на oracle_fdw в пÑоÑлом.
ÐÑибка 2728408 Ð¼Ð¾Ð¶ÐµÑ Ð²ÑзваÑÑ Â«ORA-8177 cannot serialize access for this transaction» (невозможно ÑеÑиализоваÑÑ Ð´Ð¾ÑÑÑп Ð´Ð»Ñ ÑÑой ÑÑанзакÑии), даже еÑли не пÑедпÑинимаеÑÑÑ Ð½Ð¸ÐºÐ°ÐºÐ¸Ñ Ð¿Ð¾Ð¿ÑÑок Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑдалÑннÑÑ Ð´Ð°Ð½Ð½ÑÑ . Ðна Ð¼Ð¾Ð¶ÐµÑ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ½ÑÑÑ Ð½Ð° ÑеÑвеÑе Oracle 8.1.7.4 (ÑÑÑановиÑе пÑомежÑÑоÑное иÑпÑавление 2728408) или ÑеÑвеÑе Oracle 9.2 (ÑÑÑановиÑе Ð½Ð°Ð±Ð¾Ñ Ð¸ÑпÑавлений 9.2.0.4 или вÑÑе).
ÐзвеÑÑно, ÑÑо ÐºÐ»Ð¸ÐµÐ½Ñ Oracle 21c не поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ ÑабоÑÑ Ñо ÑÑолбÑами CLOB (они оÑобÑажаÑÑÑÑ Ð¿ÑÑÑÑми). ÐÐµÑ Ð¿ÑÑмÑÑ
доказаÑелÑÑÑв, ÑÑо ÑÑо оÑибка Oracle, но дÑÑгие веÑÑии ÑабоÑаÑÑ Ð½Ð¾ÑмалÑно.
H.1.7. ÐвÑоÑÑ #
ÐаÑÑÐµÐ½Ñ ÐлÑбе, Ñ Ð·Ð°Ð¼ÐµÑнÑм вкладом ÐинÑенÑа ÐоÑа из Oslandia и ТаÑÑÑо Ð¯Ð¼Ð°Ð´Ñ Ð¸Ð· NTT OSS Center.