1. 程式人生 > >Oracle的幾個概念:資料庫名,全域性資料庫名,SID,例項,名稱空間,schema

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 = mydbDB_DOMAIN = uuu.com.twTips: 您可以執行 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是基於資料庫的.