ORA-27101本质是Oracle实例未启动或启动失败,共享内存段未分配;需优先验证ORACLE_SID是否正确、检查ipcs -m确认shm存在、查看alert日志定位startup卡点。
ORA-27101 报错本质是实例没起来,不是数据库创建失败
ora-27101 "shared memory realm does not exist" 这个错误从不发生在“创建数据库”命令执行过程中,而总出现在你试图连接刚建好的库时——因为创建完还没启动。很多人误以为是建库脚本出错,实际是后续的 startup 步骤被跳过或失败了。关键判断点:运行 sqlplus / as sysdba 后直接执行 select status from v$instance;,若报 ora-01034: oracle not available,就坐实了实例未运行,此时再查 ora-27101 就只是表象。
检查 ORACLE_SID 是否与实际实例名一致
Linux/macOS 下常见错误是终端里 echo $ORACLE_SID 输出为空或错值;Windows 下则是 set ORACLE_SID 没生效或大小写不匹配(Oracle 对 SID 大小写敏感)。尤其多实例共存时,容易切错上下文。
- 确认真实实例名:查
$ORACLE_HOME/dbs/init<sid>.ora</sid>文件名,或看oradim -new命令中指定的-sid值 - 临时修正:
export ORACLE_SID=orcl(Linux)或set ORACLE_SID=orcl(Windows cmd) - 永久生效:Linux 修改
~/.bash_profile;Windows 在“系统属性 → 高级 → 环境变量”中添加 - 验证是否生效:在新终端中运行
sqlplus / as sysdba后执行show parameter instance_name,输出必须和ORACLE_SID完全一致
Linux 下验证共享内存是否已分配
Oracle 实例启动时会在内核中申请一块共享内存段(shm),如果没分配成功,startup 会静默失败或卡住,之后所有连接都触发 ORA-27101。不能只看 startup 命令有没有报错,得主动查。
- 运行
ipcs -m | grep oracle:应看到至少一条记录,且cpid(创建进程 PID)对应当前 Oracle 实例的oracle进程 - 若无输出,说明实例根本没成功分配 shm —— 很可能是因为
startup执行时ORACLE_SID错了,或用户权限不足(非oracle用户执行了startup) - 检查
/proc/sys/kernel/shmall和/proc/sys/kernel/shmmax:值太小会导致分配失败,尤其在 SGA 设置较大时;调整需 root 权限,且重启实例才生效
Windows 下服务未真正启动的典型表现
Windows 上容易混淆“OracleServicemounted 或 opened。常见于异常关机后服务自动拉起但实例未恢复。
- 进
services.msc,确认OracleService<sid></sid>和OracleOraDB<ver>home<n>TNSListener</n></ver>都是“正在运行” - 用管理员权限打开 cmd,执行:
sqlplus / as sysdba→shutdown immediate→startup - 若
startup卡住或报错,检查$ORACLE_BASE/diag/rdbms/<sid>/trace/alert_<sid>.log</sid></sid>最末几行,重点关注 ORA-00600、ORA-01157 类错误 - 极少数情况需重建服务:
oradim -delete -sid <sid></sid>→oradim -new -sid <sid> -startmode auto -pfile "<path>\init<sid>.ora"</sid></path></sid>
最容易被忽略的是:在 Linux 上改完 ORACLE_SID 或 ORACLE_HOME 后,没开新终端就直接跑 sqlplus,环境变量压根没加载;Windows 上则常忘记以管理员身份运行 cmd,导致 startup 权限不足而静默失败。这两个点不排查,其他操作全是白忙。


















