programing

Oracle을 통한 데이터베이스 소스 제어

javajsp 2023. 8. 7. 22:21

Oracle을 통한 데이터베이스 소스 제어

데이터베이스를 소스 제어로 체크인하는 방법을 몇 시간 동안 찾고 있습니다.저의 첫 번째 아이디어는 데이터베이스 디프를 계산하고 모든 개발자에게 변경 사항을 새로운 디프 스크립트로 구현하도록 요청하는 프로그램이었습니다.이제 데이터베이스를 파일에 덤프할 수 있으면 체크인하여 다른 유형의 파일로 사용할 수 있습니다.

주요 조건은 다음과 같습니다.

  • Oracle 9R2에 적합
  • diff를 사용하여 차이점을 확인할 수 있도록 인간이 읽을 수 있습니다. (.dmp 파일은 읽을 수 없는 것 같습니다.)
  • 모든 테이블을 일괄 처리합니다.우리는 200개 이상의 테이블을 가지고 있습니다.
  • 구조와 데이터를 모두 저장합니다.
  • CLOB 및 RAW 유형을 지원합니다.
  • 프로시저, 패키지 및 해당 본문, 함수, 테이블, 보기, 인덱스, 제약 조건, 보안 및 동의어를 저장합니다.
  • 실행 스크립트로 변환하여 데이터베이스를 깨끗한 컴퓨터로 재구성할 수 있습니다.
  • 소규모 데이터베이스로 제한되지 않음(200.000개 이상의 행 지원)

그것은 쉽지 않습니다.저는 어떤 식으로든 실패하는 데모를 많이 다운로드했습니다.

편집: 배치 모드에서 릴리스 데이터베이스 구조 및 객체 + 데이터에 대해 작동 시스템을 확인할 수 있는 방법이 있다면 다른 방법은 상관 없습니다.

그나저나.우리 프로젝트는 수년간 개발되어 왔습니다.몇 가지 접근법은 새로 시작할 때 쉽게 구현될 수 있지만 이 시점에서는 어려워 보입니다.

편집: 문제를 더 잘 이해하기 위해 일부 사용자가 프로덕션 환경의 구성 데이터를 변경할 수 있다고 가정해 보겠습니다.또는 개발자가 새 필드를 만들거나 Release 분기에서 예고 없이 보기를 변경할 수 있습니다.저는 이 변경 사항을 알아야 합니다. 그렇지 않으면 변경 사항을 생산에 통합하는 것이 복잡해질 것입니다.

그래서 많은 사람들이 이런 종류의 일(diff schema)을 하려고 합니다.제 의견은

  • 소스 코드는 버전 제어 도구(Subversion, CSV, GIT, Perforce...)로 들어갑니다.그것이 자바나 C 코드인 것처럼 취급하세요, 정말 다르지 않습니다.이를 체크아웃하고 데이터베이스에 적용하는 설치 프로세스가 있어야 합니다.
  • DDL은 소스 코드입니다.버전 관리 도구에도 들어갑니다.
  • 데이터가 회색 영역입니다. 조회 테이블은 버전 관리 도구에 있어야 합니다.애플리케이션 생성 데이터는 당연히 그렇게 해서는 안 됩니다.

요즘 제가 하는 방법은 Ruby on Rails 마이그레이션과 유사한 마이그레이션 스크립트를 만드는 것입니다.DDL을 스크립트에 넣고 스크립트를 실행하여 버전 간에 데이터베이스를 이동합니다.릴리스에 대한 변경 사항을 단일 파일 또는 파일 집합으로 그룹화합니다.그러면 응용 프로그램을 버전 x에서 버전 y로 이동하는 스크립트가 있습니다.

제가 더 이상 하지 않는 한 가지 일은 개발 환경에서 데이터베이스 개체를 만들기 위해 GUI 도구를 사용하는 것입니다.1일차부터 DDL 스크립트를 작성합니다. 테스트할 코드, 프로덕션 등을 홍보하기 위해 DDL 스크립트가 필요합니다.GUI를 사용하여 모든 개체를 생성하고 릴리스 시간이 되면 스키마를 올바르게 생성/마이그레이션하기 위해 스크립트를 생성하려고 시도하는 스크랩이 발생하는 것을 보았습니다. 이 스크립트는 테스트되지 않고 실패하는 경우가 많습니다!

모든 사람들은 이것을 하는 방법에 대해 그들만의 선호를 가질 것이지만, 저는 위의 제 의견을 형성한 몇 년 동안 그것이 잘못 수행되는 것을 많이 보았습니다.

Oracle SQL Developer에는 "데이터베이스 내보내기" 기능이 있습니다.모든 DDL과 데이터가 포함된 단일 파일을 생성할 수 있습니다.

저는 Team Foundation Server에 통합되는 VCS 플러그인과 함께 PL/SQL 개발자를 사용하지만, 이 플러그인은 데이터베이스 개체만 지원하고 데이터 자체는 지원하지 않습니다. 일반적으로 소스 제어에서 제외됩니다.

링크는 다음과 같습니다. http://www.allroundautomations.com/bodyplsqldev.html

차이를 감지하는 것만큼 매끄럽지 않을 수도 있지만, 우리는 간단한 개미 빌드 파일을 사용합니다.현재 CVS 분기에서 "기본" 데이터베이스 코드는 테이블 및 트리거 등에 대한 ddl로 분류됩니다.델타 폴더도 같은 방식으로 분리할 수 있습니다.처음부터 "base" + "delta"를 실행하여 데이터베이스의 현재 상태를 가져올 수 있습니다.프로덕션으로 이동하면 "델타" 빌드를 실행하면 완료됩니다.이 모델은 스키마가 너무 커서 빠르게 변경하는 경우에는 잘 작동하지 않습니다. (참고:적어도 테이블, 인덱스 등과 같은 데이터베이스 개체 중에서.패키지, 프로시저, 함수 및 트리거의 경우 잘 작동합니다.)다음은 개미 작업 예제입니다.

    <target name="buildTables" description="Build Tables with primary keys and sequences">
<sql driver="${conn.jdbc.driver}" password="${conn.user.password}"
    url="${conn.jdbc.url}" userid="${conn.user.name}"
    classpath="${app.base}/lib/${jdbc.jar.name}">
    <fileset dir="${db.dir}/ddl">
        <include name="*.sql"/>
    </fileset>
</sql>
</target>

제 생각에 이번 사건은

  • 당신은 문제를 해결하려고 노력하고 있습니다.
  • 당신은 해결책을 생각해냈습니다.
  • 솔루션을 구현하는 방법을 모르는 경우
  • 이제 솔루션을 구현하는 방법에 대한 도움을 요청하는 것입니다.

도움을 받을 수 있는 더 좋은 방법은

  • 무엇이 문제인지 말씀해 주십시오.
  • 그 문제를 해결하기 위한 아이디어를 구합니다.
  • 최선의 해결책을 선택합니다.

저는 당신이 해결하려는 문제가 무엇인지 알 수 없습니다.때때로 질문을 통해 그것은 명백하지만, 이것은 확실히 그렇지 않습니다.하지만 이 '솔루션'은 유지보수의 악몽으로 바뀔 것입니다.만약 당신이 데이터베이스와 그것을 사용하는 앱을 개발하는 것이 어렵다고 생각한다면요.전체 데이터베이스를 인간이 읽을 수 있는 형태로 버전화하려는 이 아이디어는 미친 것이나 다름없습니다.

오라클의 Workspace Manager를 사용해 보셨습니까?제가 생산 데이터베이스에서 그것에 대한 경험이 있다는 것은 아니지만, 저는 그것에 대한 몇 가지 장난감 실험이 유망하다는 것을 발견했습니다.

데이터를 분산시키려고 하지 마십시오.데이터가 변경될 때 원하는 대로 저장할 수 있는 트리거를 작성하기만 하면 됩니다.

비용이 많이 들 수 있지만 Oracle용 TOD와 같은 툴은 이러한 문제를 해결하는 데 이상적일 수 있습니다.

즉, 제가 선호하는 솔루션은 모든 DDL(저장 프로시저 정의 포함)을 텍스트로 시작하여 버전 제어로 관리하고 소스에서 작동하는 데이터베이스를 만드는 스크립트를 작성하는 것입니다.스키마를 수정하려면 데이터베이스를 직접 수정하는 것이 아니라 변경사항을 리포지토리에 커밋해야 합니다.예외 없음!따라서 버전 간 업데이트를 반영하는 스크립트를 작성해야 하는 경우 커밋된 변경 사항을 모두 적용한 다음 변경 사항을 충족하기 위해 기존 데이터를 마사지하는 데 필요한 DML을 추가해야 합니다(기존 행의 새 열에 대한 기본값 추가 등).모든 DDL(및 미리 채워진 데이터)을 텍스트로 사용하면 차이를 수집하는 것은 두 개의 소스 트리를 나누는 것만큼 간단합니다.

마지막 작업에서는 테스트 데이터베이스를 복원하고 데이터베이스 버전을 기반으로 필요한 모든 업그레이드 스크립트를 실행한 다음 DDL 및 DML에 결과를 덤프하는 NAT 스크립트를 사용했습니다. 빈 데이터베이스에 대해서도 동일한 작업을 수행하여 처음부터 결과를 생성합니다.두 가지가 상당히 다르다면(덤프 프로그램이 완벽하지 않은 경우) 업데이트/작성 DDL 및 DML에 어떤 변경이 필요한지 즉시 알 수 있었습니다. Toad와 같은 데이터베이스 비교 도구를 사용했지만 데이터 마사지를 위한 일반 스크립트를 생성해야 할 때는 손으로 작성한 SQL만큼 유용하지 않았습니다.(기계에서 생성된 코드는 매우 취약할 수 있습니다.)

RedGate의 Oracle 소스 제어를 사용해 보십시오.오라클 버전은 사용해 본 적이 없지만 MSSQL 버전은 정말 좋습니다.

언급URL : https://stackoverflow.com/questions/1717048/database-source-control-with-oracle