Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Hacer un select a un registro específico a una tabla en ORACLE

Estas en el tema de Hacer un select a un registro específico a una tabla en ORACLE en el foro de Oracle en Foros del Web. Tengo un pequeño problema. Tengo una tabla en ORACLE la cual tiene 51 GB de información y no tiene índice creado. No se le puede ...
  #1 (permalink)  
Antiguo 04/10/2005, 13:10
Avatar de RsOfT  
Fecha de Ingreso: marzo-2002
Ubicación: InterNET
Mensajes: 1.119
Antigüedad: 17 años, 1 mes
Puntos: 7
Hacer un select a un registro específico a una tabla en ORACLE

Tengo un pequeño problema.
Tengo una tabla en ORACLE la cual tiene 51 GB de información y no tiene índice creado. No se le puede crear un índice porque pararía el sistema y este no puede salir de producción.
El primari key es de 6 campos y el criterio de búsqueda que se quiere es de un solo campo.

Esta tabla tiene en producción desde el año 2001 y en un mes hay 6 millones de registros, saquen cálculos.

Lo que quiero hacer es un select en donde yo pueda decirle de forma indexada que me traiga el registro número 50,000,000 y a partir de ahí ir insertando en otra tabla la información para poder resumir los datos.

Yo pensaba que la instrucción rownum me serviría, pero esta solo funciona si le pongo <, o sea, Select * from tabla where rownum < 10. Ahi me trae nueve registro, pero si le pongo Select * from tabla where rownum = 9, no me trae nada.

Alguna ayuda para esto?

PD: Tampoco puedo crearle un campo autonumérico, porque duraría muchísimo su creación y esas tablas no pueden ser modificadas.
__________________
.::RsOfT::.
--El que se aferra a lo conocido, nunca conocerá lo desconocido--
--Es intentando lo imposible como se realiza lo posible--
--Es de pésimo gusto contentarse con algo mediocre cuando lo excelente está a nuestro alcance--

Última edición por RsOfT; 04/10/2005 a las 13:18
  #2 (permalink)  
Antiguo 04/10/2005, 15:39
Avatar de sir_joshua  
Fecha de Ingreso: diciembre-2004
Mensajes: 411
Antigüedad: 14 años, 3 meses
Puntos: 0
mmm necesitas saber cual es la fila 50,000,000 ..?

pues haz un select rowid from tabla where rownum < 50000001 y el ultimo registro es el ke buscas... de hecho podrias hacer un shell de unix ke lo haga por ti y asi evitar el despliegue de la informacion en pantalla para ahorrar tiempo de procesador.... o podrias crear tu nueva tabla apartir de un select..


espero algo te sirva... salu2.
__________________
http://sir-joshua.hi5.com
Mex. Mex.
  #3 (permalink)  
Antiguo 04/10/2005, 17:33
Avatar de haron  
Fecha de Ingreso: febrero-2004
Ubicación: Cádiz (refinitivo)
Mensajes: 632
Antigüedad: 15 años, 2 meses
Puntos: 3
no se si te he entendido bien.

dices que tienes una tabla megainmensa, sobre la cual trabaja un sistema informatico y que el sistema no puede detenerse, por que hay cientos de usuarios conectados en linea. y si alguno de esos usuarios no consigue conectarse tendreis perdidas millonarias, los pajaritos dejarian de cantar y el mundo se pararia.

yo te recomiendo que obtengas un duplicado de la tabla y que trabajes sobre ese duplicado.

en mysql pudes hacer lo siguiente:

1. crea una tabla identica.
2. ejecuta la siguiente instruccion:

insert into tabla_duplicada (campo1, campo2, campo3, ...)
select campo1, campo2, campo3, ...
from tabla_original.

en oracle, no me acuerdo, pero a lo mejor funciona la sentencia anterior.

durante el proceso en el cual se insertan los registros de la tabla original en la tabla duplicada (que pueden ser unos minutos), podrias suspender temporalmente el sistema, siempre y cuando no corra peligro tu puesto de trabajo, claro.
__________________
Si ocurre algo importante, estamos afuera fumándonos unos cigarritos.
  #4 (permalink)  
Antiguo 05/10/2005, 06:17
Avatar de RsOfT  
Fecha de Ingreso: marzo-2002
Ubicación: InterNET
Mensajes: 1.119
Antigüedad: 17 años, 1 mes
Puntos: 7
Cita:
pues haz un select rowid from tabla where rownum < 50000001 y el ultimo registro es el ke buscas... de hecho podrias hacer un shell de unix ke lo haga por ti y asi evitar el despliegue de la informacion en pantalla para ahorrar tiempo de procesador.... o podrias crear tu nueva tabla apartir de un select..
Eso tomaría mucho tiempo sir_joshua, yo quisiera ir al registro #5000000 y que me despliegue ese solo registro, y eso debiera trabajar de forma indexada. En los archivos planos eso se podía, no puede ser que una base de datos no lo tenga.

haron, eso que me dices duraría bastante tiempo, alguna otra idea?
Gracias por sus comentarios!
__________________
.::RsOfT::.
--El que se aferra a lo conocido, nunca conocerá lo desconocido--
--Es intentando lo imposible como se realiza lo posible--
--Es de pésimo gusto contentarse con algo mediocre cuando lo excelente está a nuestro alcance--

Última edición por RsOfT; 05/10/2005 a las 06:23
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 04:36.