แก้ไข / คำนำ: คำถามนี้ถูกย้ายมาจาก SO เนื่องจากฉันสนใจเป็นพิเศษกับคำถามเกี่ยวกับการหมดเวลาของการสืบค้นลิงก์ DB วิธีแก้ปัญหาที่ให้ไว้จาก SO ค่อนข้างโอเค แต่ฉันสนใจคำถามจริงๆ
แรงจูงใจ:
ฉันมีข้อความค้นหาหนึ่งคำที่เรียกใช้ "ถาวร" (มากกว่า 2 วันจนกระทั่งฉันฆ่าเซสชัน) ซึ่งใช้ลิงค์ฐานข้อมูล ปัญหาดูเหมือนว่าฐานข้อมูลระยะไกลไม่พร้อมใช้งานและด้วยเหตุผลบางอย่างที่ยังไม่ทราบว่าไม่มีORA-02068
การยกระดับ (ไม่ต้องพูดถึงที่นี่) และแบบสอบถามเพิ่งรอและรอ
(เคียวรีออกโดยงาน dbms_scheduler ซึ่งดำเนินการโพรซีเดอร์ในแพ็คเกจ PL / SQL ดังนั้นงานก็ยังติดอยู่ แต่นั่นไม่ใช่สิ่งที่น่าสนใจเป็นพิเศษสำหรับแกนหลักของคำถามนี้)
ฉันจำลองสถานการณ์นี้โดยใส่หนึ่งในฐานข้อมูลทดสอบของฉันในโหมด quiesce และสอบถามผ่านลิงก์ฐานข้อมูล ตามที่คาดไว้แบบสอบถามกำลังรอจนกว่าจะถูกยกเลิกด้วยตนเองหรือฐานข้อมูลระยะไกลไม่ได้ถูกสอบถาม
คำถาม:
ฉันไม่สามารถควบคุมพฤติกรรมของฐานข้อมูลระยะไกลและเวลาปัจจุบันดังนั้นฉันจึงค้นหาความเป็นไปได้ในการตั้งค่าการหมดเวลาในแบบสอบถามซึ่งใช้ลิงค์ฐานข้อมูล
เราได้ตรวจสอบแล้วเป็นโปรไฟล์ ( CPU_PER_CALL
ฯลฯ ) sqlnet.ora
พารามิเตอร์เพิ่มพารามิเตอร์การตั้งชื่อในท้องถิ่นโดยตรงในสตริงการเชื่อมต่อ (เช่นการเพิ่ม(connect_timeout=10)
คำนิยามการเชื่อมโยงฐานข้อมูล), เรียกใช้คำสั่งที่มี... for update wait 1
แต่พวกเขาทำงานอย่างใดอย่างหนึ่งสำหรับการประชุมไม่ว่างหรือไม่ได้ใช้งาน แต่ไม่ได้ สำหรับช่วงเวลาที่รอ
ดังนั้นฉันอยู่ในการค้นหาตัวเลือกในด้าน "ท้องถิ่น" ของลิงค์ฐานข้อมูลซึ่งกำหนดเวลาหมดสำหรับการค้นหาผ่านลิงก์ฐานข้อมูล
วิธีแก้ปัญหาบางอย่างชอบalter session set xyz
หรือselect ... from a@b "wait 100" --(yes, I know this syntax doesn't exist)
น่าชื่นชมเนื่องจากฉันไม่มีสิทธิ์ DBA ในฐานข้อมูลเหล่านี้
ขณะนี้ฉันใช้ 10gR2 แต่อัปเกรดเป็น 11gR2 ในอีกไม่กี่สัปดาห์ดังนั้นแนวคิดสำหรับรุ่นใด ๆ เหล่านี้จะมีประโยชน์