2008-09-26 5 views
8

정부 기관용으로 PHP와 Oracle에서 개발 된 릴리스 관리 시스템을 구축합니다. 이 응용 프로그램의 데이터는 데이터베이스 테이블에 저장되며 PL/SQL 패키지 및 프로 시저로 처리됩니다.Oracle PL/SQL에서 Subversion에 액세스하는 방법?

릴리스 관리 프로세스는 Subversion 저장소에서 오는 메타 데이터를 기반으로합니다. 우리는 내부 Oracle JVM을 통해 PL/SQL에서 저장소에 액세스하여 Oracle 인스턴스가있는 UNIX 서버에서 svn 명령을 실행합니다. svn 명령의 결과는 XML로 수신되어 PL/SQL에 의해 처리되기 전에 구문 분석됩니다. 이런 방식으로 Subversion에 액세스하는 것은 자주 반복해서 사용하는 경우에는 그리 성능이 좋지 않습니다.

현재 우리는 Subversion 저장소의 각 커밋마다 (Subversion 훅을 통해) 데이터베이스 테이블에 Subversion 메타 데이터를 저장합니다. 각 Subversion 트랜잭션에 대한 로그 정보를 추출하여 일부 Oracle 테이블에 보관합니다. 그런 다음 일반 SQL 쿼리로 Subversion 메타 데이터를 얻을 수 있습니다.

PL/SQL에서 Subversion에 액세스하는 더 좋은 방법이 있습니까?

+0

이전 고용주는 정확히 그렇게했습니다. (즉, 후크를 사용하여 subversion 메타 데이터를 oracle에 삽입했습니다.) –

답변

2

오라클의 Java JVM을 사용하는 경우 SVNKit을 사용하여 명령을 실행하기 위해 운영 체제를 포팅하는 대신 Java에서 제공되는 SVN 서버와 통신 할 수 있습니다.

+0

현재 java는 유닉스 셸과 PL/SQL 사이의 패스 스루입니다. SVNKit을 사용하면 svn 명령이 결과를 제공하고 PL/SQL로 다시 전달하기 전에 새 데이터 구조를 정의하기 위해 수행중인 작업을 Java에서 재현해야합니다. 이익의 확실하지. – Bergeroy

+0

또한 PL/SQL과 SVNKit 사이의 인터페이스를 정의 할 수도 있지만 단일 개정 로그를 얻는 데 필요한 다중 컨텍스트 변경이 단일 XML 구문 분석보다 성능이 더 좋은지 확실하지 않습니다. 나는 그것을 시도 할 수 있었다. – Bergeroy

+0

그것은 당신에게 가장 잘 맞는 것이 무엇 이냐에 달려 있습니다. 나는 거의 항상 네이티브 솔루션을 찾고, 네이티브 솔루션이 작동하지 않는다면 커맨드 라인 실행으로 돌아갑니다. –

2

기본 흐름이 의미가 있다고 생각합니다. 성능 병목 현상이 정확히 어디에서 발생했는지를 확인하기 위해 실험을 수행하는 것이 좋습니다. 예를 들어, PL/SQL에서 Oracle JVM으로 넘어 가고 있습니까? 그것은 svn 명령을 실행하는 JVM 포격? 그것은 svn 왕복인가요? XML 구문 분석인가요?

예를 들어, svn 왕복 여행이라고 가정 해 봅시다. 어쩌면 왕복 여행을 피할 수 있도록 svn 서버에서 응답을 캐시하는 오라클 시스템에서 프로세스를 가질 수 있습니까? 어쩌면 svn 왕복 여행이 비동기 일 수 있습니까?

그러나 내가 말한 것처럼 병목 현상이 어디인지를 알아야합니다.

1

Subversion 및 Oracle을 정수화하는 API도 찾고 있습니다. Oracle PL/SQL 객체 (프로 시저, 패키지)를 Subversion으로 가져 와서 객체에 변경 사항을 적용하면 Oracle 데이터베이스의 해당 객체에 적용해야합니다.

+1

PL/SQL 오브젝트를 가져 오려면 all_source 뷰를 질의하십시오. 그것들을 다시 밀어 넣으려면, 전복에서 post-commit 후크를 고려하십시오. 조심스럽게 매핑을 수행해야만 특정 파일을 컴파일 할 스키마를 알 수 있습니다. –

1

하나 더 해결 방법은 ORACLE과 SVN 사이에 있으며, PL/SQL을 소스와 동기화하는 소프트웨어를 사용하는 것입니다.

다음은 cron에서 시작할 수있는 프로그램 중 하나입니다. https://sourceforge.net/projects/dbcode-svn-sync/ .

관련 문제