Сравните базу данных приложения, созданную в SQL Server и Oracle

Я осмотрелся для этой задачи, которую я имею на руках, но не нашел ничего полезного. Я в первую очередь Java-человек с глубокими знаниями базы данных с точки зрения разработки программного обеспечения. У меня есть некоторые знания о функциях DBA, которые можно и нельзя делать, но я не могу найти хорошее решение.

У меня есть задача сравнить базы данных, созданные в SQL Server и Oracle нашим установщиком приложений.

Я думаю, что я смог предложить некоторые запросы (конечно, путем поиска в Интернете) в SQL Server, которые будут давать мне такие вещи, как количество таблиц в схеме, столбцы каждой таблицы с типами данных и индексами, различные типы ограничений, триггеры и т. д. (с их количеством), созданные для каждой из этих таблиц. Я могу предоставить эти SQL, если кто-то заинтересован. Однако Oracle кажется более хитрым. Буду признателен, если кто-нибудь сможет помочь или, возможно, укажет мне правильное направление.

Я пытаюсь выяснить что-то вроде следующего:

  1. Количество созданных таблиц
  2. Количество индексов, ограничений (с их типами), триггеров для каждой из этих таблиц
  3. Количество созданных хранимых процедур / функций
  4. Количество созданных просмотров

Любая помощь будет оценена.

Спасибо.

1 ответ

Решение

Прежде всего, если вам уже удобно писать код на Java, я не уверен, что я бы написал кучу SQL для этого сравнения. JDBC уже имеет класс DatabaseMetaData, который имеет такие методы, как getTables чтобы получить все таблицы. Это даст вам один API для работы и позволит вам использовать тот факт, что разработчики драйверов JDBC уже написали весь код для запроса таблиц словаря данных в любой используемой вами базе данных. Это также позволит вам сосредоточиться на различиях в том, как объекты, которые создает ваш установщик, будут восприниматься приложением.

Если вы собираетесь писать специфический SQL, таблицы словаря данных Oracle довольно просты в работе. Те, о ком вы будете заботиться, будут следовать шаблону [user|all|dba]_<<type of thing>>, [user|all|dba] префикс указывает, ищете ли вы принадлежащие вам объекты (user), объекты, к которым у вас есть доступ (all) или все объекты в базе данных (dba). Обычные пользователи часто не имеют доступа к dba представления, потому что это потенциальная проблема безопасности - как правило, вы не хотите, чтобы люди знали, что объект существует, если у них нет доступа к нему. В моих примерах я буду использовать all версии объектов, но вы можете изменить all в user или же dba в зависимости от того, что вы после.

  • all_tables покажет вам информацию обо всех таблицах, к которым у вас есть доступ. Вы, вероятно, хотите добавить фильтр на owner для схем, к которым обращается ваш установщик, поскольку у вас может быть доступ к таблицам, которые не являются частью вашего приложения.
  • all_indexes, all_constraints, а также all_triggers покажет вам информацию об индексах, ограничениях и триггерах. Опять же, вы можете добавить предикат owner ограничить себя схемами, которые вам небезразличны.
  • all_procedures покажет вам информацию о процедурах и функциях как отдельно, так и в пакетах.
  • all_views покажет вам информацию обо всех видах.

Если вы на самом деле просто заинтересованы в подсчете, вы можете просто перейти к all_objects и сделать группировку по object_type, Я предполагаю, что вы захотите увидеть атрибуты различных объектов, чтобы перейти к различным объектно-ориентированным представлениям.

Другие вопросы по тегам