PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Cara mengakses Oracle Database di PostgreSQL

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)
Perangkat lunak yang digunakan dalam demo (termasuk tautan unduhan) – CentOS 7 64bit, PostgreSQL 9.5, EDB Postgres Advanced Server 9.5, ODBC-Link 1.0.4, unixODBC-2.3.4, Oracle Instant Client 11.x Drivers &Oracle_FDWMenggunakan ODBC Pengemudi

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 unixODBC
tar -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-Link
tar -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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Alat untuk menghasilkan diagram tabel database dengan PostgreSQL?

  2. Bagaimana cara menambahkan Kolom baru di tabel setelah kolom ke-2 atau ke-3 di Tabel menggunakan postgres?

  3. PostgreSQL 11:Peninjau Patch untuk Mempartisi Patch

  4. Bagaimana mengubah tipe data kolom dari karakter ke numerik di PostgreSQL 8.4

  5. Cara menjatuhkan beberapa tabel di PostgreSQL menggunakan wildcard