برای اتصال از کلاینت به سرور اوراکل اصلی ترین برنامه ای که مدیران از آن استفاده می کنند، sqlplus نام دارد. اما sqlplus چگونه به سرور متصل می شود. پیش از هر چیز کلاینت باید بتواند از طریق شبکه به سرور متصل شود، اما sqlplus چگونه آدرس و پورتی که اوراکل بر روی آن قرار دارد را می فهمد؟

در کلاینت های اوراکل، فایلی به نام tnsnames.ora وجود دارد که اطلاعات سرور اوراکل در آن ذخیره شده است و شامل آدرس ip و شماره پورت می شود. در این مطلب می خواهیم در مورد فایل tnsnames.ora صحبت کنیم و توضیح دهیم که این فایل در ارتباط میان کلاینت و سرور اوراکل چه نقشی دارد. اما پیش از توضیح این فایل باید یکسری از واژه ها توضیح داده شوند.

۱ – Service Name

از اوراکل 8i به بعد، اوراکل اجازه می دهد تا پایگاه داده خودش را درون یک فایل به نام listener.ora ثبت کند. اگر پایگاه داده در listener.ora ذخیره شود، یک نام منطقی که به آن Service Name گفته می شود. در فایل tnsnames.or یک پارامتر به نام SERVICE_NAME وجود دارد که از طریق آن می توانیم به پایگاه متصل شویم. اما برای اتصال به پایگاه داده می توانیم از دستورهای زیر استفاده کنیم:

در صورتی که پایگاه داده خودش را در listener ثبت نکرده باشد، در فایل tnsnames.or از SID یا همان نام instance که پایگاه داده را اداره می کند، استفاده می شود. بنابراین tnsnames.ora یک روش برای ایجاد اتصال به پایگاه داده هدف است. برای اتصال به پایگاه داده، به غیر از نام سرویس و نام instance، نیاز به آدرس و شماره پورت پایگاه داده مقصد نیز داریم.

در پایگاه داده اوراکل، یک پایگاه داده به عنوان یک سرویس (service) به کلاینت ها ارائه می شود. به هر پایگاه داده می توان یک یا چند سرویس اختصاص داد و یا بلعکس می توان یک سرویس را به با چندین پایگاه داده پیاه سازی کرد

در شکل زیر (۱) می توانید مشاهده کنید که دو پایگاه داده وجود دارد که یکی برای ذخیره سازی داده های فروش و دیگری برای تحلیل داده های فروش استفاده می شود. اوراکل هر یک از این پایگاه داده ها را به عنوان یک سرویس به کلاینت ها ارائه می دهد.

هر سرویس توسط نام سرویس یا همان پارامتر service_name شناخته می شود. به طور مثال کلاینت هایی که باید از سرویس sales استفاده کنند، باید نام این سرویس را در فایل tnsnames.ora آنها تعیین کرد. در شکل ۱ نام سرویس ها به صورت fqdn است. به طور مثال در نام sales.us.example.com، کلمه slaes نام SID یا همان نام instance است که پایگاه داده را اداره می کند.

۲ – Connection Descriptor

connection descriptor (توصیفگر اتصال) که tns connect string نیز نامیده می شود، فرمتی است که یک اتصال را توصیف را می کند. connection descriptor دارای یک فرمت خاص خودش است که این فرمت دارای پارامترهای خاصی است. قطعه کد زیر فرمت کلی فایل tnsnames.ora را نشان می دهد.

همانطور که می بینید چندین پارامتر که برای اتصال لازم هستند را توصیف کرده است. به طور مثال پروتکل و نام هاست و شماره پورت درون زیر بخش ADDRESS تعیین شده اند. SERVICE_NAME نیز SID یا نام instance را تعیین می کند که قرار است به آن متصل شویم.

در ابتدا، نام سرویس توسط پارامتر net_service_name تعیین می شود. به طور مثال می تواند sales باشد. گفتیم اگر پایگاه داده خودش را در lisener ثبت تکرده باشد، مقدار این پارامتر برابر با نام instance یا همان SID خواهد بود.

connection descriptor از دو بخش ADDRESS و CONNECT_DATA تشکیل شده است.  شروع تعریف connection descriptor بعد از net_service_name و با کلمه DESCRIPTOR آغاز می شود و سپس دو بخش ADDRESS و CONNECT_DATA بعد از تعیین می شوند.

بخش ADDRESS  وشامل سه پارامتر زیر می شود.

۱ – PROTOCOL : که پروتکل اتصال را نشان می دهد. tcp تنها یکی از موارد است و در مورد گزینه های دیگر صحبت خواهیم کرد.

۲ – HOST : می تواند یک نام fqdn یا یک آدرس ip باشد. به هر حال آدرس سرور اوراکل را تعیین می کند.

۳ – PORT : شماره پورتی که اوراکل بر روی سرور در حال گوش دادن بر روی آن است را تعیین می کند. به صورت پیشفرض اوراکل بر روی پورت ۱۵۲۱ به درخواست ها گوش می دهد ولی می توانید شماره پورت را در سرور تغییر دهید و سپس آنرا بر روی فایل tnsnames.ora نیز اعمال کنید. حتی می توانید سرور را طوری تنظیم کنید که بر روی چند پورت گوش دهد و سپس شما کلاینت ها را برای کاهش بار و بر اساس این شماره پورت ها، دسته بندی کنید.

بخش CONNECT_DATA نیز از چندین پارامتر تشکیل شده اند که در ادامه آنها را توضیح داده ایم.

۱ – SID : نام instance که کلاینت به آن وصل می شود را تعیین کیند. فرض کنید که بر روی HOST دو instance به نام های oracle_instance1 و oracle_instance2 وجود دارد که هر یک پایگاه داده ای را اداره می کنند. بنابراین از طریق SID می توانیم تعیین کنیم که به کدام instance وصل خواهیم شد.

۲ – SERVICE_NAME : این پارامتر معادل با نام سرویس است که پیش از این توضیح داده شد.

شکل زیر (۲) محتوای فایل tnsnames.ora را بر روی ماشین من نشان می دهد. توجه کنید که سرور و کلاینت برای من هر دو یک ماشین هستند زیرا اوراکل را بر روی همان ماشینی نصب کرده ام که از روی همان ماشین نیز متصل می شوم. برای اطلاع بیشتر می توانید این لینک را مشاهده کنید.

محل ذخیره سازی فایل tnsnamse.ora

فایل tnsnames.ora در دایرکتوری ORACLE_HOME/network/admin قرار دارد. اگر از لینوکس برای نصب اوراکل استفاده کرده اید باید دستور زیر را برای مشاهده محتوای آن استفاده کنید.

شکل بالا (۲) خروجی فایل tnsnames.ora را نشان می دهد. همانطور که می بینید مقدار net_service_name برابر با ORCL است. در واقع چون پایگاه داده به عنوان یک سرویس در فایل listener.ora ثبت نشده، net_service_name و پارامتر SERVICE_NAME با نام instance یا همان SID، مقدار دهی شده اند.