Как проверить, идентичны ли две таблицы объектам в Oracle - PullRequest
0 голосов
/ 25 сентября 2018

Как я могу проверить, идентичны ли две таблицы как объекты в Oracle?

Мне нужно проверить указанные ниже пункты для обеих таблиц.

  1. Таблицы имеют одинаковое количество столбцов содно и то же имя, тип данных и длина столбцов.
  2. Обе таблицы имеют одинаковое количество ограничений, соответствующих столбцам.
  3. Обе таблицы имеют одинаковое количество индексов и грантов.

Обе таблицы существуют в одной и той же схеме.

1 Ответ

0 голосов
/ 26 сентября 2018

Так или иначе, вы должны запрашивать метаданные.Вы можете либо

  • выбрать из user_tables / user_indexes / etc

, либо

  • использовать dbms_metadata. (Get_ddl | get_dependent_ddl | get_granted_ddl | и т. Д.)и сравните текст (или XML в случае get_xml и т. д.).Возможно, вы захотите пропустить много деталей при генерации метаданных, установив для многих параметров, таких как SEGMENT_ATTRIBUTES, значение false, используя dbms_metadata.set_transform_param.

Другая сложность - это секционированные таблицы.Вам нужно, чтобы у них были одинаковые разделы, чтобы они были «идентичны»?

Даже в очень простых случаях могут быть тонкие детали.Например, считаете ли вы две таблицы "идентичными"?

create table t1 (id int, name varchar2(30), col int constraint chk_col check (col is not null));
create table t2 (id int, name varchar2(30), col int not null);

Метаданные столбцов отличаются

SQL> select table_name, column_name, nullable
  2  from user_tab_columns
  3  where table_name in ('T1','T2');

TABLE_NAME COLUMN_NAM NULLABLE
---------- ---------- ----------
T1         ID         Y
T1         NAME       Y
T1         COL        Y
T2         ID         Y
T2         NAME       Y
T2         COL        N

6 rows selected.

Поэтому постарайтесь сделать этот инструмент согласования как можно более простым.Он может иметь 3 выхода, например одинаковые / разные / «требует ручного сравнения», поэтому вам не нужно проверять каждую деталь в вашем скрипте.

PS.Некоторые инструменты разработки, такие как Allround Automations PL / SQL developer, имеют инструменты для сравнения метаданных с использованием пользовательского интерфейса.

...