Düzenle / Önsöz: Ben özellikle DB bağlantı sorguları zaman aşımı sorusu ile ilgileniyorum Bu soru SO taşınmıştır. SO sağlanan geçici çözüm biraz Tamam, ama gerçekten sorunun kendisi ile ilgileniyorum.
Motivasyon:
Bir veritabanı bağlantısı kullanan "sonsuza kadar" (oturumu öldürene kadar 2 günden fazla) çalışan bir sorgu vardı. Sorun, uzak veritabanının kullanılamaması ve henüz bilinmeyen bir nedenden ötürü ORA-02068
(burada tartışılmayacak) hayırın ortaya çıkması ve sorgunun beklemesi ve beklenmesi gibi görünüyordu.
(Sorgu, PL / SQL paketinde bir prosedür yürüten bir dbms_scheduler işi tarafından verilir. Sonuç olarak, iş de sıkışmıştı. Ancak bu sorunun özü için özel bir ilgi alanı yok)
Test DB'lerimi quiesce moduna koyarak ve bir veritabanı bağlantısı üzerinden sorgulayarak bu durumu simüle ettim. Beklendiği gibi, sorgu elle iptal edilene veya uzak DB sorgulanana kadar bekliyordu.
Soru:
Uzak veritabanı davranışı ve çalışma süresi üzerinde hiçbir denetimim yok, bu yüzden bir veritabanı bağlantısı kullanan bir sorgu üzerinde bir zaman aşımı ayarlamak için bazı olasılık için arama.
Profilleri ( CPU_PER_CALL
vb.), sqlnet.ora
Parametreleri, doğrudan bağlantı dizesine ( (connect_timeout=10)
veritabanı bağlantısı tanımına ekleme gibi) doğrudan yerel adlandırma parametreleri ekleyerek , bir komut çalıştırarak baktım ... for update wait 1
, ancak meşgul veya boş oturumlar için çalışıyorlar, ama değil bekleme oturumları için.
Bu yüzden veritabanı bağlantılarının sorguları için bir zaman aşımı ayarlar veritabanı bağlantı "yerel" tarafında bazı seçenek için arıyorum. Bu DB'lerde DBA haklarına sahip olmadığım için
bazı çözümler gibi alter session set xyz
veya select ... from a@b "wait 100" --(yes, I know this syntax doesn't exist)
takdir edilecektir.
Şu anda 10gR2 kullanıyorum ancak birkaç hafta içinde 11gR2'ye geçiyorum, bu nedenle bu sürümlerden herhangi biri için fikirler yararlı olacaktır.