Есть ли хороший способ проверить, если схема базы данных верна после обновления или миграции?

StackOverflow https://stackoverflow.com/questions/3576475

Вопрос

У нас есть клиенты, которые улучшаются из одной версии базы данных в другую (Oracle 9i в Oracle 10G или 11G или 11g). В одном случае клиент экспортировал старую базу данных и импортировал ее в новый, но по какой-то причине индексы и ограничения не создавали. Возможно, они сделали это специально для ускорения процесса импорта, но мы все еще смотрим в причина, почему.

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

Обновлять

Спасибо за ответы, предлагающие коммерческие и / или инструменты GUI для использования, но нам действительно нужно что-то бесплатно, что мы могли бы упаковать с нашим продуктом. Он также должен быть командной строкой или скриптом, так что наши клиенты могут работать в любой среде (Unix, Linux, Windows).

Это было полезно?

Решение

Предполагая, что одна схема, что-то вроде этого - дамп user_Objects в таблицу перед миграцией.

 CREATE TABLE SAVED_USER_OBJECTS AS SELECT * FROM USER_OBJECTS

Затем проверять после миграции

 SELECT object_type, object_name FROM SAVED_USER_OBJECTS
 MINUS
 SELECT object_type, object_name FROM USER_OBJECTS

Одним из проблем является, что если у вас есть намеренно брошенные объекты между версиями, вам также нужно будет удалить из Saved_user_Objects. Также это не заберет, если неверная версия объектов существует.

Если у вас есть несколько схем, то то же самое необходимо для каждой схемы или использовать All_Objects и извлечение / сравнение для соответствующих пользовательских схем.

Вы также можете сделать хеш / контрольную сумму на Object_Type || Object_name для всей схемы (сэкономьте до / сравнить после), но стоимость расчета не будет отличаться от сравнения двух таблиц по индексам.

Другие советы

Если вы готовы потратить некоторые, DBDiff - это эффективная утилита, которая имеет именно то, что вам нужно.

http://www.dkgas.com/oradbdiff.htm.

В SQL Developer (бесплатная утилита Oracle) существует функция различий схемы базы данных. Стоит попробовать это.

Надеюсь, поможет.

SQL Developer - скачать

Рони.

Я бы не записал сценарий проверки, я бы написал программу для создания сценария проверки из определенной версии базы данных. Просто идите, хотя метатата и запишите, что там и напишите его в файл, затем сравните значения в этом файле против значений в базе данных клиента. Это не будет работать так хорошо, если вы используете сгенерированные системой имена для ваших ограничений, но, вероятно, достаточно просто убедиться, что вещи там. Снижение индексов и ограничений довольно распространено при миграции базы данных, чтобы вам даже не нужно было проверить слишком много; Если два или три вещи отсутствуют, то неразумно предположить, что все они все. Вы также можете написать сценарий, который удаляет все ограничения и индексы и повторно создает их, и просто у ваших клиентов запускаются, что в качестве этапа после миграции. Просто убедитесь, что вы бросаете все по имени, поэтому вы не удалите любые пользовательские индексы, которые ваш клиент мог создать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top