一個看似詭異的Oracle連線問題
我們知道Oracle在啟動的時,fork程式會根據ORACLE_SID來建立相關後臺程式,而在Unix和Linux系統中,ORACLE SID和ORACLE_HOME在一起雜湊後會得到一個唯一的值作為SGA的key。
所以我丟擲一個蠻有意思的問題,在同一臺伺服器上,存在10g,11g多個ORACLE_HOME,是可以建立多個同名的Oracle例項,而如果在同一個使用者下(比如作業系統使用者是oracle),是否可能建立出兩個同名的例項來?
我想你的腦海中已經有了答案。我換一個角度來說明是否可以。透過一個蠻有意思的DG配置問題。
我在使用RMAN的duplicate搭建備庫的時候丟擲了下面的一個錯誤。
RMAN> duplicate target database for standby from active database nofilenamecheck;
Starting Duplicate Db at 2017-08-03 10:40:42
RMAN-03002: failure of Duplicate Db command at 08/03/2017 10:40:42
RMAN-05501: aborting duplication of target database
RMAN-06403: could not obtain a fully authorized session
RMAN-04006: error from auxiliary database: ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Linux-x86_64 Error: 2: No such file or directory
看錯誤很明顯,備庫是被啟動,找不到記憶體結構了。
但是實際上檢視資料庫程式,是沒有問題的。
而我根據服務名嘗試連線,下面的結果讓我大跌眼鏡。
sqlplus sys@s2Queuedb as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on Thu Aug 3 10:41:53 2017
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Enter password:
Connected to an idle instance.
這是哪裡的問題呢,是不是例項名有大小寫的拆吧呢,在我的印象中似乎沒有。那我索性就在這個視窗下嘗試啟動,沒想到還真起來了一個新的例項。
SQL> startup nomount
ORACLE instance started.
Total System Global Area 9620525056 bytes
Fixed Size 2261368 bytes
Variable Size 2248150664 bytes
Database Buffers 7348420608 bytes
Redo Buffers 21692416 bytes
你看這下同一個使用者下有兩個同名的例項了。
$ ps -ef|grep smon|grep -v grep
oracle 43259 1 0 10:39 ? 00:00:00 ora_smon_Queuedb
oracle 43337 1 0 10:44 ? 00:00:00 ora_smon_Queuedb
到了這裡,不要以為是bug,也不要認為以前的這些基礎知識都不奏效了。我們梳理一下思路。
首先ORACLE_SID是統一的,是同一個,而不同之處就是ORACLE_HOME了。而這個資料庫環境我只安裝了一個版本的資料庫環境,所以不存在多個ORACLE_HOME,所以這個問題讓我很糾結,我們繼續來看看ORACLE_HOME的情況,可以檢視環境變數的值。
$ cat /proc/43259/environ |xargs -0 -n1 |grep ORACLE_HOME
ORACLE_HOME=/U01/app/oracle/product/11.2.0.4
檢視另外一個例項的ORACLE_HOME變數的值。
$ cat /proc/43337/environ |xargs -0 -n1 |grep ORACLE_HOME
ORACLE_HOME=/home/U01/app/oracle/product/11.2.0.4
到了這裡,似乎有了眉目,原來是ORACLE_HOME不一樣。
而問題到了這裡還是有些奇怪,因為/home/U01和/U01是指向的同一個目錄。他們代表的含義是一樣的。
lrwxrwxrwx 1 root root 9 Aug 1 17:53 U01 -> /home/U0
這個問題到了這裡該這麼解釋呢,我們繼續理一下思路。我們在RMAN使用duplicate的時候是使用TNS連線方式的,那麼TNS連線在連線本地例項的時候指向了另外一個例項(儘管剛開始這個例項不存在),那麼本地的連線配置其實還是在listener.ora裡面。
開啟靜態註冊的內容,這樣一看就很清楚了。
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = Queuedb)
(ORACLE_HOME = /home/U01/app/oracle/product/11.2.0.4)
(SID_NAME = Queuedb)
)
)
所以瞭解了這個問題,我們可以換個思路想想有什麼場景可以把這個特點發揚光大,在一些特定的場景中起到神助攻的作用。
至少在之前的資料遷移中,我是使用多個版本的ORACLE_HOME來達到同伺服器多例項的切換,能夠極大的提高資料遷移的效率。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-2143055/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- IIS連線ORACLE的一個問題Oracle
- 一次詭異的Oracle使用者無法su問題Oracle
- 一個詭異的 Pulsar InterruptedException 異常Exception
- 一次詭異的MySQL問題處理故事MySql
- 介面詭異的404問題記錄
- 很詭異的博弈問題分析方法
- 一個詭異容器內的tcp_max_tw_buckets核心引數的問題TCP
- 請問一個jndi連線的小問題
- 關於 SAP ABAP gateway OData 的一個詭異問題及解決辦法Gateway
- 記錄一次詭異的拼接sql不生效問題SQL
- python 詭異問題求助各位大哥Python
- 由optimizer_switch所引起的詭異問題
- JDBC連線ORACLE問題JDBCOracle
- 兩個看似奇怪的MySQL語句問題MySql
- 一個執行緒罷工的詭異事件執行緒事件
- 連線oracle中出現的問題Oracle
- 記錄一個mysql連線慢的問題MySql
- 一個資料庫連線池的問題資料庫
- 詭異的無線網路卡Down
- 使用RMAN report need backup命令檢查備份時遇到一個詭異的問題
- 解密詭異併發問題的幕後黑手:可見性問題解密
- 利用sys schema解決一次詭異的語句hang問題
- 問個jrun連線池的問題
- 記一次詭異的Oracle查詢轉換Oracle
- 一個詭異的MySQL查詢超時問題,居然隱藏著存在了兩年的BUGMySql
- 一次詭異的線上資料庫的死鎖問題排查過程資料庫
- navicate oracle 連線報錯問題Oracle
- 串列埠使用Pipeline時詭異的ReadOnlySequence問題串列埠
- 記錄 openssl 證書驗證失敗的詭異問題
- 一個資料庫連線問題!請教高手資料庫
- 監控資料庫連線遇到的一個小問題資料庫
- 解決oracle網路連線問題Oracle
- 最近遇到的RAC的一個例項無法連線的問題
- 各位十一好,問一個有關weblogic 8的連線池的問題Web
- Mysql6.0連線中的幾個問題MySql
- 一個非常離奇關於LINUX SSH連線的問題Linux
- MySQL update一個詭異現象的分析--個人未分析出MySql
- 一個簡單的MySQL引數導致的連線問題解惑MySql