Oracle 12514錯誤及其解決方案
Oracle 12514錯誤是指在使用PL/SQL Developer等工具向Oracle數(shù)據(jù)庫發(fā)起連接請求時出現(xiàn)的錯誤。這種錯誤通常由于用戶沒有正確配置服務(wù)名稱或使用的服務(wù)名稱無法找到所致。
示例情況
舉個例子,假設(shè)我們有一個Oracle實例名為myoracle,服務(wù)名為myservice。當我們通過PL/SQL Developer連接myoracle實例時,輸入以下連接字符串:
Userid=userid;Password=password;Data Source=myoracle
這時,我們可能會遇到12514錯誤。這是因為這個連接字符串沒有指定我們要連接的服務(wù)名,應該將其修改為:
Userid=userid;Password=password;Data Source=myoracle/myservice
解決方案
要解決Oracle 12514錯誤,一般需要我們做以下幾件事情:
- 確認Oracle服務(wù)是否已啟動
- 確認服務(wù)名是否正確
- 確保tnsnames.ora文件中服務(wù)名的定義是正確的
- 使用tnsping命令測試服務(wù)是否能正常連接
確認Oracle服務(wù)是否已啟動
如果服務(wù)沒有啟動,那么客戶端就無法連接。我們可以通過Windows Services或者命令行(如圖所示)來確認服務(wù)是否已啟動:
C:\> sc query OracleServiceORCL SERVICE_NAME: OracleServiceORCL TYPE : 10 WIN32_OWN_PROCESS STATE : 4 RUNNING (STOPPABLE,PAUSABLE,ACCEPTS_SHUTDOWN) WIN32_EXIT_CODE : 0 (0x0) SERVICE_EXIT_CODE : 0 (0x0) CHECKPOINT : 0x0 WAIT_HINT : 0x0
確認服務(wù)名是否正確
服務(wù)名應該由DBA提供給我們。需要注意的是,與實例名不同,服務(wù)名可以包含IP地址。
確保tnsnames.ora文件中服務(wù)名的定義是正確的
tnsnames.ora文件中包含了Oracle數(shù)據(jù)庫的連接信息。我們可以在其中找到我們要連接的服務(wù)名(如myservice)對應的定義。以下是一個簡單的tnsnames.ora示例:
ORCL= (DESCRIPTION= (ADDRESS_LIST= (ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)) ) (CONNECT_DATA= (SERVICE_NAME=ORCL) ) ) myservice= (DESCRIPTION= (ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.1)(PORT=1521)) (CONNECT_DATA= (SERVER=DEDICATED) (SERVICE_NAME=fully.qualified.domain.name) (UR=A) ) )
使用tnsping命令測試服務(wù)是否能正常連接
tnsping命令可以用來測試服務(wù)是否能正常連接。以連接myservice為例,我們可以在命令行輸入以下命令:
tnsping myservice
正確輸出信息如下:
TNS Ping Utility for 64-bit Windows: Version 12.1.0.2.0 - Production on 08-DEC-2021 14:48:21 Copyright (c) 1997, 2014, Oracle. All rights reserved. Used parameter files: C:\Oracle\product\12.1.0\dbhome_1\network\admin\sqlnet.ora Used EZCONNECT adapter to resolve the alias Attempting to contact (DESCRIPTION=(CONNECT_DATA=(SERVICE_NAME=fully.qualified.domain.name))(ADDRESS=(PROTOCOL=TCP)(Host=192.168.1.1)(Port=1521))) OK (40 msec)
總結(jié)
Oracle 12514錯誤通常由客戶端連接字符串中的服務(wù)名錯誤或者tnsnames.ora文件中對應服務(wù)名的定義錯誤所致。我們可以通過確認服務(wù)是否已啟動、確認服務(wù)名是否正確、確保tnsnames.ora文件中服務(wù)名的定義是正確的和使用tnsping命令測試服務(wù)是否能正常連接等方式來解決錯誤。