Сравните базу данных приложения, созданную в SQL Server и Oracle
Я осмотрелся для этой задачи, которую я имею на руках, но не нашел ничего полезного. Я в первую очередь Java-человек с глубокими знаниями базы данных с точки зрения разработки программного обеспечения. У меня есть некоторые знания о функциях DBA, которые можно и нельзя делать, но я не могу найти хорошее решение.
У меня есть задача сравнить базы данных, созданные в SQL Server и Oracle нашим установщиком приложений.
Я думаю, что я смог предложить некоторые запросы (конечно, путем поиска в Интернете) в SQL Server, которые будут давать мне такие вещи, как количество таблиц в схеме, столбцы каждой таблицы с типами данных и индексами, различные типы ограничений, триггеры и т. д. (с их количеством), созданные для каждой из этих таблиц. Я могу предоставить эти SQL, если кто-то заинтересован. Однако Oracle кажется более хитрым. Буду признателен, если кто-нибудь сможет помочь или, возможно, укажет мне правильное направление.
Я пытаюсь выяснить что-то вроде следующего:
- Количество созданных таблиц
- Количество индексов, ограничений (с их типами), триггеров для каждой из этих таблиц
- Количество созданных хранимых процедур / функций
- Количество созданных просмотров
Любая помощь будет оценена.
Спасибо.
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
, Я предполагаю, что вы захотите увидеть атрибуты различных объектов, чтобы перейти к различным объектно-ориентированным представлениям.