У нас есть база данных oracle (18 c) на нескольких серверах, и нам необходимо синхронизировать c схему с серверов разработки и продуктов. Поскольку необходимо синхронизировать только схему, а не содержимое таблиц, нам не нужно знать следующий порядковый номер столбцов первичного ключа. (И мы, конечно, не хотим обновлять prod-серверы с этим порядковым номером.)
Пробовали как SQL Developers Diff Tool, так и dbForge Schema Compare для Oracle, но они оба перечисляют таблицы, где только это порядковый номер отличается от таблиц, которые необходимо обновить.
Я не нашел настройки в SQL Developer Diff Tool, которая справляется с этим. В dbForge Schema Compare для Oracle у них есть Ignore START WITH in sequences
, но это, похоже, не работает, как я думал, поскольку он по-прежнему отмечает таблицы, которые равны, за исключением порядкового номера, как таблицы, которые нуждаются в обновлении.
Для новых таблиц, которые существуют только в исходной базе данных, сценарий syn c будет выглядеть следующим образом:
CREATE TABLE TEST (
ID NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY(
START WITH 102),
TEXT VARCHAR2(4000 BYTE),
CONSTRAINT TEST_ID_PK PRIMARY KEY (ID))
LOGGING;
Нам нужен этот сценарий без части (START WITH 102)
в нем.
Для таблицы, которая существует как в исходной, так и в целевой базе данных (без каких-либо других изменений, кроме порядкового номера), сценарий syn c будет выглядеть так:
ALTER TABLE TEST
MODIFY(ID GENERATED BY DEFAULT ON NULL AS IDENTITY(
START WITH 114
INCREMENT BY 1
MAXVALUE 9999999999999999999999999999
MINVALUE 1
CACHE 20
NOCYCLE
NOORDER));
Реальность такова, что это таблица, которая не требует обновления, и я думал, что Ignore START WITH in sequence
справится с этим, но, по-видимому, нет.
Кто-нибудь может предложить нам решение?