移动了 Oracle 11.2 XE 数据库目录,连接到空闲实例

Moved Oracle 11.2 XE Database Directory, Connected to Idle Instance

所以我首先要声明我已将 Oracle 11.2 XE 的常规安装位置移动到我在 RHEL 6.6 服务器上创建的逻辑卷 (/oracle)。关闭数据库和 Oracle 侦听器后,我执行了...

$ cp -R /u01/app/* /oracle
$ rm -rf /u01/app/oracl
$ ln -s /oracle/oracle /u01/app/oracle

然后重启监听器和数据库。现在,当我尝试 运行 作为用户 'oracle' 以下内容时,我收到一条消息...

$ sqlplus
Enter user-name: sys / as sysdba
Enter password: ****
Connected to idle instance.

此外,当我尝试启动时出现错误。

> startup
ORA-45301: XE Edition single instance violation error

我已尝试 here 找到的解决方案但无济于事。

这是我的侦听器控制器的输出:

bash-4.1$ lsnrctl status

LSNRCTL for Linux: Version 11.2.0.2.0 - Production on 10-MAR-2015 10:26:25

Copyright (c) 1991, 2011, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC_FOR_XE)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.2.0 - Production
Start Date                10-MAR-2015 10:25:57
Uptime                    0 days 0 hr. 0 min. 28 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Default Service           XE
Listener Parameter File   /u01/app/oracle/product/11.2.0/xe/network/admin/listener.ora
Listener Log File         /u01/app/oracle/diag/tnslsnr/dev/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC_FOR_XE)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=dev)(PORT=1521)))
Services Summary...
Service "PLSExtProc" has 1 instance(s).
  Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully

对于接下来要尝试什么,我真的很迷茫。我知道我可以重新安装并将目录保存在适当的位置,但我需要它位于它自己的逻辑卷中。

编辑

一些进一步的信息来帮助澄清我的系统...

bash-4.1$ env | grep ORA
ORACLE_SID=XE
ORACLE_BASE=/oracle/oracle
ORACLE_HOME=/oracle/oracle/product/11.2.0/xe

bash-4.1$ env | grep TNS
TNS_ADMIN=/oracle/oracle/product/11.2.0/xe/network/admin

bash-4.1$ ps -aux | grep pmon
oracle    2431  0.0  0.2 1265956 16652 ?       Ss   11:43   0:00 xe_pmon_XE

进一步编辑

尝试使用 SYSTEM 用户登录 sqlplus 返回错误:

ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Linux-x86_64 Error: 2: No such file or directory

进一步编辑

ipcs 命令的输出

bash-4.1$ ipcs

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status
0xc0a59444 32768      oracle     660        4096       0

------ Semaphore Arrays --------
key        semid      owner      perms      nsems
0xd4a9963c 229378     oracle     660        104
0x884d8f34 491523     oracle     660        104

------ Message Queues --------
key        msqid      owner      perms      used-bytes   messages

检查 ipcs 命令的输出并尝试删除 Oracle 拥有的所有共享内存 segments/semaphores。

当 Oracle 启动时,它使用两个字符串 ORACLE_SID(大写)和 ORACLE_HOME,散列这两个字符串并将此散列值用作 shmget 调用的键。因此,即使您将斜杠 / 附加到 ORACLE_HOME,从 Oracle 的角度来看,一切都是不同的 - 即使磁盘路径相同。

所以我认为您将 ORACLE_HOME 移到了其他位置,但旧值保留在某处,现在 Oracle 认为您正在尝试启动多个实例。

已编辑:我不确定 XE,但普通的 Oracle 版本是作为一堆 .o 目标文件提供的。这些文件是在安装过程中 link 编辑的,但您也可以随时重新 link Oracle。检查脚本 $ORACLE_HOME/bin/relink 是否硬编码了旧的 ORACLE_HOME。然后通过执行 relink all 尝试重新 link 所有库。另请注意,Oracle 使用 link 选项 -Wl,-rpath=...,因此某些 Oracle 二进制文件中编译了库搜索补丁。

对于 Standard/Enterprise 版本,将二进制文件复制到不同的 Oracle 主目录没有问题。

问题是 tsnnames.ora 中的错误条目(我添加了一行不应该出现的内容),而且我的 /oracle 目录的权限也不正确。感谢所有试图提供帮助的人,非常感谢。

签入 /u01/app/oracle/product/11.2.0/xe/dbs/ 如果您重命名了 XE 数据库或试图创建一个新数据库,则必须确保 xe 只知道一个数据库。它仅限于一个实例。 /etc/init.d/oracle-xe 停止 cd /u01/app/oracle/product/11.2.0/xe/dbs/ 将任何未使用的 pwfile 和 spfile 重命名为 .old /etc/init.d/oracle-xe 开始