سؤال

هدفي هو الاتصال بمثيل 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))
  )

اقرأ عن SID هنا.

يمكنك استخدام

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:

  1. سيكون اسم المستخدم نظام وفقا للتعليمات الواردة في الرابط أعلاه
  2. يجب ألا تكون كلمة المرور الخاصة بك نمرا ولكن الشخص الذي قمت بتعيينه في بداية التثبيت

ملاحظة: لا داعش إذا وجدت مشكلة (عدم توافق المتصفح) توصيل 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 بحيث يمكن كلا التثبيت استخدام أدلة أليفة مختلفة.

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