Oracle-12c

我應該使用什麼數據庫名稱來連接 Tomcat 和我的數據庫

  • March 7, 2019

我在 Oracle 中有一個轉儲文件,我應該使用 Oracle 12c。

我安裝了它,創建了一個數據庫並將轉儲導入表空間,但我無法將它與我在 Tomcat 上的應用程序連接起來。

我迷失在 Oracle 12c 中的所有名稱之間。我應該使用什麼使用者名來配置 Tomcat server.xml

在 Oracle 12c 中,您需要了解 4 個與名稱相關的關鍵概念:

  1. SID 或實例 ID。
  2. 數據庫名稱/數據庫唯一名稱
  3. 容器/可插入數據庫名稱
  4. 服務名稱

實例 ID 是唯一標識在一台伺服器上執行的一個數據庫實例的 ID。在 Linux 伺服器上,這通常在 $ ORACLE_SID variable, but also combined with $ ORACLE_HOME 唯一標識構成該數據庫的二進製文件和數據文件。

數據庫名稱是在創建數據庫時定義的(也可以在以後使用該nid工具進行更改)。這嵌入在該數據庫的數據文件中。數據庫名稱可以與實例 ID 相同或不同。在一台主機上執行多個同名數據庫是可能的。數據庫唯一名稱可以與獨立設置中的數據庫名稱相同或不同,但在數據保護設置中,每個數據庫必須具有不同的唯一名稱。

CDB/PDB。Oracle 12c 引入了可插拔數據庫的概念。有了這些,您就有了一個“主”數據庫(容器),您可以在其中插入/拔出一個或多個 PDB。這很重要,因為您不能再使用 SID 連接到可插拔數據庫 - 在同一個 SID 中可能有許多 PDB 打開。

服務名稱本質上更短暫。它們是一種結構,可用於分離、監控、控制和報告數據庫流量。它們可以動態創建或銷毀。要連接到 PDB,您必須使用(其中一個)數據庫服務。它們很有用,因為無論呼叫什麼數據庫實例,可用服務都可以保持不變。

服務為何有用的範例。在 dev/test/prod 環境中,如果我們使用 SID 連接到數據庫,我們需要將所有數據庫實例命名為相同,或者我們必須在環境之間更改配置文件。因為我們使用服務名稱,所以我們可以為實例命名我們喜歡的名稱,但要確保在所有 3 個環境中執行相同的服務。

預設情況下,當您創建實例時,您最終會得到一個與 SID + 域同名的服務。

例如:

SID = orcl
domain = oracle.com
default service name = orcl.oracle.com

因此,要回到您的問題,您幾乎肯定需要知道服務名稱。這通常可以通過執行(作為 oracle 使用者或您的環境中的等效使用者)找到(無論如何,在 Linux 實例上):

lsnrctl status

例如

Service "devcdb.xxxx.national" has 1 instance(s).
 Instance "devcdb", status READY, has 1 handler(s) for this service...
Service "devpdb1.xxxx.national" has 1 instance(s).
 Instance "devcdb", status READY, has 1 handler(s) for this service...

引用自:https://dba.stackexchange.com/questions/138189