[英]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_table
或SIMMBOT.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.