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文件中可以查到相關的說明。
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啟動了
本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/inthirties/archive/2009/09/17/4560897.aspx
今天正常啟動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了