Necesito agregar dos columnas de FECHA a una tabla ya existente. Pero lleva mucho tiempo y tengo que matar el proceso. Lo extraño es que pude agregar esas columnas a las otras tablas en la misma base de datos momentáneamente. La mayoría de esas tablas son más grandes que la que tengo problemas tanto con los datos como con los recuentos de columnas. ¿Qué debo hacer para poder agregar esas nuevas columnas?Oracle - Agregar columnas a una tabla requiere para siempre
Respuesta
así es como he resuelto el problema. Antes, estaba especificando un valor predeterminado para las columnas justo en el momento de agregarlas. Pero luego agregué las columnas sin valores predeterminados. Después de agregar las columnas, especifiqué el valor predeterminado y se ejecutó inmediatamente sin esperar más. Muchas gracias @Justin Cave por su pista sobre el valor predeterminado. Ese fue el punto clave.
No tengo dudas de que está relacionado con el hecho de que al especificar el valor predeterminado en el momento de agregar la columna ese valor predeterminado se escribe en todos los registros insertados anteriormente. Así que si hay 5 millones de registros en la tabla, esa tabla se actualizará para establecer el valor predeterminado para la columna recién agregada para todas las filas. Actualizar 5 millones de registros es costoso, como uno podría adivinar. Pero si el valor predeterminado se establece después de agregar una columna, entonces el valor de esa nueva columna en las filas insertadas anteriormente será NULO, por lo que no se realizará ninguna actualización.
interesante que añadir el valor predeterminado más tarde fue mucho más rápido ... –
@Jens - Eso se debe a la adición de un valor predeterminado más adelante no afecta a las filas existentes, mientras que al agregar una nueva columna, el valor por defecto se debe establecer en cada fila - a menos que el valor predeterminado sea NULO, en cuyo caso Oracle no tiene que visitar las filas existentes. –
Cabe señalar que en Oracle 11g, agregar una columna con un valor predeterminado ya no tiene este problema (Oracle no actualiza todas las filas existentes, sino que simplemente actualiza los metadatos). –
También me enfrenté a este problema al agregar una columna varchar2 (4000) sin valor predeterminado una a 61K tabla de filas en Oracle 11g. Después de 30 minutos, la columna aún no se agregó.
Me trataron de abortar la operación y vuelve a intentar, pero que todavía no terminó.
Lo que funcionó:
Intenté agregar una columna numérica en su lugar, que tomó una fracción de segundo. Lo dejó caer.
Luego traté de agregar una columna varchar2 (1), que tomó una fracción de segundo. Lo dejó caer.
Luego traté de agregar una columna varchar2 (4000) nuevamente, y solo tomó una fracción de segundo.
tonto "solución", pero tal vez esto también funciona para cualquier otra persona frente a este problema.
La gente votando esto, ¿esto funcionó? Sería interesante saber ... – Wouter
- 1. Agregar índice en una tabla grande toma para siempre
- 2. ¿Agregar columnas virtuales a la tabla actual en Doctrine?
- 3. Oracle: Fast NOT IN para múltiples columnas
- 4. SQL Server Management Studio - ¿Agregar/mover columnas requiere colocar y volver a crear?
- 5. ¿Debo agregar índices a una tabla pequeña?
- 6. ¿Se requiere ODP.NET para Oracle 11g Client?
- 7. Oracle: Encontrar columnas con solo valores nulos
- 8. cómo agregar columnas a la familia de columnas en hbase
- 9. En Oracle, ¿es posible "insertar" una columna en una tabla?
- 10. Una migración para agregar una restricción única a una combinación de columnas
- 11. Oracle equivalente a SQL Server incluía columnas para indexar
- 12. SQL para agregar columnas y comentarios en la tabla en un solo comando
- 13. ¿Cómo agregar columnas a sqlite3 python?
- 14. Crear una tabla sin columnas
- 15. Agregar columnas de tabla a una cláusula Group by - Ruby on Rails - Postgresql
- 16. Restricción simple para limitar una tabla de Oracle a una sola fila
- 17. MVC3 - Encuadernación DROPDOWNLIST a int - Valor siempre requiere
- 18. ¿Requiere MySQL una clave primaria para una tabla de enlaces de muchos a muchos?
- 19. falta de Oracle de un tipo de datos de bit para las columnas de la tabla
- 20. Consultar nombres de columnas de una tabla de otro usuario
- 21. agregar columna a SQLAlchemy Tabla
- 22. ¿Siempre se requiere enlazar un socket?
- 23. Copiar datos de Oracle a otra tabla
- 24. Se requiere Oracle sqlldr TRAILING NULLCOLS, pero ¿por qué?
- 25. ¿Cómo escribir una tabla literal en Oracle?
- 26. Inserción de Oracle de seleccionar en la tabla con más columnas
- 27. Interfaz de usuario para ordenar una tabla por varias columnas
- 28. Buscar todas las columnas de una tabla para un valor?
- 29. cómo convertir CSV a tabla en Oracle
- 30. vista Tricky para Oracle
¿Qué versión de Oracle? ¿Está agregando un valor predeterminado o solo está agregando la columna? ¿Qué tan grande es la mesa? ¿Qué es "muy largo"? Horas? ¿Dias? –
Es Oracle 10g. Sí, estoy agregando SYSDATE como valor predeterminado a una de esas columnas. La tabla tiene 3.923.327 registros con 11 columnas. Me llevó más de 6 minutos y simplemente interrumpí el proceso. –
¿Cuántas filas hay en esa tabla? –