Feda /dev/ - No Javascript allowed

Normas
spoiler
Personas non gratas
Memes feda dev




Kaledros

3
Fyn4r

https://www.nber.org/papers/w30526

Solo me leí el título

1 respuesta
smarquezp

A ver si vosotros podéis caer en qué es porque me estoy volviendo loco... Problema de cursores de BBDD Oracle en aplicación Java.

Tenemos un bucle que recorre expedientes (hablemos de registros cualquieras), y por cada uno, abre conexión, hace 4 o 5 selects, 4 o 5 inserts o updates, y finalmente dependiendo de si está OK o no el proceso, hace el commit o el rollback de las transaciones. Empieza uno y acaba otro, no es asíncrono, es un bucle for.

El caso es que comienza con el proceso, pero cuando lleva unas 30-40 registros da el error:
ORA-01000: maximum open cursors exceeded.

¿Qué puede ocasionar este error que me esté pasando por alto? ¿No se supone que es por el tema de las conexiones?
En principio cuando hace el commit o rollback, la conexión se cierra, y se crea la siguiente cuando coge el próximo.

La solución que dan en San Stackoverflow es aumentar el número de cursores en bd pero esto no es lo más sensato... ¿Qué podría ser?

4 respuestas
Wei-Yu

#39212 una persona de mi entorno curra en una agencia inmobiliaria bastante pepino, creo que en los directivos había varias personas de la familia de franco (xd)

Estaban bastante locos con el tema, la verdad, pero me pregunto cuál es el impacto en la otra dirección (trabajadores que ahora "necesitan" casas con una habitación extra).

B

#39213 ufff lo primero sería preguntar por qué usar cursores, ocupan muchísima memoria y provocan bloqueos, más si usáis transacciones.

Si aumentas el número de cursores permitidos, ocuparás más memoria, yo me replantearía el tema de los cursores sinceramente

1 respuesta
pineda

#39213 pregunta estupida pero, estas cerrando el cursor?

1 respuesta
Seal67

#39208 Yo creo que muchas veces los de recursos humanos no tienen ni puta idea y les sirve, sobretodo las típicas, igual uno de recursos humanos no sabe que coño es vue pero igual si sabe que le han dicho que necesitan a alguien de front que sepa JavaScript y angular.

Yo creo que muchas veces de las que me han contactado gente de recursos humanos es porque simplemente ven una de esas keyword en mi LinkedIn o CV y contactan como robots

afhn

#39213 fíjate bien que se cierra correctamente la sesión que tal vez no se estén cerrando puesto que si mal no recuerdo (que quizás esté equivocado), al cerrar una sesión también se cierran los cursores, o si no, fíjate bien en el código y ciérralos cada vez que obtengas un result.

smarquezp

#39215 #39216 Ahora mismo el método que crearon está de la siguiente forma.

No se si es la mejor manera de hacerlo, no he tocado mucho tampoco porque está hecho desde hace tiempo y siempre les ha estado funcionando en esta app. Le he puesto trazar para ver si se hacía nueva y se completaba... El transactionManager es un DataSourceTransactionManager de la BD de Oracle...

A ver si vosotros me ilumináis, tampoco tengo mucha idea del tema de cursores y tal por eso quería preguntaros, porque me suena también que un día estuvisteis discutiendo sobre este tema.

2 respuestas
pineda

#39219 echale un ojo a v$open_cursor mientras este en ejecución, si ves que los cursores se abren y no se cierran ya sabes donde tienes el problema

r2d2rigo

#39219 libera las conexiones/transacciones a la BD de manera manual porque si no estás a merced del garbage collector y puede que las esté manteniendo en memoria más tiempo del necesario.

GaN2

#39213 https://www.ibm.com/support/pages/troubleshooting-ora-01000-maximum-open-cursors-exceeded

Básicamente puede ser por dos motivos: O el parámetro open_cursors es muy bajo o no estás cerrando los cursores y se produce un cursor leak.

Y si, en teoría el commit/rollback cierta el cursor si este no está declarado con hold. Peeeeero es buena practica cerrar el cursor explícitamente en el código y no depender del engine de la base de datos.

1
Kaledros

¿Al cerrar la conexión se cierra el cursor o se queda por ahí danzando?

1 respuesta
GaN2

#39223 en teoría se debería de cerrar. De todos modos Oracle te recomienda que cierres el cursor y sesión explícitamente por lo que pueda pasar:

If some code is running above SQL queries, then check that Java Statement, Resultset, or connection are closing properly or not if they have access to the code. If the code is not closing the connections, then close all the open connections properly so that you can save memory leaks in the code and save database memory.

Sacado de aqui:

https://docs.oracle.com/cd/E40329_01/admin.1112/e27149/cursor.htm#OMADM5352

Se me olvidó comentar que dependiendo de la version de Oracle el parámetro open_cursors puede ser 50 y muchas veces es insuficiente para muchas aplicaciones. Asi que lo mismo el torero lo está haciendo todo bien pero la BD está mal configurada.

TMZ

¿Cómo de normal/estúpido es hacer una prueba técnica para un puesto de Front (Angular) y que te pongan 15 preguntas de 16 sobre Python, C#, lógica y Java?

No sé igual es que estoy anticuado, no controlo lo suficiente o que directamente soy gilipollas (bastante factible) pero ¿lo lógico si vas a probar a alguien de Front no es hacerle una puta entrevista de Front? Es que ni 1 puta pregunta de Angular/Typescript, pero cero. Me como la mesa a bocados de la mala ostia.

Lo peor de todo es que es culpa mía porque suelo sudar cuando me piden hacer pruebas técnicas (dado que he tenido muy malas experiencias con charos de Recursos Humanos) pero me dijeron "pequeña prueba técnica" y la empresa en principio es interesante por localización, pasta y demás. Tres putas horas de pequeña prueba técnica, me voy a cagar en todos mis muertos uno a uno.

1 respuesta
Kaledros

#39225 O te han pasado la prueba de otro proceso o te han engañado.

1 1 respuesta
TMZ

#39226 Es bastante raro porque encima está hecho desde testdome, vamos que no ha cogido la charo de turno y ha buscado en google "entrevistar empleado programacion" y listo...

Quiero pensar que se han equivocado al mandarme la prueba o a la hora de describir lo que necesitaban para el puesto porque si no de verdad que no entiendo nada.

2 respuestas
Kaledros

#39227 A mí una vez me mandaron una prueba técnica para Java backend hecha en Node. Cuando les pregunté me dijeron que era la prueba correcta. Les dije que no tenía ni idea de Node y me ghostearon.

1 respuesta
Vedrfolnir

#39227 prueba a llamar y/o mandar un mail a quien te haya dicho de hacer la prueba y que lo aclare. Tiene pinta de prueba equivocada pero nunca se sabe.

1 respuesta
TMZ

#39228 Me da que es básicamente lo que me van a hacer a mí...

#39229 Sinceramente después del rato que he pasado lo último que me apetece es ponerme en contacto con ellos, no te voy a engañar...

1 respuesta
Vedrfolnir

#39230 como solía decirme mi abuela: el No ya lo tienes. Mandas un mail preguntando y te desentiendes. Luego ya que te digan ellos si eso era así o no xD

JuAn4k4

En serio macho

 let received = 0;

... // some code that does nothing.

      received = received + 1
      if (received > 0) {
         success();
      } 
13 3 respuestas
wdaoajw

#39232 :psyduck:

1 respuesta
B

#39232 desu haciendo cosas de top 0.0001?

B

Alguien de data que haya hecho esta certificación?

https://learn.microsoft.com/es-es/certifications/azure-data-engineer/

JuAn4k4

#39233 Lo mejor es que en el PR quiere mantenerlo por si acaso hay que cambiar el count.

1 respuesta
wdaoajw

#39236 luego que sí pagan en cuencos de arroz, me cago en mi puta vida

B

#39232 A ver, es buena forma forma de hacerte creer que estás comprobando algo pero en realidad no.

B

Si eso ha llegado a producción la culpa no es solo del picador... madre de dior.

1 respuesta
B
1

Usuarios habituales