Ben diğer biriyle senkronize iki üretim veritabanlarına sahip olduğu bir durum var. Sunucu Bir birincil olarak kabul edilir. Bazen nedeniyle bakım veya bir felaket Server iki birincil olacak.
Demektir bizim kod bazı elle gitmek ve veritabanı bağlantıları için sunucu adını düzenlemek zorunda. Ben bu can sıkıcı buluyorum, bu yüzden yazdım son şey ben hem sunucu bilgileri koymak ve bir döngü kurmak. Oci_connect Server One 3 kez başarısız olursa o Sunucu İki geçmek istiyorum. Sunucu iki 3 kez başarısız olursa, bir bağlantı yapılmış olamazdı kullanıcıya bildirmek istiyorum.
Bu iyi biz sunucuları anahtarlama durumu yaşadım çoğu kez çalıştı. Bugün, örneğin, iyi çalıştı. Bugün öyle değil mi. Bu sadece oturdu ve durmadan döndü. PHP hata günlüğüne hata yok. Dan hareket arıza yok. Ekrana hiçbir hata çıktı. 5 dakika boyunca hiçbir şey.
Öyleyse ben elle aptal yapılandırma dosyasını düzenlemek zorunda kaldı.
Ben muhtemelen farklı olabileceğini sordu ve ben söylendi "veritabanı aşağı dün, ama sunucu. Bugün sunucu aşağı." Tamam ...? Ama ben bir fark görmüyorum. Bu sunucu ile herhangi bir iletişim kurmak tür yapamıyorsam oci_connect return false beklenebilir. Ben o zaman aşımı ve hata beklersiniz. Bu sunucudan bir hata kodunu aldığında sadece geçmek değil. Ne bir ağ sorunu, örneğin, varsa?
Bu oci_connect bir hata veya PHP yapılandırmasında şey bir delice uzun bir zaman aşımı oci_connect verdiği bir olasılık var mı?
Bu "hata" bir tür olup olmadığını sunucunun ilk kadar olup olmadığını görmek için kontrol edebilirsiniz bazı yolu var mı? Bir ping gibi? (Ben komut istemi ile ping yaptım Tabii ki ben bu konuda zamanlama konusunda şüpheci olmama rağmen "şimdi geri geldi", Sunucu Tek bir yanıt var ve sonra söylendi.)
Herkes oci_connect başarısız ve nasıl yapıyor onu tutmak için olmadan durmadan koşmak olabilir neden bazı ışık tutacak eğer neyse, bu yüzden minnettar olurum.
-- Edit: My code looks like the examples on PHP.net only in some loops.
$count = count($servers);
for($i = 0; $i < $count; $i++){
if((!isset($connection)) || ($connection == false)){
// Attempt to connect to the oracle database
$connection = @oci_connect($servers[$i]["user"], $servers[$i]["pass"], $servers[$i]["conid"]) or ($conn_error = oracle_error());
// Try again if there was a failure
if(($connection == false) || (isset($con_error))){
// Three (two more) tries per alternative
for($j = $st; $j < $fn; $j++){
// Try again to connect
$connection = @oci_connect($servers[$i]["user"], $servers[$i]["pass"], $servers[$i]["conid"]) or ($conn_error = oracle_error());
} // for($j = 2; $j < 4; $j++)
} // if($connection == false)
} // if(!isset($connection) || ($connection == false))
} // for($i = 0; $i < $count; $i++)