Oracle 11g: Как переопределить таблицы схем по умолчанию с тестовыми таблицами для моего тестового пользователя - PullRequest
1 голос
/ 22 августа 2011

Я знаю, что это можно сделать, потому что я видел это на моем последнем рабочем месте, но я не знаю, как копировать!

В основном, есть пользователь 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.У меня есть догадка, что вы не можете сделать это в настройках соединения ... так что, начиная с нуля, что мне нужно сделать, чтобы настроить тестовые таблицы, как это?Что-то вроде общей схемы?

1 Ответ

5 голосов
/ 22 августа 2011

Если ваш код использует полные имена таблиц (т. Е. 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...