Πώς μπορούμε να συνδέσουμε Oracle Database με SQL Server με χρήση Oracle Gateway σε Windows
- Πώς συλλέγουμε to actual execution plan από τα queries με χρήση Extended Event και πως διαβάζουμε τα δεδομένα του - 2 Δεκέμβριος 2024
- Πώς βρίσκουμε τι δικαιώματα έχει ένας χρήστης σε βάση δεδομένων της Oracle - 1 Νοέμβριος 2024
- Πώς ενεργοποιούμε το Unified Auditing σε Oracle Database - 7 Οκτώβριος 2024
Σε προηγούμενο άρθρο είχαμε δει πως μπορούμε να εκτελούμε queries σε απομακρυσμένο SQL Server από Oracle Database που βρίσκεται σε Linux μέσω Oracle Database Gateway. Σε αυτό το άρθρο θα δούμε πως γίνεται η εγκατάσταση του Oracle Gateway αντίστοιχα σε Windows.
Η εγκατάσταση του Oracle Gateway μπορεί να γίνει είτε σε κάποιον από τους database servers είτε σε κάποιο τρίτο μηχάνημα που θα λειτουργεί ως ενδιάμεσος. Στο συγκεκριμένο παράδειγμα θα τον προχωρίσουμε την εγκατάσταση στον Windows SQL Server.
Προαπαιτούμενα
Θα πρέπει να έχουμε κατεβάσει στον Windows Server το software του Oracle Gateway για Windows από το επίσημο link εδώ.
Τα βήματα
Στο 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
Έπειτα πάμε στον Windows Server που θα γίνει η εγκατάσταση ο Oracle Gateway και δημιουργούμε μία ODBC σύνδεση προς τον Oracle Database Server. Για να γίνει αυτό ψάχνουμε από την έναρξη ODBC Data Sources (64-bit) και επιλέγουμε –> System DSN –> Add… .
Στην καρτέλα System DSN ορίζουμε ένα όνομα και τον server που θα συνδεθούμε. Στο παράδειγμα το Oracle Gateway θα γίνει εγκατάσταση στο ίδιο μηχάνημα που υπάρχει ο target SQL Server οπότε γράφουμε στον πεδίο Server, localhost:
Στη συνέχεια συμπληρώνουμε τα login credentials που φτιάξαμε στην αρχή για να συνδεόμαστε στον SQL Server:
Αφού ολοκληρώσουμε την δημιουργεία του ODBC, μπορούμε να ξεκινήσουμε στην εγκατάσταση του software. Κάτα την εγκατάσταση θα μας ζητήσει να ορίσουμε την τοποθεσία που θα γινει η εγκατάσταση και με ποια components, στα components επιλέγουμε Oracle Database Gateway for ODBC:
Κατά την ολοκλήρωση της εγκατάστασης θα μας ζητήσει να φτιάξουμε τον listener, εκεί θα ορίσουμε την πόρτα που θα γίνεται επικοινωνία μετάξυ Oracle Gateway και Oracle Database:
Αφού ολοκληρωθεί και η δημιουργία του listener θα πρέπει να πάμε στο path που κάναμε εγκατάσταση το Oracle Gateway και να δημιουργήσουμε ένα κενό αρχείο init που περιέχει το όνομα του ODBC που θα το καλούμε όπως το παρακάτω:
C:\app\tg\user\product\19.0.0\tghome_1\hs\admin\initMIG_DB.ora
Σε αυτό το αρχείο συμπληρώνουμε τα παρακάτω όπου HS_FDS_CONNECT_INFO
ορίζουμε το όνομα του ODBC που φτιάξαμε και ως HS_LANGUAGE
το encoding που έχει η destination Oracle Database:
# This is a customized agent init file that contains the HS parameters
# that are needed for the Database Gateway for Microsoft SQL Server
#
# HS init parameters
#
HS_FDS_CONNECT_INFO=MIG_DB
HS_FDS_TRACE_LEVEL=off
HS_NLS_NCHAR=UCS2
HS_LANGUAGE=AMERICAN_AMERICA.AL32UTF8
HS_FDS_FETCH_ROWS=1
Έπειτα πρέπει να τροποποιήσουμε τον listener.ora που βρίσκεται στο ανάλογο path που κάναμε την εγκατάσταση:
C:\app\tg\user\product\19.0.0\tghome_1\network\admin\listener.ora
Και να προσθέσουμε την παρακάτω εγραφή ορίζοντας ως SID_NAME
το όνομα του ODBC που ορίσαμε να είναι ίδιο με το init του Gateway και ως ORACLE_HOME
το αντίστοιχο path που έγινε η αρχική εγκατάσταση:
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(SID_NAME=MIG_DB)
(ORACLE_HOME=C:\app\tg\user\product\19.0.0\tghome_1)
(PROGRAM=dg4odbc)
)
)
Στο Oracle Database Linux Server
Στη συνέχεια στο Linux που βρίσκεται η Oracle Database πρέπει να προσθέσουμε στο tnsnames.ora εγγραφή που να κοιτάει τον Oracle Gateway που φτιάξαμε, ορίζοντας ως HOST
το όνομα ή την IP του και ως CONNECT_DATA
το όνομα του gateway που ορίσαμε στον listener:
vi $ORACLE_HOME/network/admin/tnsnames.ora
* Προσέχουμε ως host βάζουμε το όνομα / IP που είναι εγκαταστημένος ο Oracle Gateway.
MIG_DB =
(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)(HOST=SMATZOURANISLP)(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;
Στην περίπτωση που μας εμφανίσει το παρακάτω σφάλμα:
ERROR at line 1:
ORA-02085: database link SQLDBLINK connects to HO.WORLD
Τότε πρέπει να απενεργοποιήσουμε τα global names με την παρακάτω εντολή:
alter system set global_names = false scope=both;
Στην περίπτωση που μας εμφανίσει το σφάλμα:
ERROR at line 1:
ORA-28545: error diagnosed by Net8 when connecting to an agent
Unable to retrieve text of NETWORK/NCR message 65535
ORA-02063: preceding 2 lines from <DBLINK>
Τότε προσθέτουμε την παρακάτω γραμμή στο SQLNET.ora file του Oracle Gateway:
C:\app\tg\user\product\19.0.0\tghome_1\network\admin\SQLNET.ora
SQLNET.NO_NTLM=FALSE