Oracle SQL Developer jest w stanie eksportować DDL przez Tools -> Database Export...
To działa bardzo dobrze, ale wymaga ręcznej interwencji.
Wiem o tym DBMS_METADATA.get_ddl()
, ale odkryłem, że eksport nie jest idealny. Natknąłem się na problemy, w których wyeksportowany DBMS_METADATA
DDL nie był użyteczny bez uprzedniej naprawy problemów, takich jak przerwy w środku słowa kluczowego i gorzej. Jeśli jednak ktoś zna sposób eksportowania DDL, DMBS_METADATA
który może działać bez ręcznych poprawek, byłoby to również świetne rozwiązanie.
Zasadniczo szukam automatycznego / skryptowalnego sposobu eksportu DDL identycznego z tym, który jest eksportowany ręcznie.
Jak mogę to zrobić?
COL
, jak pokazano w tym przykładzie , i będzie działać.Odpowiedzi:
Cóż, jeśli sqlplus wkręca dane wyjściowe dbms_metadata.get_ddl, dlaczego nie wybrać danych wyjściowych w CLOB i zapisać CLOB do systemu plików.
na przykład
To powinno dać ci poprawny DDL, bez pomieszania danych wyjściowych. Jedyne, że skrypt zostanie utworzony na serwerze DB, a nie na kliencie, z którego wywołujesz sqlplus.
Skrypt jest zapisywany w katalogu wskazywanym przez pozycję „DATA_PUPM_DIR” na serwerze DB. to znaczy
Co więcej, możesz dodać jakąś iterację do wszystkich tabel / indeksów itp. Schematu i uzyskać natychmiastowy kompletny kod DDL schematu. Ciągle to robię.
źródło
Powodem, dla którego masz problemy,
dbms_metadata.get_ddl
jest to, że wysyłaCLOB
on pliki o wielkości do 4 GB. Domyślnie SQL * Plus i Oracle SQL Developer obcinają długi tekst, aby nie niszczyły klienta dużą ilością tekstu.Bardzo łatwo jest zastąpić to zachowanie w SQL * Plus za pomocą kilku
SET
poleceń i uzyskać czysty DDL.Potrzebny skrypt to:
źródło
Pomocne mogą być następujące transformacje. Nie użyłem metody DBMS_XSLPROCESSOR.CLOB2FILE, ale użyłem ich do migracji bazy danych Oracle z Solaris do Linux. Nie mogłem użyć pompy danych ze względu na używaną przez nich wersję Oracle i fakt, że używali typów danych XML dla typów danych kolumnowych.
źródło