2008-09-26 21 views
8

Đối với một cơ quan chính phủ, chúng tôi xây dựng một hệ thống quản lý phát hành được phát triển trong PHP và Oracle. Dữ liệu cho ứng dụng này được lưu trữ trong các bảng cơ sở dữ liệu và được xử lý bằng các gói và thủ tục PL/SQL.Cách truy cập Subversion từ Oracle PL/SQL?

Quy trình quản lý phát hành dựa trên siêu dữ liệu đến từ các kho lưu trữ Subversion. Chúng tôi truy cập các kho lưu trữ từ PL/SQL thông qua Oracle JVM bên trong để thực hiện lệnh svn trên máy chủ Unix mà nằm trong các cá thể Oracle. Các kết quả từ các lệnh svn được nhận trong XML và được phân tích cú pháp trước khi được xử lý bởi PL/SQL. Truy cập Subversion theo cách này không phải là rất hiệu quả để sử dụng lặp đi lặp lại thường xuyên.

Hiện tại, những gì chúng tôi làm là lưu trữ siêu dữ liệu Subversion trong bảng cơ sở dữ liệu tại mỗi lần commit trong kho Subversion (thông qua các móc Subversion). Chúng tôi trích xuất thông tin nhật ký cho mỗi giao dịch Subversion và giữ nó trong một số bảng oracle. Sau đó, chúng tôi có thể lấy siêu dữ liệu Subversion với các truy vấn SQL bình thường.

Có cách nào tốt hơn để truy cập Subversion từ PL/SQL không?

+0

Tại nhà tuyển dụng trước đây của tôi, chúng tôi đã thực hiện chính xác theo cách đó. (Tức là, chúng tôi đã chèn siêu dữ liệu subversion vào oracle bằng cách sử dụng một cái móc.) –

Trả lời

2

Nếu bạn sử dụng Java JVM của Oracle, bạn có thể thử sử dụng SVNKit để liên lạc với máy chủ SVN một cách tự nhiên từ Java, thay vì bắn phá hệ điều hành để thực hiện các lệnh.

+0

Hiện tại, java chỉ là một passthrough giữa shell unix và PL/SQL. Với SVNKit, tôi sẽ phải tái tạo trong java những lệnh svn đang làm gì để cho tôi kết quả và định nghĩa một cấu trúc dữ liệu mới trước khi chuyển nó trở lại PL/SQL. Không chắc chắn về lợi ích. – Bergeroy

+0

Tôi cũng có thể xác định giao diện giữa PL/SQL và SVNKit nhưng tôi không chắc chắn nếu nhiều bối cảnh thay đổi cần thiết để có được một bản sửa đổi duy nhất sẽ có hiệu quả hơn phân tích cú pháp một XML. Tôi có thể thử. – Bergeroy

+0

Nó chỉ phụ thuộc vào bất cứ điều gì làm việc tốt nhất cho bạn. Tôi hầu như luôn luôn cố gắng tìm một giải pháp gốc, và sau đó rơi trở lại để chạy những thứ dòng lệnh nếu các giải pháp bản địa chứng minh unworkable. –

2

Tôi nghĩ luồng cơ bản có ý nghĩa. Tôi sẽ khuyên bạn nên thực hiện các thí nghiệm để xem chính xác các nút thắt cổ chai hiệu suất ở đâu và sau đó thực hiện nếu từ đó. Ví dụ, nó có phải là từ PL/SQL đến Oracle JVM không? Là nó JVM bắn phá ra để thực hiện lệnh svn? Có phải là chuyến đi vòng svn? Nó có phải là phân tích cú pháp của XML không?

Ví dụ: đó là chuyến đi vòng svn. Có lẽ bạn có thể có một quá trình trên máy oracle mà lưu trữ câu trả lời từ máy chủ svn để đôi khi các chuyến đi vòng có thể tránh được? Có lẽ chuyến đi vòng svn có thể không đồng bộ?

Nhưng, như tôi đã nói, bạn cần phải biết nút cổ chai ở đâu.

1

Tôi cũng đang tìm kiếm một API để tích hợp Subversion và Oracle. Tôi cần để có thể kéo các đối tượng Oracle PL/SQL (các thủ tục, các gói) vào Subversion và sau đó một khi các thay đổi được thực hiện cho các đối tượng, nó sẽ được áp dụng cho các đối tượng đó trong cơ sở dữ liệu Oracle.

+1

Để kéo đối tượng PL/SQL, truy vấn chế độ xem all_source. Để đẩy chúng trở lại, hãy xem xét một móc hậu cam kết trong lật đổ. Lập bản đồ cẩn thận sẽ phải được thực hiện để bạn có thể cho biết lược đồ nào cần phải biên dịch một tệp nào đó. –

1

Một giải pháp nữa là sử dụng phần mềm nằm giữa ORACLE và SVN và đồng bộ hóa PL/SQL với các nguồn.

Dưới đây là một trong các chương trình này có thể được bắt đầu bằng cron: https://sourceforge.net/projects/dbcode-svn-sync/ .

Các vấn đề liên quan