2009-08-05 24 views

Trả lời

17

Một số thông lệ chúng tôi sử dụng dựa trên kinh nghiệm sản xuất của chúng tôi:

  • kết nối Validate khi lấy chúng ra khỏi hồ bơi kết nối.
  • Viết mã dịch vụ của bạn để không cho rằng các kết nối có giá trị - không làm như vậy có thể gây ra khá nhiều đau buồn nhất là trong môi trường sản xuất
  • Bất cứ nơi nào có thể, rõ ràng chặt chẽ và xử lý các kết nối sau khi sử dụng chúng (using(conn){} khối làm việc tốt)
  • Trong một dịch vụ, bạn nên sử dụng các kết nối trong thời gian ngắn nhất có thể - đặc biệt nếu bạn đang tìm cách tạo giải pháp có thể mở rộng.
  • Cân nhắc sử dụng thời gian chờ rõ ràng theo yêu cầu phù hợp với thời lượng yêu cầu thông thường. Điều cuối cùng bạn muốn là có một loại yêu cầu treo để chặn toàn bộ hệ thống của bạn.
  • Bất cứ nơi nào có thể sử dụng các biến liên kết để tránh phân tích cú pháp cứng tại cơ sở dữ liệu (đây có thể là một cơn ác mộng hiệu suất nếu bạn không bắt đầu với thực hành này). Sử dụng các biến liên kết cũng bảo vệ bạn khỏi các cuộc tấn công SQL-injection cơ bản.
  • Đảm bảo bạn có hỗ trợ chẩn đoán đầy đủ được tích hợp trong hệ thống của bạn - hãy xem xét tạo trình bao bọc xung quanh các cuộc gọi ADO của Oracle để bạn có thể thiết lập, ghi nhật ký và định vị tất cả.
  • Cân nhắc sử dụng các thủ tục hoặc chế độ xem được lưu trữ khi có thể để đẩy ngữ nghĩa truy vấn và kiến ​​thức về mô hình dữ liệu vào cơ sở dữ liệu. Điều này cho phép điều chỉnh hồ sơ và truy vấn dễ dàng hơn.
  • Hoặc, hãy xem xét sử dụng thư viện ORM tốt (EF, Hibernate, v.v.) để đóng gói truy cập dữ liệu - đặc biệt nếu bạn thực hiện cả thao tác đọc và ghi.
  • Mở rộng ở trên - không tiêu mã của bạn bằng hàng chục đoạn SQL được viết riêng lẻ. Điều này nhanh chóng trở thành một cơn ác mộng bảo trì.
  • Nếu bạn cam kết với Oracle dưới dạng cơ sở dữ liệu, đừng ngại sử dụng các tính năng dành riêng cho Oracle. Thư viện ODP cung cấp quyền truy cập vào hầu hết các tính năng - chẳng hạn như trả về con trỏ bảng, thao tác theo lô, v.v.
  • Oracle xử lý các chuỗi rỗng ("") và NULL tương đương - .NET không. Chuẩn hóa chuỗi xử lý của bạn khi thích hợp với Oracle.
  • Cân nhắc sử dụng NVARCHAR2 thay vì VARCHAR2 nếu bạn sẽ lưu trữ chuỗi Unicode .NET trực tiếp trong cơ sở dữ liệu của mình. Nếu không, chuyển đổi tất cả các chuỗi unicode để phù hợp với tập con ASCII lõi. Không làm như vậy có thể gây ra tất cả các loại vấn đề tham nhũng dữ liệu khó hiểu và ác.
+0

+1 điều này khá hữu ích. Tôi sẽ để câu hỏi mở để những người khác cũng có thể đóng góp cho điều này. – Vivek

+0

@LBushkin - Không đóng kết nối đủ? Tại sao tôi nên vứt bỏ? –

+0

Nói chung, nếu một loại thực hiện IDisposable, bạn nên gọi Dispose() khi bạn hoàn thành - đó là điều thân thiện để làm nếu mã cơ bản thực hiện bất kỳ tối ưu nào (ví dụ: phát hành sớm tài nguyên) nó có cơ hội để làm như vậy. Trong trường hợp cụ thể của các kết nối cơ sở dữ liệu, một số thư viện tối ưu hóa nội bộ để đáp ứng việc xử lý kết nối - đó là một điều tốt cho cả ứng dụng và cơ sở dữ liệu, vì trong hầu hết các trường hợp kết nối thực sự được gộp lại. Chỉ cần đóng kết nối không phải lúc nào cũng đủ để gợi ý cho nhà cung cấp cơ bản mà bạn đã hoàn thành. – LBushkin

3

Các nhà cung cấp Oracle làm việc tốt trong một ứng dụng ASP.NET, nhưng chú ý đến:

  • Phù hợp với phiên bản bên phải của oracle client 32-bit hoặc 64-bit với hồ bơi ứng dụng của bạn
  • Ứng dụng khách 32 bit cho nhóm ứng dụng 32 bit, ứng dụng khách 64 bit cho nhóm ứng dụng 64 bit.
  • Quyền - cấp quyền sử dụng hồ bơi ứng dụng vào thư mục oracle client (c: \ oracle \ sản phẩm \ 10.2.0 \ client_1)

này không có bất cứ điều gì để làm với ASP.NET, nhưng điều quan trọng cần lưu ý là Oracle lưu trữ chuỗi rỗng và null là rỗng, vì vậy nếu bạn cần biết rằng một cái gì đó rỗng và không rỗng, bạn cần phải thêm một cột bổ sung để theo dõi ...

4

một số mẹo khác:

  • Tránh sử dụng nhà cung cấp Microsoft Oracle bởi vì nó đi ra khỏi hỗ trợ (http://blogs.msdn.com/adonet/archive/2009/06/15/system-data-oracleclient-update.aspx)
  • Nếu bạn đang cam kết đến các tính năng Oracle sử dụng oracle cụ thể và liên kết lắp ráp Oracle.DataAccess mã của bạn
  • Nếu bạn không chắc chắn và muốn linh hoạt, hãy sử dụng lớp System.Data.Common và tải orac nhà cung cấp le thông qua
+0

Ngoài ra, nhà cung cấp Microsoft Oracle (được phân phối cùng với khung công tác .NET) có vấn đề phân tích các giá trị lớn thành StoredProcedures. Các mục lớn (lớn hơn 32.000 byte tôi tin) gây ra lỗi về các loại không phù hợp. Điều này có thể gây ra vấn đề lớn khi làm việc với các đốm màu và dài (lưu trữ văn bản dài). Tuy nhiên, các truy vấn tham số có thể nhận được các mục lớn (hiện tại một trong các dự án của tôi đang sử dụng một hack để giải quyết vấn đề này). – Gertjan

+0

Độ dài tối đa của chuỗi trong quy trình được lưu trữ là 32k ký tự (hoặc byte). Tất cả lớn hơn phải thuộc loại LOB (BLOB, CLOB hoặc NCLOB). LOB có thể> 2GB. – Christian13467

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