2011-11-29 3 views
6

Tôi muốn có một CI build (ví dụ, Hudson) thiết lập và rách lược đồ Oracle 11g như một phần của chu trình xây dựng/kiểm tra hàng đêm cho một vani khá Ứng dụng JSF/JPA.Thiết lập/xé rách lược đồ Oracle để xây dựng CI mà không cần phân mảnh danh mục

Cách rõ ràng nhất để làm điều này là bằng cách thả và tạo lại tất cả các bảng. Trong khi điều này cảm thấy khá chuẩn (ít nhất, đó là những gì các công cụ Hibernate/JPA sẽ làm tự động cho bạn), tôi đã có Oracle DBAs cảnh báo tôi rằng danh mục Oracle sẽ bị phân mảnh sau khi lặp đi lặp lại đối tượng tạo/thả chu kỳ. Cuối cùng điều này sẽ gây ra vấn đề hiệu suất bởi vì không gian bảng SYSTEM không thể được phân mảnh/hợp nhất.

Câu hỏi của tôi là:

  • là phân mảnh một mối quan tâm chính hãng, hoặc không phải là điều bạn cần phải lo lắng về việc trong một môi trường phát triển ứng dụng web điển hình?
  • nếu phân mảnh thực sự là một mối quan tâm, có cách nào tốt hơn để xé xuống và tạo lại lược đồ trong Oracle hơn DROP TABLE/CREATE TABLE không?

Cảm ơn!

Trả lời

7

Đừng tin những DBA

Ít nhất với 10g trở lên khi sử dụng bảng quản lý tại địa phương (LMT) này không phải là một vấn đề.

Và ngay cả khi điều đó đã gây ra bất kỳ sự phân mảnh nào, tôi rất nghi ngờ rằng bạn có thể đo lường tác động của nó - đặc biệt là trên cơ sở dữ liệu được sử dụng cho CI.

+1

LMT của riêng mình nên loại bỏ bất kỳ mối quan tâm ai đó đã có với phân mảnh giả sử không gian bảng 'SYSTEM' được quản lý cục bộ. Nó không rõ ràng với tôi rằng ASM thêm bất cứ điều gì. Và ASM có xu hướng trở thành một công nghệ mang tính chính trị và kỹ thuật nhiều hơn vì nó cho phép DBAs xử lý nhiều nhiệm vụ quản lý lưu trữ hơn, đồng nghĩa với việc chuyển các trách nhiệm đó ra khỏi các nhóm làm điều đó ngày hôm nay. Mặt khác, LMT là một sự thay thế hoàn toàn vượt trội cho các vùng bảng cũ được quản lý từ điển (DMT). –

+0

@JustinCave: cảm ơn vì gợi ý. Tôi đã xóa nhận xét về ASM (dù sao cũng không chắc chắn) –

2

Tôi đang trong quá trình xây dựng quy trình xây dựng CI tại chỗ cho dự án Oracle thứ 2 của mình. Tôi không nghĩ rằng việc bỏ và tái tạo mọi thứ sẽ làm hại (như a_horse_with_no_name đã nêu ở trên). Tôi rất vui khi biết bạn đang nghĩ đến việc mở rộng CI đến các đối tượng cơ sở dữ liệu - quá nhiều nhóm không làm như vậy.

Cách tiếp cận khác có thể là khôi phục cơ sở dữ liệu từ bản sao lưu gần đây mỗi đêm (hoặc sử dụng cơ sở dữ liệu flashback) và di chuyển ứng dụng của bạn từ 'sao lưu sản xuất' sang trạng thái phát hiện tại trên mỗi lần chạy CI. Theo cách đó, mã mà cuối cùng sẽ được áp dụng cho sản xuất sẽ được kiểm tra mỗi đêm dựa vào một cái gì đó mà phần lớn là giống hệt nhau để sản xuất. Đó là một chút thay đổi trong suy nghĩ, nhưng không quá nhiều thay đổi nếu bạn đã nghĩ đến CI.

Nếu bạn ưa thích phương pháp di chuyển, tôi có một công cụ mà tôi đang thực hiện có thể giúp - http://dbgeni.com Nó vẫn còn đang được phát triển, nhưng tôi đã thiết kế nó với CI và quản lý các thay đổi về cơ sở dữ liệu.