ORA-12154: TNS: لا يمكن حل معرف الاتصال المحدد
سؤال
أحاول الاتصال بـ Oracle 11G المثبت على Linux EL 5 والحصول على الخطأ التالي
SQL> connect sys/password@ud06 as sysdba
ERROR:
ORA-12514: TNS:listener does not currently know of service requested in connect
descriptor
مستمع my under under network/admin هو كما يلي
LISTENER=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)(HOST=ud06)(PORT=1521))
(ADDRESS=(PROTOCOL=ipc)(KEY=extproc))))
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(GLOBAL_DBNAME=orcl)
(ORACLE_HOME=/home/oracle/app/oracle/product/11g)
(SID_NAME=orcl))
(SID_DESC=
(SID_NAME=plsextproc)
(ORACLE_HOME=/home/oracle/app/oracle/product/11g)
(PROGRAM=extproc)))
بلدي tnsnames.ora كما يلي
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)
UD06=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = ud06)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
يظهر حالتي LSNRCTL على النحو التالي:
LSNRCTL> status
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ud06.us.server.com)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date 17-FEB-2010 16:23:06
Uptime 0 days 0 hr. 12 min. 33 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /home/oracle/app/oracle/product/11g/network/admin/listener.ora
Listener Log File /home/oracle/app/oracle/product/11g/log/diag/tnslsnr/ud06/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ud06.us.server.com)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=extproc)))
Services Summary...
Service "orcl" has 1 instance(s).
Instance "orcl", status UNKNOWN, has 1 handler(s) for this service...
Service "plsextproc" has 1 instance(s).
Instance "plsextproc", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
المحلول
هل يمكنك Ping UD06 بنجاح (مثل UD06 ، وليس UD06.us.server.com)؟
ماذا يفعل الأمر
lsnrctl services
تبين؟
تحرير: يبدو لي أن اسم مثيل قاعدة البيانات ليس في الواقع "orcl"؟ ما يخبرني به إخراج خدمات LSNRCTL هو أن خدمة "orcl" ، على الرغم من أنها محددة في ملف المستمع.
هل يمكنك تسجيل الدخول باستخدام اتصال مباشر على الخادم؟ إذا كان الأمر كذلك ، فما الذي تستخدمه كقيمة متغيرة البيئة Oracle_SID؟ تسجيل الدخول كمستخدم SYS وإصدار الأمر:
تغيير سجل النظام ؛
ثم قم بإصدار أمر خدمات LSNRCTL مرة أخرى ومعرفة ما إذا لم يظهر مثيل إضافي.
أيضًا ، كما يشير أليكس ، يقوم أمر TNSPing بالإبلاغ عن اسم خدمة مؤهل بالكامل. قم بتحرير ملف sqlnet.ora وقم بتعيين قيمة names.default_domain إلى NULL إذا كان لها قيمة.
تحرير 2: هل tnsping UD06 على الخادم الشغل؟ أم أن افتراض أن العميل والخادم على أنظمة مختلفة خاطئين؟
نصائح أخرى
إجابة هذه المشكلة بسيطة للغاية. لا تقلق بشأن ملفات .ora أو أي تكوين آخر. أوراكل يفعل كل هذه مثالية فقط.
فقط أثناء الاتصال عبر سطر الأوامر ، يتم الخلط بينه وبين كلمات المرور التي تحتوي على رمز @.
لذلك أثناء الاتصال من خلال سطر الأوامر SQL ، لا تستخدم كلمة مرور مع "@" فيه. ما عليك سوى استخدام واجهة الويب لإنشاء حساب يحتوي على كلمة مرور بدون رمز "@" فيه.
إنه!! تم حل المشكلة. كنت كسر رأسي لبضعة أيام ، والآن تم حل مشكلتي !!
ال SERVICE_NAME
في ال tnsping
الإخراج لا يتطابق مع الإدخال في tnsnames.ora
; ؛ هل هذا الملف من مربع Windows أم مربع Linux؟ يبدو أنك لا تملك محليًا (Windows) tnsnames.ora
دخول u06
ويخمن ما يجب أن يوسعه اسم الخدمة - أعتقد أن هذا هو ما تعنيه الإشارة إلى محول اسم المضيف.
لقد واجهت أيضًا ORA-12154: TNS: لم أستطع حل معرف الاتصال المحدد ، وإضافة المستخدم الذي يحاول الاتصال بمجموعة Oinstall من Oracle التي تم إصلاحها.
جرب أولاً ما إذا كان مثيل Oracle قد بدأ:
للنوافذ:
start-> لوحة التكوين-> الإدارة touls-> services-> oracleserviceorcl (مثيلتي بالمناسبة)-> ابدأ
توفير سلسلة الاتصال مثل هذا:
ServerName: Port/Servicename ؛ اسم المستخدم ؛ كلمة المرور
كنت أيضًا أواجه نفس الخطأ ، جرب هذا الرمز:
SQL> conn hr/hr @pdborcl;
وإذا وجدت نفس الخطأ ، فهذا يعني أن لديك اسم قاعدة بيانات قابلة للتوصيل مختلف. تحقق من اسم قاعدة البيانات القابلة للتوصيل عن طريق كتابة الأمر التالي في sqlplus
sql> SELECT name, con_id FROM v$pdbs;
لقد أصلحت هذه المشكلة باستخدام هذه الخطوات.
بادئ ذي بدء ، حدث هذا الخطأ ، إذا لم تقم بتثبيت نفس الدليل أو محرك الأقراص.
لكن الجواب هنا.