Ben bizim veritabanı izler ve veritabanı aşağı ise sitemizde bakım sayfasını koyar bir süreç oluşturmak için PHP kullanıyorum.
Ben PDO ve Oracle kullanıyorum.
Ben bir sorun varsa insanları uyarmak, bir veritabanı bağlantısını kullanın ve bir kez bir dakika onu sorgulamak için çalışıyorum. Veritabanı aşağı giderse Ancak, komut bir sorun olduğunu bulmaktan önce 15 dakika bekler, bu yüzden her dakika kontrol etmek gerekiyordu benim süreci bu gibi bakarak biter:
06:56:46: SUCCESS -- I take down the database after this success
07:12:48: FAILURE - sent email
07:13:48: FAILURE
...
Ben yerine 15 dakika sonra, hemen e-posta almak istiyorum. Bir kalıcı veritabanı bağlantısı korumak veya ben bir yenisini ben hazırlamak her zaman oluşturmak ve bir sorgu çalıştırmak zorunda bunu yapmak için herhangi bir yolu var mı?
Yararlı eğer burada bir kod grubudur, bulunuyor:
$last_email_time = null; // the time of the last error email sent
$db_conn = null;
$script_start_time = time();
while(true) {
$success = false;
// attempt to create a database connection
if(!$db_conn) {
try {
$db_connection_data = $g_pdo_connection_data['freedom'];
$db_conn = new PDO($db_connection_data['string'], $db_connection_data['user'], $db_connection_data['password']);
$db_conn->setAttribute (PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db_conn->setAttribute (PDO::ATTR_TIMEOUT, 60);
if(!$db_conn) {
throw new Exception("Unable to create a database connection");
}
} catch(Exception $e) {
$last_email_time = handle_error($last_email_time, $e->getMessage());
$db_conn = null;
}
}
// attempt a query
if($db_conn) {
try {
$q = $db_conn->prepare("SELECT 1 FROM DUAL");
$q->execute();
$q->closeCursor();
if(!$q) {
throw new Exception("Unable to query the database");
}
$success = true;
} catch(Exception $e) {
$last_email_time = handle_error($last_email_time, $e->getMessage());
}
}
// remove the maintenance page if we were successful, else clear the connection
if($success) {
handle_success();
$last_email_time = null;
} else {
$db_conn = null;
}
flush();
if(ob_get_contents() != '') {
ob_flush();
}
sleep(60);
}