PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Các cách truy cập Cơ sở dữ liệu Oracle trong PostgreSQL

Ngày nay, các tổ chức lưu trữ thông tin (dữ liệu) trong các hệ thống cơ sở dữ liệu khác nhau. Mỗi hệ thống cơ sở dữ liệu có một tập hợp các ứng dụng chạy chống lại nó. Dữ liệu này chỉ là các bit và byte trên hệ thống tệp - và chỉ có cơ sở dữ liệu mới có thể biến các bit và byte dữ liệu thành thông tin kinh doanh. Việc tích hợp và hợp nhất các thông tin (dữ liệu) đó vào một hệ thống cơ sở dữ liệu thường rất khó khăn. Bởi vì nhiều ứng dụng chạy trên một cơ sở dữ liệu có thể không có một ứng dụng tương đương chạy với một cơ sở dữ liệu khác. Để hợp nhất thông tin thành một hệ thống cơ sở dữ liệu, chúng ta cần một kết nối cơ sở dữ liệu không đồng nhất. Trong bài đăng này, tôi sẽ giới thiệu về cách bạn có thể kết nối PostgreSQL với một trong những cơ sở dữ liệu không đồng nhất Oracle bằng các phương pháp khác nhau.

Dưới đây là một số phương pháp để tạo kết nối với cơ sở dữ liệu Oracle trong PostgreSQL.

  • Sử dụng Trình điều khiển ODBC
  • Sử dụng Trình ghi dữ liệu nước ngoài
  • Sử dụng Trình điều khiển Giao diện Cuộc gọi Oracle (OCI)
Phần mềm được sử dụng trong bản demo (bao gồm liên kết tải xuống) - 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_FDW Sử dụng ODBC Người lái xe

Kết nối DataBase mở (ODBC) là một API phần mềm tiêu chuẩn để sử dụng DBMS. Trình điều khiển ODBC / Nguồn dữ liệu ODBC (API) là một thư viện cho phép các ứng dụng kết nối với bất kỳ cơ sở dữ liệu nào có sẵn trình điều khiển ODBC. Nó là lớp giữa chuyển các truy vấn dữ liệu của ứng dụng thành các lệnh mà DBMS hiểu được. Để sử dụng phương pháp này, cần có gói trình điều khiển unixODBC và Oracle ODBC nguồn mở (Basic / ODBC / Devel). Cùng với một mô-đun trong PostgreSQL có thể giao tiếp với DSN được tạo bằng trình điều khiển unixODBC và Oracle ODBC. Vài năm trước, CyberTec đã phát hành mô-đun ODBC-Link, hiện tại nó đã lỗi thời, tuy nhiên, nó có triển khai kiểu dblink cho PostgreSQL để kết nối với bất kỳ cơ sở dữ liệu tuân thủ ODBC nào khác. Chúng tôi có thể sử dụng mô-đun này để kết nối cơ bản với Oracle. Hãy xem.

Cài đặt unixODBC
tar -xvf unixODBC-2.3.4.tar.gz
cd unixODBC-2.3.4/
./configure --sysconfdir=/etc
make
make install

Vị trí tệp nhị phân / Thư viện / cấu hình:/usr/local/bin,/usr/local/lib,/etc(odbc.ini,odbcinst.ini)

Cài đặt trình điều khiển Oracle ODBC

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

Vị trí thư viện / nhị phân:/usr/lib/oracle/11.2/client64

Cài đặt 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

Thư viện và vị trí tệp SQL:/opt/PostgreSQL/9.5/share/postgresql/contrib

Cài đặt sẽ tạo tệp SQL mô-đun ODBC-Link trong thư mục $ PGHOME / Contrib. Tải tệp SQL, tệp này sẽ tạo một lược đồ có tên "odbclink" với các chức năng cần thiết trong đó.

psql -p 5432 -d oratest -U postgres -f /opt/PostgreSQL/9.5/share/postgresql/contrib/odbclink.sql

Tại thời điểm này, chúng tôi đã cài đặt unixODBC Drirver, Oracle ODBC driver và ODBC-Link module cho PostgreSQL. Bước đầu tiên, chúng ta cần tạo một DSN bằng Oracle ODBC.

Chỉnh sửa tệp /etc/odbcinst.ini và chuyển định nghĩa trình điều khiển

## 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

Chỉnh sửa tệp /etc/odbc.ini và tạo DSN với trình điều khiển được đề cập trong /etd/odbcinst.ini

## Host: pg.raghav-node1.com, PORT: 1521
## Oracle Instance Name: ORA11G, Username: mmruser, Password: mmruser
## ODBC Data source: Ora

[Ora]
Description =myoracledb database
Driver =MyOracle
Trace =yes
TraceFile =/tmp/odbc_oracle.log
Database =//pg.raghav-node1 .com:1521 / ORA11G
UserID =mmruser
Password =mmruser
Port =1521

Sau khi tạo DSN, tải tất cả thư viện trình điều khiển Oracle &unix ODBC bằng cách đặt các biến môi trường và kiểm tra kết nối bằng công cụ dòng lệnh 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>

Bây giờ, hãy đặt các biến môi trường tương tự cho người dùng postgres để tải các thư viện và khởi động lại cụm PostgreSQL để có hiệu lực. Kết nối với PostgreSQL và gọi các hàm odbclink để kết nối với cơ sở dữ liệu 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 =# select odbclink.connect (‘DSN =Ora’);
kết nối
———
1
(1 hàng)

Hay phải không… !!!. Để truy xuất và thao tác dữ liệu, hãy tham khảo tệp ODBC-Link README.

Sử dụng Trình ghi dữ liệu nước ngoài

Phần mở rộng SQL / MED (SQL Management of External Data) cho SQL Standard cho phép quản lý dữ liệu bên ngoài được lưu trữ bên ngoài cơ sở dữ liệu. SQL / MED cung cấp hai thành phần Trình bao bọc dữ liệu nước ngoài và Liên kết dữ liệu. PostgreSQL đã giới thiệu Trình gói dữ liệu nước ngoài (FDW) trong phiên bản 9.1 với hỗ trợ chỉ đọc và hỗ trợ ghi trong phiên bản 9.3 của Tiêu chuẩn SQL này. Ngày nay, phiên bản mới nhất có một số tính năng xung quanh nó và nhiều loại FDW có sẵn để truy cập các cơ sở dữ liệu SQL từ xa khác nhau.

Oracle_fdw cung cấp một cách dễ dàng và hiệu quả để truy cập Cơ sở dữ liệu Oracle. IMO, một trong những phương pháp tuyệt vời nhất để truy cập cơ sở dữ liệu từ xa. Để biên dịch Oracle_FDW với PostgreSQL 9.5, chúng ta cần các thư viện Oracle Instant Client và bộ pg_config trong PATH. Chúng ta có thể sử dụng cùng các thư viện Oracle Instant Client được sử dụng cho ODBC-Link. Hãy xem nó hoạt động như thế nào.

Đầu tiên, đặt các biến môi trường bằng thư viện OIC và 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

Giải nén mô-đun oracle_fdw và biên dịch nó với PostgreSQL 9.5

unzip oracle_fdw-1.4.0.zip
cd oracle_fdw-1.4.0/
make 
make install

Bây giờ, hãy chuyển với tư cách người dùng ‘postgres’ và khởi động lại cụm bằng cách tải các thư viện Oracle Instant Client cần thiết cho phần mở rộng oracle_fdw và tạo phần mở rộng bên trong cơ sở dữ liệu.

[[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 =# tạo tiện ích mở rộng oracle_fdw;
TẠO MỞ RỘNG

Bây giờ bạn có thể truy cập cơ sở dữ liệu 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)


Sử dụng Trình điều khiển Giao diện Cuộc gọi Oracle (OCI)

Giao diện cuộc gọi Oracle (OCI) một trình điều khiển loại 2 có sẵn miễn phí trên trang Oracle cho phép máy khách kết nối với cơ sở dữ liệu Oracle. EDB Postgres Advanced Server (còn gọi là EPAS) một sản phẩm độc quyền có tích hợp mô-đun liên kết cơ sở dữ liệu dựa trên OCI có tên là dblink_ora, kết nối với cơ sở dữ liệu Oracle bằng cách sử dụng trình điều khiển Oracle OCI. Tất cả những gì bạn phải làm để sử dụng mô-đun dblink_ora, cài đặt EPAS (không bao gồm cài đặt) và cho EPAS biết nơi nó có thể tìm thấy các thư viện trình điều khiển Oracle OCI. Chúng ta có thể sử dụng cùng một Oracle Instant Client bằng cách chỉ định vị trí thư viện của nó trong biến môi trường LD_LIBRARY_PATH và để khởi động lại cụm EPAS có hiệu lực.

Đầu tiên, chuyển với tư cách người dùng “enterprisedb”, tải các thư viện và khởi động lại cụm. Đó là tất cả, chúng tôi rất tốt để truy cập cơ sở dữ liệu 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 =# select dblink_ora_connect ('oraconn', 'localhost', 'edbora', 'edbuser', 'edbuser', 1521);
dblink_ora_connect
——————–
OK
(1 hàng)

Lưu ý:EPAS kết nối với Cơ sở dữ liệu Oracle bằng cách sử dụng thư viện Oracle Instant Client “libclntsh.so”. Nếu bạn không tìm thấy thư viện trong vị trí Thư viện máy khách Oracle thì hãy tạo liên kết tượng trưng với libclntsh.so trỏ đến libclntsh.so.version.number. Tham khảo tài liệu.

Trong ví dụ, dblink_ora_connect thiết lập kết nối đến cơ sở dữ liệu Oracle với thông tin kết nối do người dùng chỉ định. Sau đó, sử dụng tên liên kết (trong trường hợp của tôi là ‘oraconn’), chúng ta có thể thực hiện các thao tác như CHỌN, CHÈN, XÓA, CẬP NHẬT &SAO CHÉP bằng các hàm dblink_ora *. Tất cả các chức năng bạn có thể tham khảo từ tài liệu EnterpriseDB tại đây.

Tất cả các phương pháp trên sẽ rất hữu ích nếu bạn đang làm việc trên các dự án di chuyển. Hy vọng nó hữu ích. Xin cảm ơn


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL Upsert phân biệt các hàng được chèn và cập nhật bằng cách sử dụng các cột hệ thống XMIN, XMAX và các cột khác

  2. Làm thế nào để giải phóng các khóa hàng Postgres có thể có?

  3. Cách nâng cấp PostgreSQL10 lên PostgreSQL11 với Zero Downtime

  4. Không có hàm nào phù hợp với các loại đối số và tên đã cho

  5. Sao lưu PostgreSQL bằng pg_dump và pg_dumpall