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

时间:2015-03-10 17:31:06

标签: database oracle oracle11g listener rhel

因此,我将首先说明我已将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

3 个答案:

答案 0 :(得分:1)

检查ipcs命令的输出并尝试删除Oracle拥有的所有共享内存段/信号量。

当Oracle启动时,它使用两个字符串ORACLE_SID(大写)和ORACLE_HOME,对这两个字符串进行哈希处理,并使用此哈希值作为shmget调用的键。因此,即使您将斜杠/附加到ORACLE_HOME,一切都与Oracle的观点不同 - 即使磁盘路径相同。

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

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

对于标准版/企业版,将二进制文件复制到不同的Oracle主页并不是问题。

答案 1 :(得分:0)

签入/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 start

答案 2 :(得分:-1)

问题在tsnnames.ora中是一个错误的条目(我添加了一条不应该存在的行)以及我/ oracle目录的权限不正确。感谢所有试图提供帮助的人,非常感谢。