目录
一、现象
1、手动关闭服务
2、登录sqlplus / as sysdba提示ORA-12560错误。
二、原因:
原因:因为手动关闭服务后,oracle的service服务也关闭了,所以无法正常登录。
三、解决方法
1、方法1:
在sqlplus / as sysdba中关闭数据库,此过程只是关闭数据库实例,但oracle service还在运行,所以此方法可以。
SQL>shutdown immediate;
此时就是空闲状态,重新登录就可以连到空闲实例(an idle instance)中了。
2、方法2:
(1)运行oracle的administrator软件,找到对应的数据库实例,默认“服务启动时启动实例”,
(2)此处我们取消此选项,启动服务时不启动实例。
(3)后续在服务中关闭service服务后,再启动service,数据库实例就没有启动,是空闲状态
(4)此处可以维护数据库
可以启动到nomount、mount状态等
三、其他解决方法见:
https://www.yunweiku.com/thread-521498-1-1.html 在windows下,有时候我们明明启动了数据库服务但连接数据库的时候却提示连接到了空闲实例,或者为了做一些维护工作需连接到空闲实例却不能。看完下文,这些问题将迎刃而解。 一创建oracle服务 创建oracle服务我们需要用到oradim命令,关于oradim命令的部分参数解释如下: 1-NEW表明我们要创建一个新的实例 2-SID指定要创建的实例名 3-SRVCservice_name指定创建的oracle服务名 4-STARTMODEauto|manual表明启动oracle服务时是否自动启动实例,默认为manual即手动 5-SRVCSTARTsystem|demand默认是demand,system指当系统重启时服务自动启动,demand表示需要用户手动启动服务,不明确指定该参数时,默认为-SRVCSTARTdemand 6-SPFILE表示使用spfile参数当startup数据库时 如下:创建一个oracle服务1-sidERPTEST表明会创建一个OracleServiceERPTEST服务 2-startmodemanual表明启动oracle服务时,不启动oracle实例,即服务启动后,我们可以连接到一个空闲实例 3虽然未明确指定-srvcstart参数值,但默认会为-srvcstart指定demand值即创建的服务OracleServiceERPTEST启动类型为手动 4由于未有实例ERPTEST对应的参数文件所以startupnomount会报错 如下图所示:
![]()
从下图可以看出发起sqlplus/assysdba命令可以连接到一个空闲实例,但startupnomount启动报错
结合上面三图不难看出,orcle服务随意可以创建,但启动oracle服务时能不能启动实例,则1看你是否指定-startmodeauto。2看是否有相对应的参数文件,没参数文件,自然不能启动。哈哈废话了。 二管理oracle服务 设置oracle服务启动时顺带启动oracle实例,以免我们以为服务启动了,连数据库时却提示连接到了空闲实例。同样我们停止服务时希望shutdownimmediate数据库则设置方法如下: 方法一: 通过windows下oracle的提供的工具oracleadministratorassistandforwindows
![]()
方法二: 修改注册表项KEY_OraDb11g_home1下的字符串ORA_ERP_AUTOSTART(TRUE表示启动服务的时候启动实例,FALSE则表示仅启动服务,不会启动实例)编辑更改后,直接生效。
ORA_ERP_AUTOSTART值为true表示启动服务时,实例也跟着启动 ORA_ERP_SHUTDOWN值为true表示停止服务时,也关闭数据库。 ORA_ERP_SHUTDOWNTYPE值为I表示关闭数据库时用命令shutdonwimmediate 例如如果只想在cmd下运行sqlplus连接到一个空闲实例做一些维护工作。以erp为例如果要更改注册表则设置ORA_ERP_AUTOSTART值为FALSE如下:
实际上在注册表中的更改也会影响配置工具oracleadministratorassistandforwindows中的设置,(反之也一样)。如图所示
重新停止服务再启动后我们用sqlplus连接将会连接到空闲实例如下:
三删除oracle服务 方法1删除注册表中的服务项,然后重启系统如下:
方法2通过oradim命令删除oracle服务 参数介绍如下: -DELETE指定要删除实例或者服务 -SIDsid指定要删除的实例名 -SRVCservice_name指定要删除的服务名(OracleServiceSID) 用户需要指定SID或者SRVC参数
注意在windows下如果不启动oracle主服务我们连接数据库会出现如下情况 C:\Users\Administrator.ZX>setoracle_sid=ERP C:\Users\Administrator.ZX>sqlplus/assysdba SQL*Plus:Release11.2.0.1.0Productionon星期四9月2622:56:322013 Copyright(c)1982,2010,Oracle.Allrightsreserved. ERROR: ORA-12560:TNS:协议适配器错误 C:\Users\Administrator.ZX>sqlplussys/DHHZDHHZassysdba SQL*Plus:Release11.2.0.1.0Productionon星期四9月2622:52:452013 Copyright(c)1982,2010,Oracle.Allrightsreserved. ERROR: ORA-12560:TNS:协议适配器错误 请输入用户名: C:\Users\Administrator.ZX>tnspingerp TNSPingUtilityfor64-bitWindows:Version11.2.0.1.0-Productionon26-9月- 201322:52:53 Copyright(c)1997,2010,Oracle.Allrightsreserved. 已使用的参数文件: C:\app\product\11.2.0\db1\network\admin\sqlnet.ora 已使用TNSNAMES适配器来解析别名 尝试连接(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.1 68.5.20)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=ERP))) OK(10毫秒) C:\Users\Administrator.ZX>lsnrctlstatuserp LSNRCTLfor64-bitWindows:Version11.2.0.1.0-Productionon26-9月-201322:5 3:09 Copyright(c)1991,2010,Oracle.Allrightsreserved. 正在连接到(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.5.20)(PORT=1521))) LISTENER的STATUS ------------------------ 别名erp 版本TNSLSNRfor64-bitWindows:Version11.2.0.1.0-Produ ction 启动日期26-9月-201322:49:19 正常运行时间0天0小时3分52秒 跟踪级别off 安全性ON:LocalOSAuthentication SNMPOFF 监听程序参数文件C:\app\product\11.2.0\db1\network\admin\listener.ora 监听程序日志文件c:\app\product\11.2.0\db1\log\diag\tnslsnr\WIN-FB6ILAA 5AB8\erp\alert\log.xml 监听端点概要... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.5.20)(PORT=1521))) 服务摘要.. 服务"ERP"包含1个实例。 实例"ERP",状态UNKNOWN,包含此服务的1个处理程序... 命令执行成功 C:\Users\Administrator.ZX>sqlplussys/DHHZDHHZ@erpassysdba SQL*Plus:Release11.2.0.1.0Productionon星期四9月2622:54:182013 Copyright(c)1982,2010,Oracle.Allrightsreserved. ERROR: ORA-12518:TNS:监听程序无法分发客户机连接 请输入用户名: