Πώς μπορούμε να συνδέσουμε Oracle Database με SQL Server με χρήση Oracle Gateway σε Linux

Πώς μπορούμε να συνδέσουμε Oracle Database με SQL Server με χρήση Oracle Gateway σε Linux
Πώς μπορούμε να συνδέσουμε Oracle Database με SQL Server με χρήση Oracle Gateway σε Linux

Σε αυτό το άρθρο θα δούμε πως μπορούμε να εκτελούμε queries σε απομακρυσμένο SQL Server από Oracle Database σε Oracle Linux / Red Hat Linux.

Σε προηγούμενο άρθρο είχαμε δεί πως γίνεται η αντίστροφη διαδικασία ώστε να συνδεόμαστε από SQL Server Instance σε Oracle Database μέσω Linked Server. Αυτή τη φορά θα εγκαταστήσουμε ένα Oracle Database Gateway που μέσω αυτού θα φτιάξουμε ένα Database Link προς μία βάση δεδομένων που βρίσκεται σε SQL Server.

Η εγκατάσταση του Oracle Gateway μπορεί να γίνει είτε σε κάποιον από τους database servers είτε σε κάποιο τρίτο μηχάνημα που θα λειτουργεί ως ενδιάμεσος. Στο συγκεκριμένο παράδειγμα θα τον προχωρίσουμε την εγκατάσταση στον Linux Oracle Database.

Τα βήματα

Στο SQL Server Instance

Για αρχή θα πρέπει στο SQL Server Instance να φτιάξουμε ένα login που θα έχει πρόσβαση read στη βάση δεδομένων που θέλουμε να διαβάσουμε από την Oracle Database. Στο παράδειγμά μας θα φτιάξουμε έναν χρήστη που ονομάζεται oraclepw και θα έχει πρόσβαση στη βάση mig_db:

USE [master]
GO
CREATE LOGIN [oraclegw] WITH PASSWORD=N'password', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO
USE [mig_db]
GO
CREATE USER [oraclegw] FOR LOGIN [oraclegw]
GO
USE [mig_db]
GO
ALTER ROLE [db_datareader] ADD MEMBER [oraclegw]
GO

Στο Oracle Database Linux Server

Στο Linux που βρίσκεται η Oracle Database κατεβάζουμε τον ODBC driver για SQL Server και να τον κάνουμε εγκατάσταση.

Για να γίνει η εγκατάσταση τρέχουμε όπως είναιτον παρακάτω κώδικα:

#Red Hat Enterprise Server 7 and Oracle Linux 7
curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/mssql-release.repo

exit
sudo yum remove unixODBC-utf16 unixODBC-utf16-devel #to avoid conflicts
sudo ACCEPT_EULA=Y yum install -y msodbcsql18
# optional: for bcp and sqlcmd
sudo ACCEPT_EULA=Y yum install -y mssql-tools18
echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' >> ~/.bashrc
source ~/.bashrc
# optional: for unixODBC development headers
sudo yum install -y unixODBC-devel

Στη συνέχεια ανοίγουμε το αρχείο που περιέχει την λίστα με τους drivers ώστε να δούμε ότι υπάρχει η εγγραφή με τον ODBC για SQL Server και να κρατήσουμε το path που βρίσκεται ο driver του:

vi /etc/odbcinst.ini
[ODBC Driver 18 for SQL Server]
Description=Microsoft ODBC Driver 18 for SQL Server
Driver=/opt/microsoft/msodbcsql18/lib64/libmsodbcsql-18.1.so.2.1
UsageCount=1

Έπειτα πάμε στον να προσθέσουμε το DSN (Data Source Name) entry για τον ODBC:

vi /etc/odbc.ini

Εκεί βάζουμε την εγγραφή όπως το παρακάτω παράδειγμα αλλάζοντας το όνομα της, το όνομα του server, το όνομα της βάσης δεδομένων και ως driver το path από το προηγούμενο βήμα:

[MIG_DB]
Description     = MSSQL Server
Trace           = No
Server          = SMATZOURANISLP
Database        = MIG_DB
Port            = 1433
TDS_Version     = 7.2
Driver=/opt/microsoft/msodbcsql18/lib64/libmsodbcsql-18.1.so.2.1
TrustServerCertificate=Yes

Για να δοκιμάσουμε ότι δουλεύει, τρέχουμε το παρακάτω βάζοντας το DSN name, το όνομα του χρήστη που φτιάξαμε στον SQL Server και το password:

isql MIG_DB oraclegw 'password' -v

Αν δουλεύει σωστά θα εμφανίσει το παρακάτω μήνυμα:

+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+

Σαν επόμενο βήμα θα πρέπει να δημιουργήσουμε το παρακάτω αρχείο βάζοντας το ανάλογο όνομα με το DSN:

vi $ORACLE_HOME/hs/admin/initMIG_DB.ora

Σε αυτό προσθέτουμε τις παρακάτω εγγραφές αλλάζοντας μόνο την παράμετρο HS_FDS_CONNECT_INFO με το το όνομα του DSN που έχουμε φτιάξει, ως HS_LANGUAGE ορίζουμε το encoding της Oracle Database που θα είναι το destination:

HS_FDS_CONNECT_INFO = MIG_DB
HS_FDS_TRACE_LEVEL = OFF
HS_FDS_SHAREABLE_NAME = /usr/lib64/libodbc.so
set ODBCINI=/etc/odbc.ini
HS_KEEP_REMOTE_COLUMN_SIZE = LOCAL
HS_NLS_NCHAR=UCS2
HS_LANGUAGE=AMERICAN_AMERICA.AL32UTF8

Έπειτα πάμε στο listener.ora και προσθέτουμε την παρακάτω εγγραφή βάζοντας ως SID_NAME το όνομα του DSN (για να το αφήσουμε όσο ποιο απλό γίνεται) και το ανάλογο ORACLE_HOME:

vi $ORACLE_HOME/network/admin/listener.ora
SID_LIST_LISTENER=
(SID_DESC=
  (SID_NAME=MIG_DB)
  (ORACLE_HOME=/oracle/nfs/app/oracle/product/12.1.0.2/dbhome_1)
  (PROGRAM=dg4odbc)
)

Αφού προσθέσουμε την εγγραφή στον listener τον κάνουμε reload:

lsnrctl reload

Στη συνέχεια αυτή την εγγραφή που φτιάξαμε στο listener την προσθέτουμε και στο tnsnames.ora:

vi $ORACLE_HOME/network/admin/tnsnames.ora

* Προσέχουμε ως host βάζουμε τον Linux Oracle Database Server και όχι τον SQL Server, με την πόρτα ως έχει.

MIG_DB =
  (DESCRIPTION=
    (ADDRESS=(PROTOCOL=tcp)(HOST=oracledev1)(PORT=1521))
      (CONNECT_DATA=(SID=MIG_DB))
      (HS=OK)
    )

Τέλος φτιάχνουμε το Database Link, ορίζοντας ένα όνομα, το login του SQL Server, το password και τo όνομα της εγγραφής που προσθέσαμε στο tnsnames.ora:

sqlplus / as sysdba

CREATE DATABASE LINK SQLDBLINK CONNECT TO "oraclegw" IDENTIFIED BY "password" USING 'MIG_DB';

Η δοκιμή

Αφού φτιάξαμε το Database Link μπορούμε με query στην Oracle Database να καλούμε τους πίνακες της βάσης δεδομένων στον SQL Server όπως παρακάτω:

select * from dbo.customers@sqldblink;
Πώς μπορούμε να συνδέσουμε Oracle Database με SQL Server με χρήση Oracle Gateway σε Linux
01

Στην περίπτωση που μας εμφανίσει το παρακάτω σφάλμα:

ERROR at line 1:
ORA-02085: database link SQLDBLINK connects to HO.WORLD

Τότε πρέπει να απενεργοποιήσουμε τα global names με την παρακάτω εντολή:

alter system set global_names = false scope=both;

Πηγές:

Μοιράσου το

Αφήστε μία απάντηση