Trình nghe Oracle 11g không thành công với lỗi ORA-12514 và ORA-12505


17

Tôi chạy một phiên bản Oracle 11g cục bộ trên máy phát triển của mình và có thể kết nối trực tiếp với cá thể cục bộ thông qua SqlPlus:

c:\>sqlplus ace

SQL*Plus: Release 11.2.0.2.0 Production on Mon Mar 11 11:50:20 2013

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

Enter password:

Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - Beta

SQL> select count(*) from my_table ;

  COUNT(*)
----------
      5297

Nhưng tôi không thể kết nối với nó thông qua người nghe:

c:\>sqlplus -L "user/pw@(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = XE)))"

SQL*Plus: Release 11.2.0.2.0 Production on Mon Mar 11 11:52:40 2013

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

ERROR:
ORA-12514: TNS:listener does not currently know of service requested in connect
descriptor


SP2-0751: Unable to connect to Oracle.  Exiting SQL*Plus

Tương tự, nếu tôi kết nối qua SqlDeveloper, tôi sẽ gặp lỗi (mặc dù ORA-12505, TNS:listener does not currently know of SID given in connect descriptor).

Trường hợp này đã ổn định và hoạt động tốt trong một năm hoặc hơn cho đến hôm nay, một buổi sáng thứ Hai. CNTT công ty của chúng tôi đôi khi thực hiện các chính sách và cập nhật mới vào cuối tuần, vì vậy tôi cho rằng có gì đó đã thay đổi, nhưng tôi không thể tìm ra điều gì.

Tôi đã khởi động lại dịch vụ và người nghe nhiều lần, nhật ký người nghe không đưa ra bất kỳ manh mối nào.

Người nghe có vẻ ổn:

c:\>lsnrctl status

LSNRCTL for 32-bit Windows: Version 11.2.0.2.0 - Beta on 11-MAR-2013 11:55:33

Copyright (c) 1991, 2010, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for 32-bit Windows: Version 11.2.0.2.0 - Beta
Start Date                11-MAR-2013 11:17:30
Uptime                    0 days 0 hr. 38 min. 3 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Default Service           XE
Listener Parameter File   C:\oraclexe\app\oracle\product\11.2.0\server\network\admin\listener.ora
Listener Log File         C:\oraclexe\app\oracle\diag\tnslsnr\FBC305BB46560\listener\alert\log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1ipc)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=machine.domain.com)(PORT=1521)))
Services Summary...
Service "CLRExtProc" has 1 instance(s).
  Instance "CLRExtProc", 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

Cổng 1521 có vẻ ổn:

c:\>netstat -an -O | find /i "1521"
  TCP    0.0.0.0:1521           0.0.0.0:0              LISTENING       4368
  TCP    169.243.90.109:55307   159.185.207.100:1521   ESTABLISHED     12416
  TCP    [::]:1521              [::]:0                 LISTENING       4368

(PID 4368 là quy trình TNSLSNR.exe.)

Ngoài ra, tôi có thể tnspingđến dịch vụ XE:

c:\>tnsping xe

TNS Ping Utility for 32-bit Windows: Version 11.2.0.2.0 - Beta on 11-MAR-2013 12:27:47

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

Used parameter files:
C:\oraclexe\app\oracle\product\11.2.0\server\network\admin\sqlnet.ora


Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = machine.domain.com)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = XE)))
OK (210 msec)

Các listenerr.oratập tin:

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
      (PROGRAM = extproc)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
      (ADDRESS = (PROTOCOL = TCP)(HOST = machine.domain.com)(PORT = 1521))
    )
  )

DEFAULT_SERVICE_LISTENER = (XE)

Ngoài ra, và tôi không biết nó có liên quan hay không, tôi dường như không thể truy cập apex trên https://127.0.0.1:8080/apex(mặc dù các quyền cho điều đó có vẻ ổn).

Vậy tôi nên tìm ở đâu nữa?

Cập nhật với thông tin được yêu cầu:

SQL> show parameter service_names

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
service_names                        string      XE
SQL> show parameter local_listener

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
local_listener                       string

Update2 : như @ miracle173 chỉ ra một cách chính xác, người nghe không ổn. Với tham số 'local_listener' được cập nhật hiện hiển thị thêm thông tin:

Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1ipc)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=machine.domain.com)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))
Services Summary...
Service "CLRExtProc" has 1 instance(s).
  Instance "CLRExtProc", 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...
Service "XEXDB" has 1 instance(s).
  Instance "xe", status READY, has 1 handler(s) for this service...
Service "xe" has 1 instance(s).
  Instance "xe", status READY, has 1 handler(s) for this service...
The command completed successfully

Các giá trị của INSTANCE_NAMEtham số khởi tạo và ORACLE_SIDbiến môi trường của bạn là gì? Cơ sở dữ liệu của bạn không đăng ký với người nghe mặc định vì một số lý do. Cố gắng phát hành alter system register;và sau đó kết nối lại với cơ sở dữ liệu.
Yasir Arsanukaev

@YasirArsanukaev instance_name là 'xe' (viết thường nếu điều đó có liên quan) và tôi không có biến môi trường ORACLE_SID.
Unsliced

3
hai lưu ý: "người nghe có vẻ ổn": Tôi không nghĩ vậy vì nó không hiển thị dịch vụ có tên "XE" "Tôi có thể ping dịch vụ XE": kết nối với người nghe nhưng nó không bận tâm về dịch vụ. vì vậy bạn chỉ có thể hiển thị nếu người nghe đang hoạt động nhưng bạn không thể sử dụng ist để kiểm tra xem người nghe đã đăng ký dịch vụ chưa. Vì vậy, " 1521 của localhost ngay cả khi dịch vụ không tồn tại.
phép lạ173

Tôi đã gặp vấn đề tương tự ngày hôm nay, và như @ miracle173 mô tả, có một đăng ký trong alert.log. Oracle đang chạy trên VM. Hóa ra trên VM, cả tên máy chủ và tên máy chủ.domain đều trỏ đến một địa chỉ IP khác với 127.0.0.1 (localhost). Sau khi sửa đổi tệp máy chủ (Windows \ system32 \ driver \ etc) để buộc ánh xạ, tất cả đều ổn.

thay đổi đăng ký đã khắc phục sự cố .. cảm ơn :)
user116258

Câu trả lời:


15

Vì vậy, nhờ có @YasirArsanukaev cho thời gian anh ấy đưa vào, tôi đã tìm ra một giải pháp hiệu quả, nhưng tôi không thể giải thích được.

Riff về LOCAL_LISTENERsuy nghĩ, tôi đã đọc câu trả lời khác nơi nó nói:

Cơ sở dữ liệu sử dụng tham số LOCAL_LISTENER để xác định người nghe cần đăng ký. Theo mặc định đó là null, theo tài liệu này tương đương với tên máy chủ: 1521.

Vì vậy, tôi đã cố gắng ping tên máy chủ của riêng mình và không thể - có vẻ như một số vấn đề IPv6, nhận được thông báo lỗi chung.

Vì vậy, tôi đã lấy lời khuyên từ câu trả lời đó

SQL> alter system set LOCAL_LISTENER='(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))' scope=both;
SQL> alter system register;

và bây giờ nó hoạt động, có lẽ bởi vì nó có thể giải quyết tham chiếu localhost, nơi nó không giải quyết được tên máy chủ thực tế.


1
bạn thực sự đã chú ý đến giải pháp: tự động xác định lại cơ sở dữ liệu về mặc định LOCAL_LISTENER = '(ADDRESS = (PROTOCOL = TCP) (HOST = hostname) (PORT = 1521))' (trong đó tên máy chủ là tên mạng của máy) không hoạt động vì có một vấn đề để tiếp cận máy dưới tên này. Có thể có một mục trong alert.log hoặc trong một số sqnlnet.log (% ORACLE_HOME% / mạng / log /) về vấn đề đăng ký của cơ sở dữ liệu
miracle173

@Unsliced ​​Tôi thực sự có cùng một vấn đề, đối với trường hợp của tôi, nó đã được giải quyết vì ID dịch vụ được sử dụng đã xóa văn bản hậu tố ".Domain.local".
Nap

chạy hai câu lệnh thay đổi đã giải quyết thông báo lỗi của người nghe tns cho tôi và tôi đã có thể kết nối
smartexpert
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.