Oracle - Problemas desde ASP

 
Vista:

Problemas desde ASP

Publicado por MarMed (1 intervención) el 06/07/2006 16:07:13
Hola amigos...
Tengo un problema con una consulta sql muy extensa y pesada, que hago desde una pagina asp a una base de datos en oracle (9i)...
Cuando la hago de esa forma (desde asp) la pagina da error, es decir, no me devuelve nada, por lo que tarda...
En cambio, si a la consulta sql la ejecuto directamente en el servidor de la base de datos (a traves del sql navigator), aunque tarda una bestialidad (aproximadamente 1 minuto), me devuelve los registros...
No creo que el problema sea del hard, ya que la maquina es un pentium IV de 2 y picho GHz, y 512 MB de RAM...
Probe ampliando el timeout, desde la pagina,desde el iis y desde los odbc (la conexion la hago con un dns)...
Con la misma consulta pero mas acotada (en un rango de fechas mas corto) no tengo problema... El problema surge cuando son muchos dias...

select p.pid, p.name,
to_date('010606', 'DDMMYY') stime,
to_date('300606', 'DDMMYY')+1 ftime,
nvl(s.col,0) ocol,
nvl(s.dur,0) odur,
nvl(s.bdur,0) obdur,
nvl(t.col,0) tcol,
nvl(t.dur,0) tdur,
nvl(t.bdur,0) tbdur,
nvl(s.charge,0) scharge,
nvl(t.charge,0) bcharge,
nvl(s.cost,0) cost,
t.trate tetrate,
s.trate otrate,
nvl(s.orcdrs,0) ocdrs,
nvl(t.tecdrs,0) tcdrs from providers p,
-- Subconsulta T
(select c.pid,
count(*) col,
ceil(sum(elapsedtim)/60) dur,
ceil(sum(billdurbytype(elapsedtim,tbtype))/60) bdur,
sum(bcharge) charge,SUM(DECODE(p.elapsedtim,0,0,p.brate)) trate ,
SUM(DECODE(p.elapsedtim,0,0,1)) tecdrs
from proxycdr p, providers c
where p.cdate > to_date('010606', 'DDMMYY') and
p.cdate < to_date('300606', 'DDMMYY')+1 and
p.pidt=c.pid and
((to_char(p.prefix) like '%'))
group by c.pid ) t ,
-- Subconsulta S
(select c.pid,
count(*) col,
ceil(sum(elapsedtim)/60) dur,
ceil(sum(billdurbytype(elapsedtim,obtype))/60) bdur,
sum(scharge) charge, sum(bcharge) cost,
SUM(DECODE(p.elapsedtim,0,0,p.brate)) trate ,
SUM(DECODE(p.elapsedtim,0,0,1)) orcdrs
from proxycdr p, providers c
where p.cdate > to_date('010606', 'DDMMYY') and
p.cdate < to_date('300606', 'DDMMYY')+1 and
p.pid=c.pid and
((to_char(p.prefix) like '%'))
group by c.pid ) s
where p.pid=T.pid(+) and p.pid=s.pid(+) order by p.name

Como veran si es anidada (tiene 2 subconsultas) y lo que devuelve es una tabla con un resumen del trafico de los proveedores, con totalizacion de cantidad de llamadas, precio, costo, tanto de los que llamas como aquellos a traves de los cuales se realizan llamadas...
Recuerden que anda con un rango de fechas corto... El que esta arriba (del 01/06 al 30/06 ya da error, tienen que ser como mucho veintipico dias)

Desde ya muchas gracias

los campos bcharge y scharge tienen el cargo (precio) de las llamadas entrantes y salientes...
billdurbtype es una funcion almacenada en la base
y si, me reconoce todas las funciones porque a veces anda...
es mas, si la misma consulta la ejecuto desde el sql navigator (que es para el oracle algo asi como el sql query del sql server) en el servidor donde esta la base de datos, anda perfectamente...
y como dije, desde la pagina tambien anda, pero con rangos de fechas cortos..

segui haciendo pruebas, y esto es a veces... en algunos minimos casos, pude hacerla andar desde la pagina, simplemente intentantado enesimas veces...
tambien parecio mejorar (no se si mejoro) "dando vuelta" las cosas en to_date, ahora con MMDDYY, tal vez asi trabaja menos,p orque el server esta en ingles...

y no, no la hice yo... es de un sistema obsoleto que estoy recuperando...
tal vez lo mejor sea volver a empezar... pero esta bastante bien esto, asi que me gustaria aprovecharlo

para mi tiene que ver con algo del estilo time out...
aunque seguramente la forma en que esta hecha la consulta no sea la optima...

nuevamente gracias por la prontitud de las respuestas

espero ansioso otro comentario

Bueno... como dije probe con eso de crear la tabla temporal...

Desde la pagina asp hago:

Conn.Execute("insert into TEMPORAL" & SQLstring )

Donde Conn es una conexion ADO, TEMPORAL es la tabla temporal en la que quiero guardar los datos y SQLString es la cadena que tiene la consulta tan nombrada...

Esto me devuelve el string del insert que, si lo ejecuto desde el server, me pone los registros en esa tabla (con lo que solucionaria el problema)... Pero desde la pagina no se por que no me los pone... Tarda un rato, como que esta haciendo algo, y no me da ningun error... Pero no me inserta los registros...
Como la base es Oracle y se que necesita (necesita?) un commit, le pongo despues Conn.Execute("commit") y obtengo los mismos resultados.... No tengo registros...

El problema parece haberse convertido en otro...
Pero sigue siendo un problema....
Auqnue distinto... ytal vez surgan nuevas ideas....

Nuevamente GRACIAS!!!

Nuevamente muchisimas gracias por la dedicacion... Yo tambien tuve pesadillas...
Tal vez los consejos para optimizar la consulta sean buenos, pero no quiero meterme a tocar la consulta... Si no logro que esto ande, lo hago de nuevo...
Ahora, como dije antes, intento solucionar otro problema (que me solucionaria todos)... Hacer un insert... Nunca habia tenido problemas... Pero este Oracle!!!
Como les dije, hasta intente mandar un commit... Pero estoy en lo mismo...

Gracias a todos los que me estan ayudando con esto...
Cuenten conmigo para lo que sea...

Tras nuevas pruebas, con esto de la tabla temporal, si... puedo hacer inserts... con rangos de fechas chicos...
Estamos en la misma... Si el rango de fechas es grande no hace el insert (como pasaba con el select)...

Estuve tocando los timeouts (les recuerdo), tanto los del internet information server, como los propios de oracle (parametro sqlnet.expire_timeout del archivo sqlnet.ora, el cual anule y aumente) y hasta en la pagina misma... Sin ningun resultado...
Por lo que entiendo, cuando desde la pagina mando el insert al oracle, se las tiene q arreglar el oracle, y no depende de asp, ni de la maquina cliente... Entonces, si anda desde el server, porque no anda si lo mando desde la pagina... Por eso pienso que algo tiene q ver la pagina.. Me dijeron que tal vez sea la conexion, que tengo que actualizar la libreria ADO, etc...
Pero todavia no me convence... Tengo que hacerlo de nuevo?
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