با اومدن ورژن 11g، اوراکل محصول جدیدی رو به عنوان Database Gateway معرفی کرد که میتوان از آن برای اتصال به MSSQL و دیتابیس‌های مختلف دیگه استفاده کرد.

Database Gateway با ورژن‌های 10.1.0.5، 10.2.0.3 بعد از اعمال patchهای امنیتی سازگاره همچنین به طور مستقیم با ورژن‌های 10.2.0.4، 10.2.0.5، 11.1 و 11.2 مشکلی نداره

مراحل زیر رو دنبال کنید و یادتون باشه این مراحل روی پلتفرم‌های Linux/Unix کار میکنه البته برای باقی سیستم‌عامل‌ها هم مراحل شبیه همین مراحل‌اند:

  1. اگه قبلاً Oracle Database Gateways رو دانلود نکردید تو قدم اول باید دانلود رو انجام بدید.
  2. Oracle Database Gateway رو برای Microsoft SQL Server نصب کنید.
  3. Database Gateway رو برای اتصال به Microsoft SQL Server کانفیگ کنید (DG4MSQL).

دانلود نرم‌افزار

Oracle Database Gateways رو از Oracle eDelivery یا Metalink دانلود کنید.

نصب Oracle Database Gateway for Microsoft SQL Server

فایل‌های دانلود شده رو Unzip کنید بعد از اون یک دایرکتوری به نام gateway می‌بینید.

نام دایرکتوری رو به نام gateways تغییر بدید و installer رو اجرا کنید.

-bash-3.00$ cd /software/11gR2-Gateways/gateways/
-bash-3.00$ ./runInstaller

روی Next کلیک کنید:

تو این قسمت یک نام برای Oracle Home قرار بدید همچنین path باید به مسیر Oracle Home اشاره کند که به طور پیش‌فرض شناسایی می‌کند.

تو این پنجره Oracle Database Gateway for Microsoft SQL Server رو تیک‌دار کنید و روی Next کلیک کنید:

مشخصات Microsoft SQL Server که میخواین بهش وصل بشید رو وارد کنید. البته در حقیقت این تنظیمات چک نمی‌شوند و فقط در فایل کانفیگ ذخیره می‌شوند پس شما می‌تونید بعداً اینها رو تغییر بدید.

روی دکمه‌ی Next‌کلیک کنید:

روی Install کلیک کنید:

وقتی به این پنجره می‌رسید باید یک شل با کاربر root باز کنید و اسکریپت رو اجرا کنید (چون خود نصاب نمیتونه با کاربر root اسکریپت رو اجرا کنه)

root@host # /app/oracle/product/11.2.0/dbhome_1/root.sh

Running Oracle 11g root.sh script… 
The following environment variables are set as:
ORACLE_OWNER = ora11g
ORACLE_HOME = /app/oracle/product/11.2.0/dbhome_1

Enter the full pathname of the local bin directory: [/usr/local/bin]:
The file “dbhome” already exists in /usr/local/bin. Overwrite it? (y/n) [n]: y
Copying dbhome to /usr/local/bin …

The file “oraenv” already exists in /usr/local/bin. Overwrite it? (y/n) [n]: y
Copying oraenv to /usr/local/bin …
The file “coraenv” already exists in /usr/local/bin. Overwrite it? (y/n) [n]: y
Copying coraenv to /usr/local/bin … 

Entries will be added to the /var/opt/oracle/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root.sh script.
Now product-specific root actions will be performed.

Finished product-specific root actions.

حال روی دکمه‌ی Exit کلیک کنید.

کانفیگ Oracle Database Gateway for Microsoft SQL Server

مطمئن بشید که مشخصات اتصال به MS SQL در dg4msql parameter file درست باشه.

-bash-3.00$ more $ORACLE_HOME/dg4msql/admin/initdg4msql.ora

# 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=[SERVER127]:4076//NewCDP16
# alternate connect format is hostname/serverinstance/databasename
HS_FDS_TRACE_LEVEL=OFF
HS_FDS_RECOVERY_ACCOUNT=RECOVER
HS_FDS_RECOVERY_PWD=RECOVER 

-bash-3.00$ cd $ORACLE_HOME/network/admin

Append following in existing listener.ora. Change the name, path and port as required. 
LISTENER_dg4mssql=

(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = <oracle host or IP>) (PORT = <any unused port>))
)
)


SID_LIST_LISTENER_dg4mssql=

(SID_LIST=
(SID_DESC=
(SID_NAME=dg4msql)
(ORACLE_HOME=/app/oracle/product/11.2.0/dbhome_1)
(ENV=”LD_LIBRARY_PATH=/app/oracle/product/11.2.0/dbhome_1/dg4msql/driver/lib:/app/oracle/product/11.2.0/dbhome_1/lib”)
(PROGRAM=dg4msql)

)
)

listener جدید رو استارت کنید

-bash-3.00$ lsnrctl start LISTENER_dg4mssql

مطمئن بشید که سرویس listener کار میکنه

-bash-3.00$ lsnrctl status LISTENER_dg4mssql


Listening Endpoints Summary…
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=<oracle hostname or IP>)(PORT=1551)))
Services Summary…
Service “dg4msql” has 1 instance(s).
Instance “dg4msql”, status UNKNOWN, has 1 handler(s) for this service…
The command completed successfully

خطوط زیر رو به فایل tnsnames.ora اضافه کنید

dg4msql =
(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)(HOST=< oracle hostname or IP >)(PORT=1551))
(CONNECT_DATA=(SID=dg4msql))
(HS=OK)
-bash-3.00$ tnsping dg4msql 

TNS Ping Utility for Solaris: Version 11.2.0.1.0 – Production on 07-JAN-2014 12:30:08 
Copyright (c) 1997, 2009, Oracle. All rights reserved. 

Used parameter files:
/app/oracle/product/11.2.0/dbhome_1/network/admin/sqlnet.ora 

Used TNSNAMES adapter to resolve the alias

Attempting to contact (DESCRIPTION= (ADDRESS=(PROTOCOL=tcp)(HOST=<host>)(PORT=1551)) (CONNECT_DATA=(SID=dg4msql)) (HS=OK))

OK (0 msec)
 

ساخت database link

در آخر هم کافیه فقط یک database link بسازید و نام‌کاربری و پسورد رو بدید. یادتون باشه نام‌کاربری از قبل باید در MS SQL ساخته شده باشه

SQL> CREATE DATABASE LINK sqlserver CONNECT TO “SQLUser” IDENTIFIED BY “SQLPass” USING ‘dg4msql';

Database link created.
SQL> select count(1) from “SQLView”@sqlserver;

COUNT(1)
———-
24592

تبریک حالا شما می‌تونید اطلاعات جداول MS SQL به وسیله‌ی Oracle بخونید

نکات

یادتون باشه که oracle_home رو در نصب gateway یک چیز دیگه از مسیر موجود بدید. مثلا مسیر دیتابیس اینه:

/u01/app/oracle/product/11.2.0/dbhome_1 

و شما باید یه نام دیگه و مسیر زیر رو مثلا در نرم افزار بذارید:

/u01/app/oracle/product/11.2.0/dbhome_2

بعد از نصب نرم افزار نوبت به listener.ora و tnsname.ora میرسه.

از مسیر /u01/app/oracle/product/11.2.0/dbhome_2/dg4msql/admin ، listener.ora.sample و tnsname رو مقادیرش رو ببر در فایل های اصلی خودتون در مسیر network/admin

اینجوری نیازی به تعریف listener جدید نیست.

بعد از این کار listener را reload کنید و dblink رو بسازید.

منبع