2012-05-17 7 views
20

Al agregar una columna a una tabla que tiene un valor predeterminado y una restricción de no nulo. ¿Es mejor ejecutar como una declaración única o dividirla en los pasos mientras la base de datos está bajo carga?Mejor forma de agregar una columna con el valor predeterminado mientras 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 
+1

¿Cuántas filas existen en su tabla USER? –

+0

Existen 10.000 filas en la tabla de usuario. –

+0

¿Puedes medir el rendimiento? – Kiquenet

Respuesta

17

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 necesita cambiar el comando: Oracle solo 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 tengo que decir, que me encontré con algunos errores en el pasado en relación con esta función (en Oracle 11.2.0.1)

  • fracaso de importación tradicional cuando la exportación se realiza con directa = Y
  • declaración de combinación puede lanzar un ORA-600 [13013] (error de Oracle Internal)
  • un problema de rendimiento en las consultas utilizando dichas tablas

Creo que estos temas están fijados en la versión actual 11.2.0. 3, así que puedo recomendar el uso de esta función.

0

Hace algún tiempo se han evaluado las posibles soluciones de un mismo problema. En nuestro proyecto tuvimos que eliminar todos los índices en la tabla, realizar cambios y restaurar índices nuevamente.

0

Si su sistema necesita utilizar la tabla, entonces DBMS_Redefinition es realmente su única opción.

Cuestiones relacionadas