Oracle的幾個概念:資料庫名,全域性資料庫名,SID,例項,名稱空間,schema
阿新 • • 發佈:2019-01-02
常被oracle的幾個概念搞得很暈,和公司做pl/sql的同事討論後,又到網上搜索下,現將個人對這幾個概念的理解做個筆記:
先通俗的解釋下資料庫這個概念,資料庫就是儲存在磁碟上的檔案,這些檔案中儲存的資料有一定的物理結構和邏輯結構。
資料庫名 就是資料庫的名稱標識,如myOracle, 這種叫法一般只適用於單機;
全域性資料庫名 就是資料庫處於一個網路中的名稱標識。比如資料庫宿主機的域為mydomain,
則資料庫的全域性資料庫名為myOracle.mydomain;
實際上myOracle和myOracle.mydomain兩者指的是同一個資料庫.
即:全域性資料庫名 = 資料庫名+"."+網路位置(宿主機所在的域)
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是基於資料庫的.