2010-07-01 101 views
2

我正在研究如何在Oracle上使用JBoss 5.1.0GA,並看到this,警告我應該明確聲明應該創建TIMERS表的模式的名稱,因爲Oracle不會允許相同的表名使用兩次,即使在模式之間也是如此。Oracle模式表名限制

閱讀本文後,我在StackOverflow上看到this question,並希望對Oracle中對象的層次結構進行一些說明。

假設我們有一個Oracle數據庫服務器。在此範圍內,我們創建了兩個數據庫 - D1和D2。在每個數據庫中,我們創建兩個模式 - S1和S2。

+-D1 
| +---S1 
| | +---T1 
| +---S2 
|  +---T2 
+-D2 
    +---S1 
    | +---T3 
    +---S2 
     +---T4 

我是在想,如果我再添加一個名爲T1 D1/S2內的另一個表,它不會因爲工作糾正:通過對T4 T1 - 每個數據庫上的每個模式裏面,我們創建一個單一的表表格名稱在模式中必須是唯一的,並且T1已經存在於D1/S1中,但是如果我將T1添加到D2/S1或D2/S2中,這樣會很好,因爲名爲T1的兩個表格在不同的數據庫中?

我有一種討厭的感覺,認爲我對Oracle模式的理解是有缺陷的(這不是我之前用過的很多的數據庫),所以我很抱歉如果我問的是愚蠢的問題。

在此先感謝

豐富

回答

4

Oracle中不存在數據庫分層級別:一個實例(進程集)最多隻能安裝一個數據庫(文件集)。在數據庫中,您會發現與Oracle中的用戶相同的架構。

每個模式都有一個獨立的命名空間,例如,模式S1S2都可以在同一個數據庫中有一個名爲T1的表。您將通過使用其所有者作爲前綴特別訪問這些表:S1.T1S2.T1

某些對象沒有所有者(或其所有者是PUBLIC):例如,公共同義詞和目錄。這些對象的名稱在數據庫中顯然必須是唯一的。明智地使用公開的同義詞(在我看來),以避免名稱衝突。

+0

那麼對RedHat網站(這兩個鏈接中的第一個)的評論意味着什麼呢? – Rich 2010-07-01 13:13:10

+0

@Rich:也許'定時器'是一個公共同義詞? – 2010-07-01 13:15:58

+0

「但是,如果您連接到數據庫實例的用戶可以訪問這兩個表,那麼在訪問任何一個表時都需要小心,要明確引用特定模式中的表,請使用schema.table。」 - 我認爲這是問題所在。從http://stackoverflow.com/questions/1685775/oracle-same-table-name-on-different-schema – Rich 2010-07-01 13:19:59

1

至於甲骨文的話,你可以在兩個不同的模式相同的表名。可能有一些特定於您正在閱讀的JBoss使用情況,但這不是Oracle的限制。