移动了 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 开始
所以我首先要声明我已将 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 开始