كيف تأتي SQLPlus لا تربط؟
سؤال
هدفي هو الاتصال بمثيل Oracle 9i من جهاز OS X الخاص بي. لقد تابعت تعليمات الإعداد هنا وحصلت من خلالهم دون أخطاء (في نهاية المطاف). ومع ذلك، أجد أن SQLPlus غير قادر على الاتصال:
[ ethan@gir ~ ]$ sqlplus xxx/yyy@zzz
SQL*Plus: Release 10.2.0.4.0 - Production on Fri Apr 17 10:13:08 2009
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
looooong الانتظار ...
ERROR:
ORA-12170: TNS:Connect timeout occurred
Enter user-name: xxx
Enter password:
ERROR:
ORA-12162: TNS:net service name is incorrectly specified
Enter user-name:
لي tnsnames.ora
ملف...
zzz =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS =
(PROTOCOL = TCP)
(HOST = dbhost)
(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = zzz)
)
)
ربما هناك متغير ENV يجب تعيينه؟
تحديث
قادرة على ping dB الجهاز المضيف لا مشكلة.
حاول...
sqlplus xxx/yyy@//dbhost/zzz
حصلت...
ERROR:
ORA-12170: TNS:Connect timeout occurred
حاول استخدام SID
بدلا من SERVICE_NAME
في tnsnames.ora. لم يبدو أن تغيير النتيجة. عاد إلى SERVICE_NAME
.
آخر إدخالات زوجين في SQLNet.log ...
***********************************************************************
Fatal NI connect error 12170.
VERSION INFORMATION:
TNS for MacOS X Server: Version 10.2.0.4.0 - Production
TCP/IP NT Protocol Adapter for MacOS X Server: Version 10.2.0.4.0 - Production
Time: 17-APR-2009 10:33:06
Tracing not turned on.
Tns error struct:
ns main err code: 12535
TNS-12535: Message 12535 not found; No message file for product=network, facility=TNS
ns secondary err code: 12560
nt main err code: 505
TNS-00505: Message 505 not found; No message file for product=network, facility=TNS
nt secondary err code: 60
nt OS err code: 0
***********************************************************************
Fatal NI connect error 12170.
VERSION INFORMATION:
TNS for MacOS X Server: Version 10.2.0.4.0 - Production
TCP/IP NT Protocol Adapter for MacOS X Server: Version 10.2.0.4.0 - Production
Time: 17-APR-2009 11:24:08
Tracing not turned on.
Tns error struct:
ns main err code: 12535
TNS-12535: Message 12535 not found; No message file for product=network, facility=TNS
ns secondary err code: 12560
nt main err code: 505
TNS-00505: Message 505 not found; No message file for product=network, facility=TNS
nt secondary err code: 60
nt OS err code: 0
إجابة جزئية
شكرا الجميع على إجاباتك. كانوا مفيدة. لقد وجدت أن هناك مشكلة DNS. كنت قادرا على ping بواسطة اسم المضيف، لذلك اعتقدت أنه يجب أن تعمل بشكل جيد. لقد حاولت أيضا عنوان IP. تحولت أنني كنت بحاجة إلى داخلي عنوان IP "10.1.xx" لعمله على جهاز OS X (ولكن اسم المضيف على ما يرام على Windows).
في هذه المرحلة، يمكنني الاتصال ...
sqlplus xxx/yyy@//INTERNAL_IP/zzz
ومع ذلك، مع هذه القيم التي تم إدخالها في TNSNames.ora، لا يزال هذا لا يعمل ...
sqlplus xxx/yyy@zzz
...
ORA-12154: TNS:could not resolve the connect identifier specified
لقد بحثت عن ملف tnsnames.ora الذي كان قريبا من ما كنت بحاجة إليه ونسخ المحتويات إلى ملفي. غيرت المعالم والآن كل شيء يعمل. لست متأكدا لماذا لم يكن لي يعمل.
المحلول
منذ أن تستخدم 10g
العميل، من المستحسن استخدامه Easy Connect
بناء جملة بدلا من ذلك:
export TWO_TASK=//dbhost/zzz
sqlplus xxx/yyy
, ، أو هذا فقط:
sqlplus 'xxx/yyy@//dnhost/zzz'
تحقق أيضا من الخاص بك ORACLE_HOME
يشير إلى المجلد الصحيح: tnsnames.ora
يتم البحث عنه في $ORACLE_HOME/network/admin/tnsnames.ora
نصائح أخرى
تبدو الأقواس الخاصة بك صحيحة.
حاول استخدام SID:
فيما يلي مثال على ملف tnsnames.ora:
IDENTIFIER =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP) (HOST = userid.myhosteddb.net)(PORT = 1521))
)
(CONNECT_DATA = (SID = odb))
)
يمكنك استخدام
sqlplus user/password@servicename_host
إذا لم تتمكن من الاتصال يمكنك استخدامها
sqlplus user/password@(DESCRIPTION=((ADDRESS=(PROTOCOL = TCP)(HOST = dbhost)(PORT = 1521))(CONNECT_DATA=(SERVICE_NAME = zzz)))
إذا كنت تستخدم Linux آخر * نظام التشغيل NIX، فأنت بحاجة إلى استخدام علامات اقتباس أخرى () يتم تفسيرها بواسطة Shell
على سبيل المثال
sqlplus user/password@'(DESCRIPTION=((ADDRESS=(PROTOCOL = TCP)(HOST = dbhost)(PORT = 1521))(CONNECT_DATA=(SERVICE_NAME = zzz)))'
ربما يكون هناك ملف SQLNet.log الذي يتم إنشاؤه في دليل العمل الخاص بك. قد يساعدك ذلك أو إذا قمت بنشر محتوياتها، فقد تعطينا المزيد من المعلومات.
في مثالك، تحاول شيئين مختلفين. في سطر الأوامر المستخدمة "XXX / YYY @ ZZZ". يبدو أن هذا يجد إدخال "zzz" في tnsnames.ora بنجاح، لكن المهلة تشير إلى أنه لا يحصل على أي استجابة من الخادم. هل تستطيع Ping dbhost بنجاح؟
في الثانية، حاولت فقط إدخال "XXX" لاسم المستخدم؛ مما يجعل المنطقي إذا لم تكن معتادا على SQLPlus، ولكن كما ترى أنه لا توجد نقطة حيث يطالبك باسم قاعدة البيانات. لذلك في هذه الحالة، كان يحاول الاتصال ب "XXX / YYY" بدون اسم خدمة، مما يؤدي إلى الخطأ الثاني. هذا يعني أنك لا تملك اسم خدمة افتراضي. لذلك هذا الخطأ يأتي من المدخلات غير المكتملة. (ستدخل "XXX @ ZZZ" لاسم المستخدم لتحديد اسم الخدمة في هذه المطالبة. يمكنك بالفعل إدخال سلسلة الاتصال بالكامل "xxx / yyy @ zzz" في موجه اسم المستخدم، إذا كنت لا تمانع بكلمة المرور مرئي.)
هل حاولت استخدام Telnet للوصول إلى المنفذ المفتوح للتأكد من عدم حظر جدار الحماية؟ قد يكون يستحق محاولة Telnet Port-Num المضيف
هل قمت بإعداد بيئتك مع oraenv. النصي؟
هل حاولت tnsping
?
$ tnsping $ORACLE_SID
ربما سيساعد ذلك على مقارنة الإخراج على جهاز يقوم بالاتصال بالإخراج على جهاز يفشل في الاتصال. على الأقل هذا ما أقوم به قبل الاتصال ب DBA لدينا.
يمكنك الحصول على مزيد من التفاصيل قليلا حول الخطأ مع oerr
أمر:
$ oerr ora 12170
12170, 00000, "TNS:Connect timeout occurred"
// *Cause: The server shut down because connection establishment or
// communication with a client failed to complete within the allotted time
// interval. This may be a result of network or system delays; or this may
// indicate that a malicious client is trying to cause a Denial of Service
// attack on the server.
// *Action: If the error occurred because of a slow network or system,
// reconfigure one or all of the parameters SQLNET.INBOUND_CONNECT_TIMEOUT,
// SQLNET.SEND_TIMEOUT, SQLNET.RECV_TIMEOUT in sqlnet.ora to larger values.
// If a malicious client is suspected, use the address in sqlnet.log to
// identify the source and restrict access. Note that logged addresses may
// not be reliable as they can be forged (e.g. in TCP/IP).
كان لدي مشكلة مماثلة ويبدو أن أوراكل SQLPlus كانت المشكلة!
الاتصال مثل أي من هذه الأعمال:
> sqlplus MyUsername/MyPassword@MyHostname:1521/MyServiceName
> sqlplus MyUsername/MyPassword@//MyHostname:1521/MyServiceName
(الاختياري // اختياري قبل اسم المضيف). ومع ذلك، فإن ترك كلمة المرور أو كلا المستخدمين / المرور يفشل مثل هذا:
sqlplus @//MyHostname:1521/MyServiceName
SQL*Plus: Release 11.2.0.4.0 Production on Thu Apr 2 15:59:49 2015
Copyright (c) 1982, 2013, Oracle. All rights reserved.
SP2-0310: unable to open file "//MyHostname:1521/MyServiceName.sql"
Enter user-name: MyUsername
Enter password: MyPassword
ERROR:
ORA-12162: TNS:net service name is incorrectly specified
لذلك، على الرغم من أن SQLPlus يطلب منك اسم المستخدم / كلمة المرور، فإنه سوف يفشل بغباء برسالة خطأ وهمية إذا قمت بكتابةها في المطالبة. يعمل فقط إذا وضعت لهم (كلاهما!) في بداية سلسلة الاتصال.
أوراكل غبي !!!
إتبع هذه رابط لتركيب خطوة بخطوة وطرق ما بعد التثبيت .. كن حذرا معها.
والتواصل مع SQL Plus:
- سيكون اسم المستخدم نظام وفقا للتعليمات الواردة في الرابط أعلاه
- يجب ألا تكون كلمة المرور الخاصة بك نمرا ولكن الشخص الذي قمت بتعيينه في بداية التثبيت
ملاحظة: لا داعش إذا وجدت مشكلة (عدم توافق المتصفح) توصيل Oracle Enterprise Manager أثناء اختبار التثبيت إذا كان متصفحك هو Google Chrome. اضغط على Arrow الصفحة التالية وسهم الصفحة التالية للاتفاق بالشروط والنقر فوق "موافق".
لقد قررت هذه المشكلة على جهازي في يوم واحد .. لكنها ستكون مسألة من الخيول لك.
سالوكس: أنا مهندس علوم الحاسوب في الغالب رمز في جافا
كان لدي نفس الخطأ (ORA-12162: TNS: يتم تحديد اسم خدمة NET بشكل غير صحيح) ولكن سبب مختلف (على Windows 7 Enterprise 64-Bit). أمل أن هذا يساعد شخصاما:
في عملي تثبيت 32 بت و 64 بت Oracle، وبناء على متغير المسار الخاص بي، نظرت Shell في المسار 64 بت إلى SQLPLUS.EXE مقارنة بالمسار 32 بت.
تستخدم المسارات المختلفة ملفات TNSNames.ora مختلفة ولم يكن لدي سلسلة اتصال الخاصة بي في مسار 64 بت:
Oracle Product 11.1.0 client_1_64bit network admin tnsnames.ora
لم يكن لدي سوى سلسلة الاتصال في tnsnames.ora 32 بت.ورا: Oracle product 11.1.0 client_1_32bit network admin tnsnames.ora
أيضا، نظرا لوجود منشآت Oracle متعددة، اضطررت إلى إزالة متغير البيئة Oracle_home بحيث يمكن كلا التثبيت استخدام أدلة أليفة مختلفة.