2010-06-28 3 views
7

여기 내 문제는 내가 우리의 개발 Dateabase (오라클 10g)에 대한 기준을 만들고, 버전 제어를위한 우리의 SVN으로 확인하고 싶어하고,이 후 우리가 liquibase를 사용하는 것이다 증분 데이터베이스 변경 사항을 관리하는 데 도움이됩니다.모든 도구는 SQL 스크립트로 전체 오라클 DB를 내보낼 수

제 문제는 어떻게 Oracle 10g의 기준선을 만들어야합니까? 데이터베이스는 현재 구성 데이터의 많은 양의, 500 개 테이블로 구성되며, 차라리 다음, 전복으로 확인 덤프 오라클에서 확인하는 일련의 SQL 스크립트에 기반 내 dB 기준을 원한다 ..

내가 사용하려고 가지고 liquibase generateChangeLog는하지만, 사람이 할 수있는 할 수있는 나에게 나를 1. 스캔 오라클 스키마 2. SQL 스크립트의 집합 생성 도움이되는 도구를 권장합니다 (표 구조와, 그리고 데이터) .. 몇 가지 성능 문제가 ..

사전

제임스

감사합니다!

답변

4

뭔가 좋은 시작이다. PL/SQL 및 UTL_FILE을 사용하여 각 테이블을 다른 파일에 기록 할 수 있습니다. 당신은 아마 (를 버전 관리하는 것은 매우 무의미하지만) 너무 시퀀스를 수행해야하고, 어쩌면 트리거합니다/등 절차/기능/패키지

가 보조금을 잊지 마세요.

+0

당신은 PL/SQL을 사용할 수와 클라이언트 측에서 파일로 DDL을 내보내려면이 쿼리? –

+0

DB 서버는 클라이언트 파일을 쓸 수 없습니다 (드라이브를 공유하고 마운트하는 번거 로움이 없으면 효과적으로 클라이언트를 파일 서버로 만듭니다). –

1

오라클의 무료 SQLDeveloper 도구를 사용해 보셨습니까? DDL 및 데이터를 내보낼 수있는 가능성을 제공합니다. CONTENT = METADATA_ONLY 옵션

2

EXPDP, 다음 IMPDP와 SQLFILE = your_script.sql를?

니콜라스.

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

같은

3

더 일반적인 해결책은 선택한 테이블 목록뿐만 아니라 다른 유형의 개체에 대해서도 DDL SQL을 덤프하는 것입니다. 이것은 all_objects 및 all_users 뷰를 사용하여 수행 할 수 있습니다. 나를 위해을 일한

예 :

  • 실행이 last_ddl_time> =와 SQL : 나는 유사한 SQL을 기반으로 증가 모드에서 DB 스키마를 새로 고치는 파이썬 스크립트를 작성
    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 '%$%' 
    ) 
    ; 
    

    max (last refresh에서 last_ddl_time까지)
  • 마지막 저장 last_ddl_time 다음 새로 고침을위한 파일 시스템 어딘가

참고 :

  1. 오라클 dbms_metadata.GET_DDL 기능
  2. 오라클 all_objects보기