簡體   English   中英

Oracle 11g:如何為我的測試用戶用測試表覆蓋默認模式表

[英]Oracle 11g: How to override default schema tables with test tables for my test user

我知道這是可以做到的,因為我在上一個工作場所見過它,但是我不知道該如何復制!

基本上,有一個MASTER用戶對我們所有的表都有寫權限。 在應用程序的數據庫適配器連接設置中,我們使用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 我有一種直覺,您實際上無法在連接設置中執行此操作...因此,從第一方開始,我需要做些什么來設置這樣的測試表? 像共享架構一樣?

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

但是,假設您的代碼未使用完全限定的表名-如果僅從real_data_table選擇,那么Oracle將首先在當前模式中使用該名稱查找對象,然后使用該名稱查找公共同義詞。

如果以MASTER身份連接,則可以更改當前架構

ALTER SESSION SET current_schema = SIMMBOT

完成此操作后,所有對表名稱的不合格引用都將解析為SIMMBOT模式中的表。 請注意,需要分別授予MASTER用戶對SIMMBOT模式中的對象的適當訪問權限-設置當前模式僅會影響名稱解析,而不會影響特權。 SIMMBOT模式還需要具有代碼要引用的每個表-無法指定用於解析不合格名稱的層次結構。 您不能告訴Oracle首先解析SIMMBOT模式中的不合格名稱,然后再解析MASTER模式。

一種替代方法是為每個表創建同義詞,並操縱同義詞為某些或所有用戶引用您的表。 如果您的應用程序以不擁有任何對象的第三位用戶身份登錄(例如APP_USER ,則可以在APP_USER模式中創建指向兩個不同模式中不同對象的私有同義詞,

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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM