首先介绍2个新名词
Automatic Diagnostic Repository (ADR)一个存放数据库诊断日志、跟踪文件的目录,称作ADR base,对应初始化参数DIAGNOSTIC_DEST,如果设置了ORACLE_BASE环境变量,DIAGNOSTIC_DEST等于 ORACLE_BASE,如果没有设置ORACLE_BASE,则等与ORACLE_HOME/log。
SQL> show parameter DIAGNOSTIC
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
diagnostic_dest string /oracle/oracle二.aelrt xml file
在oracle 11g中,alert文件的信息是以xml的文件格式存在的,另外提供了普通文本格式的alert文件。
这两份log文件的位置分别是V$DIAG_INFO中的Diag Alert 和Diag Trace 对应的目录。1.通过查询v$diag_info视图获得ADR相关的信息
代码:
sys@ora11g>select * from v$diag_info;
INST_ID NAME VALUE
------- ---------------------- ----------------------------------------------
1 Diag Enabled TRUE
1 ADR Base /oracle/u01/app/oracle
1 ADR Home /oracle/u01/app/oracle/diag/rdbms/ora11g/ora11g
1 Diag Trace /oracle/u01/app/oracle/diag/rdbms/ora11g/ora11g/trace
1 Diag Alert /oracle/u01/app/oracle/diag/rdbms/ora11g/ora11g/alert
1 Diag Incident /oracle/u01/app/oracle/diag/rdbms/ora11g/ora11g/incident
1 Diag Cdump /oracle/u01/app/oracle/diag/rdbms/ora11g/ora11g/cdump
1 Health Monitor /oracle/u01/app/oracle/diag/rdbms/ora11g/ora11g/hm
1 Default Trace File /oracle/u01/app/oracle/diag/rdbms/ora11g/ora11g/trace/ora11g_ora_3968.trc
1 Active Problem Count 0
1 Active Incident Count 0
11 rows selected.
2.其中Diag Trace对应的目录为文本格式的警告日志,及我们经常习惯使用的日志
代码:
ora11g@RHEL53 /oracle/u01/app/oracle/diag/rdbms/ora11g/ora11g/trace$ls -l alert_ora11g.log
-rw-r----- 1 oracle oinstall 72513 Feb 27 14:29 alert_ora11g.log
3.其中Diag Alert对应的目录为XML格式的警告日志
代码:
ora11g@RHEL53 /oracle/u01/app/oracle/diag/rdbms/ora11g/ora11g/alert$ls -l log.xml
-rw-r----- 1 oracle oinstall 327254 Feb 27 14:29 log.xml
4.我习惯将查看警告日志定义为同名alert在操作系统上直接查看
代码:
ora11g@RHEL53 /home/oracle$alias alert
alias alert='tail -200f $ORACLE_BASE/diag/rdbms/$ORACLE_SID/$ORACLE_SID/trace/alert_$ORACLE_SID.log'
5.使用同名进行查看
代码:
ora11g@RHEL53 /home/oracle$alert 错误现象
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
解决方案
假如TNSPING SID正常, 服务启动正常没有出现“启动中”这些现象
可以尝试
C:\>oradim -delete -sid sfis
C:\>oradim -new -sid sfis -startmode auto -pfile d:\pfile\initsfis.ora
或者
启动数据库
原因
Oracle Database的主机被异常关机,或者重新安装部分Oracle软件,造成SERVICE损坏,所以删除重建可以解决。
一. 问题描述
在一次数据库灾难恢复过程中,数据库恢复到一个新的环境里,并且数据库已经成功启动了,可以在服务器上登录与访问。但客户端在访问时却报了ORA-27101的错误,无法通过定义数据库连接串远程连接到这个数据库。在数据库服务器上,定义一个访问本地数据库的连接串,使用这个连接串连接也报同样的错误。
错误的现象与现场如下:
$export ORACLE_SID=Port
本地可以使用管理员登录,数据库为open状态
$sqlplus / as sysdba
SQL*Plus: Release 10.2.0.3.0 - Production on Fri Feb 18 09:44:01 2011
Copyright (c) 1982, 2006, Oracle.All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
SQL> select open_mode from v$database;
OPEN_MODE
----------
READ WRITE
服务器与客户端的连接串定义如下:
$more $ORACLE_HOME/network/admin/tnsnames.ora
。。。。。。
port =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST =10.192.215.77 )(PORT = 1522))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = port)
)
)
通过tnsping命令测试连接,服务器和客户端都是正常的,如下:
$ tnsping port
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST =10.192.215.77)(PORT = 1522)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = port)))
OK (90 msec)
通过sqlplus进行远程登录,报下面的错误:
$ sqlplus user1/pwd1@port
ERROR:
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
IBM AIX RISC System/6000 Error: 2: No such file or directory
Enter user-name:
二. 问题分析
首先检查数据库服务器的文件系统的操作权限,发现没有问题;
接着检查服务器的网络状况,也没有发现问题;
在ORACLE METALINK 网站上找到一遍文章,ID=122183.1,在该文中提到了listener.ora文件中,SID_NAME是大小写敏感的,如下:
Database Connections Fail With ORA-27101 Shared Memory Realm Does Not Exist [ID 122183.1]
For remote (TCP/listener) connections:
Review the listener.ora currently used to startup the listener and verify the ORACLE_HOME value is correct for all listed Oracle databases. If the ORACLE_HOME points to a different Oracle version then what was used when the database was created, then this error can occur.
Likewise, review the listener.ora currently used to startup the listener and verify the SID_NAME value is correct and has the right value (the SID_NAME is case sensitive).
检查数据库服务器的LISTENER.ORA文件,发现SID_NAME大小写书写错误了.
$more $ORACLE_HOME/network/admin/listener.ora
SID_LIST_LISTENER=
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = PORT)
(SID_NAME = PORT)
)
)
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.192.215.77)(PORT =1522))
)
而数据库的实例名称为Port,通过查询系统进程的名称可以确认
$ps -ef|grep ora
。。。。。。
oracle 19261210Dec 09- 16:12 ora_cjq0_Port
oracle22143610Dec 09- 13:55 ora_pmon_Port
oracle28695610Dec 09-7:41 ora_mman_Port
oracle29919010Dec 09- 15:24 ora_mmon_Port
到此找到了问题的根源,原来是数据库监听配置文件的内容配置不当(SID_NAME没有注意大小写),导致了通过定义数据库连接串无法远程访问数据库的故障
三. 问题解决
修改监听器配置文件,内容修改如下:
$more $ORACLE_HOME/network/admin/listener.ora
SID_LIST_LISTENER=
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = Port)
(SID_NAME = Port)
)
)
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.192.215.77)(PORT =1522))
)
重新启动监听器,如下:
$lsnrctl start listener
在服务器与客户端进行数据库连接,可以成功登录了,如下:
$ sqlplus user1/pwd1@port
SQL*Plus: Release 10.2.0.3.0 - Production on Fri Feb 18 09:44:01 2011
Copyright (c) 1982, 2006, Oracle.All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
问题等到解决,笔者重新查阅了ORACLE 的HELP 文档,在network相关的章节,找不到SID_NAME 需要注意大小写的说明,只能在METALINK文档中可以查到相关的说明。
我的数据库ora10g for linux停机后,重启启动正常,但应用程序联入数据库时失败报以下错:
Caused by: java.sql.SQLException: ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Linux Error: 2: No such file or directory
查询数据库是正常的已启动:
SQL> select status from v$instance;
STATUS
------------
OPEN
SQL>
通过仔细回想最近对数据库作了什么操作,仅修改过profile呀。原profile如下:
#oracle 10g
TMP=/tmp; export TMP
TMPDIR=$TMP; export TMPDIR
ORACLE_BASE=/ora10g/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/10.2/; export ORACLE_HOME
ORACLE_SID=ora10g; export ORACLE_SID
ORACLE_TERM=xterm; export ORACLE_TERM
PATH=/usr/sbin:$PATH; export PATH
PATH=$ORACLE_HOME/bin:$PATH; export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH
if [$USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
我在另一次oracle安装时发现ORACLE_HOME=$ORACLE_BASE/product/10.2/; export ORACLE_HOME这个设置会导致安装时自动识别出的$ORACLE_HOME会是
$ORACLE_BASE/product/10.2// 所以把原安装的数据库profile中的ORACLE_HOME=$ORACLE_BASE/product/10.2/;修改成了ORACLE_HOME=$ORACLE_BASE/product/10.2;最近将老数据重启之后就应用联不上了报上面的错:
Caused by: java.sql.SQLException: ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Linux Error: 2: No such file or directory
后来将其修改回来就好了。
不过在metalink上查到的都不是上面的解决办法,觉得很怪 刚重装了个Oracle 9, 今天用sqlplus连的时候报下面的error: > export ORACLE_SID=OTA26
> sqlplus /nologSQL*Plus: Release 9.2.0.7.0 - Production on Sat Jan 13 16:34:00 2007Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.SQL> conn GCSCADMIN/GCSCADMIN
ERROR:
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Linux Error: 2: No such file or directory
查了一下,发现oracle装在/opt/oracle/product/9ir2下,但是为了方便建立了一个link,是/opt/oracle/9.2.0。在listener.ora里设置的是 ORACLE_HOME=/opt/oracle/9.2.0,但是在用户的环境变量里设置的是 ORACLE_HOME=/opt/oracle/product/9ir2。这样虽然两个ORACLE_HOME指向了同一个目录,但是Oracle会认为这是两个不同的ORACLE_HOME,从而报错。 将用户环境变量和listener.ora里的ORACLE_HOME设成完全一样的就可以避免这个error ORA-27101: shared memory realm does not exist
2010-12-01 15:18:00| 分类:oracle问题| 标签:|字号大中小
csdn网友,求助
引用:
SQL> conn
请输入用户名: gzdw
输入口令:
ERROR:
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
SQL> conn /as sydba
已连接到空闲例程。
SQL> select * from v$instance
2 ;
select * from v$instance
*
第 1 行出现错误:
ORA-01034: ORACLE not available
SQL> select * from v$instance
这一句都出错,是很显然的问题,数据库连第一步nomount都还没有成功,
也就是load spfile文件还没有成功,
oracle在启动的时候,分为三步,详细可以参考帖子
层层深入,步步探究-Oracle的启动模式详探
原因可能是
1. spfile文件损坏,根据你的提示应该不是
2. 内存设置过大,很有可能是这个问题。
解决方法
SQL> create pfile='c:mypfile.ora' from spfile;
File created.
把你的spfile文件导出到指定的pfile文件,打开pfile文件
修改其中的内存选项
sga_target和sga_max_size选项,选择小一些,修改好后,保存
然后运行
SQL>startup pfile='c:mypfile.ora' nomount; 尝试启动到nomount
如果可以启动到nomount,表示我们已经修改成功,
备份你的spfile文件,spfile文件在ORACLE_HOME/database下
备份后
运行
SQL>create spfile from pfile='c:mypfile.ora';
用pfile生成新的spfile文件。
现在可以shutdown immediate
然后用
SQL>startup q启动了
今天正常启动Oracle服务后,打开SQL*Plus,用SCOTT登录时提示:
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist。
从网上搜了一下,原因肯定是哪个启动参数出了问题。于是按照如下的步骤解决:
1: 用SYS用户登录:conn / as sysdba
2:从SPFILE文件创建PFILE文件(因为SPFILE文件是二进制的,而PFILE是文本文件)
create pfile='d:\aa.ora' from spfile;
3: 打开aa.ora文件,适当修改某些参数。
4:从修改后的PFILE文件创建SPFILE文件
create spfile from pfile='d:\aa.ora';
5: 打开数据库
startup
注意:1:最好在修改修文件前先备份一下。
2:如何判断哪个参数不正常呢?可以在修改前先STARTUP一下,应该有提示
问题描述
=======
在试图启动或连接数据库的时候 ,Oracle报告下列错误:
ERROR:
ORA-27101 Shared memory realm does not exist
ORA-01034 ORACLE not available
基本解释
=======
Error: ORA-27101
Text: shared memory realm does not exist
-------------------------------------------
Cause: Unable to locate shared memory realm
Action: Verify that the realm is accessible
原因:
机器加入了域,或者安装了多个实例
如何解决
=======
这个问题其实用一句话就可以说清楚:
ORACLE_HOME或者ORACLE_SID设置不正确。
在以前的版本中,如果 ORACLE_SID不正确,一般都只提示ORA-01034。Oracle 8.1.7 给出一个额外的信息:ORA-27101。
->如果是Unix,在Shell里把ORACLE_SID设置正确即可(注意大小写敏感的问题)。
此外,检查ORACLE_HOME环境变量。如何检查参考如下的命令:
% echo $ORACLE_SID
% ps -ef |grep smon
->如果是Windows,一般都是因为系统中有多个实例造成的。
可以在命令行下 C:\>set ORACLE_SID=DEMO
把这里的 DEMO换为你相应的实例名。
如果还不行的话,检查注册表中的 ORACLE_HOME。
此外,在Windows环境下有的时候连接不上远程的数据库,会报告如此的错误。
解决办法是把 sqlnet.ora文件中的
SQLNET.AUTHENTICATION_SERVICES = (NTS) NTS换为NONE.
或者使用Net Assistant进入后 本地->概要文件->Oracle Advanced Security选项卡把NTS从右边删除掉。
最后重新启动数据库或者重新启Oracle的服务就OK了