अंतर्निहित समस्या अप्रकाशित डेटाबेस कनेक्शन होने के कारण समाप्त हुई। जब कोई कनेक्शन खोला जाता है, तो यह कनेक्शन पूल से चेक आउट हो जाता है। यदि कनेक्शन कभी बंद नहीं होता है, तो पूल को लगता है कि इसका उपयोग अभी भी किया जा रहा है। यह पूल प्रबंधन तर्क को मूल कनेक्शन स्ट्रिंग का उपयोग करके डेटाबेस के साथ समय-समय पर पुन:प्रमाणित करने का कारण बनता है। जब पासवर्ड बदलता है, तो यह जल्दी से विफल लॉगिन प्रयास और खाता लॉकिंग की ओर जाता है।
// Problem logic; connection is never closed/returned to the connection pool.
public static void ConnPoolTest1()
{
OracleConnection conn = new OracleConnection(connectionStringWithPooling);
conn.Open();
//...Do some work
// Sit on this line for 5-10 minutes and examine Oracle's dba_audit_trail.
Console.ReadKey(); // Since connection was never released back to the connection pool, the
// data provider's pool management will regularly re-authenticate with DB.
// If user's password changes before this process dies (releasing the
// connection pools), you start accumulating failed password attempts.
}
इस समस्या का उचित समाधान यह सुनिश्चित करना है कि जब आपका काम पूरा हो जाए तो कनेक्शन हमेशा पूल में वापस आ जाएं!
// Best practice: ALWAYS CLOSE YOUR CONNECTIONS WHEN YOU ARE DONE!
public static void ConnPoolTest2()
{
OracleConnection conn = new OracleConnection(connectionStringWithPooling);
conn.Open();
//...Do some work
conn.Close();
// Sit on this line for 5-10 minutes and examine Oracle's dba_audit_trail.
Console.ReadKey(); // No problem here! No recurring authentication attempts because the
// connection has been returned to the pool.
}
नोट:अन्य उत्तरों ने पासवर्ड बदलने पर पूलिंग को बंद करने और पुराने कनेक्शन पूल को साफ़ करने का सुझाव दिया। इन सुझावों ने हमारे लिए एक अस्थायी पैच के रूप में काम किया, जब हमने अप्रकाशित संसाधनों की खोज की, और उन्होंने समस्या को अलग करने में हमारी बहुत मदद की।