Đâ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ỉ mydatabase
là 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 stop
và lsnrctl start
từ 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.