هادی
خواندن ۵ دقیقه·۱ ماه پیش

ایجاد ارتباط بین SqlServer و Oracle

تو این پست قصد داریم شیوه ارتباط بین دیتابیس های Oracle و SqlServer که رو ویندوز نصب هستن رو شرح بدیم.


برقراری ارتباط از SqlServer به Oracle

ابتدا باید Oracle Database client رو از سایت اوراکل برای ویندوز دانلود کنیم. بعد از دانلود یک مسیر برای نصب مشخص میکنیم. برای مثال یک فولدر بنام Oracle در مسیر ProgramFile ایجاد میکنیم و فایل دانلودی رو اونجا extract میکنیم و یک فولدر خروجی به نام client ایجاد میشه.

ساختار و مسیر فولدر(فولدرهای product و response پس از نصب و در مراحل بعدی ایجاد خواهد شد)
ساختار و مسیر فولدر(فولدرهای product و response پس از نصب و در مراحل بعدی ایجاد خواهد شد)


فایل setup.exe رو به صورت run as admin اجرا میکنیم. نوع نصب Administrator انتخاب میکنیم تا تمامی ابزارها و سرویس های مورد نیاز نصب بشه.


در مرحله بعد، برای راه اندازی سرویس و کانفیگ های مورد نیاز تعیین میکنیم از چه کاربری استفاده شه. گزینه Use Windows Built-in Account رو انتخاب میکنیم.

در مرحله باید مسیر قرارگیری کانفیگ ها و همچنین Oracle Home رو برای نصب مشخص کنیم. از فولدر client که قبلا ساختیم استفاده میکنیم و مسیر رو مشخص میکنیم.

در مرحله بعد خلاصه ای از اطلاعات نصب رو میبینم و گزینه install رو میزنیم تا پروسه نصب کامل بشه.

نصب client اوراکل به پایان رسید. برای اطمینان از نصب ODBC Data Source رو اجرا میکنیم و در بخش درایورها چک میکنیم درایور مربوط به اوراکل مطابق با شکل زیر اضافه شده باشه:


حالا باید تنظیمات مربوط به سرویس برای ارتباط با دیتابیس اوراکل رو انجام بدیم. فرض میکنیم روی دیتابیس اوراکل یک سرویس بنام orclpdb ایجاد کردیم و میخوایم به اون متصل شیم.

برای مثال تو تنظیمات فایل tnsnames.ora در دیتابیس اصلی اوراکل اینجور سرویسی تعریف شده:

کانفیگ tnsnames بر روی سرور اصلی اوراکل
کانفیگ tnsnames بر روی سرور اصلی اوراکل


باید مطابق با تنظیمات بالا، کلاینت نصب رو نیز تنظیم کنیم و tns مورد نیاز رو تعریف کنیم. به مسیر زیر میریم و یک فایل با عنوان tnsnames.ora ایجاد میکنیم:

C:\Program Files\Oracle\client\product\21.0.0\client_1\network\admin

مطابق با تنظیمات tns سرور اصلی اوراکل، تنظیمات رو وارد میکنیم و فایل رو ذخیره میکنیم(ipو port و service name مربوط به دیتابیس اوراکل رو وارد میکنیم).

orclpdb = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.220.129)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orclpdb) ) )

تا اینجا تنظیمات مربوط به کلاینت اوراکل به اتمام رسید. SSMS رو اجرا میکنیم و به دیتابیس متصل میشیم.

تو قسمت Server Objects -> Linked Servers -> Provider چک میکنیم Ora.OLEDB.Oracle وجود داشته باشه و با کلیک راست روش از قسمت Properties تیک گزینه Allow inprocess رو میزنیم.

حالا باید یک لینک سرور ایجاد کنیم. روی Linked Servers کلیک راست میکنیم و گزینه New Linked Server رو میزنیم.

تو بخش General با توجه به تنظیماتی که برای tns وارد کنیم موارد رو بصورت زیر پر میکنیم:

در بخش Security نیز گزینه Be Made using this security context رو میزنیم و یوزر و پسورد رو برای اتصال وارد میکنیم.

نکته: اگه حین ایجاد Linked Server به خطا خوردید یا با مشکل کرش کردن مواجه شدید یک دور سرویس SQL Server یا ویندوز باید restart شه. در صورتی که ارتباط شبکه برقرار باشه و tns مربوطه به درستی وارد شده باشه اما مجدد با خطای ORA 12638 مواجه شدید به مسیر زیر برید و کانفیگ SQLNET.AUTHENTICATION_SERVICES رو None قرار بدید:

C:\Program Files\Oracle\client\product\21.0.0\client_1\network\admin\sqlnet.ora
C:\Program Files\Oracle\client\product\21.0.0\client_1\network\admin\sqlnet.ora


برقراری ارتباط از Oracle به SQLServer

با فرض اینکه دیتابیس اوراکل بر روی ویندوز نصب شده است، برای برقراری این ارتباط ابتدا باید یک ODBC Data Source بر روی این سرور ایجاد کنیم. ODBC Data Source رواجرا میکنیم و از قسمت System DSN بر روی Add کلیک میکنیم.

درایور مربوط به SQL Server رو انتخاب میکنیم.

در قسمت بعد علاوه بر وارد کردن نام دلخواه، IP مربوط به سروری که SQL Server روش اجرا میشه رو وارد میکنیم.

در قسمت بعد برای Authentication گزینه With SQL Server authentication رو انتخاب میکنیم و یوزر و پسورد مورد نظر برای اتصال رو هم وارد میکنیم.

در قسمت بعد default database رو انتخاب میکنیم و بعد Finish رو میزنیم.

تو قسمت آخر Test Data Source رو میزنیم تا از صحیح بودن اتصال اطیمنان حاصل کنیم.

تا اینجا Data Source آماده شده و باید از این Data Source برای اتصال اوراکل به SQL Server استفاده کنیم. اگه اوراکل روی لینوکس نصب شده باید یک ODBC Data Source روی لینوکس ایجاد کنیم.

حالا باید تنظیمات مربوط به listener و tns رو برای ارتباط با Data Source انجام بدیم. ابتدا تو مسیر زیر(Oracle Home) یک فایل با عنوان initSQLSERVER1.ora ایجاد میکنیم

C:\OracleDB\Base\homes\OraDB21Home1\hs\admin\initSQLSERVER1.ora

و تنظیمات زیر رو اضافه میکنیم:

HS_FDS_CONNECT_INFO = SQLSERVER1 HS_FDS_TRACE_LEVEL = 0


بعد از میریم سراغ فایل tnsname.ora تو مسیر زیر:

C:\OracleDB\Base\homes\OraDB21Home1\network\admin

و tns مربوط به DataSource که تعریف کردیم رو به انتهای فایل اضافه میکنیم:

SQLSERVER1 = (DESCRIPTION= (ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521)) (CONNECT_DATA=(SID=SQLSERVER1)) (HS=OK) )


سپس به فایل listener.ora یک SID جدید اضافه میکنیم.

(SID_DESC= (SID_NAME=SQLSERVER1) (ORACLE_HOME=C:\OracleDB\Source) (PROGRAM=dg4odbc) )

فایل بعد از اضافه کردن تنظیمات بالا مطابق زیر خواهد بود:

# listener.ora Network Configuration File: C:\OracleDB\Base\homes\OraDB21Home1\NETWORK\ADMIN\listener.ora # Generated by Oracle configuration tools. SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = CLRExtProc) (ORACLE_HOME = C:\OracleDB\Source) (PROGRAM = extproc) (ENVS = &quotEXTPROC_DLLS=ONLY:C:\OracleDB\Source\bin\oraclr.dll&quot) ) (SID_DESC= (SID_NAME=SQLSERVER1) (ORACLE_HOME=C:\OracleDB\Source) (PROGRAM=dg4odbc) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.220.129)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) ) )


حال باید سرویس مربوط به listener را restart کنیم.

در آخر از طریق Oracle Sql Developer بعد از لاگین از قسمت Database Link یک لینک جدید ایجاد کرده و علاوه بر یوزر و پسورد در قسمت Service Name نام سرویس یا همان SQLSERVER1 را وارد میکنیم و تیک Public را میزنیم و در آخر گزینه اتصال را میزنیم.

با دستور زیر نیز میتوان یک لینک اتصال ایجاد کرد:

CREATE DATABASE LINK SQLSERVER1 CONNECT TO &quotMyUser&quot IDENTIFIED BY &quotMyPassword&quot USING 'SQLSERVER1';

به صورت زیر نیز میتوانیم QUERY های مربوطه را اجرا کنیم:

select * from dbo.DimCustomer@&quotDATABASE_LINK1&quot



شاید از این پست‌ها خوشتان بیاید