ORA-12514 TNS: người nghe hiện không biết dịch vụ được yêu cầu trong mô tả kết nối


226

Chúng tôi có một ứng dụng đang chạy cục bộ nơi chúng tôi gặp phải lỗi sau:

ORA-12514: TNS: người nghe hiện không biết dịch vụ được yêu cầu trong mô tả kết nối

Tôi đã kiểm tra kết nối bằng cách TNSPinggiải quyết chính xác và tôi đã SQLPlusthử thử kết nối, không thành công với lỗi tương tự như trên. Tôi đã sử dụng cú pháp này cho SQLPlus:

sqlplus username/password@addressname[or host name]

Chúng tôi đã xác minh rằng:

  • TNS Listener trên máy chủ đang chạy.
  • Bản thân Oracle trên máy chủ đang chạy.

Chúng tôi không biết bất kỳ thay đổi nào được thực hiện cho môi trường này. Bất cứ điều gì khác chúng ta có thể kiểm tra?


2
Lệnh TNSPing (với params) mà bạn đã sử dụng là gì?
Grzegorz W

Khi bạn nói "chạy cục bộ", bạn có nghĩa là ứng dụng đang kết nối với cơ sở dữ liệu trên cùng một máy chủ? Ngoài ra, nội dung của tệp sqlnet.ora của bạn là gì? phiên bản nào được báo cáo cho sqlplus và tnsping, và bạn có chắc chắn rằng chúng nằm trong cùng ORACLE_HOME không?
David Aldridge

1
hãy thử khởi động lại cơ sở dữ liệu. Vì họ phải thông báo cho Người nghe về sự tồn tại của họ khi khởi động, điều này có thể khắc phục vấn đề của bạn.
Jens Schauder

1
ALTER HỆ THỐNG ĐĂNG KÝ ít quyết liệt hơn so với khởi động lại cơ sở dữ liệu.
DCookie

Câu trả lời:


209

Tôi có vấn đề này và việc sửa chữa là để đảm bảo trong tnsnames.oranhững SERVICE_NAMElà một tên dịch vụ hợp lệ trong cơ sở dữ liệu của bạn. Để tìm ra tên dịch vụ hợp lệ, bạn có thể sử dụng truy vấn sau đây trong oracle:

select value from v$parameter where name='service_names'

Khi tôi cập nhật tnsnames.oralên:

TEST =
   (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = *<validhost>*)(PORT = *<validport>*))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = *<servicenamefromDB>*)
    )
)

sau đó tôi chạy:

sqlplus user@TEST

Sự thành công! Người nghe về cơ bản nói với bạn rằng bất cứ dịch vụ nào bạn đang sử dụng đều không phải là dịch vụ hợp lệ theo DB.

(* Tôi đã chạy sqlplus từ máy trạm khách Win7 đến DB từ xa và đổ lỗi cho các DBA;) *)


2
Trên win7,% ORACLE_HOME% \ NETWORK \ ADMIN \ tnsnames.ora
Brad Rippe

198
Làm thế nào tôi có thể truy vấn DB nếu tôi thậm chí không thể kết nối với nó ??
isabelle martz

2
Bạn có thể ssh đến máy chủ DB trực tiếp và chạy sqlplus từ đó không?
Brad Rippe

1
điều này có thể không xảy ra khi nhiều máy khách / máy chủ được sử dụng hoặc được sử dụng để cài đặt trên cùng một máy. (tnsping xuất ra vị trí của thư mục mà nó sử dụng) - trong trường hợp của tôi, listener.ora trong thư mục đó chứa thông tin liên quan đến một cá thể cơ sở dữ liệu cũ mà tôi đã gỡ cài đặt - cách nhanh chóng và bẩn thỉu là sao chép toàn bộ nội dung của listener.ora từ bản cài đặt Oracle Express hiện tại của tôi, đến thư mục khác mà người nghe dường như đang kiểm tra (tôi nghĩ rằng tôi đã thay đổi nó thông qua sổ đăng ký hoặc một cái gì đó, và nó đã được ưu tiên hơn ORACLE_HOME (?))
hello_earth

8
ORA-00942: bảng hoặc chế độ xem không tồn tại
Tommy Holman

44

Tôi biết đây là một câu hỏi cũ, nhưng vẫn chưa được trả lời. Phải mất một ngày nghiên cứu, nhưng tôi đã tìm thấy giải pháp đơn giản nhất, ít nhất là trong trường hợp của tôi (Oracle 11.2 trên Windows 2008 R2) và muốn chia sẻ.

Lỗi, nếu nhìn trực tiếp, chỉ ra rằng người nghe không nhận ra tên dịch vụ. Nhưng nó giữ tên dịch vụ ở đâu? Trong%ORACLE_HOME%\NETWORK\ADMIN\listener.ora

"SID_LIST" chỉ là một danh sách các SID và tên dịch vụ được ghép nối theo định dạng mà bạn có thể sao chép hoặc tra cứu.

Tôi đã thêm vấn đề Tên dịch vụ, sau đó trong bảng điều khiển "Dịch vụ" của Windows, tôi đã thực hiện "Khởi động lại" trên dịch vụ nghe của Oracle. Bây giờ tất cả đều tốt.


Ví dụ: tệp listener.ora của bạn ban đầu có thể trông như sau:

# listener.ora Network Configuration File: C:\app\oracle_user\product\12.1.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_user\product\12.1.0\dbhome_1)
      (PROGRAM = extproc)
      (ENVS = "EXTPROC_DLLS=ONLY:C:\app\oracle_user\product\12.1.0\dbhome_1\bin\oraclr12.dll")
    )
  )

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

... Và để làm cho nó nhận ra tên dịch vụ của orcl, bạn có thể đổi nó thành:

# listener.ora Network Configuration File: C:\app\oracle_user\product\12.1.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_user\product\12.1.0\dbhome_1)
      (PROGRAM = extproc)
      (ENVS = "EXTPROC_DLLS=ONLY:C:\app\oracle_user\product\12.1.0\dbhome_1\bin\oraclr12.dll")
    )
    (SID_DESC = 
        (GLOBAL_DBNAME = orcl)
        (ORACLE_HOME = C:\app\oracle_user\product\12.1.0\dbhome_1)
        (SID_NAME = orcl)
    )
  )

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

3
Cần cập nhật câu trả lời này với cú pháp về cách listener.oralưu trữ tên. Tôi thậm chí không có một listener.oratập tin. Tôi cũng trên một máy trạm khách đang chạy SQL Developer và đang cố gắng tạo Liên kết cơ sở dữ liệu khi tôi gặp lỗi. Tôi không có dịch vụ Oracle Listener để khởi động lại.
vapcguy

vapcguy, bạn cần phải ở trên máy chủ cơ sở dữ liệu. có vẻ như bạn đang ở trên máy khách
Joseph Argenio

Sau khi làm theo hướng dẫn của Sepideh liên quan đến Trình quản lý Net, tôi nhận thấy rằng tệp listers.ora của tôi đã được cập nhật để chứa mục nhập SID_LIST mới. Tôi đã chỉnh sửa câu trả lời này để bao gồm một ví dụ trước và sau cú pháp, vì lợi ích của những người đọc không thể sử dụng Trình quản lý Net, vì bất kỳ lý do gì.
Kevin

12

Tôi gặp vấn đề này tại máy chủ Windows 2008 R2Oracle 11g

đi tới Trình quản lý Net> Trình nghe> chọn dịch vụ cơ sở dữ liệu từ combox> "Tên cơ sở dữ liệu toàn cầu" phải giống như "SID" và "Thư mục nhà của Oracle" phải chính xác.

Nếu bạn không có bất kỳ mục nhập nào cho các dịch vụ cơ sở dữ liệu, hãy tạo một mục và đặt cơ sở dữ liệu toàn cầu chính xác sidvà nhà tiên tri.


12

Trong trường hợp của tôi, lỗi là do thực tế người nghe không đăng ký dịch vụ của db. Tôi đã giải quyết điều này bằng cách đăng ký các dịch vụ. Thí dụ:

Mô tả của tôi trong tnsnames.ora:

LOCALDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = LOCALDB)
    )
  )

Vì vậy, tôi tiến hành đăng ký dịch vụ listener.oratheo cách thủ công:

SID_LIST_LISTENER =
    (SID_DESC =
      (GLOBAL_DBNAME = LOCALDB)
      (ORACLE_HOME = C:\Oracle\product\11.2.0\dbhome_1)
      (SID_NAME = LOCALDB)
    )

Cuối cùng, khởi động lại trình nghe bằng lệnh:

> lsnrctl stop
> lsnrctl start

Làm xong!


8

Bắt đầu OracleServiceXXX từ services.msc hoạt động với tôi trong Windows.


Trong các cửa sổ, nếu bạn đang sử dụng Oracle Release 12.x, thì hãy đảm bảo rằng dịch vụ OracleServiceORCL đang chạy. Nếu dịch vụ này không được bắt đầu, thì bạn cũng sẽ nhận được mã lỗi tương tự.
chim ưng đường phố

5

Đây thực sự nên là một bình luận cho câu trả lời của Brad Rippe , nhưng than ôi, không đủ đại diện. Câu trả lời đó đã giúp tôi đạt 90%. Trong trường hợp của tôi, việc cài đặt và cấu hình cơ sở dữ liệu sẽ đưa các mục vào tệp tnsnames.ora cho cơ sở dữ liệu tôi đang chạy. Đầu tiên, tôi có thể kết nối với cơ sở dữ liệu bằng cách đặt các biến môi trường (Windows):

set ORACLE_SID=mydatabase
set ORACLE_HOME=C:\Oracle\product\11.2.0\dbhome_1

và sau đó kết nối bằng cách sử dụng

sqlplus / as sysdba

Tiếp theo, chạy lệnh từ câu trả lời của Brad Rippe:

select value from v$parameter where name='service_names';

cho thấy tên không khớp chính xác. Các mục như được tạo bằng Trợ lý cấu hình cơ sở dữ liệu của Oracle trong đó ban đầu:

MYDATABASE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = mylaptop.mydomain.com)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = mydatabase.mydomain.com)
    )
  ) 

Tên dịch vụ từ truy vấn chỉ mydatabaselà thay vì mydatabase.mydomain.com. Tôi đã chỉnh sửa tệp tnsnames.ora thành tên cơ sở mà không có phần tên miền để chúng trông như thế này:

MYDATABASE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = mylaptop.mydomain.com)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = mydatabase)
    )
  ) 

Tôi đã khởi động lại dịch vụ TNS Listener (tôi thường sử dụng lsnrctl stoplsnrctl starttừ cửa sổ lệnh quản trị viên [hoặc Windows Powershell] thay vì bảng điều khiển Dịch vụ, nhưng cả hai đều hoạt động.) Sau đó, tôi có thể kết nối.


4

Tôi đã từng gặp vấn đề tương tự. Đối với tôi, chỉ cần viết

sqlplus myusername/mypassword@localhost

Tôi đã lừa, làm như vậy để nó kết nối với tên dịch vụ mặc định, tôi đoán vậy.


1
Chúng tôi đã có một vấn đề tương tự với chuỗi kết nối của chúng tôi gây ra lỗi này. Chúng tôi đã kết nối bằng trình điều khiển mỏng JDBC của Oracle với chuỗi kết nối : jdbc:oracle:thin:@//localhost:1521/orcl. Chuỗi kết nối đã sửa để loại bỏ lỗi này là : jdbc:oracle:thin:@localhost:1521.
dan

nó phụ thuộc vào việc nó có hoạt động hay không - tôi nghĩ cách kết nối này, đánh giá những gì người khác nói, hoàn toàn bỏ qua người nghe, sử dụng tên máy chủ thay vì SID - cách kết nối này gây ra sự cố ở máy khách bên thứ ba, - tôi nghĩ nó cũng chỉ hoạt động khi EZCONNECT được chỉ định trong sqlnet.ora: NAMES.DIRECTORY_PATH = (TNSNAMES, EZCONNECT)
hello_earth

3

những gì làm việc cho tôi rất đơn giản, tôi chỉ cần khởi tạo dịch vụ theo cách thủ công trong "Dịch vụ Windows" (services.msc in cmd trompt). tên dịch vụ của tôi là: OracleServiceXXXXX.


Trong trường hợp của tôi, mặc dù Kiểu khởi động được đặt thành Tự động, nhưng nó không khởi động khi máy khởi động. Sau khi tự khởi động dịch vụ "OracleServiceXE", nó hoạt động cho Cơ sở dữ liệu Oracle 11g Express để kết nối với trang web DB và APEX (Oracle Application Express).
Ivan Châu

2

Kiểm tra để xem cơ sở dữ liệu là lên. Đăng nhập vào máy chủ, đặt biến môi trường ORACLE_SID cho SID cơ sở dữ liệu của bạn và chạy SQL * Plus dưới dạng kết nối cục bộ.


Đây chính xác là vấn đề của tôi. Cơ sở dữ liệu của chúng tôi được lưu trữ trên máy ảo bị hỏng trong khi tôi đang cố sử dụng một chương trình khác sử dụng DP. Sau khi nhìn thấy chủ đề này, tôi nhận ra nó có lẽ đã xuống.
Sh4d0wsPlyr

2

Lỗi này có thể xảy ra khi một ứng dụng tạo kết nối mới cho mọi tương tác cơ sở dữ liệu hoặc các kết nối không được đóng đúng cách. Một trong những công cụ miễn phí để giám sát và xác nhận điều này là nhà phát triển Oracle Sql (mặc dù đây không phải là công cụ duy nhất bạn có thể sử dụng để giám sát các phiên DB).

bạn có thể tải xuống công cụ từ trang web oracle Developer

đây là một ảnh chụp màn hình về cách theo dõi các phiên của bạn. (nếu bạn thấy nhiều phiên chồng chất cho người dùng ứng dụng của bạn trong khi bạn thấy lỗi ORA-12514 thì đó là một dấu hiệu tốt cho thấy bạn có thể gặp sự cố nhóm kết nối).

nhập mô tả hình ảnh ở đây


2

Tôi đã giải quyết vấn đề này trong môi trường linux của tôi khi cập nhật IP của máy trong tệp / etc / hosts.

Bạn có thể xác minh IP mạng của mình (đầu vào.) Bằng:

$ifconfig

Xem IP của bạn có khớp với tệp / etc / hosts không:

$cat /etc/hosts

Chỉnh sửa tập tin / etc / hosts của bạn, nếu được bổ sung:

$sudo gedit /etc/hosts

Tạm biệt.


2
Điều này đã cũ, nhưng không có ý nghĩa gì khi thêm IP của bạn vào / etc / hosts. OP đang thiếu SERVICE_NAME, những thứ khác hoàn toàn không liên quan
Ostap

Tôi chưa thêm IP của mình vào / etc / host. Tôi chỉ sửa nó. Như bạn có thể thấy trong chủ đề này, có rất nhiều câu trả lời hợp lệ (với upvote) và các loại để giải quyết câu hỏi này. Nếu câu trả lời đó không giúp ích gì cho bạn, tại sao downvote? Câu trả lời này vẫn có thể giúp ai đó vì nó đã giúp tôi.
Sergio MC Figueiredo

2

Đối với những người có thể đang chạy Oracle trong một VM (như tôi), tôi đã thấy vấn đề này vì VM của tôi đã hết bộ nhớ, điều này dường như đã ngăn OracleDB khởi động / chạy chính xác. Tăng bộ nhớ VM của tôi và khởi động lại đã khắc phục sự cố.


2

Có rất nhiều câu trả lời ở đây, nhưng ở đây có một ví dụ hoạt động với mã mà bạn có thể sao chép và dán và kiểm tra ngay lập tức:

Đối với tôi, lỗi 12514 đã được khắc phục sau khi chỉ định đúng DỊCH VỤ. Bạn thấy rằng trên máy chủ trong tệp tnsnames.orađi kèm với 3 tên dịch vụ được xác định trước (một trong số đó là "XE").

  1. Tôi đã cài đặt cơ sở dữ liệu Oracle Express OracleXE112 đi kèm với một số bảng demo được cài đặt sẵn.
  2. Khi bạn khởi động trình cài đặt, bạn được yêu cầu nhập mật khẩu. Tôi đã nhập "xxx" làm mật khẩu. (không được sử dụng trong sản xuất)
  3. Máy chủ của tôi chạy trên máy 192.168.1.158
  4. Trên máy chủ, bạn phải cho phép truy cập rõ ràng quá trình TNSLSNR.exe trong Tường lửa Windows. Quá trình này lắng nghe trên cổng 1521.
  5. TÙY CHỌN A: Đối với C # (.NET2 hoặc .NET4), bạn có thể tải xuống ODAC11 , từ đó bạn phải thêm Oracle.DataAccess.dll vào dự án của mình. Ngoài ra, DLL này phụ thuộc vào: OraOps11w.dll, oci.dll, oraociei11.dll (130MB!), Msvcr80.dll. Các DLL này phải nằm trong cùng thư mục với EXE hoặc bạn phải chỉ định đường dẫn DLL trong : HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\ODP.NET\4.112.4.0\DllPath. Trên máy 64 bit, ghi thêm vàoHKLM\SOFTWARE\Wow6432Node\Oracle\...
  6. TÙY CHỌN B: Nếu bạn đã tải xuống ODAC12, bạn cần Oracle.DataAccess.dll, OraOps12w.dll, oci.dll, oraociei12.dll (160MB!), Oraons.dll, msvcr100.dll. Đường dẫn đăng ký làHKEY_LOCAL_MACHINE\SOFTWARE\Oracle\ODP.NET\4.121.2.0\DllPath
  7. TÙY CHỌN C: Nếu bạn không muốn DLL lớn hơn 100 MB, bạn nên tải xuống ODP.NET_Managed12.xxxxxxxx.zip trong đó bạn tìm thấy Oracle.ManagedDataAccess.dllchỉ có 4 MB và là một DLL được quản lý thuần túy hoạt động trong các quy trình 32 bit và 64 bit cũng như và phụ thuộc vào không có DLL nào khác và không yêu cầu bất kỳ mục đăng ký nào.
  8. Mã C # sau hoạt động với tôi mà không có bất kỳ cấu hình nào ở phía máy chủ (chỉ cài đặt mặc định):
sử dụng Oracle.DataAccess.Client;
hoặc là
sử dụng Oracle.ManagedDataAccess.Client;

....

chuỗi oradb = "Nguồn dữ liệu = (DESCRIPTION ="
    + "(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) (HOST = 192.168.1.158) (PORT = 1521)))"
    + "(CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = XE)));"
    + "Id người dùng = HỆ THỐNG; Mật khẩu = xxx;";

bằng cách sử dụng (OracleConnection Conn = new OracleConnection (oradb)) 
{
    Conn.Open ();
    bằng cách sử dụng (OracleCommand cmd = new OracleCommand ())
    {
        cmd. Kết nối = liên kết;
        cmd.CommandText = "chọn TABLESPACE_NAME từ DBA_DATA_FILES";

        bằng cách sử dụng (OracleDataReader dr = cmd.ExecuteReader ())
        {
            while (dr.Read ())
            {
                listBox.Items.Add (dr ["TABLESPACE_NAME"]);
            }
        }
    }
}

Nếu SERVICE_NAME=XEsai, bạn gặp lỗi 12514. Đây SERVICE_NAMElà tùy chọn. Bạn cũng có thể để nó đi.


Cảm ơn rất nhiều, từ giải pháp của bạn, tôi đã tìm thấy mánh khóe, trong trường hợp của tôi, đó là phần mềm chống vi-rút đang chặn chương trình, do đó không thể có được kết nối với db db.
robot_alien

2

Tôi cũng đã phải đối mặt với cùng một vấn đề và đã dành 3 ngày để đào nó ra.

Điều này xảy ra do mục nhập dịch vụ TNS sai của bạn.

Trước tiên hãy kiểm tra xem bạn có thể kết nối với cơ sở dữ liệu dự phòng từ cơ sở dữ liệu chính bằng cách sử dụng sql> sqlplus sys@orastand as sysdba( orastandlà cơ sở dữ liệu dự phòng).

Nếu bạn không thể kết nối thì đó là một vấn đề với dịch vụ. Sửa lỗi nhập tên dịch vụ trong tệp TNS ở đầu chính.

Kiểm tra cơ sở dữ liệu dự phòng theo cùng một cách. Thực hiện các thay đổi ở đây quá nếu cần thiết.

Đảm bảo log_archive_dest_2tham số có tên dịch vụ chính xác.


1

Tôi đã gặp lỗi tương tự vì SID từ xa được chỉ định là sai:

 > sqlplus $DATASOURCE_USERNAME/$DATASOURCE_PASSWORD@$DB_SERVER_URL/$REMOTE_SID 

Tôi đã truy vấn cơ sở dữ liệu hệ thống:

chọn * từ global_name;

và tìm thấy SID từ xa của tôi ("XE").

Sau đó, tôi có thể kết nối mà không có bất kỳ vấn đề.


0

Trong trường hợp của tôi, cơ sở dữ liệu đã hết dung lượng đĩa. Mà gây ra nó không đáp ứng. Khi tôi xóa vấn đề đó, mọi thứ lại hoạt động.


Làm thế nào tôi có thể tìm ra điều này?
CodeSlave

0

Đối với tôi điều này là do sử dụng ipadress động sử dụng cài đặt. Tôi đã cài đặt lại Oracle bằng ipadress tĩnh và sau đó mọi thứ đều ổn



0

Vấn đề của tôi đã được giải quyết bằng cách thay thế 'ID' trong URL bằng name tên dịch vụ 'và máy chủ chính xác.


0

tnslsnr là lên nhưng cơ sở dữ liệu là xuống.

Đối với người mới làm quen, không rõ ràng rằng cơ sở dữ liệu có thể ngừng hoạt động trong khi các kết nối được chấp nhận.

Tôi đã phải khởi động cơ sở dữ liệu bằng tay như thế

su - oracle
export ORACLE_SID=XE
sqlplus sys as sysdba

Và sau đó trong bảng điều khiển sql

startup

Trong trường hợp của tôi, tôi không khởi động được nhưng nhận được một thông báo lỗi khác và tìm thấy nguồn gốc của một vấn đề - tôi đã phải thay đổi tên máy chủ và sau đó cơ sở dữ liệu tự động khởi động lại hoạt động.


0

Tôi đã thực hiện giải pháp dưới đây để giải quyết vấn đề này.

  1. Tôi đã đặt ORACLE_HOME bằng dấu nhắc lệnh (nhấp chuột phải vào cmd.exe và Chạy với tư cách quản trị viên hệ thống).

  2. Được sử dụng dưới đây lệnh

    set oracle_home="path to the oracle home"

  3. Chuyển đến Tất cả chương trình -> Oracle -ora home1 -> Công cụ di chuyển cấu hình -> Trình quản lý Net -> Trình nghe

  4. Chọn Dịch vụ cơ sở dữ liệu từ danh sách thả xuống. Cả tên cơ sở dữ liệu toàn cầu và SID đều được đặt giống nhau (ORCL trong trường hợp của tôi). Đặt thư mục chính của Oracle.

Ví dụ cửa sổ Oracle Net Manager từ tài liệu oracle: Ví dụ về Trình quản lý Net của Oracle

  1. Nhấp vào Tệp và lưu cấu hình mạng.

0

Vấn đề là url chuỗi kết nối của tôi chứa tên cơ sở dữ liệu thay vì SID. Thay thế tên cơ sở dữ liệu bằng kết nối cơ sở dữ liệu oracle SID đã giải quyết vấn đề này.

Để biết SID của bạn, bạn có thể duyệt tnsnames.oratập tin.

XE là SID thực tế, vì vậy đây là cách chuỗi kết nối tomcat của tôi trông giống như bây giờ:

    <Resource
       name="jdbc/my_db_conn"
       auth="Container"
       type="javax.sql.DataSource"
       driverClassName="oracle.jdbc.driver.OracleDriver"
       url="jdbc:oracle:thin:@//127.0.0.1:1521/XE"
       username="test_user"
       password="test" />

Phiên bản máy chủ của tôi là "Oracle 11.2 Express", nhưng giải pháp cũng hoạt động trên các phiên bản khác.


0

Trong trường hợp của tôi, dấu ngoặc tròn xung quanh DỊCH VỤ đã bị thiếu trong tệp tnsnames.ora .

<DBNAME> =
  (DESCRIPTION =
    (ADDRESS_LIST =
     (ADDRESS = (PROTOCOL=TCP)(HOST = nupark-cnvr-ora )(PORT=1521))
    )
    (CONNECT_DATA =
    (SERVER = DEDICATED)
    (SERVICE_NAME = <DBNAME> ***CLOSING ROUND BRACKET WAS MISSING HERE***
    )
  )

LISTENER_<DBNAME> =

  (ADDRESS = (PROTOCOL = TCP)(HOST = nupark-cnvr-ora)(PORT = 1521))

0

Dành cho những ai đang sử dụng spring-boot và jdbc để kết nối. Bạn phải cẩn thận trong khi viết jdbcUrl trong application.properations

Với SID trong kết nối cơ sở dữ liệu - source.datasource.jdbcUrl = jdbc:oracle:thin:@[HOST][:PORT]:SID

Với tên dịch vụ trong kết nối db globe.datasource.jdbcUrl = jdbc:oracle:thin:@//[HOST][:PORT]/SERVICE

Điều này làm việc cho tôi :)

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.