ORACLE多版本数据库实例共存启动关闭时ORA-01804&SP2-0152-阿里云开发者社区

开发者社区> 数据库> 正文
登录阅读全文

ORACLE多版本数据库实例共存启动关闭时ORA-01804&SP2-0152

简介:     今天,由于特殊原因,需要重启数据库,理论上应该是很简单的事;事实情况是,一台linux服务器上,有4个Oracle实例,3个实例是11.2.0.4的,1个实例是10.2.0.5的。
    今天,由于特殊原因,需要重启数据库,理论上应该是很简单的事;事实情况是,一台linux服务器上,有4个Oracle实例,3个实例是11.2.0.4的,1个实例是10.2.0.5的。
重启时,11g的三个实例很简单,但是10g的实例重启时,发现sys无法登陆,报错如下:
    设置10g的环境变量
[oracle@linux ~]$ ps -ef|grep _ora10|grep smon
1102      4306     1  0 08:39 ?        00:00:00 ora_smon_ora10g
[oracle@linux ~]$export ORACLE_SID=ora10g
[oracle@linux ~]$ echo $ORACLE_SID
ora10g
[oracle@linux ~]$ export ORACLE_HOME=/u02/app/oracle/10.2.0/db_1
[oracle@linux ~]$ export PATH=$PATH:$ORACLE_HOME/bin
[oracle@linux ~]$ sqlplus sys/'eh8#5pK6' as sysdba
ERROR:
ORA-01804: failure to initialize timezone information
SP2-0152: ORACLE may not be functioning properly
[oracle@linux ~]$ 
    关于ORA-01804&SP2-0152报错,有资料说是环境变量问题,如果有数据库版本升级过,不排除环境变量设置不当引起ORA-01804,但是,我再三核实确保环境变量没问题;
真实原因是:11g的数据库操作系统管理用户是oracle,而10g的数据库操作系统管理用户是oracle10g。
    排查过程如下:
[root@linux ~]# cat /etc/passwd
oracle:x:1101:1000::/home/oracle:/bin/bash
oracle10g:x:1102:1000::/home/oracle10g:/bin/bash
[root@linux~]# ps -ef|grep smon
oracle    3856     1  0 08:35 ?        00:00:01 ora_smon_ora11a
oracle    3988     1  0 08:36 ?        00:00:00 ora_smon_ora11b
oracle    4119     1  0 08:37 ?        00:00:00 ora_smon_ora11c
1102      4306     1  0 08:39 ?        00:00:00 ora_smon_ora10g
root      5836  5758  0 09:50 pts/3    00:00:00 grep smon
[root@linux~]# 
    根据以上信息,可知3个11g的实例的管理用户是oracle,而10g的实例管理用户是oracle10g,但是很奇怪的是,查看进程启动的用户时,10g的却显示用户的主组、11g的显示用户名。
    找到原因,解决方法很简单,就是切换到oracle10g用户下,然后sys用户就可顺利登陆:
[root@linux ~]# su - oracle10g
[oracle10g@linux ~]$ sqlplus sys/eh8#5pK6 as sysdba
SQL*Plus: Release 10.2.0.5.0 - Production on Thu Jul 21 09:56:10 2016
Copyright (c) 1982, 2010, Oracle.  All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> 
    附:通过如下命令,可以查看显示主组用户的用户名
[oracle10g@linux ~]$ cat /etc/passwd|grep 1102
oracle10g:x:1102:1000::/home/oracle10g:/bin/bash
[oracle10g@linux~]$
    问题解决!

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
数据库
使用钉钉扫一扫加入圈子
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

其他文章