2013-05-27 38 views
3

我在我的系統上安裝了Oracle,所以現在orcl是SID,它是我數據庫實例的唯一標識符。兩個用戶是否訪問相同的數據庫或不同?

現在啓動DB是作爲安裝的一部分創建。我使用系統帳戶創建了2個用戶user1和user2。

使用SQL開發人員,我訪問的用戶,這表明我所有的數據庫對象,如表,存儲過程等意見

所以

當使用這些2級的用戶,我在訪問2個不同的連接相同的數據庫?我通過登錄到user1或user 2來提供所有ddl命令,所有這些數據是否都進入相同的.dbf文件?

數據庫實例可以連接到一個數據庫,那麼這是否實質上意味着每次我創建一個新的數據庫,使數據庫實例指向的是,我需要做一個配置更改?

+0

不知道爲什麼有人會低估這個問題。我當然發現甲骨文的設置足夠令人困惑,當時沒有太多與其他技術有關的經驗讓我對術語和典型用法感到困惑。 – jpmc26

回答

2

在我與Oracle的經驗,分工的典型單位是一個模式。使用Oracle中的模式更像使用SQL Server或PostgreSQL中的數據庫。它們代表用戶和對象的邏輯分離。 物理分離通常會使用表空間完成。表空間是存儲數據的一組物理文件。模式可以共享或使用不同的表空間。每個模式有一個表空間是不常見的;他們通常共享幾個表空間或者甚至通常只有一個。

考慮到這一點,更直接地回答你的問題,

1)像任何其他數據庫,你可以指定模式的對象屬於:

CREATE TABLE MY_SCHEMA.TABLE_X (X NUMBER) 

如果兩個模式CREATE語句不同,那麼它會創建不同的對象。 Oracle的不同之處在於每個用戶的默認模式都會發生變化。默認模式始終是當前連接的模式/用戶。所以,如果你省略模式,像這樣:

CREATE TABLE TABLE_X (X NUMBER) 

那麼隱含的模式是當前連接的架構/用戶。因此,如果我以MY_SCHEMA的身份登錄,那麼上述內容等同於第一個示例。當作爲兩個不同的用戶的連接,則暗示架構將是不同的,並且是DDL不在兩個用戶之間等效。因此,如果您未指定模式,則運行相同的語句會創建兩個不同的對象

兩個對象可被存儲在相同的物理文件,如果他們是在相同的表空間。 (如果你沒有明確地創建一個,並且在創建模式時沒有指定不同的默認表空間,它們很可能在USERS表空間中。)無論如何,它們仍然是兩個完全獨立的對象。

如果指定的模式明確就像第一個例子,則DDL不管誰執行它(雖然權限可能會阻止某些用戶執行它)是等價的。所以它會導致一次創建對象,並且嘗試第二次創建該對象會導致錯誤,除非您使用CREATE OR REPLACE或類似的東西。

2)我不知道這個問題的答案,但正如我所說,在Oracle中,分離的基本單位通常是模式,而不是數據庫。我相信你所提出的問題是模式以他們的方式使用的原因的很大一部分。在同一機器/實例中擁有多個實際數據庫在Oracle中比在其他數據庫(如果不是不可能的話)困難得多,因此擁有包含多個模式的單個數據庫要簡單得多。

+0

很明顯,你的解釋是:「所以如果你執行的DDL忽略了兩個不同的用戶,那麼你會得到兩個不同的對象,但是如果DDL指定了模式,那麼它們就代表了同一個對象。指定模式使其成爲相同的對象或不同的對象?因爲這兩個對象在邏輯上是不同的部分 – Divas

+0

@ user2423793我編輯了我的答案。希望現在更清楚。對困惑感到抱歉。 – jpmc26

相關問題