سؤال

أحيانًا أواجه مشكلات في اتصال Oracle لأنني لا أستطيع معرفة ملف tnsnames.ora الذي يستخدمه عميل قاعدة البيانات الخاص بي.

ما هي أفضل طريقة لمعرفة ذلك؟++سعيد لحلول الأنظمة الأساسية المختلفة.

هل كانت مفيدة؟

المحلول

توفر أوراكل أداة مساعدة تسمى tnsping:

R:\>tnsping someconnection

TNS Ping Utility for 32-bit Windows: Version 9.0.1.3.1 - Production on 27-AUG-20
08 10:38:07

Copyright (c) 1997 Oracle Corporation.  All rights reserved.

Used parameter files:
C:\Oracle92\network\ADMIN\sqlnet.ora
C:\Oracle92\network\ADMIN\tnsnames.ora

TNS-03505: Failed to resolve name

R:\>


R:\>tnsping entpr01

TNS Ping Utility for 32-bit Windows: Version 9.0.1.3.1 - Production on 27-AUG-20
08 10:39:22

Copyright (c) 1997 Oracle Corporation.  All rights reserved.

Used parameter files:
C:\Oracle92\network\ADMIN\sqlnet.ora
C:\Oracle92\network\ADMIN\tnsnames.ora

Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (COMMUNITY = **)
 (PROTOCOL = TCP) (Host = ****) (Port = 1521))) (CONNECT_DATA = (SID = ENTPR0
1)))
OK (40 msec)

R:\>

يجب أن يوضح هذا الملف الذي تستخدمه.الأداة المساعدة موجودة في Oracle bin الدليل.

نصائح أخرى

لنظام التشغيل Linux:

$ strace sqlplus -L scott/tiger@orcl 2>&1| grep -i 'open.*tnsnames.ora'

يظهر شيء مثل هذا:

open("/opt/oracle/product/10.2.0/db_1/network/admin/tnsnames.ora",O_RDONLY)=7

التغيير إلى

$ strace sqlplus -L scott/tiger@orcl 2>&1| grep -i 'tnsnames.ora'

سوف تظهر كافة مسارات الملفات التي فشلت.

يوجد مكان آخر يتم فيه تخزين موقع TNS:إذا كنت تستخدم نظام التشغيل Windows، فافتح regedit وانتقل إلى My HKEY Local Machine/Software/ORACLE/KEY_OraClient10_home1 أين KEY_OraClient10_home1 هو منزلك أوراكل.إذا كان هناك إدخال سلسلة يسمى TNS_ADMIN, ، فستشير قيمة هذا الإدخال إلى ملف TNS الذي تستخدمه Oracle على جهاز الكمبيوتر الخاص بك.

للنوافذ: فيلمون من SysInternals سيُظهر لك الملفات التي يتم الوصول إليها.

تذكر أن تقوم بتعيين عوامل التصفية الخاصة بك حتى لا تغمرك حركة مرور نظام الملفات الثرثارة.

Filter Dialog

تمت الإضافة: لا يعمل Filemon مع إصدارات Windows الأحدث، لذا قد تضطر إلى استخدامه مراقب العملية.

لدي على جهاز التطوير الخاص بي ثلاثة إصدارات مختلفة من برنامج عميل Oracle.أنا أدير tnsnames.ora ملف في واحد منهم.وفي الاثنين الآخرين، لقد دخلت في tnsnames.ora ملف:

ifile=path_to_tnsnames.ora_file/tnsnames.ora

بهذه الطريقة، إذا كان لسبب ما خطأ tnsnames.ora إذا تم استخدام الملف من قبل العميل، فسوف ينتهي به الأمر دائمًا إلى الإصدار المحدث.

يسأل Codeslave "ألا ينبغي أن يكون دائمًا "$ORACLE_ HOME/network/admin/tnsnames.ora"؟الجواب هو لا، ليس كذلك.ضع في اعتبارك هاتين الدعوتين لـ tnsping على نفس الجهاز:

C:\Documents and Settings\me>D:\Oracle\10.2.0_DB\BIN\tnsping orcl

TNS Ping Utility for 32-bit Windows: Version 10.2.0.4.0 - Production on 09-OCT-2
008 14:30:12

Copyright (c) 1997,  2007, Oracle.  All rights reserved.

Used parameter files:
D:\Oracle\10.2.0_DB\network\admin\sqlnet.ora


Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = xxxx
)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORCL)))

OK (40 msec)

C:\Documents and Settings\me>tnsping orcl

TNS Ping Utility for 32-bit Windows: Version 10.2.0.1.0 - Production on 09-OCT-2
008 14:30:21

Copyright (c) 1997, 2005, Oracle.  All rights reserved.

Used parameter files:
D:\oracle\10.2.0_Client\network\admin\sqlnet.ora


Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)
(HOST = XXXX)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = ORCL)))
OK (20 msec)

C:\Documents and Settings\me>

لاحظ موقعي ملف المعلمات المختلفين، اللذين يعتمدان على الملف القابل للتنفيذ tnsping الذي تقوم بتشغيله (وربما المكان الذي يتم تشغيله منه).بالنسبة لشبكات Oracle المستندة إلى tnsnames، فإن استخدام المتغير TNS_ADMIN هو الطريقة الوحيدة لضمان حصولك على ملف tnsnames.ora متسق.(ملحوظة:إجابة تتمحور حول Windows)

افتراضيًا، يوجد tnsnames.ora في الدليل $ORACLE_HOME/network/admin على أنظمة تشغيل UNIX وفي الدليل ORACLE_HOME etwork\admin على أنظمة تشغيل Windows.يمكن أيضًا تخزين tnsnames.ora في المواقع التالية:

الدليل المحدد بواسطة متغير البيئة TNS_ADMIN (أو قيمة التسجيل)

في أنظمة التشغيل UNIX، دليل التكوين العام.على سبيل المثال، في نظام التشغيل Solaris، هذا الدليل هو /var/opt/Oracle

إذا كان لديك عدة ORACLE_HOMES، فكن على دراية بالواحدة التي تستخدمها، حيث يمكن أن يختلف موقع ملف tnsnames.ora من ORACLE_HOME إلى الذي يليه.

بالنسبة للشخص الذي ذكر متغير البيئة TWO_TASK، الذي يتم استخدامه لتعيين اسم خدمة قاعدة البيانات الافتراضية للاتصال بها (والتي يمكن أن تكون قاعدة بيانات على خادم آخر).يتم بعد ذلك البحث عن اسم الخدمة الذي قمت بتعيين TWO_TASK عليه في ملف tnsnames.ora عند الاتصال.

ألا ينبغي أن يكون دائمًا "$ORACLE_ HOME/network/admin/tnsnames.ora"؟ثم يمكنك فقط القيام بـ "echo $Oracle_home" أو ما يعادله *nix.

Pete Holberton أنت محق تمامًا.وهو ما يذكرني بوجود مفتاح ربط آخر في الأعمال يسمى TWO_ TASK

حسب http://www.orafaq.com/wiki/TNS_ADMIN
TNS_ADMIN هو متغير بيئة يشير إلى الدليل الذي توجد به ملفات تكوين SQL*Net (مثل sqlnet.ora وtnsnames.ora).

strace sqlplus -L scott/tiger@orcl يساعد على العثور على .tnsnames.ora ملف على /home/oracle للعثور على الملف الذي يستغرقه بدلا من $ORACLE_HOME/network/admin/tnsnames.ora ملف.شكرا على النشر.

ربما تكون أسهل طريقة هي التحقق من طريق متغير البيئة للعملية التي تتصل بقاعدة البيانات.على الأرجح أن الملف tnsnames.ora موجود أول دليل Oracle bin في المسار..\الشبكة\المشرف.قد يتجاوز متغير بيئة TNS_ADMIN أو القيمة الموجودة في التسجيل (لمنزل Oracle الرئيسي الحالي) هذا.

استخدام filemon كما اقترحه الآخرون سوف يفي بالغرض أيضًا.

ليست إجابة مباشرة على سؤالك، لكنني شعرت بالإحباط الشديد أثناء محاولتي العثور على جميع ملفات tnsnames وتحديثها، حيث كان لدي العديد من عمليات تثبيت Oracle:العميل، وأدوات BI، وOWB، وما إلى ذلك، ولكل منها منزل أوراكل خاص بها.انتهى بي الأمر إلى إنشاء أداة مساعدة تسمى TNSNamesSync والتي ستقوم بتحديث جميع أسماء tnsnames في جميع منازل Oracle.إنه تحت ترخيص معهد ماساتشوستس للتكنولوجيا (MIT)، ويمكن استخدامه مجانًا هنا https://github.com/artybug/TNSNamesSync/releases

المستندات هنا:https://github.com/artchik/TNSNamesSync/blob/master/README.md

هذا مخصص لنظام التشغيل Windows فقط.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top