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

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

Ο SQL Server μας δίνει τη δυνατότητα να μπορούμε να συνδεόμαστε και να εκτελούμε queries σε απομακρυσμένα Database Instances που δεν είναι απαραίτητο όμως να είναι στο ίδιο RDBMS. Στο άρθρο αυτό θα δούμε συγκεκριμένα πώς γίνεται από instance του SQL Server προς instance της Oracle Database με τη χρήση Linked Server.

Σε προηγούμενο άρθρο είχαμε δει πως συνδέουμε SQL Server με Oracle με τη χρήση PolyBase. Η κύρια διαφορά είναι ότι με τον Linked Server δεν διαβάζουμε απλά δεδόμενα αλλά μπορούμε να εκτελέσουμε Stored Procedures και να τροποποιούμε τα δεδομένα με inserts, updates, deletes.

* Όλες τις διαφορές μεταξύ Linked Server και PolyΒase μπορούμε να τις διαβάσουμε από εδώ.

Η εγκατάσταση

Για αρχή θα πρέπει να κατεβάσουμε τον Oracle Database Client από εδώ.

Στην συνέχεια θα πρέπει να τον κάνουμε εγκατάσταση στον server που φιλοξενεί τον SQL Server.

Κατά την εγκατάσταση ως installation type επιλέγουμε Administrator:

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

Στην επόμενη καρτέλα επιλέγουμε Windows Build-in Account:

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

Αφήνουμε τις επόμενες καρτέλες ως έχουν και ολοκληρώνουμε την εγκατάσταση.

Έπειτα πάμε στο παρακάτω φάκελο στο path που έχει δημιουργηθεί και βάζουμε όπου user το όνομα του χρήστη στον οποίο έγινε η εγκατάσταση:

C:\app\client\user\product\19.0.0\client_1\network\admin

Μέσα στον φάκελο αυτό θα υπάρχει ένα αρχείο με όνομα tnsnames.ora. Το κάνουμε edit και προσθέτουμε την παρακάτω εγγραφή βάζοντας ένα όνομα (π.χ. ORADEV), το hostname, την πόρτα και ως service_name το όνομα της βάσης ή του service που θέλουμε να συνδεθούμε:

ORADEV=
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = oracledev1)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = oradev)
    )
  )

Για να δοκιμάσουμε ότι μέχρι στιγμής παίζουν όλα καλά μπορούμε να ανοίξουμε ένα Command Prompt και να κάνουμε tnsping με το όνομα της εγγραφής στο tnsnames.ora:

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

Αν εμφανίσει στο τέλος OK συμαίνει ότι είμαστε μια χάρα, σε αντίθετη περίπτωση μπορεί να μας κόβει κάποιο firewall ή δικτυακό θέμα.

Αφού βεβαιωθούμε ότι η επικοινωνία λειτουργεί, συνδεόμαστε στον SQL Server από το SQL Server Management Studio και επιλέγουμε Server Objects και δεξί κλικ Linked Server, New Linked Server…:

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

Στην καρτέλα General ορίζουμε το όνομα που θέλουμε να έχει ο Linked Server, ως Server type Provider Oracle Provider for OLE DB και ως Data source το όνομα που δώσαμε στην εγγραφή στο tnsnames.ora*:

*Μπορούμε εναλλακτικά αντί να βάλουμε την έγγραφη από το tnsnames.ora να κάνουμε χρήση του ezconnect βάζοντας ip , πόρτα και service, για παράδειγμα oracle.dataplatform.gr:1521/orcl

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

Στην καρτέλα Security επιλέγουμε Be made using this security context και βάζουμε τα credentials του χρήστη με της Oracle με τον οποίο θα συνδεόμαστε:

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

Για το παράδειγμα μας έχω φτιάξει έναν χρήστη με όνομα “Stratos” που έχει δικαίωμα connect, resource, unlimited quota στο tablespace users και έχω φτιάξει σε αυτόν έναν πίνακα “Pelates” με 3 εγγραφές:

-- Create the user 
create user STRATOS identified by "password"
  default tablespace USERS
  temporary tablespace TEMP
  profile DEFAULT
  quota unlimited on users;
-- Grant/Revoke role privileges 
grant connect to STRATOS;
grant resource to STRATOS;

-- Create table
create table stratos.pelates
(
  id    INTEGER,
  onoma VARCHAR2(10)
);

insert into pelates values(1,'Stratos');
insert into pelates values(2,'Nikos');
insert into pelates values(3,'Giorgos');

commit;

Ολοκληρώνοντας τον Linked Server μπορούμε με τη χρήση openquery να καλέσουμε τον Linked Server που φτιάξαμε και να ορίσουμε το query που θέλουμε να τρέξει προς την Oracle:

select * from openquery([oracle server], 'select onoma from pelates');
Πώς μπορούμε να συνδέσουμε SQL Server με Oracle Database με χρήση Linked Server
07

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

Msg 7302, Level 16, State 1, Line 1
Cannot create an instance of OLE DB provider "OraOLEDB.Oracle" for linked server "ORACLE SERVER".

Τότε εκτελούμε την παρακάτω εντολή που θα μας διορθώσει εύκολα το πρόβλημα:

EXEC master.dbo.sp_MSset_oledb_prop N'OraOLEDB.Oracle', N'AllowInProcess', 1

Πηγές:

Μοιράσου το

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