PHP - Conexion ODBC con ORACLE, se pierde la conexión

 
Vista:

Conexion ODBC con ORACLE, se pierde la conexión

Publicado por Simon (1 intervención) el 12/09/2017 16:47:23
Saludos amigos, está es mi primera consulta:
tengo una página PHP donde tengo código que lee datos de una base de datos ORACLE y pasa el resultado de dicha consulta a un base de datos POSTGREE, cada una en un servidor diferente; la consulta se ejecuta bien, es decir, hace lo que quiero que haga, el problema es que dicha consulta la quiero ejecutar por ejemplo 30 veces (una por cada dia del mes, donde la fecha es un parámetro de la consulta), pues bien, la consulta NO logro que se ejecute mas de 4-5 veces seguidas (cada ejecución tarda como 20 segundos), pareciera que la conexión se perdiera.
he intentado de varias formas pero NO logro mas que eso, se ejecuta bien 4 o 5 veces, luego simplemente se para sin marcar ningún error, he intentado capturar algún tipo de error que se genere pero nada, no me muestra ningún error.
me imagino que debe ser algo de configuración en mi servidor, donde tengo el APACHE y POSTGREE, no se, algo del tiempo de conexión odbc_exec, algún TIMEOUT, pero de verdad que no consigo hacer que funcione de forma continua, tengo varios días buscando pero nada.
dejo mi codigo PHP, como lo digo, funciona bien, lo único es que NO logro que ejecute la consulta 10, 20 o n cantidad de veces que deseo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
<?php
 
	include("pgconexion.php"); 		//Conexion con PostGres
	include("centiconexion.php"); 	//Conexion con CENTINELA
	include("funciones_bd.php");  	//Funciones varias
 
	//********************************************************************************
	// Funcion que actualiza el parámetro FECHA en la consulta
	//********************************************************************************
	function PreparaSQL($Lafecha){
	  	//NO coloco la consulta porque es muy larga, aqui simplemente se actualiza la fecha
		$elsql = "MI CONSULTA";
	  	return $elsql;
	}
 
	//********************************************************************************
	// Funcion para comparar las fechas, intente de varias formas y esta fue la mejor
	// manera que consegui
	//********************************************************************************
	function getEstado($fecha1, $fecha2){
		list($day1,$mon1,$year1) = explode('/',$fecha1);
		list($day2,$mon2,$year2) = explode('/',$fecha2);
 
		if(mktime(0,0,0,$mon1,$day1,$year1) < mktime(0,0,0,$mon2,$day2,$year2)){
			#$fecha1 es menor a $fecha2
			return 0;
		} elseif (mktime(0,0,0,$mon1,$day1,$year1) == mktime(0,0,0,$mon2,$day2,$year2)){
			#$fecha1 es igual a $fecha2
			return 1;
		} else {
			#$fecha1 es mayor a $fecha2
			return 2;
		}
	}
 
 
	//Estos son datos que coloco simplemente como información
	echo "Actualización de POTENCIAL y DISPONIBLE" ."<br>";
	$Fecha = date_create_from_format('Y-m-d', '2017-01-19');
	$FechaInicio = $Fecha;
	$FechaInicio = $FechaInicio->format('d/m/Y');
 
	//a la fecha de inicio le sumo 10, 20, 30 días, lo que necesite
	$FechaFinal = dameFecha($FechaInicio, 10);
	echo "Fecha: " . $FechaInicio ."<br>";
	echo "Hasta: " . $FechaFinal ."<br>";
 
	//aquie es donde ejecuto mi proceso para cada dia
	while (getEstado($FechaInicio, $FechaFinal) < 2){
 
		$sql = PreparaSQL($FechaInicio);
        //realizamos la consulta
        $result = odbc_exec($centiconexion, $sql)or die(exit("Error en odbc_exec"));
 
 
		$filas = 0;
		//recorro el resultado de la consulta
		//NOTA por lo general siempre se para la consulta aqui, yo consulto la variable
		//$result y $centiconexion con var_dump y pareciera estar bien y no entiendo porque
		//no continua la ejecucion (claro, despues de la cuarta o quinta pasada)
        while ($row = odbc_fetch_array($result)) {
		    $filas ++;
		    $funcion = "centinela.act_potencial_disponible";
			$string = db_build_insert($row, $funcion, 3);
 
			// actualizo el postgree
			$incluir = pg_query($pgconexion, $string) or die (exit("Error en pg_query:" . pg_last_error($pgconexion)));
		}
 
		echo "Se registraron: $filas filas correctamente en la tabla POTENCIAL_DISPONIBLE para la fecha: $FechaInicio <br>";
 
		//Limpiamos las variables
		odbc_free_result($result);
	    unset($row);
 
	    //INCLUSO he intentado cerrando la conexión y abriendola nuevamente, pero el resultado es el mismo
	    //se ejecuta bien el proceso solo 4 o 5 veces
	    //odbc_close($centiconexion); 
	    //unset($centiconexion);
	    //$centiconexion = odbc_connect($dsn, $usuario, $clave);
		//if(!$centiconexion) {
		//    echo  "Error de Conexion!(" . odbc_error($centiconexion) . ") " . odbc_errormsg();
		//	exit;
		//};
 
		//SUMO uno a la fecha para repetir el proceso
		$FechaInicio = dameFecha($FechaInicio, 1);
		echo $FechaInicio ."<br>";
	};
 
	echo "Finalizo la ejecución<br>";
 
	//cerramos las conexiones
	odbc_close($centiconexion);
	pg_close($pgconexion);
 
?>

muchas gracias por la ayuda que puedan prestar a este humilde servidor
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder