这周一个ORACLE问题的解决过程(ORA-12560:TNS:协议适配器错误! )

本文分享了一次Oracle数据库安装失败后的解决方案,包括处理ORACLESERVICE[SID]服务启动异常、解决SQLPlus登录时出现的ORA-12560及ORA-01034错误的方法。

第一次安装ORACLE没有成功,第二次安装成功了,但是重启后登陆SQLPLUS,报
ORA-12560:TNS:协议适配器错误!

看服务列表里面的ORACLESERVICE[SID]服务是启动状态

上网查了下资料,发现引起这样问题的原因很多,解决办法也很多,试了很多办法都没有用。最后在MS的客户帮助里面找到个办法,自己写了脚本运行后,ORACLESERVICE[SID]服务启动起来了,再次登陆SQLPLUS,这次还是不行,都说可能Terminal Services服务有问题,于是不用windows远程登录了,改用PCANYWHERE登陆,这次运行SQLPLUS,又报错了,但是这次报的错误不一样,报

ORA-01034 oracle not available

应该是数据库实例没有被装载吧,运行几个命令把数据库装载上去,终于可以运行了。

附:

在服务列表里面把ORACLESERVICE[SID]改为手动,重启。

找到以下注册表项: HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/HOME0

在注册表编辑器, 右窗格双击 ORA_ < SID > _AUTOSTART

编辑字符串 对话框中, 在 值数据 框中, 键入 FALSE , 然后单击 确定

用名称 StartupOracleORCL.sql 创建以下批处理文件:

注意,这里的INIT.ORA 是数据库实例的init文件,文件名并不一定是INIT.ORA,比如我的数据库实例名字是

NMORA,文件名就是initNMORA.ora

用名称 Orastart.bat 在同一文件夹位置中创建 StartupOracleORCL.sql 批处理文件创建以下 Windows 批处理文件:

@echo off

net start <Oracle Service Name>
set ORACLE_SID=<Oracle SID> 
svrmgrl @<Full path of startupOracleORCL.sql created in Step 3>

exit
第一次运行发现net start命令无效,再一查服务器的环境变量,发现PATH里面竟然没有配置windows根目录,把
%SystemRoot%/system32;%SystemRoot%;配到PATH变量下。再次运行这个BAT文件就可以了。
这个时候数据库还没有装载,在运行里面运行cmd,运行下面几条指令
C:>sqlplus internal/oracle
then under sqlplu prompt
sqlplus>startup

等一下就会报告数据库装载成功了。
这个时候数据库就可以运行了。
感觉第一次安装失败的数据库实例在卸载的时候ORACLE工具没有卸载干净,所以这个数据库实例总是影响
第二次安装的数据库实例,比如抢占1521端口(可以运行netstat -a来查看)。俺的工作对ORACLE不
需要那么熟,里面具体理论我也不太清楚,把解决问题了就OK了,呵呵。

 

connect <username>/<password>
startup PFILE=<Full path of the INIT.ORA file for the instance of Oracle database>

exit
### 三级标题:ORA-12560: TNS 协议适配器错误的原因及解决方案 ORA-12560Oracle 数据库中常见的连接错误之一,通常与 TNS(Transparent Network Substrate)配置或数据库实例状态有关。以下是该错误的常见原因及对应的解决方案。 #### 原因分析 1. **监听服务未启动** 在 Windows 系统中,Oracle 数据库依赖于监听服务来接受客户端连接请求。如果 `OracleOraDb11g_home1TNSlistener` 服务未启动,将导致 ORA-12560 错误[^1]。 2. **tnsnames.ora 配置错误** `tnsnames.ora` 文件用于定义网络连接信息,若其中的 `HOST`、`PORT` 或 `SERVICE_NAME` 配置错误,可能导致连接失败。例如,`HOST` 应设置为数据库服务器的 IP 地址或主机名,`PORT` 默认为 1521,`SERVICE_NAME` 应与数据库实例的服务名一致[^3]。 3. **环境变量配置错误** 在安装多个 Oracle 实例的情况下,系统环境变量可能指向了客户端(Client)的 `sqlplus`,而不是服务器端(Server)的 `sqlplus`,从而导致连接失败[^2]。 4. **Oracle 数据库实例未启动** 如果数据库实例未启动,即使监听器正常运行,也无法建立连接,从而引发 ORA-12560 错误。 5. **归档日志空间不足导致数据库无法启动** 如果归档日志空间已满,数据库实例可能无法正常启动,进而导致连接失败。这种情况通常伴随着 ORA-19815 错误[^5]。 #### 解决方案 1. **启动监听服务** 在 Windows 系统中,打开“服务”管理器,确认 `OracleOraDb11g_home1TNSlistener` 服务是否已启动。如果没有,请手动启动该服务。 2. **检查并修改 tnsnames.ora 配置** 确保 `tnsnames.ora` 文件中的配置正确。示例配置如下: ```plaintext ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) ) ``` 确认 `HOST`、`PORT` 和 `SERVICE_NAME` 是否与数据库实际配置一致[^3]。 3. **配置正确的 sqlplus 路径** 确保系统环境变量 `PATH` 指向服务器端的 `sqlplus` 路径,而不是客户端的路径。例如,应优先使用 `ORACLE_HOME\bin` 目录下的 `sqlplus`[^2]。 4. **启动数据库实例** 使用 `sqlplus / as sysdba` 登录数据库,执行以下命令启动数据库实例: ```sql SQL> startup; ``` 5. **清理归档日志** 如果数据库因归档日志空间不足而无法启动,可以使用 RMAN 工具清理旧的归档日志。例如,删除三天前的归档日志: ```bash rman target / RMAN> crosscheck archivelog all; RMAN> delete noprompt archivelog until time "sysdate -3"; ``` 6. **检查 ORACLE_HOME 和 ORACLE_SID 环境变量** 确保 `ORACLE_HOME` 指向正确的 Oracle 安装目录,并且 `ORACLE_SID` 设置为当前数据库实例的 SID。可以通过以下命令查看和设置环境变量: ```bash echo $ORACLE_HOME echo $ORACLE_SID export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1 export ORACLE_SID=orcl ``` 7. **重启数据库实例** 如果以上方法均无效,可以尝试重启数据库实例。首先关闭数据库,然后重新启动: ```sql SQL> shutdown immediate; SQL> startup; ``` #### 常见问题排查命令 - 查看监听器状态: ```bash lsnrctl status ``` - 启动监听器: ```bash lsnrctl start ``` - 测试 TNS 连接: ```bash tnsping orcl ``` - 登录数据库: ```bash sqlplus / as sysdba ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值