ORACLE資料庫中ORACLE_SID與INSTANCE_NAME的差異

来源:https://www.cnblogs.com/kerrycode/archive/2023/04/06/17294422.html
-Advertisement-
Play Games

ORACLE資料庫中ORACLE_SID與INSTANCE_NAME在概念和意義上有什麼異同呢?下麵簡單來總結概況一下,很多時候,不少人都搞不清楚兩者的異同,甚至認為兩者是等價的。 ORACLE_SID與INSTANCE_NAME的異同 ORACLE_SID參數是操作系統的環境變數,用於和操作系統進 ...


ORACLE資料庫中ORACLE_SID與INSTANCE_NAME在概念和意義上有什麼異同呢?下麵簡單來總結概況一下,很多時候,不少人都搞不清楚兩者的異同,甚至認為兩者是等價的。

ORACLE_SID與INSTANCE_NAME的異同

ORACLE_SID參數是操作系統的環境變數,用於和操作系統進行交互。也用於定義一些資料庫參數文件的名稱。

例如 init<ORACLE_SID>.ora ,spfile<ORACLE_SID>.ora等。

有些目錄名稱也跟ORACLE_SID有關。例如參數core_dump_dest對應的目錄中會包含ORACLE_SID名稱的文件夾(mydb)。

SQL> show parameter core_dump_dest

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
core_dump_dest                       string      /opt/oracle19c/diag/rdbms/mydb
                                                 /mydb/cdump
SQL

另外,ORACLE_SID其實主要用於本地連接,例如,一臺伺服器上有多個Oracle實例,我們必須使用ORACLE_SID來識別區分。它的值一般位於/etc/oratab,~/.bash_profile中,不同操作系統可能有所不同。後面我們會詳細講述。

INSTNACE_NAME是參數文件(pfile&spfile)中的一個初始化參數,它用來標識資料庫實例的名稱,其預設值就是ORACLE_SID,所以很多時候我們認為實例名就是ORACLE_SID, 不同的實例可以擁有相同的INSTANCE_NAME。官方文檔的解釋如下:

Note: The SID identifies the instance's shared memory on a host, but may not uniquely distinguish this instance from other instances.

實例的SID

註:資料庫實例的SID標識主機上實例的共用記憶體,但不能將此實例與其他實例區分開來。

總統來說,INSTANCE_NAME是Oracle資料庫參數。而ORACLE_SID是操作系統的環境變數。 預設情況下,INSTANCE_NAME和在環境變數裡面配置的ORACLE_SID是同樣的名稱。(註:正是由於這個原因,網上有些資料說SID就是INSTANCE_NAME,但是需要註意的是,實際上INSTANCE_NAME不等於ORACLE_SID。前者是資料庫層面的概念,後者是操作系統中環境變數的設置。)

ORACLE_SID is used to distinguish this instance from other Oracle Database instances that you may create later and run concurrently on the same host computer. The maximum number of characters for ORACLE_SID is 12, and only letters and numeric digits are permitted. On some platforms, the SID is case-sensitive.

INSTANCE_NAME與ORACLE_SID預設情況下是相同的。其實ORACLE_SID與INSTANCE_NAME本來沒有什麼關係。當操作系統與資料庫交互時,用的是ORACLE_SID,而當外部連接於資料庫進行交互時用的是INSTANCE_NAME。當同一臺伺服器安裝了多個資料庫時,操作系統利用ORACLE_SID來區分不同實例的進程,而當我們與這台伺服器的不同的資料庫進行連接時,用INSTANCE_NAME來決定具體連接哪個資料庫:在監聽器動態註冊時還會用於向監聽器註冊

另外,需要註意的是v$instance下instance_name與參數instance_name的區別,v$thread中instance與instance_name的區別,下麵我們來演示一下:

echo $ORACLE_SID
mydb
$ env |grep ORACLE_SID
ORACLE_SID=mydb

SQL> set linesize 640;
SQL> select instance_name from v$instance;

INSTANCE_NAME
----------------
mydb

1 row selected.

SQL> select instance from v$thread;

INSTANCE
------------------------------------------------------------------
mydb

1 row selected.

SQL> show parameter instance_name;

NAME                                 TYPE        VALUE
------------------------------------ ----------- -----------------
instance_name                        string      mydb
SQL>

然後我們修改一下參數instance_name的值:

SQL> alter system set instance_name=kerry_test scope=spfile;

重啟資料庫實例後,我們再驗證確認一下啊。如下所示:

SQL> set linesize 640;
SQL> select instance_name from v$instance;

INSTANCE_NAME
----------------
mydb

1 row selected.

SQL> select instance from v$thread;

INSTANCE
--------------------------------------------------------------------
mydb

1 row selected.

SQL> show parameter instance_name;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
instance_name                        string      KERRY_TEST
SQL>
SQL> col value for a30;
SQL> select value from v$parameter where name='instance_name';

VALUE
------------------------------
KERRY_TEST

1 row selected.

SQL>

如上所示,v$instance中的instance_name的值其實是ORACLE_SID的值,v$thread中的instance值也是ORACLE_SID的值,而不是參數instance_name的值。

查看ORACLE_SID的值

Window平臺

方法1:註冊表查看

HKEY_LOCAL_MACHINE > SOFTWARE > ORACLE> KEY_xxxxx

例子:

HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDB19Home1 下查看ORACLE_SID

方法2

echo %ORACLE_SID%

如果沒有設置環境變數的話,這個方法是無效的。一般我們需要通過註冊表來查看。如果沒有設置環境變數,我們可以使用命令設置當前視窗的ORACLE_SID值

set ORACLE_SID=gsp

方法3:

select instance from v$thread;

方法4:

select instance_name from v$instance;

Linux/Unix平臺

方法1: echo $ORACLE_SID

例子:

echo $ORACLE_SID
gsp

方法2:

ps -ef | grep ora_pmon_ | grep -v grep

例子:

如下所示,這個HP-UX上有兩個實例,你如果用方法1,只能看到當前的ORACLE_SID

$ ps -ef | grep ora_pmon_ | grep -v grep
oracle    5732     1  0 Sep06 ?        00:05:14 ora_pmon_hsfa
oracle   14458     1  0 Aug18 ?        00:05:55 ora_pmon_ctest

在多實例中切換,可以使用下麵命令:

export $ORACLE_SID=ctest

例子:當前環境的ORACLE_SID為mydb

$ ps -ef | grep ora_pmon_ | grep -v grep
oracle   32272     1  0 17:07 ?        00:00:01 ora_pmon_mydb

方法3:

/etc/oratab

註意,從配置文件/etc/oratab查詢ORACLE_SID,只能說可以,並不一定就能準確找出,例如,多實例的環境。這個只是僅供參考的方法。

方法4:

select instance from v$thread;

方法5:

select instance_name from v$instance;
掃描上面二維碼關註我 如果你真心覺得文章寫得不錯,而且對你有所幫助,那就不妨幫忙“推薦"一下,您的“推薦”和”打賞“將是我最大的寫作動力! 本文版權歸作者所有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接.
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 數組 ​ 數組是具有相同唯一類型的一組已編號且長度固定的數據項序列(這是一種同構的數據結構);這種類型可以是任意的原始類型例如整形、字元串或者自定義類型(結構體、介面)。數組長度也是數組類型的一部分,所以[5]int和[10]int是屬於不同類型的。 :star::在其他語言中數組大多是引用類型,但 ...
  • 前言 一、人物簡介 第一位閃亮登場,有請今後會一直教我們C語言的老師 —— 自在。 第二位上場的是和我們一起學習的小白程式猿 —— 逍遙。 二、構成和表示方式 關係運算符的作用是判斷符號兩邊大小的關係 C語言中的關係運算符主要有六個,如下表所示 | 運算符 | 名稱 | 示例 | 描述 | | : ...
  • 大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是利用i.MXRT1xxx系列ROM集成的DCD功能可輕鬆配置指定外設。 關於 i.MXRT1xxx 系列晶元 BootROM 中集成的 DCD 功能這個話題,痞子衡早就想寫了,但是一直沒有動筆,畢竟這個話題比較生澀,單獨講會比較枯燥。最 ...
  • 在安裝Mac電腦應用程式的時候,經常會遇到“xxx.app已損壞,打不開。您應該將它移到廢紙簍“或”打不開的xxx.app,因為它來自身份不明的開發者”,如圖: 遇到上述情況是不是真的要移動到廢紙簍呢?下麵小編就為您帶來Mac應用程式無法打開提示不明開發者或文件損壞的處理方法,解答Mac應用程式無法 ...
  • 作者:袁首京 原創文章,轉載時請保留此聲明,並給出原文連接。 技術人員多數又呆板又花心不長久。我知道你可能已經厭倦了 Docker,但是系統還沒有複雜到需要高攀 K8S 的地步。那我建議您,有空的話可以約一下 Podman。 Podman 使用起來是足夠簡單的,直接把它當做改了名字的 Docker ...
  • 1. HAVING子句的用法 1.1. 學習SQL時最大的阻礙就是我們已經習慣了的面向過程語言的思考方式(排序、迴圈、條件分支、賦值等) 1.2. 只有習慣了面向集合的思考方式,才能真正地學好它 1.3. 幫助我們順利地忘掉面向過程語言的思考方式並理解SQL面向集合特性的最為有效的方法 1.4. H ...
  • # 大數據開發基礎學習編程語言往往是我們開啟學習之路的第一大步。大數據領域的很多框架都是基於Java語言開發的,而且各種框架也都提供了Java API來提供使用和操作介面,所以Java語言的學習逃不掉。除此之外Scala在必要時也可以學一下,在大數據開發領域里用得還是挺多的。Scala語言的表達能力 ...
  • 數據管理技術的發展 第一節 資料庫技術發展概述 數據模型是資料庫系統的核心和基礎 以數據模型的發展為主線,資料庫技術可以相應地分為三個發展階段: 第一代的網狀、層次資料庫系統 第二代的關係資料庫系統 新一代的資料庫系統 一、第一代資料庫系統 層次資料庫系統 層次模型 網狀資料庫系統 網狀模型 層次模 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...