Изменение схемы Oracle во время выполнения при использовании SubSonic - PullRequest
0 голосов
/ 03 декабря 2009

В моем проекте я использую Oracle Database и SubSonic для DAL. У меня проблема с SubSonic и Oracle Schema, а именно:

При разработке я использовал схему DEV в Oracle Database и генерировал DAL с использованием SubSonic. После этого при выпуске клиенту он использовал новую схему TEST в Oracle Database и изменил строку подключения в app.config для подключения к Oracle. Появится ошибка: «Таблица или представление не существует». Я нашел эту ошибку и вижу, что схема таблиц все еще DEV. Я не хочу, чтобы повторно генерировать DAL после изменения схемы и когда выпущено для клиента. Пожалуйста, помогите мне.

Ответы [ 2 ]

0 голосов
/ 08 декабря 2009

Гари прав, что не использует DEV в качестве схемы на своей машине. При использовании Oracle мы обычно устанавливаем схему как то, что клиент собирается назвать своей схемой. Это, однако, не решает вашу проблему. Что вам нужно сделать, это создать глобальный псевдоним в Oracle, который отображает сообщение DEV в CLIENTSCHEMA Вы все равно должны переименовать схему на своем компьютере, но это позволит вашей схеме отличаться от ваших клиентов.

0 голосов
/ 04 декабря 2009

Во-первых, ваша схема не должна быть DEV. DEV - это пользователь или роль. Ваше имя схемы должно быть связано с содержанием данных (например, АККАУНТЫ или ПРОДАЖИ)

Во-вторых, подумайте, собираетесь ли вы или клиент решать имя схемы. Скажем, у вас есть продукт под названием FLINTSTONE. Вы можете решить, что имя схемы должно быть FLINTSTONE. Однако ваш клиент может захотеть запустить два экземпляра вашего продукта (например, один для локальных продаж, другой для международных) и использовать одну и ту же базу данных. Поэтому они хотят FS_LOCAL и FS_INTER в качестве имен схемы. Эта опция является особенностью вашего продукта?

Затем решите, должно ли ваше приложение подключаться как владелец схемы. Есть веские причины для безопасности НЕ делать этого. Например, владелец схемы имеет права на удаление таблиц, что, как правило, не выполняется приложением, и, следовательно, по принципу наименьших привилегий ваше приложение не должно иметь привилегий.

Как правило, я бы порекомендовал некоторый параметр конфигурации для приложения для имени схемы, и после подключения к базе данных приложение должно выполнить «ALTER SESSION SET CURRENT_SCHEMA = 'независимо от того, что это был файл конфигурации'". Пользователю базы данных приложения потребуются соответствующие права на вставку / обновление / удаление / выбор / выполнение объектов в схеме приложения. Если приложение не может этого сделать, у вас может быть триггер LOGON в базе данных.

...