必须停所有Oracle进程后才能修改_ORACLE_BASE,因其写死在orainst.loc等多处且影响诊断目录结构;需用runInstaller重注册、迁移目录、更新DIAGNOSTIC_DEST参数并验证。
更改 _ORACLE_BASE 前必须停掉所有 Oracle 进程
oracle 不允许在数据库或监听器运行时修改 _oracle_base。这不是配置热更新项,而是影响整个实例启动路径、诊断日志位置、asm 配置等底层行为的根目录。强行改完就启库,大概率遇到 ora-01078、lrm-00109 或监听无法绑定地址。
- 先用
ps -ef | grep ora_和lsnrctl status确认无残留进程 - 停库顺序:先
sqlplus / as sysdba执行shutdown immediate,再lsnrctl stop - 检查
$ORACLE_HOME/network/admin/listener.ora中是否硬编码了旧_ORACLE_BASE路径(比如ADR_BASE行)
_ORACLE_BASE 不能只改环境变量就生效
改 ~/.bash_profile 里的 export _ORACLE_BASE=/new/path 只影响新 shell,对已安装的 Oracle Home 没用。Oracle 安装时已把 _ORACLE_BASE 写死进 $ORACLE_HOME/install/orainst.loc 和部分二进制元数据中。
- 必须用
runInstaller -updateNodeList ORACLE_HOME=$ORACLE_HOME "CLUSTER_NODES={}" -local(单机场景)触发重注册 - 更稳妥的做法是:备份原
_ORACLE_BASE下的diag、admin、cfgtoollogs目录,然后用cp -rp迁移整个旧基目录到新位置 - 迁移后手动编辑
$ORACLE_HOME/install/orainst.loc,把inventory_loc和inst_group下的路径同步更新
目录结构必须严格遵循 Oracle 官方规范
Oracle 对 _ORACLE_BASE 下子目录有强约定,不是随便建几个文件夹就能用。比如 admin/$ORACLE_SID 必须存在且可写,否则 CREATE DATABASE 会失败;diag/rdbms/... 缺失会导致 ADR 初始化失败,后续所有告警日志都丢失。
大小仅1兆左右 ,足够轻便的商城系统; 易部署,上传空间即可用,安全,稳定; 容易操作,登陆后台就可设置装饰网站; 并且使用异步技术处理网站数据,表现更具美感。 前台呈现页面,兼容主流浏览器,DIV+CSS页面设计; 如果您有一定的网页设计基础,还可以进行简易的样式修改,二次开发, 发布新样式,调整网站结构,只需修改css目录中的css.css文件即可。 商城网站完全独立,网站源码随时可供您下载
- 标准结构必须包含:
admin、cfgtoollogs、fast_recovery_area(如启用归档)、diag -
admin下需按$ORACLE_SID建子目录,内含adump(审计)、pfile(文本参数文件)等子目录 -
diag下层级不能手动生成,必须由sqlplus / as sysdba连入后首次执行ALTER SYSTEM SET DIAGNOSTIC_DEST='/new/base';触发自动创建
改完后验证 DIAGNOSTIC_DEST 和 BACKGROUND_DUMP_DEST 是否联动
很多人以为改了 _ORACLE_BASE 就万事大吉,结果发现 alert 日志还在老路径,或者 ADRCI 找不到问题包。这是因为 Oracle 11g+ 后,BACKGROUND_DUMP_DEST 等传统参数已被 DIAGNOSTIC_DEST 统一接管,而后者默认等于 _ORACLE_BASE —— 但仅限于数据库未显式设置过该参数时。
- 登录数据库后查:
SHOW PARAMETER diagnostic_dest,确认值为新_ORACLE_BASE - 若显示旧路径,执行:
ALTER SYSTEM SET DIAGNOSTIC_DEST='/new/oracle/base' SCOPE=SPFILE;,然后重启 - 检查
$ORACLE_HOME/rdbms/log是否还有残留的 trace 文件 —— 有说明某些后台进程仍引用旧路径,需排查listener.ora、tnsnames.ora或 crontab 中的脚本
orainst.loc 文件和 DIAGNOSTIC_DEST 参数的隐式继承关系 —— 这两点不处理,后续任何故障诊断都会绕回旧路径。









