هدف ما در این آموزش این است که بتوانیم یک لینک از اوراکل به sql server برقرار کنیم تا بتوانیم بوسیله دستورات sql ، از داخل اوراکل به داده‌های sql server دسترسی داشته باشیم. تاکید می کنم که فقط دستورات sql مجاز هست و نه plsql .


نیاز مندی ها
در این آموزش ما از اوراکل نسخه 11gr2 و sql server express 2008 r2 استفاده کرده ایم که هر دو نسخه 64 بیتی هستند. سیستم عامل تست هم windows 7 ultimate نسخه 64 بیتی هست. برای وصل شدن به sql server نیاز به درایور odbc برای این dbms داریم. نسخه 64 بیتی درایور odbc برای sql server از لینک زیر قابل دانلود هست:


http://www.microsoft.com/en-us/download/details.aspx?id=36434

 

ms odbc sql-sql server odbc x64 for win7
حجم: 4.42 مگابایت

 

منبع

http://www.aparat.com/v/G5xEZ


تنطیم sql server
ابتدا یک دیتا بیس و یک جدول در sql server ایجاد می کنیم تا بتوانیم از اوراکل به آنها دسترسی داشته باشیم. اسم دیتا بیس ما در اینجا demo است و یک جدول به اسم accounts در آن ایجاد می کنیم و سه مقدار را در آن قرار می دهیم.

Use demo
go
insert into accounts values (1,100),(2,200),(3,300)

در این مرحله باید یک login بسازیم که برای این کار باید از دیتابیس master استفاده کرد. سپس برای لاگینی که ساخته ایم یک user تعریف می کنیم که نام آن را demo می گزاریم. اسم لاگین و رمز عبور آن را هم demo می گزاریم.

USE [master]
GO
create login [demo] with password=N'demo',
default_database = [demo],
check_expiration = off,
check_policy = off;
go
use [demo]
go
create user [demo] for login [demo];
grant select on [dbo].[accounts] to [demo]

کانفیگ کردن درایور odbc
ابتدا باید درایور odbc مربوط به sql server را نصب کنیم. نصب این درایور به صورت ساده و فاقد تنظیمات خاصی است. پس از نصب در مسیر control panel و یا در مسیر control panel/administrative tools فایل Data Soyrce(ODBC) را اجرا می کنیم.

در تب System DSN ، دکمه Add را انتخاب می کنیم. در صفحه باز شده و از داخل لیست SQL Server را انتخاب می کنیم و دکمه Finish را کلیک می کنیم.

در این مرحله باید یک نام برای منبع داده که odbc به آن متصل می شود انتخاب کرد. ما از نام demoodbc استفاده کرده ایم. فیلد Description است. فیلد Server به اس کیو ال سروری که می خواهیم به آن متصل شویم اشاره دارد که در اینجا (local) است. سپس گزینه next را می زنیم.

در این صفحه ما از تنظیمات پیش فرض استفاده کرده ایم و گزینه next را انتخاب می کنیم.

در این مرحله دیتابیس پیش فرض در اس کیو ال سرور را که در اینجا demo است را انتخاب می کنیم و سپس دکمه next را انتخاب می کنیم.

در این مرحله نیز تنظیمات پیش فرض را می پذیریم و دکمه Finish را انتخاب می کنیم.

در این مرحله صفحه ای به شکل زیر ظاهر می شود. ما برای اینکه ببینیم عملیات موفقیت آمیز بوده ، گزینه Test Data Source را انتخاب می کنیم.

در صوریت موفقیت آمیز بودن عملیات ، چنین پیغامی ظاهر خواهد شد.

تنظیمات مربوط به اوراکل

در این مرحله به مسیر D:\app\MATRIX\product\11.2.0\dbhome_1\NETWORK\ADMIN در محل نصب اوراکل می رویم ((در این سیستم اوراکل در درایو D نصب شده است)) و فایل listener.ora را باز می کنیم.

فایل listener.ora سیستم ما در ابتدا به این شکل است.

در این مر حله ما کد زیر را به ورودی های SID_LIST_LISTIENER اضافه می کنیم.

    (SID_DESC =
      (PROGRAM = dg4odbc)
      (SID_NAME = demoodbc)
      (ORACLE_HOME = D:\app\MATRIX\product\11.2.0\dbhome_1)
    )

با اضافه کردن این کد listener می فهمد که باید به Heterogeneous Services Connection گوش فرا بدهد. Dg4odbc درایوری است که Heterogeneous Services از آن استفاده می کند. در قسمت SID_NAME هم نام data source name(DSN) که فبلا تعریف کرده بودیم قرار می دهیم. فایل listener.ora پس از تغییر به شکل زیر درآمده است.

پس از ذخیره سازی تغییرات فایل listener.ora ، listener حتما باید restart بشود.
هر Heterogeneous Services نیاز به یک فایل تنظیمات پیش فرض دارد. برای این منظور به مسیر D:\app\MATRIX\product\11.2.0\dbhome_1\hs\admin می رویم. در این شاخه فایلی به نام initdg4odbc.ora وجود دارد که یک فایل sample است.

محتویات این فایل به شکل زیر است

حال یک نسخه کپی از فایل initdg4odbc.ora به اسم initdemoodbc.ora ایجاد می کنیم. اسم فایل جدید از دو نام init بعلاوه نام  DSN مورد نظر ((demoodbc))  تشکیل شده است.

در فایل initdemoodbc.ora تغییرات زیر را اعمال می کنیم. مقدار <odbc data_source_name> با DSN که ساخته ایم جایگزین می کنیم ((demoodbc)). مقدار <trace_level> را با off جایگزین می کنیم. محتویات فایل initdemoodbc.ora به این شکل شده است.

دوباره به مسیر D:\app\MATRIX\product\11.2.0\dbhome_1\NETWORK\ADMIN می رویم. فایل tnsnames.ora را تغییر می دهیم تا یک ورودی به DNS gateway ایجاد شود. محتویات tnsnames.ora قبل از تغییر به شکل زیر است:

در این مرحله ما کد زیر را به tnsnames.ora اضافه می کنیم

DEMOODBC  =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)

(CONNECT_DATA =
  (SERVICE_NAME = demoodbc)
)

(HS=OK)
  )

فایل tnsnames.ora پس از تغییر به شکل زیر خواهد بود:

لینک زدن از اوراکل به دیتابیس
در این مرحله وارد sqlplus می شویم و کد زیر را وارد می کنیم.

create public database link demoodbclink connect to “demo” identified by “demo” using ‘demoodbc’

اولین demo اشاره به نام لاگین مورد نظر و دومین demo اشاره به رمز عبور آن دارد. هر دو demo باید داخل "" زیرا اوراکل حروف را به تبدیل به حروف یزرگ می کند. Demoodbclink هم نام لینک مورد نظر است.
حال برای مثال با query زیر می توانیم از داخل sqlplus به اس کیو ال سرور ، query بزنیم.

Select * from accounts@demoodbclink;