2011-08-22 59 views
1

我知道這是可以做到的,因爲我在我的最後一個工作場所看到它,但我不知道如何複製!的Oracle 11g:如何覆蓋與測試表中的默認模式中的表爲我的測試用戶

本質上說,誰擁有寫入權限對我們的所有表一個主用戶。在我們的應用程序的數據庫適配器連接設置,我們使用DEFAULT_SCHEMA: MASTER

我創建了一個新的測試用戶爲自己(在同一個數據庫作爲主用戶,不使用數據庫鏈接),這樣我可以自由創建的測試數據不搞亂與真實的數據。然後複製一個表,我的測試用戶,這樣我可以自由地操縱數據:create table SIMMBOT.real_data_table as select * from MASTER.real_data_table

的問題是,我不知道如何來建立連接,從而使Oracle知道要覆蓋MASTER.real_data_table我自己SIMMBOT.real_data_table。我有一種預感,你不能在連接設置中做到這一點......所以從第一個開始,我需要做些什麼來設置這樣的測試表?像共享模式一樣?

回答

5

如果您的代碼使用的是完全限定的表名(即MASTER.real_data_tableSIMMBOT.real_data_table),那麼從配置的角度來看,無法更改要引用的對象。

但是,假設您的代碼沒有使用完全限定的表名 - 如果它只是從real_data_table中選擇,那麼Oracle將首先在該模式中查找具有該名稱的對象,然後查找公有同義詞用那個名字。

如果連接爲MASTER,你可以改變當前模式

ALTER SESSION SET current_schema = SIMMBOT 

一旦你做到了這一點,在表名都不合格引用將解決在SIMMBOT模式表。請注意0​​用戶需要分別授予對SIMMBOT模式中對象的適當訪問權 - 設置當前模式隻影響名稱解析,而不影響特權。 SIMMBOT模式也需要讓代碼想要引用的每個表 - 無法指定用於解析不合格名稱的層次結構。您不能告訴Oracle首先解決SIMMBOT架構中的非限定名稱,然後解決MASTER架構。

另一種方法是創建每個表的同義詞和操縱的同義詞來引用您的表的部分或全部用戶。如果您的應用程序的登錄身份不擁有任何objects-- APP_USER爲example--您可以創建在APP_USER模式,它指出,不同的對象不同schemas--私人同義詞的第三個用戶

CREATE SYNONYM app_user.real_data_table FOR simmbot.real_data_table; 
CREATE SYNONYM app_user.some_other_table FOR master.some_other_table; 

或你可以創建一個能夠適用於所有用戶(除了那些擁有的對象)公共同義詞

CREATE PUBLIC SYNONYM real_data_table FOR simmbot.real_data_table; 
CREATE PUBLIC SYNONYM some_other_table FOR master.some_other_table; 
相關問題