Chỉnh sửa / Lời nói đầu: Câu hỏi này đã được di chuyển từ SO vì tôi đặc biệt quan tâm đến câu hỏi về thời gian chờ trên các truy vấn liên kết DB. Cách giải quyết được cung cấp từ SO có phần ổn, nhưng tôi thực sự quan tâm đến câu hỏi.
Động lực:
Tôi đã có một truy vấn chạy "mãi mãi" (hơn 2 ngày, cho đến khi tôi giết phiên), đó là sử dụng liên kết cơ sở dữ liệu. Vấn đề dường như là cơ sở dữ liệu từ xa trở nên không khả dụng và vì một số lý do chưa rõ ràng ORA-02068
đã không được nêu ra (không được thảo luận ở đây) và truy vấn chỉ chờ và chờ đợi.
(Truy vấn được ban hành bởi một công việc dbms_scheduler, thực thi một thủ tục trong gói PL / SQL. Do đó, công việc cũng bị kẹt. Nhưng đó không phải là mối quan tâm đặc biệt cho cốt lõi của câu hỏi này)
Tôi đã mô phỏng tình huống này bằng cách đặt một trong các DB thử nghiệm của mình ở chế độ hoạt động và truy vấn nó qua một liên kết cơ sở dữ liệu. Như dự đoán, truy vấn đã đợi cho đến khi bị hủy thủ công hoặc DB từ xa không được yêu cầu.
Câu hỏi:
Tôi không có quyền kiểm soát hành vi và thời gian hoạt động của cơ sở dữ liệu từ xa, vì vậy tôi đang tìm kiếm một số khả năng để đặt thời gian chờ cho truy vấn đang sử dụng liên kết cơ sở dữ liệu.
Tôi đã xem xét các cấu hình ( CPU_PER_CALL
vv), sqlnet.ora
các tham số, thêm các tham số đặt tên cục bộ trực tiếp vào chuỗi kết nối (chẳng hạn như thêm (connect_timeout=10)
vào định nghĩa liên kết cơ sở dữ liệu), chạy một lệnh với ... for update wait 1
, nhưng chúng có thể hoạt động cho các phiên bận hoặc nhàn rỗi, nhưng không cho các phiên trong chờ đợi.
Vì vậy, tôi đang tìm kiếm một số tùy chọn ở phía "cục bộ" của liên kết cơ sở dữ liệu, loại này đặt thời gian chờ cho các truy vấn trên các liên kết cơ sở dữ liệu.
Một số giải pháp thích alter session set xyz
hoặc select ... from a@b "wait 100" --(yes, I know this syntax doesn't exist)
sẽ được đánh giá cao, vì tôi không có quyền DBA đối với các DB cụ thể này.
Tôi hiện đang sử dụng 10gR2 nhưng nâng cấp lên 11gR2 sau vài tuần, vì vậy ý tưởng cho bất kỳ phiên bản nào trong số này sẽ hữu ích.