繁体   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