comentario - agregar columna a tabla oracle entre dos columnas
La mejor manera de agregar una columna con valor predeterminado mientras se está cargando (3)
El rendimiento depende de la versión de Oracle que utilice. Los bloqueos se generan de todos modos.
Si la versión <= Oracle 11.1, entonces # 1 hace lo mismo que # 2. Es lento de todos modos. A partir de Oracle 11.2, Oracle introdujo una gran optimización para la primera declaración (un comando que lo hace todo). No es necesario cambiar el comando, Oracle simplemente se comporta de manera diferente. Almacena el valor predeterminado solo en el diccionario de datos en lugar de actualizar cada fila física.
Pero también debo decir que encontré algunos errores en el pasado relacionados con esta función (en Oracle 11.2.0.1)
- falla de importación tradicional si la exportación se hizo con direct = Y
- la sentencia de fusión puede lanzar un ORA-600 [13013] (error interno de Oracle)
- Un problema de rendimiento en consultas que utilizan tales tablas
Creo que estos problemas se han solucionado en la versión actual 11.2.0.3, por lo que puedo recomendar el uso de esta función.
Al agregar una columna a una tabla que tiene un valor predeterminado y una restricción de no nulo. ¿Es mejor ejecutarla como una sola instrucción o dividirla en pasos mientras la base de datos está bajo carga?
ALTER TABLE user ADD country VARCHAR2(4) DEFAULT ''GB'' NOT NULL
VERSUS
ALTER TABLE user ADD country VARCHAR2(2)
UPDATE user SET country = ''GB''
COMMIT
ALTER TABLE user MODIFY country DEFAULT ''GB'' NOT NULL
Hace algún tiempo hemos evaluado posibles soluciones del mismo problema. En nuestro proyecto tuvimos que eliminar todos los índices de la tabla, realizar modificaciones y restaurar los índices.
Si su sistema necesita usar la tabla, entonces DBMS_Redefinition es realmente su única opción.