Oracle - ما هو ملف أسماء TNS الذي أستخدمه؟
-
08-06-2019 - |
سؤال
أحيانًا أواجه مشكلات في اتصال 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 سيُظهر لك الملفات التي يتم الوصول إليها.
تذكر أن تقوم بتعيين عوامل التصفية الخاصة بك حتى لا تغمرك حركة مرور نظام الملفات الثرثارة.
تمت الإضافة: لا يعمل 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 فقط.