Win10下Oracle12c多报错(LRM-00190等)问题求解
这些问题其实是连锁反应,核心都是实例未正常启动或网络配置出错,咱们按顺序逐个击破:
一、先搞定"connected to idle instance"和"oracle not available"
这俩问题本质是Oracle实例处于关闭状态——你虽然通过sqlplus /as sysdba以sys身份连上了,但实例压根没跑起来。
操作步骤:
- 保持当前sqlplus会话,直接执行启动命令:
如果顺利启动,后面的问题大概率能跟着解决;要是启动失败抛出LRM-00109,就往下看参数文件的修复方法。startup
二、处理LRM-00109错误
这个错误是Oracle找不到正确的初始化参数文件(spfile或pfile),或者实例名(ORACLE_SID)配置不对。
1. 先确认ORACLE_SID是否正确
在操作系统终端执行:
# Linux/Unix系统 echo $ORACLE_SID # Windows系统 set ORACLE_SID
输出应该是你的目标实例名(比如orcl)。如果不对,手动设置:
# Linux/Unix export ORACLE_SID=orcl # Windows set ORACLE_SID=orcl
2. 指定参数文件启动
如果ORACLE_SID正确,那就是参数文件路径/名称有问题。Oracle默认会在$ORACLE_HOME/dbs(Linux)或%ORACLE_HOME%\database(Windows)下找spfile<sid>.ora或init<sid>.ora。
你可以直接指定参数文件路径启动:
# 用pfile启动 startup pfile='/u01/app/oracle/product/12c/dbhome_1/dbs/initorcl.ora' # 或者用spfile启动 startup spfile='/u01/app/oracle/product/12c/dbhome_1/dbs/spfileorcl.ora'
3. 重建参数文件(如果丢失)
如果没有参数文件,你可以从模板复制一份修改:
- Linux下,
$ORACLE_HOME/dbs目录里有init.ora模板,复制为initorcl.ora,至少配置核心参数:db_name='orcl' control_files=('/u01/app/oracle/oradata/orcl/control01.ctl', '/u01/app/oracle/oradata/orcl/control02.ctl') - 用这个pfile启动后,还可以生成spfile方便后续使用:
create spfile from pfile='/path/to/initorcl.ora';
三、修复tnsping orcl"cannot resolve parameter"错误
这个是TNS配置问题,要么监听没启动,要么tnsnames.ora配置错误,要么环境变量没设对。
1. 检查并启动监听
在终端执行:
lsnrctl status
如果显示监听未启动,执行启动命令:
lsnrctl start
2. 确认TNS_ADMIN环境变量
这个变量要指向tnsnames.ora所在的目录,默认是$ORACLE_HOME/network/admin(Linux)或%ORACLE_HOME%\network\admin(Windows)。
检查变量:
# Linux/Unix echo $TNS_ADMIN # Windows echo %TNS_ADMIN%
如果没设置,手动配置:
# Linux/Unix export TNS_ADMIN=$ORACLE_HOME/network/admin # Windows set TNS_ADMIN=%ORACLE_HOME%\network\admin
3. 修正tnsnames.ora配置
打开tnsnames.ora文件,确保orcl的条目配置正确,示例如下:
ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 你的主机名或IP)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) )
注意替换你的主机名或IP为实际值,SERVICE_NAME要和数据库实际服务名一致(可以在sqlplus里执行show parameter service_name查看)。
4. 重载监听配置
修改完tnsnames.ora后,重载监听让配置生效:
lsnrctl reload
现在再执行tnsping orcl,应该就能正常解析了。
内容的提问来源于stack exchange,提问作者tech_logman

