Stává se to proto, že váš kód požaduje připojení z fondu připojení Oracle a fond připojení vrací odpojené / zastaralé připojení k databázi Oracle. ODP.NET sám netestuje stav připojení odeslaného klientovi.
Takže pro jistotu buď zkontrolujte connection status == Open
pro připojení přijaté z fondu, když provedete Connection.Open()
NEBO
nechte ODP.NET provést kontrolu za vás nastavením Validate Connection = true
ve vašem připojovacím řetězci v web.config.
Obě tyto metody mají vliv na výkon, protože testují stav připojení pokaždé, když se potřebujete připojit k databázi.
Třetí možností, kterou používám, je použití výjimek. Nejprve buďte optimističtí a použijte jakékoli připojení vrácené z fondu připojení. Pokud získáte ORA - 3135, požádejte o nové připojení a spusťte dotaz znovu jako smyčku while. V nejlepším případě můžete získat své 1. připojení jako platné a váš dotaz se provede. V nejhorším případě jsou všechna připojení ve vašem fondu zastaralá a v takovém případě bude kód spuštěn Nkrát (kde N je velikost fondu připojení).