Oracle 在立即关闭后抛出 ORA-12514

Oracle throws ORA-12514 after shutdown immediate

我的目标是让我的容器数据库进入挂载模式以执行系统更改语句以启用闪回功能。

Configuring Your Database for Flashback Transaction

环境:OSWin 8.1 64 位,Oracle 12c (12.1.0.2.0) 64 位

我验证了我的侦听器和数据库服务都是 运行。

Listener.log

Tue Sep 08 13:31:42 2015 System parameter file is C:\OracleServer\product.1.0\dbhome_1\network\admin\listener.ora Log messages written to C:\OracleServer\diag\tnslsnr\NA-D02979\listener\alert\log.xml Trace information written to C:\OracleServer\diag\tnslsnr\NA-D02979\listener\trace\ora_9672_20416.trc Trace level is currently 0

Started with pid=9672 Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.1.105.118)(PORT=1521))) Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521))) Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\.\pipe\EXTPROC1521ipc))) Listener completed notification to CRS on start

TIMESTAMP * CONNECT DATA [* PROTOCOL INFO] * EVENT [* SID] * RETURN CODE Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=NA-D02979.vgnet.volgrp.com)(PORT=5500))(Security=(my_wallet_directory=C:\ORACLESERVER\admin\CDB1\xdb_wallet))(Presentation=HTTP)(Session=RAW)) Dynamic address is already listened on (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521))) 08-SEP-2015 13:32:25 * service_register * cdb1 * 0 08-SEP-2015 13:33:22 * service_update * cdb1 * 0

SqlPlus 的结果

C:\Users\jeff>sqlplus sys/**********@CDB1 as sysdba

SQL*Plus: Release 12.1.0.2.0 Production on Tue Sep 8 13:44:18 2015

Copyright (c) 1982, 2014, Oracle. All rights reserved.

Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

ERROR: ORA-12514: TNS:listener does not currently know of service requested in connect descriptor

Warning: You are no longer connected to ORACLE.

SQL> startup mount

SP2-0640: Not connected

SQL> ^C

C:\Users\jeff>sqlplus> sys/**********@CDB1 as sysdba

SQL*Plus: Release 12.1.0.2.0 Production on Tue Sep 8 13:46:24 2015

Copyright (c) 1982, 2014, Oracle. All rights reserved.

ERROR: ORA-12514: TNS:listener does not currently know of service requested in connect descriptor

Enter user-name:

当我以 sysdba 身份连接到我的容器数据库时,我可以发出 shutdown immediate 命令,但是一旦数据库卸载,侦听器就不再知道数据库,我无法发出 "startup mount"命令。

Listener.ora

SID_LIST_LISTENER = (SID_LIST =

(SID_DESC =

  (SID_NAME = CLRExtProc)

  (ORACLE_HOME = C:\OracleServer\product.1.0\dbhome_1)

  (PROGRAM = extproc)

  (ENVS = "EXTPROC_DLLS=ONLY:C:\OracleServer\product.1.0\dbhome_1\bin\oraclr12.dll")

) 

(SID_DESC =

 (GLOBAL_DBNAME = CDB1)

 (ORACLE_HOME = C:\app\oracle\product.2.0\dbhome_1)

 (SID_NAME = CDB1)

)   )

LISTENER = (DESCRIPTION_LIST = (DESCRIPTION =

  (ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.105.118)(PORT = 1521))
  (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
  (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))

)   )

TNSNames.ora

LISTENER_CDB1 =

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

CDB1 =

 (DESCRIPTION =

   (ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.105.118)(PORT = 1521))

   (CONNECT_DATA =

    (SERVER = DEDICATED)

     (SERVICE_NAME = CDB1.vgnet.volgrp.com)

   )

 )

ORACLR_CONNECTION_DATA =

 (DESCRIPTION =

   (ADDRESS_LIST =

     (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))

   )

   (CONNECT_DATA =

     (SID = CLRExtProc)

     (PRESENTATION = RO)

   )

 )

我已经为我的容器数据库定义了一个静态 SID。

第二轮结果

根据以下结果,我遵循了 Alex Pool 在答案中记录的内容。我和数据库在同一台机器上。我已将 ORACLE_SID 设置为 cdb1,然后每次尝试连接时,我都会收到 ORA-12560:TNS:protocol 适配器错误。当我尝试基于 SID 连接时,为什么我的侦听器仍然抛出 TNS 错误?

C:\Users\jeff>%ORACLE_SID%
'cdb1' is not recognized as an internal or external command,
operable program or batch file.

C:\Users\jeff>sqlplus sys/********** as sysdba

SQL*Plus: Release 12.1.0.2.0 Production on Wed Sep 9 08:05:25 2015

Copyright (c) 1982, 2014, Oracle.  All rights reserved.

ERROR:
ORA-12560: TNS:protocol adapter error

Enter user-name: ^C
C:\Users\jeff>sqlplus / as sysdba

SQL*Plus: Release 12.1.0.2.0 Production on Wed Sep 9 08:05:36 2015

Copyright (c) 1982, 2014, Oracle.  All rights reserved.

ERROR:
ORA-12560: TNS:protocol adapter error

Enter user-name: ^C
C:\Users\jeff>sqlplus /nolog

SQL*Plus: Release 12.1.0.2.0 Production on Wed Sep 9 08:05:50 2015

Copyright (c) 1982, 2014, Oracle.  All rights reserved.

SQL> connect / as sysdba
ERROR:
ORA-12560: TNS:protocol adapter error

SQL>

侦听器不再知道 服务,因为数据库在关闭期间自行注销。它仍然知道 SID,尽管这不是很有用。您可以lsnrctl status查看关机前后的区别。

你说你已经定义了一个静态 SID,这是真的(假设你指的是 SID_LIST_LISTENER 条目),但是你正在使用 @CDB1 TNS 别名进行连接,这是在您的 tnsnames.ora 中违抗使用服务名称,而不是 SID。您可能会对别名和 SID 具有相同的值感到有点困惑,但它们之间没有直接关系;您可以将别名称为完全不同的东西(尽管通常使用相同的别名)。

如果您从同一个盒子连接,请将 ORACLE_SID 设置为 CDB1 并在本地连接而不是通过 SQL*Net,只需:

sqlplus sys/********** as sysdba

甚至

sqlplus / as sysdba

sqlplus /nolog
connect / as sysdba

$ 出口 TWO_TASK =

sqlplus /nolog

conn sys/pass 作为 sysdba