#oracle #schema #oracle11g #logical-grouping
#Oracle #схема #oracle11g #логическая группировка
Вопрос:
Мы планируем новую систему для клиента в ORACLE 11g. Я в основном работаю в мире Sql Server в течение нескольких лет и на самом деле не в курсе последних обновлений ORACLE.
Одна конкретная функция, которую мне интересно, добавила ли ORACLE к этому моменту, — это своего рода логический «контейнер» для объектов базы данных, похожий на Sql Server SCHEMA
.
Попытка использовать схемы ORACLE, такие как Sql Server, приводит к сбою при сравнении кода при попытке нажать из dev> test> live.
Пакеты в некотором роде похожи, за исключением того, что вы не можете поместить таблицы в пакет (поэтому они действительно работают только для логической группировки кода).
Единственный другой вариант, о котором я знаю, — это архаичная практика необходимости добавлять к именам объектов префикс «схема», то есть RPT_
ОТЧЕТЫ, RPT_
ПАРАМЕТРЫ, RPT_
ЖУРНАЛЫ, RPT_
ПОЛЬЗОВАТЕЛИ, RPT_
RUN_REPORT(), с префиксом RPT_
, обозначающим, что это все объекты, связанные с нашим механизмом отчетов, скажем. При написании подобной системы создается впечатление, что мы никогда не покидали эпоху именования файлов 8.3.
Существует ли на данный момент какой-либо более чистый и прямой способ логической группировки связанных объектов в ORACLE?
Ответ №1:
Логическим контейнером Oracle для объектов базы данных ЯВЛЯЕТСЯ схема. Я не знаю, насколько «чище» и «прямее» вы можете получить! Здесь вам придется изменить парадигму. Не пытайтесь мыслить в терминах SQL Server и навязывать решение, похожее на SQL Server в Oracle. Ознакомьтесь с тем, что делает Oracle, и подходите к своим проблемам с этой точки зрения. Не должно возникнуть проблем с переходом от разработки к тестированию в производство в Oracle, если вы знаете, что делаете.
Кажется, у вас есть некоторые сомнения в Oracle, когда вы используете такие термины, как «архаичная практика». Я бы посоветовал вам подружиться с очень богатым и мощным набором функций Oracle, прочитав немного, поскольку вы, по-видимому, уже привержены Oracle для этого проекта. В частности, возьмите копию «Эффективный Oracle по дизайну» Тома Кайта. Прочитав это, ознакомьтесь с «Архитектурой базы данных Oracle Expert» того же автора, чтобы более подробно ознакомиться с тем, как работает Oracle. Вы обязаны перед своим клиентом знать, как использовать предоставленный вам инструмент. Кто знает? Возможно, вам это даже начнет нравиться. Думайте об этом как о другом инструменте в вашем наборе инструментов. Вы не женаты на SQL Server и не изменяете, используя Oracle
Редактировать:
В ответ на вопросы OP:
Я не уверен, почему это логистическая проблема. Их можно рассматривать как отдельные базы данных, но физически это не так. И нет, вам не нужен отдельный файл данных для каждой схемы. Для всех схем часто используется один файл данных.
Если вам нужна «хорошая автономная база данных» на сервере SQL Server, просто создайте одну схему для хранения всех ваших объектов. Конец проблемы. Вы можете создавать других пользователей / схемы, просто не давайте им возможности создавать объекты.
Существуют инструменты для сравнения объектов и данных, как в PL / SQL Developer compare. Обычно в Oracle требуется сравнивать схемы, а не целые базы данных. Я не уверен, почему вы все равно хотите иметь несколько схем, каждая со своими собственными объектами. Что заставляет вас это делать? Храните ваши объекты (таблицы, триггеры, код, представления и т.д.) в одной схеме.
Комментарии:
1. Кроме того, сравнение кода между схемами с разными именами не будет проблемой, если вы используете синонимы для доступа к объектам в других схемах, а не жестко кодируете имя схемы в процедурном коде.
2. Точно. Все дело в знании того, что вы делаете.
3. Однако логистическая проблема со схемами ORACLE заключается в том, что они по сути являются отдельными базами данных, не так ли? Итак, если у вас есть 5 схем, вам нужно поддерживать 5 наборов файлов данных, нужно выполнить 5 разных сравнений кода, это не была одна хорошая автономная база данных. Таким образом, сложность проекта ORACLE быстро возрастает, если вы хотите попробовать использовать несколько схем. Если я чего-то не упускаю, что возможно. Существуют ли инструменты сравнения баз данных для ORACLE, которые сравнивают набор схем за один раз? Тот, который я использую (разработчик PL / SQL), выполняет схему / базу данных одновременно.
4. Я знаю, что у ORACLE есть несколько хороших конструкций. Самая большая из них (для моего использования) — триггеры до DML
BEFORE
. Черт возьми, я бы хотел, чтобы MS перенесла это на Sql Server!