Любые инструменты для экспорта всей базы данных Oracle в виде сценариев SQL - PullRequest
8 голосов
/ 28 июня 2010

Вот моя проблема, я хочу создать базовую линию для нашей разработки Dateabase (Oracle 10g) и проверить нашу SVN для контроля версий, и после этого мы будем использовать liquibase, чтобы помочь нам управлять постепенными изменениями базы данных.

Моя проблема в том, как мне создать базовую версию Oracle 10g?база данных теперь состоит из 500+ таблиц с большим количеством данных конфигурации, и я хочу, чтобы моя базовая линия базы данных основывалась на наборе SQL-сценариев для проверки на Subversion, а не на дампе Oracle.

У меня естьпопробуйте использовать liquibase generateChangeLog, но у него есть некоторые проблемы с производительностью. Может кто-нибудь порекомендует мне любые инструменты, которые мне помогут 1. Сканирование любой схемы Oracle 2. Создание набора SQL-сценариев (со структурами таблиц и данными)*

Заранее спасибо

Джеймс!

Ответы [ 4 ]

4 голосов
/ 28 июня 2010

Что-то вроде

SELECT DBMS_METADATA.GET_DDL('TABLE',table_name) FROM USER_TABLES;

- хорошее начало.Вы можете настроить его с помощью PL / SQL и UTL_FILE, чтобы записать каждую таблицу в отдельный файл.Вам, вероятно, придется также делать последовательности (хотя их версия довольно бессмысленна) и, возможно, триггеры / процедуры / функции / пакеты и т. Д.

Не забывайте гранты.

3 голосов
/ 03 апреля 2014

Более общим решением было бы сбросить 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 где-то в файловой системе для следующего обновления

Ссылки:

  1. оракул dbms_metadata.GET_DDL функция
  2. оракул все_объекты просмотр
2 голосов
/ 28 июня 2010

EXPDP с параметром CONTENT = METADATA_ONLY, затем IMPDP с SQLFILE = your_script.sql?

Николас.

2 голосов
/ 28 июня 2010

Вы пробовали бесплатный инструмент Oracle SQLDeveloper?Это дает вам возможность экспортировать DDL и данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...