您好,登錄后才能下訂單哦!
今天小編給大家分享一下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來達到同服務器多實例的切換,能夠極大的提高數據遷移的效率。
以上就是“Oracle連接問題實例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。