[轉載]Oracle的幾個概念:數據庫名,全局數據庫名,SID,實例,命名空間,schema

常被oracle的幾個概念搞得很暈,和公司做pl/sql的同事討論後,又到網上搜索下,現將個人對這幾個概念的理解做個筆記:
先通俗的解釋下數據庫這個概念,數據庫就是存儲在磁盤上的文件,這些文件中保存的數據有一定的物理結構和邏輯結構。
數據庫名 就是數據庫的名稱標識,如myOracle, 這種叫法一般只適用於單機;
全局數據庫名 就是數據庫處於一個網絡中的名稱標識。比如數據庫宿主機的域爲mydomain,
則數據庫的全局數據庫名爲myOracle.mydomain;
實際上myOracle和myOracle.mydomain兩者指的是同一個數據庫.
即:全局數據庫名 = 數據庫名+"."+網絡位置(宿主機所在的域)
設定全域數據庫名稱
Oracle9i 的全域數據庫名稱由「數據庫名稱」與「網域名稱」所組成,其中「數據庫名稱」設定於 DB_NAME 起始參數,而「網域名稱」則是設定於 DB_DOMAIN 參數。這兩個參數合併之後就可以在網際網絡上唯一識別每一個 Oracle9i 數據庫。舉例來說,假設我們欲建立的 Oracle9i 數據庫之全域數據庫名稱爲 mydb.uuu.com.tw,那麼可在起始參數檔內設定下列兩參數:
DB_NAME = mydb
DB_DOMAIN = uuu.com.tw
 
 
Tips:
您可以執行 ALTER DATABASE RENAME GLOBAL_NAME 指令更改 Oracle9i 數據庫的全域數據庫名稱;在您更改 DB_NAME 與 DB_DOMAIN 這兩個起始參數後必須將 Oracle9i 數據庫重新激活纔會生效。此外,控制檔也必須重新建立。
 
關於 DB_NAME 起始參數
DB_NAME必須是文字字符串,且不能超過 8 個字符。在建立數據庫的過程中,DB_NAME設定值會記錄在資料文件、控制文件、以及重置日誌文件之中。如果您激活 Oracle9i Instance 的時候,起始參數檔內設定的DB_NAME不同於控制文件內所紀錄的,那麼數據庫將無法激活。
 
關於 DB_DOMAIN 起始參數
DB_DOMAIN通常是數據庫主機所在位置的網域名稱。如果您欲建立的數據庫將加入分佈式數據庫運算環境,請特別注意此參數的設定。
 
SID = Oracle實例
SID是Oracle實例的唯一名稱標識,
用戶去訪問數據庫,實際上是向某一個Oracle實例發送請求,oracle實例負責向數據庫獲取數據。
Oracle實例 = 內存結構+後臺進程,所以Oracle實例是臨時性的;
可以通過startup nomount去啓動實例,但是注意這時Oracle數據庫並沒有啓動,需要用open去啓動數據庫;
一個實例只能對應一個數據庫,一個數據庫可以用多個實例;
命名空間,有點複雜。
命名空間定義了一組對象類型,在命名空間裏,對象的名字必須是唯一的,當然,在不同的命名空間裏,是可以使用相同的的名字的。
下面的對象類型共享同一個命名空間:
• Tables
• Views
• Sequences
• Private synonyms
• Stand-alone procedures
• Stand-alone stored functions
• Packages
• Materialized views
• User-defined types
因此,如果數據庫中有一個表叫做myObject1,那麼就不能再創建一個叫做myObject1的視圖,至少,在一個schema中是不可能出現這種現象的;
下面的對象類型有各自的命名空間:
• Indexes
• Constraints
• Clusters
• Database triggers
• Private database links
• Dimensions
所以你可以創建一個叫做myObject1的索引,即使在相同的schema中;
不受Schema侷限的對象類型(Non schema objects)有它們自己的命名空間,如下:
• User roles
• Public synonyms
• Public database links
• Tablespaces
• Profiles
• Parameter files (PFILEs) and server parameter files (SPFILEs)
所以兩個Non-schema objects可以用相同的名字。
Schema是基於用戶的, 在數據庫中創建一個用戶,就創建了一個和用戶名相同的Shema。

Namespace是基於數據庫的.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章