Saat ini, organisasi menyimpan informasi (data) dalam sistem database yang berbeda. Setiap sistem database memiliki satu set aplikasi yang berjalan melawannya. Data ini hanya bit dan byte pada sistem file – dan hanya database yang dapat mengubah bit dan byte data menjadi informasi bisnis. Integrasi dan konsolidasi informasi (data) tersebut ke dalam satu sistem database seringkali sulit. Karena banyak aplikasi yang berjalan melawan satu database mungkin tidak memiliki aplikasi setara yang berjalan melawan yang lain. Untuk mengkonsolidasikan informasi ke dalam satu sistem database, kita membutuhkan koneksi database yang heterogen. Dalam postingan ini, saya akan mendemonstrasikan bagaimana Anda dapat menghubungkan PostgreSQL ke salah satu database Oracle yang heterogen menggunakan metode yang berbeda.
Berikut adalah beberapa metode untuk membuat koneksi ke database Oracle di PostgreSQL.
- Menggunakan Driver ODBC
- Menggunakan Pembungkus Data Asing
- Menggunakan Driver Oracle Call Interface(OCI)
Open DataBase Connectivity (ODBC) adalah API perangkat lunak standar untuk menggunakan DBMS. Pengandar ODBC/Sumber Data ODBC (API) adalah pustaka yang memungkinkan aplikasi terhubung ke basis data apa pun yang tersedia pengandar ODBC. Ini adalah lapisan tengah yang menerjemahkan kueri data aplikasi ke dalam perintah yang dipahami DBMS. Untuk menggunakan metode ini, diperlukan paket open source unixODBC dan Oracle ODBC driver (Basic/ODBC/Devel). Bersama dengan modul di PostgreSQL yang dapat berkomunikasi dengan DSN dibuat menggunakan driver unixODBC dan Oracle ODBC. Beberapa tahun yang lalu CyberTec telah merilis modul ODBC-Link, saat ini sudah usang, namun memiliki implementasi gaya dblink untuk PostgreSQL untuk terhubung ke database lain yang sesuai dengan ODBC. Kita dapat menggunakan modul ini untuk konektivitas dasar ke Oracle. Mari kita lihat.
Instal unixODBCtar -xvf unixODBC-2.3.4.tar.gz cd unixODBC-2.3.4/ ./configure --sysconfdir=/etc make make install
Lokasi file biner/Perpustakaan/konfigurasi:/usr/local/bin,/usr/local/lib,/etc(odbc.ini,odbcinst.ini)
Instal Driver ODBC Oracle
rpm -ivh oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm rpm -ivh oracle-instantclient11.2-odbc-11.2.0.4.0-1.x86_64.rpm rpm -ivh oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm
Lokasi Biner/Perpustakaan:/usr/lib/Oracle/11.2/client64
Instal ODBC-Linktar -zxvf ODBC-Link-1.0.4.tar.gz cd ODBC-Link-1.0.4 export PATH=/opt/PostgreSQL/9.5/bin:$PATH which pg_config make USE_PGXS=1 make USE_PGXS=1 install
Perpustakaan dan lokasi file SQL:/opt/PostgreSQL/9.5/share/postgresql/contrib
Instalasi akan membuat file SQL modul ODBC-Link di direktori $PGHOME/contrib. Muat file SQL, yang akan membuat skema dengan nama “odbclink” dengan fungsi yang diperlukan di dalamnya.
psql -p 5432 -d oratest -U postgres -f /opt/PostgreSQL/9.5/share/postgresql/contrib/odbclink.sql
Pada titik ini, kami telah menginstal driver unixODBC, driver Oracle ODBC dan modul ODBC-Link untuk PostgreSQL. Sebagai langkah pertama, kita perlu membuat DSN menggunakan Oracle ODBC.
Edit file /etc/odbcinst.ini dan berikan definisi driver
## Driver for Oracle [MyOracle] Description =ODBC for oracle Driver =/usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1 UsageCount=1 FileUsage = 1 Driver Logging = 7
Edit file /etc/odbc.ini dan buat DSN dengan driver yang disebutkan di /etd/odbcinst.ini
## Host: pg.raghav-node1.com, PORT: 1521 ## Oracle Instance Name: ORA11G, Username: mmruser, Password: mmruser ## ODBC Data source: Ora
[Ora]
Deskripsi =database myoracledb
Driver =MyOracle
Trace =yes
TraceFile =/tmp/odbc_oracle.log
Database =//pg.raghav-node1 .com:1521/ORA11G
UserID =mmruser
Password =mmruser
Port =1521
Setelah membuat DSN, muat semua perpustakaan driver Oracle &unix ODBC dengan mengatur variabel lingkungan dan uji konektivitas menggunakan alat baris perintah OS “dltest” &“iSQL”
[[email protected] ~]# export ORACLE_HOME=/usr/lib/oracle/11.2/client64 [[email protected] ~]# export LD_LIBRARY_PATH=/usr/local/unixODBC-2.3.4/lib:/usr/lib/oracle/11.2/client64/lib [[email protected] ~]# export ODBCINI=/etc/odbc.ini [[email protected] ~]# export ODBCSYSINI=/etc/ [[email protected] ~]# export TWO_TASK=//pg.raghav-node1.com:1521/ORA11G [[email protected] ~]# dltest /usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1 SUCCESS: Loaded /usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1 [[email protected] ~]# isql ora -v +---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ SQL>
Sekarang, atur variabel lingkungan yang sama untuk pengguna postgres untuk memuat perpustakaan dan mulai ulang klaster PostgreSQL agar berlaku. Hubungkan ke PostgreSQL dan panggil fungsi odbclink untuk terhubung ke database Oracle.
[[email protected] ~]#su - postgres [[email protected] ~]$ export ORACLE_HOME=/usr/lib/oracle/11.2/client64 [[email protected] ~]$ export LD_LIBRARY_PATH=/usr/local/unixODBC-2.3.4/lib:/usr/lib/oracle/11.2/client64/lib [[email protected] ~]$ export ODBCINI=/etc/odbc.ini [[email protected] ~]$ export ODBCSYSINI=/etc/ [[email protected] ~]$ export TWO_TASK=//pg.raghav-node1.com:1521/ORA11G [[email protected] ~]$ dltest /usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1 SUCCESS: Loaded /usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1 [[email protected] ~]$ /opt/PostgreSQL/9.5/bin/pg_ctl -D /opt/PostgreSQL/9.5/data/ stop -mf [[email protected] ~]$ /opt/PostgreSQL/9.5/bin/pg_ctl -D /opt/PostgreSQL/9.5/data/ start [[email protected] ~]$ psql psql.bin (9.5.2) Type "help" for help.
postgres=# pilih odbclink.connect(‘DSN=Ora’);
koneksi
———
1
(1 baris)
Keren kan…!!!. Untuk mengambil dan memanipulasi data, lihat file README ODBC-Link.
Menggunakan Pembungkus Data Asing
Ekstensi SQL/MED (SQL Management of External Data) ke SQL Standard memungkinkan pengelolaan data eksternal yang disimpan di luar database. SQL/MED menyediakan dua komponen pembungkus data Asing dan Datalink. PostgreSQL memperkenalkan Pembungkus Data Asing (FDW) dalam versi 9.1 dengan dukungan hanya baca dan dalam versi 9.3 dukungan tulis dari Standar SQL ini. Saat ini, versi terbaru memiliki sejumlah fitur di sekitarnya dan banyak jenis PLRT Asing tersedia untuk mengakses database SQL jarak jauh yang berbeda.
Oracle_fdw menyediakan cara yang mudah dan efisien untuk mengakses Oracle Database. IMO, ini salah satu metode paling keren untuk mengakses database jarak jauh. Untuk mengkompilasi Oracle_FDW dengan PostgreSQL 9.5, kita memerlukan library Oracle Instant Client dan pg_config yang diatur di PATH. Kita dapat menggunakan library Oracle Instant Client yang sama yang digunakan untuk ODBC-Link. Mari kita lihat cara kerjanya.
Pertama, atur variabel lingkungan dengan pustaka OIC dan pg_config
export PATH=/opt/PostgreSQL/9.5/bin:$PATH export ORACLE_HOME=/usr/lib/oracle/11.2/client64 export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib
Buka zip modul oracle_fdw dan kompilasi dengan PostgreSQL 9.5
unzip oracle_fdw-1.4.0.zip cd oracle_fdw-1.4.0/ make make install
Sekarang beralihlah sebagai pengguna 'postgres' dan mulai ulang cluster dengan memuat pustaka Oracle Instant Client yang diperlukan untuk ekstensi oracle_fdw dan buat ekstensi di dalam database.
[[email protected] 9.5]$ export ORACLE_HOME=/usr/lib/oracle/11.2/client64/lib [[email protected] 9.5]$ export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib:$LD_LIBRARY_PATH [[email protected] 9.5]$ /opt/PostgreSQL/9.5/bin/pg_ctl -D /opt/PostgreSQL/9.5/data/ stop -mf [[email protected] 9.5]$ /opt/PostgreSQL/9.5/bin/pg_ctl -D /opt/PostgreSQL/9.5/data/ start [[email protected] 9.5]$ psql Password: psql.bin (9.5.2) Type "help" for help.
postgres=# buat ekstensi oracle_fdw;
BUAT EKSTENSI
Sekarang Anda dapat mengakses database Oracle.
postgres=# CREATE SERVER oradb FOREIGN DATA WRAPPER oracle_fdw OPTIONS (dbserver '//pg.raghav-node1.com/ORA11G'); CREATE SERVER postgres=# GRANT USAGE ON FOREIGN SERVER oradb TO postgres; GRANT postgres=# CREATE USER MAPPING FOR postgres SERVER oradb OPTIONS (user 'scott', password 'tiger'); CREATE USER MAPPING postgres=# postgres=# CREATE FOREIGN TABLE oratab (ecode integer,name char(30)) SERVER oradb OPTIONS(schema 'SCOTT',table 'EMP'); CREATE FOREIGN TABLE postgres=# select * from oratab limit 3; ecode | name -------+-------------------------------- 7369 | SMITH 7499 | ALLEN 7521 | WARD (3 rows)
Menggunakan Driver Oracle Call Interface(OCI)
Oracle Call Interface (OCI) driver tipe-2 yang tersedia secara bebas di situs Oracle yang memungkinkan klien untuk terhubung ke database Oracle. EDB Postgres Advanced Server (juga disebut EPAS) produk berpemilik memiliki modul tautan basis data berbasis OCI yang disebut dblink_ora, yang terhubung ke basis data Oracle menggunakan driver Oracle OCI. Yang harus Anda lakukan untuk menggunakan modul dblink_ora, instal EPAS (tidak mencakup instalasi) dan beri tahu EPAS di mana ia dapat menemukan perpustakaan driver Oracle OCI. Kita dapat menggunakan Oracle Instant Client yang sama dengan menentukan lokasi library-nya di variabel lingkungan LD_LIBRARY_PATH dan untuk menerapkan restart cluster EPAS.
Pertama, alihkan sebagai pengguna "enterprisedb", muat perpustakaan dan mulai ulang cluster. Itu saja, kami baik untuk mengakses database Oracle.
[[email protected] ~]$ export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib [[email protected] bin]$ /opt/PostgresPlus/9.5AS/bin/pg_ctl -D /opt/PostgresPlus/9.5AS/data/ restart [[email protected] bin]$ psql psql.bin (9.5.0.5) Type "help" for help.
edb=# pilih dblink_ora_connect('oraconn','localhost','edbora','edbuser','edbuser',1521);
dblink_ora_connect
——————–
OK
(1 baris)
Catatan:EPAS terhubung ke Oracle Database menggunakan perpustakaan Oracle Instant Client “libclntsh.so”. Jika Anda tidak akan menemukan perpustakaan di lokasi Perpustakaan Klien Oracle, buat tautan simbolis dengan libclntsh.so menunjuk ke libclntsh.so.version.number. Lihat dokumentasi.
Dalam contoh, dblink_ora_connect membuat koneksi ke database Oracle dengan informasi koneksi yang ditentukan pengguna. Kemudian menggunakan nama tautan ('oraconn' dalam kasus saya) kita dapat melakukan operasi seperti SELECT, INSERT, DELETE, UPDATE © menggunakan fungsi dblink_ora*. Semua fungsi yang dapat Anda rujuk dari dokumentasi EnterpriseDB di sini.
Semua metode di atas akan sangat berguna jika Anda mengerjakan proyek migrasi. Semoga bermanfaat. Terima kasih