我的问题始于一个空闲实例。我正在尝试使用 SQL Developer 连接到我的本地 XE 实例。
我已经在 Google 上尝试了许多链接,如果您提供一些解决方案,我可能可以很容易地告诉您我尝试了这些链接,但仍然期待解决它。
附加信息:
使用裸字符串连接 SQL*Plus : 描述 ... 给了我错误
Error 6 initializing SQL*Plus
SP2-0667: Message file sp1<lang>.msb not found
SP2-0750: You may need to set ORACLE_HOME to your Oracle software directory
附件是listener.ora(第一行已注释,但当我放入#时,它变成粗体,所以请考虑它已注释):
#ADR_BASE_LISTENER = C:\app\387759
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = C:\app\387759\product\11.2.0\dbhome_1)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:C:\app\387759\product\11.2.0\dbhome_1\bin\oraclr11.dll")
)
(SID_DESC =
(GLOBAL_DBNAME = XE)
(ORACLE_HOME = C:\app\387759\product\11.2.0\dbhome_1)
(SID_NAME = ORCL)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
)
ADR_BASE_LISTENER = C:\app\387759\product\11.2.0\dbhome_1\log
现在 cmd(作为管理员)的错误是:
ERROR:
ORA-12154: TNS:could not resolve the connect identifier specified
tnsnames.ora 中的相关条目(除了其他工作条目之外)还有:
LISTENER_ORCL =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
ORACLR_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
(CONNECT_DATA =
(SID = CLRExtProc)
(PRESENTATION = RO)
)
)
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl.36.160.158)
)
)
另外,请考虑我可以解决空闲实例问题,因此不再存在。
387759 is my username to the machine.
其他信息,我在修复空闲实例问题时所做的唯一更改,即删除该行
*.local_listener='LISTENER_ORCL'
来自 InitORCL.ora 文件,然后再次从 pfile 创建 spfile,但刚才我再次将其添加到 pfile,然后创建 spfile。
Cmd 行开始给我错误:
SQL> startup
ORA-00119: invalid specification for system parameter LOCAL_LISTENER
ORA-00132: syntax error or unresolved network name 'LISTENER_ORCL'
SQL>
所以理论上我又回到了无法启动oracle实例的问题。
无法在提到的位置(在评论中)找到pfile后,我尝试使用命令
显示参数spfile;
我收到以下信息:
SQL> 显示参数spfile; ORA-01034: ORACLE 不可用
进程ID:0
会话 ID:0 序列号:0
一个附加信息,我只能看到 services.msc 下运行的服务中的 2 个
OracleOraDb11g_home1TNSListener
Oracle服务ORCL
当我需要使用本地oracle时,我手动启动它们,否则我将它们保持未启动模式以节省一些RAM。其他与 Oracle 相关的服务我几乎一直保持关闭状态,并且在此时出现错误。这是否有助于缩小问题范围
`
您的 ORACLE_HOME 应该是
C:\app\387759\product\11.2.0\dbhome_1
。您的 TNS_ADMIN 应该是 C:\app\387759\product\11.2.0\dbhome_1\NETWORK\ADMIN
- 该目录包含您的listener.ora、sqlnet.ora、tnsnames.ora 等。
如果您可以以 SYS 身份在本地连接(例如
sqlplus / as sysdba
),但它表示您已连接到空闲实例,则数据库未运行。您需要启动数据库,并且由于您使用的是 Windows,因此还需要启动 OracleXE 服务。
当数据库启动时,它将尝试向侦听器注册其服务名称。默认情况下它将尝试使用服务器的网络名称。您的侦听器仅在本地主机上侦听,因此可能不匹配。看起来您试图告诉它针对该地址进行注册,但添加了单引号;应该是:
*.local_listener=LISTENER_ORCL
修复后,您的数据库应该启动并注册监听器,然后您应该能够从同一台机器进行连接,例如与:
sqlplus userid/password@orcl
或
sqlplus userid/password@//localhost:1521/orcl.36.160.158
...如果您的
tnsnames.ora
中的服务名称正确。 SQL Developer 中应该可以使用相同的值。不过,您将无法从其他任何地方进行连接,因为侦听器仅在本地主机上侦听。