Làm cách nào để định cấu hình Trình nghe Oracle mà không có SID_LIST_LISTENER trong listener.ora?


13

Tôi có quyền truy cập vào máy chủ ORACLE 11g bằng cách sử dụng listener.ora sau đây

# listener.ora Network Configuration File: D:\app\Administrator\product\11.1.0\db_1\NETWORK\ADMIN\listener.ora
# Generated by Oracle configuration tools.

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.111.111)(PORT = 1521))
    )
  )

và nó phục vụ tất cả các phiên bản trên máy chủ đó, như tôi có thể xác minh bằng

lsnrctl status

Vấn đề của tôi là, khi tôi thực hiện cài đặt mới Oracle 11g trong máy ảo, tôi phải sử dụng listener.ora như

# listener.ora Network Configuration File: C:\app\oracle\product\11.2.0\dbhome_1\network\admin\listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = C:\app\oracle\product\11.2.0\dbhome_1)
      (PROGRAM = extproc)
      (ENVS = "EXTPROC_DLLS=ONLY:C:\app\oracle\product\11.2.0\dbhome_1\bin\oraclr11.dll")
    )

   (SID_DESC =
     (GLOBAL_DBNAME = ORCL)
     (ORACLE_HOME = C:\app\oracle\product\11.2.0\dbhome_1)
     (SID_NAME = orcl)
    )

   (SID_DESC =
     (GLOBAL_DBNAME = BMBK)
     (ORACLE_HOME = C:\app\oracle\product\11.2.0\dbhome_1)
     (SID_NAME = BMBK)
    )

 )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 169.254.200.102)(PORT = 1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    )
  )

ADR_BASE_LISTENER = C:\app\oracle

Nếu không có SID_LIST_LISTENER, nghĩa là sử dụng listener.ora như thế từ máy chủ khác mà tôi nhận được

C:\Windows\system32>lsnrctl status

LSNRCTL for 64-bit Windows: Version 11.2.0.1.0 - Production on 27-NOV-2011 10:14
:24

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

Anmeldung bei (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
STATUS des LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for 64-bit Windows: Version 11.2.0.1.0 - Produ
ction
Startdatum                27-NOV-2011 10:14:08
Uptime                    0 Tage 0 Std. 0 Min. 18 Sek.
Trace-Ebene               off
Sicherheit                ON: Local OS Authentication
SNMP                      OFF
Parameterdatei des Listener C:\app\oracle\product\11.2.0\dbhome_1\network\admin\
listener.ora
Log-Datei des Listener    c:\app\oracle\diag\tnslsnr\WSV-BK-W7en64-S\listener\al
ert\log.xml
Zusammenfassung Listening-Endpunkte...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=169.254.200.102)(PORT=1521)))
Der Listener unterst³tzt keine Services
Der Befehl wurde erfolgreich ausgef³hrt.

Thông điệp cuối cùng dịch sang

Người nghe không hỗ trợ Dịch vụ.

Tôi không biết, tại sao hai máy chủ này hoạt động khác nhau. Tôi không tìm thấy gợi ý nào trong các tập tin cấu hình cũng như trong các khóa registry.

Biên tập:

Tôi đoán câu trả lời nằm ở đâu đó trong bài đăng này của Burleson Consulting , nhưng tôi không tìm thấy vị trí, nơi nó thực sự được cấu hình.

Câu trả lời:


14

Đến bữa tiệc muộn một chút ...

Cơ sở dữ liệu nên tự động đăng ký với người nghe, làm cho các SID_LISTmục trở nên dư thừa và điều này dường như đang xảy ra với 192.168.111.111môi trường của bạn . Nếu người nghe được khởi động sau cơ sở dữ liệu, có thể mất một lúc để đăng ký và có thể có tình huống nó không làm như vậy.

Bạn có thể cố gắng làm cho nó đăng ký bằng một alter system registerlệnh. Cơ sở dữ liệu sử dụng LOCAL_LISTENERtham số để xác định người nghe cần đăng ký. Theo mặc định đó là null, mà theo tài liệu này là tương đương với hostname:1521.

Nếu alter system registerkhông làm cho dịch vụ xuất hiện trong lsnrctl statusđầu ra thì tôi nghi ngờ rằng nó không thể xác định tên máy chủ hoặc giải quyết nó, hoặc nó giải quyết đến một địa chỉ khác với địa chỉ người nghe đang bật hoặc LOCAL_LISTENERđược đặt thành một cái gì đó không hợp lệ cho hộp ảo. Bạn có thể đặt trực tiếp LOCAL_LISTENERkhớp với listener.oratrực tiếp, ví dụ:

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

Hoặc bạn có thể sử dụng một bí danh có những chi tiết đó trong của bạn tnsnames.ora. Ví dụ: nếu bạn thêm một tnsnames.oramục như:

MY_LISTENER =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
  )

Sau đó, bạn có thể:

alter system set local_listener='MY_LISTENER' scope=both;
alter system register;

Lợi thế thực sự duy nhất tôi có thể thấy khi sử dụng tnsnames.oraphiên bản, ngoài khả năng ngắn gọn, là bạn có thể thay đổi cấu hình trong các tệp SQL * Net thay vì trong cơ sở dữ liệu; và thậm chí điều đó chỉ thực sự hữu ích nếu bạn nhân bản cơ sở dữ liệu giữa các máy hoặc để người nghe và cơ sở dữ liệu của bạn chạy dưới các tài khoản khác nhau (ví dụ: với gridngười dùng cho RAC / HA).

Có nhiều hơn LOCAL_LISTENER ở đây .

Chỉnh sửa:điều này có vẻ khá toàn diện.


-2

Tôi đã có một vấn đề tương tự và thấy rằng chỉ cần tắt và khởi động lại thể hiện đã khiến nó đăng ký chính xác.

Điều này có thể được thực hiện bằng cách sử dụng dòng lệnh sqlplus. Bạn sẽ cần phải đăng nhập với tư cách là người dùng với cú pháp của SYSDBA (ví dụ: hệ thống):

sqlplus name/pass as SYSDBA

sau đó chạy 'shutdown' và đợi cho đến khi nó kết thúc. sau đó chạy 'khởi động' và đợi cho đến khi kết thúc.

ngón tay vượt qua bạn sẽ có một phiên bản được đăng ký với người nghe.

Để kiểm tra xem đây có phải là trường hợp bạn có thể kích hoạt lsnrctl và chạy lệnh 'status'. nếu nó không hoạt động, bạn vẫn sẽ thấy thông báo 'Người nghe không hỗ trợ dịch vụ' nếu không bạn sẽ thấy một cái gì đó như

Service "horse" has 1 instance(s).
 Instance "horse", status READY, has 1 handler(s) for this service...

4
Xin vui lòng, không ... không cần thiết phải khởi động lại cơ sở dữ liệu chỉ để đăng ký người nghe. "thay đổi đăng ký hệ thống;" từ sqlplus làm điều đó, và nó đã được viết trong câu trả lời trước.
Balazs Papp
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.