Более общим решением было бы сбросить DDL sql для выбранного списка таблиц, но также и для других типов объектов.Это можно сделать с помощью представлений all_objects и all_users.
Пример того, что работал для меня :
select dbms_metadata.GET_DDL(u.object_type,u.object_name, u.owner)
from all_objects u
where 1=1
-- filter only selected object types
and u.object_type in ('TABLE', 'INDEX', 'FUNCTION', 'PROCEDURE', 'VIEW',
'TYPE', 'TRIGGER', 'SEQUENCE')
-- don't want system objects, generated, temp, invalid etc.
and u.object_name not like 'SYS_%'
and temporary!='Y'
and generated!='Y'
and status!='INVALID'
and u.object_name not like 'TMP_%'
and u.object_name not like '%$%'
-- if you want to filter only changed from some date/timestamp:
-- and u.last_ddl_time > '2014-04-02'
-- filter by owner
and owner in (
select username from dba_USERS where DEFAULT_TABLESPACE not like 'SYS%'
and username not in ('ORACLE_OCM')
and username not like '%$%'
)
;
Я написал скрипт на python, который обновляет схему БД в инкрементальном режиме на основе аналогичного sql:
- запускает sql с last_ddl_time> = max (last_ddl_time с момента последнего обновления)
- в конце сохраняет last_ddl_time где-то в файловой системе для следующего обновления
Ссылки:
- оракул dbms_metadata.GET_DDL функция
- оракул все_объекты просмотр