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