[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: один запрос на большом количестве серверов (цикл)
mouserok
нужно в цикле перебрать коннекты и выполнить запрос ... что в моём скрипте не верно


$conn_SRV1 = sybase_connect ('SRV1', 'user', 'pass') or die ('Could not connect');
$conn_SRV2 = sybase_connect ('SRV2', 'user', 'pass') or die ('Could not connect');

$SRV_ALL = $conn_SRV1;
$SRV_ALL .= $conn_SRV2;

$query = "exec proc";

while ($sr = sybase_fetch_assoc($SRV_ALL))
{
sybase_query ($query, $sr);
}




Спустя 15 минут, 23 секунды (17.08.2010 - 14:25) waldicom написал(а):
К сожалению не знаю, как насчет sybase, но с mysql такое не прокатило бы:
- зачем делается конкатеация,причем конкатенация ресурсов?
- где само выполнение запроса?

Спустя 5 минут, 50 секунд (17.08.2010 - 14:31) mouserok написал(а):
ну это в php ...

на большом кол-ве сервере нужно выполнить вызов процедуры ... вот интересно как это можно через цикл ?

Спустя 6 минут, 54 секунды (17.08.2010 - 14:38) waldicom написал(а):
Цитата (mouserok @ 17.08.2010 - 13:31)
ну это в php ...

на большом кол-ве сервере нужно выполнить вызов процедуры ... вот интересно как это можно через цикл ?

Вы не ответили на вопросы выше...
Это Ваш код или где-то взяли?

Спустя 1 минута, 29 секунд (17.08.2010 - 14:39) linker написал(а):
Типа так
$conn_SRV = arrya();
$conn_SRV[] = sybase_connect ('SRV1', 'user', 'pass') or die ('Could not connect');
$conn_SRV[] = sybase_connect ('SRV2', 'user', 'pass') or die ('Could not connect');
foreach($conn_SRV as $conn)
{
$result = sybase_query('exec proc', $conn);
while ($data = sybase_fetch_assoc($result))
{
}
}

Спустя 37 минут, 55 секунд (17.08.2010 - 15:17) mouserok написал(а):
помогло ... а если селект с последующим выводом ... ????
вот так не прошло ((


$conn_SRV = array();
$conn_SRV[] = sybase_connect ('SRV1', 'user', 'pass') or die ('Could not connect');
$conn_SRV[] = sybase_connect ('SRV2', 'user', 'pass') or die ('Could not connect');
foreach($conn_SRV as $conn)
{
$result = sybase_query('select * from table', $conn);
while ($data = sybase_fetch_assoc($result))
{
echo $data['row_name'];
}
}

Спустя 11 минут, 27 секунд (17.08.2010 - 15:28) linker написал(а):
А что не прошло?

Спустя 5 минут, 13 секунд (17.08.2010 - 15:34) mouserok написал(а):
ну должен был выдать значения строк поля

Спустя 7 минут, 13 секунд (17.08.2010 - 15:41) linker написал(а):
Ну попробуйте для начала сделать обработку ошибок, потом можно и подебажить
print_r($data);

Спустя 2 часа, 22 минуты, 13 секунд (17.08.2010 - 18:03) mouserok написал(а):
а вот еще один вопрос ...
мне потом когда перебираю таблицу нужно инсертить данные где нужно чтоб писалось как "SRV1", "SRV2" и т.д.

как из массива правильно извлечь или нужно что-то дополнительно дописать ??

Спустя 28 минут, 11 секунд (17.08.2010 - 18:31) linker написал(а):
$conn_SRV[0] или $conn_SRV[1].

Спустя 14 часов, 6 минут, 27 секунд (18.08.2010 - 08:38) mouserok написал(а):
нужно чтоб когда исп. $conn_SRV .... при выполнении скрипта нужно ввести что-то типа "conn_SRV" ... что-то куда-то нужно дописать ... но куда ??? blink.gif

Спустя 15 минут, 53 секунды (18.08.2010 - 08:54) linker написал(а):
В цикле
foreach($conn_SRV as $index => $conn)
{
$result = sybase_query('exec proc', $conn);
while ($data = sybase_fetch_assoc($result))
{
echo !$index?'SRV1':'SRV2';
}
}

Спустя 19 минут, 45 секунд (18.08.2010 - 09:13) mouserok написал(а):
а в инсерт мне это как вставить ??

sybase_query("insert into DB..table (DBS_srv_name, DBS_db) values ('".$data['DBS_srv_name']."', '".$data['DBS_db']."')", $conn_PRIME);

Спустя 16 минут, 35 секунд (18.08.2010 - 09:30) linker написал(а):
sybase_query("...", $conn_SRV[индекс нужного соединения]);

Спустя 9 минут, 41 секунда (18.08.2010 - 09:40) mouserok написал(а):
не так наверное выразился
вот есть скрипт где чтоб в дальнейшем узнать с какого сервера был инсерт нужно вместо ".$data['DBS_srv_name']." вставить то что сможет их идентифицировать

insert into DB..table (DBS_srv_name, DBS_db) values ('".$data['DBS_srv_name']."', '".$data['DBS_db']."')

то есть при выполнении должно выглядеть вроде этого

insert into DB..table (DBS_srv_name, DBS_db) values ('SRV1', 'master')
insert into DB..table (DBS_srv_name, DBS_db) values ('SRV1', 'sys')
insert into DB..table (DBS_srv_name, DBS_db) values ('SRV1', 'qwerty')

insert into DB..table (DBS_srv_name, DBS_db) values ('SRV2', 'master')
insert into DB..table (DBS_srv_name, DBS_db) values ('SRV2', 'sys')
insert into DB..table (DBS_srv_name, DBS_db) values ('SRV2', 'qwerty')

Спустя 19 минут, 6 секунд (18.08.2010 - 09:59) linker написал(а):
Ну ты и так уже ответил на свой вопрос осталось малясь массив соединений переделать в ассоциативный
$conn_SRV['SRV1'] = sybase_connect ();
$conn_SRV['SRV2'] = sybase_connect ();
Или я опять неправильно понял?

Спустя 9 минут, 45 секунд (18.08.2010 - 10:08) mouserok написал(а):
ну вот полностью код ... так вот когда он будет инсертить записи

при таком раскладе
$conn_SRV['0']
вернет "Resource id #3"
а мне нужно чтоб что-то вроде conn_SUMPF или SUMPF ... чтоб в дальнейшем при выборке я понимал что инсерт выполнялся с сервера SUMPF

<?
include ("config.php");

$conn_SRV = array();
$conn_SRV[] = $conn_SUMPF;
$conn_SRV[] = $conn_DBG;
foreach($conn_SRV as $conn)
{
$result = sybase_query("exec oper..DBS_Get_space", $conn);
while ($data = sybase_fetch_assoc($result))
{
}
}


foreach($conn_SRV as $conn)
{
$result = sybase_query("select * from oper..DBS_space_prep", $conn);
while ($data = sybase_fetch_assoc($result))
{
sybase_query("insert into oper..DBS_space (DBS_date, DBS_srv_name, DBS_db, DBS_total, DBS_free, DBS_used, DBS_message)
values ('"
.$data['DBS_date']."', '".$conn_SRV['0']."', '".$data['DBS_db']."', ".$data['DBS_total'].", ".$data['DBS_free'].", ".$data['DBS_used'].", '".$data['DBS_message']."')", $conn_SUMPF);
}
?>

Спустя 15 минут (18.08.2010 - 10:23) linker написал(а):
Я выше тебе уже показал куда копать - ассоциативный массив.
<?
include ("config.php");

$conn_SRV = array();
$conn_SRV['SUMPF'] = $conn_SUMPF;
$conn_SRV['DBG'] = $conn_DBG;
foreach($conn_SRV as $conn)
{
$result = sybase_query("exec oper..DBS_Get_space", $conn);
while ($data = sybase_fetch_assoc($result))
{
}
}


foreach($conn_SRV as $ServName => $conn)
{
$result = sybase_query("select * from oper..DBS_space_prep", $conn);
while ($data = sybase_fetch_assoc($result))
{
sybase_query("insert into oper..DBS_space (DBS_date, DBS_srv_name, DBS_db, DBS_total, DBS_free, DBS_used, DBS_message)
values ('"
.$data['DBS_date']."', '".$ServName."', '".$data['DBS_db']."', ".$data['DBS_total'].", ".$data['DBS_free'].", ".$data['DBS_used'].", '".$data['DBS_message']."')", $conn_SUMPF);
}
}

?>

Спустя 1 день, 5 часов, 32 минуты, 39 секунд (19.08.2010 - 15:56) mouserok написал(а):
как должно выглядеть скрипт чтоб возвращал статус удачно или не удачно в режиме real-time

в таком раскладе дохнет сразу на первом неудавшимся запросе (( не пытаясь выполнить остальные

<?
include ("config.php");

$conn_SRV = array();
$conn_SRV['SUMPF'] = $conn_SUMPF;
$conn_SRV['DBG'] = $conn_DBG;
foreach($conn_SRV as $conn)
{
$result = sybase_query("exec oper..DBS_Get_space", $conn) or die('Error');
while ($data = sybase_fetch_assoc($result))
{
}
}


foreach($conn_SRV as $ServName => $conn)
{
$result = sybase_query("select * from oper..DBS_space_prep", $conn);
while ($data = sybase_fetch_assoc($result))
{
sybase_query("insert into oper..DBS_space (DBS_date, DBS_srv_name, DBS_db, DBS_total, DBS_free, DBS_used, DBS_message)
values ('"
.$data['DBS_date']."', '".$ServName."', '".$data['DBS_db']."', ".$data['DBS_total'].", ".$data['DBS_free'].", ".$data['DBS_used'].", '".$data['DBS_message']."')", $conn_SUMPF);
}
}

?>

Спустя 23 часа, 4 минуты, 34 секунды (20.08.2010 - 15:01) mouserok написал(а):
понял, что ты сказал в другой теме ... опустим слова "удачно"

то есть данный скрипт выдает результат по двум серверам ... вот как выполнить чтоб пока обрабатывается запрос на втором сервере я уже смог увидеть результат первого, а затем когда закончит запрос на втором сервере в табл. добавились данные второго сервера !?

Спустя 2 минуты, 44 секунды (20.08.2010 - 15:03) linker написал(а):
Не очень понял вопроса

Спустя 18 минут, 49 секунд (20.08.2010 - 15:22) mouserok написал(а):
include ("config.php");

$conn_SRV = array();
$conn_SRV['SUMPF'] = $conn_SUMPF;
$conn_SRV['DBG'] = $conn_DBG;
foreach($conn_SRV as $conn)
{
$result = sybase_query("exec oper..DBS_Get_space", $conn) or die('Error');
while ($data = sybase_fetch_assoc($result))
{
echo $data['id'];
}
}


к примеру процедура будет возвращать результаты с полем id ... но на экране я их увижу только когда foreach полностью пройдет по всем серверам
нужно:
SRV1 вернул результат и я его сразу увидел на странице затем пока SRV2 и так далее ... то есть в реальном времени ... надеюсь правильно выразился

Спустя 18 минут, 7 секунд (20.08.2010 - 15:40) linker написал(а):
Ну не используй foreach(), всегда можно обратиться к напрямую к конкретному элементу массива через ключ.

Спустя 13 минут, 29 секунд (20.08.2010 - 15:54) mouserok написал(а):
???

Спустя 15 минут, 14 секунд (20.08.2010 - 16:09) mouserok написал(а):
вроде так должно выглядеть ... если процедура вернет поле с значением "Error" можно будет увидеть где она не отработала.

как сделать по др. не знаю (((

foreach($conn_SRV as $ServName => $conn)
{
$result = sybase_query("exec oper..DBS_Get_space", $conn) or die('Error');
while ($data = sybase_fetch_assoc($result))
{
if ($data['err']=='Error') {echo "поцедура сервере".$ServName." не выполнилась";}
}
}

Спустя 3 минуты, 19 секунд (20.08.2010 - 16:12) linker написал(а):
Все, я совсем запутался чего же тебе надо, наверное заработался за сегодня совсем smile.gif

Спустя 11 минут, 13 секунд (20.08.2010 - 16:24) mouserok написал(а):
foreach($conn_SRV as $ServName => $conn)
{
$result = sybase_query("exec oper..DBS_Get_space", $conn) or die('Error');
while ($data = sybase_fetch_assoc($result))
{
if ($data['err']=='Error') {echo "поцедура сервере".$ServName." не выполнилась";}
}
}


извини за тупость я только из начинающих ....
вот код ... где переберается каждый сервер и накаждом выполняется скрипт "exec oper..DBS_Get_space"
после того как по всем серверам он выполнится мне будет выдан список серверов где процедура не верно отработала
так вот хочу чтоб этот список "серверов где процедура не верно отработала" выдавался по мере выполнения на серверах

то есть к примеру в 16:00:00 открыл стр. 16:00:05 стр. вернула результат
поцедура на сервере SRV1 не верно выполнилась
поцедура на сервере SRV4 не верно выполнилась
поцедура на сервере SRV5 не верно выполнилась

А НУЖНО
16:00:00 открыл стр.
в 16:00:01 стр. вернула результат
поцедура на сервере SRV1 не верно выполнилась

в 16:00:04 стр. вернула результат
поцедура на сервере SRV1 не верно выполнилась
поцедура на сервере SRV4 не верно выполнилась

в 16:00:05 стр. вернула результат
поцедура на сервере SRV1 не верно выполнилась
поцедура на сервере SRV4 не верно выполнилась
поцедура на сервере SRV5 не верно выполнилась

Спустя 4 дня, 17 часов, 47 минут, 32 секунды (25.08.2010 - 10:11) mouserok написал(а):
???? blink.gif

Спустя 32 минуты, 38 секунд (25.08.2010 - 10:44) linker написал(а):
Значит разделяй процессы, выполнение процедуры - это одно, вывод результата - это другое.

Спустя 33 минуты, 22 секунды (25.08.2010 - 11:17) mouserok написал(а):
легко сказать ... знал бы как организовать - не спрашивал

если знаешь - покажи плиз

Спустя 5 часов, 42 минуты, 30 секунд (25.08.2010 - 17:00) mouserok написал(а):
извеняюсь за настойчивость .... но я правда без руля как это должно выглядеть

Спустя 4 часа, 52 минуты, 28 секунд (25.08.2010 - 21:52) linker написал(а):
Кажется до меня доперло, к сожалению браузер не отобразит вывод, пока либо скрипт не отработает до конца, либо пока поступившие данные не превысят по размеру лимит внутреннего буфера.

Спустя 10 часов, 57 минут, 31 секунда (26.08.2010 - 08:50) mouserok написал(а):
ну да ....

Спустя 4 часа, 21 минута, 5 секунд (26.08.2010 - 13:11) mouserok написал(а):
linker

хм .... вроде где-то видел что можно это обойти

Спустя 43 минуты, 35 секунд (26.08.2010 - 13:54) linker написал(а):
Я не задавался такими вопросами, можешь погуглить на эту тему.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.