También escribí sobre ello antesORACLEArtículo sobre nuevas características de 11g, ahoraORACLEEl 11g se ha convertido en algo popularORACLEVersión de la base de datos, entender y aprenderORACLELas nuevas características del 11G son cruciales, y yo tambiénORACLEPara los principiantes de las nuevas características de 11G, me gustaría compartir aquí mi proceso de aprendizaje y experiencia.
Este artículo registra principalmente que:ORACLEUna nueva función de 11g que permite que los bloqueos DDL esperen a los candados DML, que también es un tema compartido por el Sr. Zhang Leyi (kamus) en el evento ACOUG el 30 de junio.
En versiones anteriores a 11g, por defecto, los bloqueos DDL no esperan a los bloqueos DML, y si realizas operaciones DDL en una tabla con bloqueos DML, devolverá inmediatamente un fallo (excepto en la misma SESIÓN), hagamos un experimento sencillo, inserta datos en la tabla STREAM en SESSION1, no envíes, en este momento la tabla STREAM tendrá un bloqueo DML, y ejecutas la operación TRUNCATE table STREAM en SESSION2, y devolverá inmediatamente un fallo:
SESSION1 >insertar en stream selecciona * desde dbdream; 10 filas creadas. SESSION2 >acortar la corriente de la mesa; truncar flujo de tabla * ERROR en la línea 1: ORA-00054: resource busy and acquire with NOWAIT especificado o timeout expirado en la versión 11g,ORACLEIntroducido DDL_LOCK_TIMEOUT parámetro, que permite que los bloqueos DDL esperen los bloqueos DML, que controlan el tiempo que los bloqueos DDL deben esperar para los bloqueos DML, en segundos, el valor por defecto es 0, es decir, los bloqueos DDL no esperan los bloqueos DML, el valor máximo es 1 millón, es decir, 11,5 días; este parámetro puede establecerse globalmente o a nivel SESIÓN.
SESSION2 >parámetro de mostrar ddl_lock_timeout NOMBRE DE TIPO VALOR ----------------------- ----------- ------ ddl_lock_timeout entero 0 SESSION2 >alterar conjunto de sesión ddl_lock_timeout=2000000; ERROR: ORA-00068: valor inválido 2000000 para el parámetro ddl_lock_timeout, debe estar entre 0 y 1000000 Lo siguiente demuestra el efecto del siguiente parámetro DDL_LOCK_TIMEOUT, y también toma como ejemplo la tabla STREAM anterior, la tabla STREAM actual aún tiene un bloqueo DML, en la SESSION2 será DDL_LOCK_ TIMEOUT se establece en 60 segundos, y luego se ejecuta la operación TRUNCATE, y el fallo no se devolverá inmediatamente, sino que esperará 60 segundos, y si el bloqueo DL de la tabla STREAM no se libera en 60 segundos, devolverá un fallo.
SESSION2 >alter conjunto de sesión ddl_lock_timeout=60; Sesión alterada. SESSION2 >ajustar el tiempo en SESSION2 >truncar flujo de tablas; --En este punto, SESSION2 suspende, espera a que SESSION1 libere el bloqueo DML en 60 segundos, retorna fallido tras 60 segundos trunca el flujo de tabla * ERROR en la línea 1: ORA-00054: resource busy and acquire with NOWAIT especificado o timeout expirado Elapsed: 00:01:00.01 La aparición de DDL_LOCK_TIMEOUT parámetros simplifica mucho la operación de los DBAs, por ejemplo, queremos añadir un campo a una tabla, pero esta tabla tiene muchas operaciones DML, y no podemos usar el método ALTER SYSTEM KILL SESSION para terminar estas operaciones, así que si queremos añadir campos a esta tabla, necesitamos realizar la operación de añadir campos incontables veces, o escribir scripts para hacer este trabajo, y ahora tenemos DDL_ LOCK_TIMEOUT parámetro, solo necesitamos aumentar ligeramente el valor de este parámetro, y no tenemos que preocuparnos por ejecutar SQL, vamos a demostrar este proceso a continuación.
SESSION2 añadir campos:
SESSION2 >alterar tabla stream añadir jpg_path varchar2(255) por defecto '/home/Oráculo/'; 此时挂起,等待STREAM表的DML锁释放,SESSION1提交释放DML锁后,SESSION2操作便成功了。
SESSION1 >commit; Compromiso completado. SESSION2 >alterar tabla stream añadir jpg_path varchar2(255) por defecto '/home/Oráculo/'; Table altered. SESSION2 >select * from stream; ID IDENTIFIER PIC_NO JPG_PATH ---------- --------------- ------ --------------- 1 18-0220-003 1 /home/Oráculo/ 2 18-0221-003 1 /home/Oráculo/ 3 18-0221-003 2 /home/Oráculo/ 4 18-0221-003 3 /home/Oráculo/ 5 18-0223-005 1 /home/Oráculo/ 6 18-0223-005 2 /home/Oráculo/ 7 18-0223-005 3 /home/Oráculo/ 8 18-0223-005 4 /home/Oráculo/ 9 18-0223-005 5 /home/Oráculo/ 10 18-0223-005 6 /home/Oráculo/ 10 rows selected.
|