Mandato REORG INDEXES/TABLE utilizando el procedimiento ADMIN_CMD
El mandato REORG INDEXES/TABLE reorganiza un índice o una tabla.
Puede reorganizar todos los índices que están definidos en una tabla reconstruyendo los datos de índice en páginas no fragmentadas y contiguas físicamente. En una tabla de datos, puede reorganizar un índice no particionado específico en una tabla particionada o puede reorganizar todos los índices particionados en una partición de datos específica.
Si especifica la opción CLEANUP de la cláusula de índice, la limpieza se realizará sin reconstruir los índices. Puede limpiar un índice específico en una tabla, o puede limpiar todos los índices en la tabla.
Este mandato no puede utilizarse en índices de tablas temporales declaradas o de tablas temporales creadas (SQLSTATE 42995).
SQL1419N.Ámbito
Este mandato afecta a todas las particiones de base de datos del grupo de particiones de base de datos.
Autorización
- SYSADM
- SYSCTRL
- SYSMAINT
- DBADM
- SQLADM
- Privilegio CONTROL en la tabla.
Conexión necesaria
Base de datos
Sintaxis del mandato
Parámetros del mandato
- INDEXES ALL FOR TABLE nombre-tabla
- Especifica la tabla cuyos índices se han de reorganizar. La tabla puede estar en una base de datos local o remota.
- INDEX nombre-índice
- Especifica un índice individual que se debe reorganizar en una tabla particionada de datos.
La reorganización de los índices individuales solo se admite para índices no particionados en una tabla particionada. Este parámetro no está soportado para los índices de bloque.
- FOR TABLE nombre-tabla
- Especifica el nombre de la tabla en la que se crea el índice no particionado nombre-índice. Este parámetro es opcional, dado que los nombres de índice son exclusivos en toda la base de datos.
- TABLE nombre-tabla
- Especifica la tabla que se debe reorganizar. La tabla puede estar en una base de datos local o remota. Se puede utilizar el nombre
o el alias con el formato: esquema.nombre-tabla. El esquema es el nombre de usuario bajo el que se ha creado la tabla. Si se omite el nombre de esquema, se supone que se trata del esquema
por omisión.
El parámetro RECLAIM EXTENTS es el único parámetro admitido por las tablasorganizado por columnas .
Para las tablas de tipo, el nombre de tabla especificado debe ser el nombre de la tabla raíz de la jerarquía.
No se puede especificar un índice para la reorganización de una tabla de clúster multidimensional (MDC) o de clúster de tiempo de inserción (ITC). La reorganización de tablas in situ no se puede utilizar para las tablas MDC o ITC.
Cuando se especifica la cláusula ON DATA PARTITION para la reorganización de una tabla particionada de datos, sólo se reorganiza la partición de datos especificada.- Si no hay ningún índice no particionado (excepto índices de vía de acceso de XML generados por el sistema) definido en la tabla, la modalidad de acceso solo se aplica a la partición especificada. Los usuarios pueden leer las demás particiones de la tabla y grabar datos en ellas.
- Si hay índices no particionados que están definidos en la tabla (excluyendo índices de vía de acceso de XML generados por el sistema), la modalidad ALLOW NO ACCESS es el valor por omisión y la única modalidad de acceso soportada. En este caso, la tabla se sitúa en modalidad ALLOW NO ACCESS. Si se especifica ALLOW READ ACCESS, se devuelve SQL1548N (SQLSTATE 5U047).
Tabla 1. Modalidad de acceso soportada para la reorganización de tabla CLASSIC en una tabla no particionada y particionada Mandato Tipo de tabla Cláusula de particionamiento de tabla Modalidad de acceso soportada REORG TABLE Tabla no particionada No aplicable ALLOW NO ACCESS,
ALLOW READ ACCESS1REORG TABLE Tabla particionada No especificado ALLOW NO ACCESS1REORG TABLE (No hay ningún índice o solo hay índices particionados definidos en la tabla). Tabla particionada ON DATA PARTITION ALLOW NO ACCESS,
ALLOW READ ACCESS1REORG TABLE (hay índices no particionados que están definidos en la tabla, excluyendo índices de vía de acceso de XML generados por el sistema) Tabla particionada ON DATA PARTITION ALLOW NO ACCESS1
Nota:- Modalidad por omisión cuando no se especifica una cláusula de acceso.
Para una tabla particionada de datos, una reorganización de tabla recrea los índices no particionados y los índices particionados en la tabla, una vez reorganizada la tabla. Si la cláusula ON DATA PARTITION se utiliza para reorganizar una partición de datos específica de una tabla particionada de datos, una reorganización de tabla reconstruye los índices no particionados y los índices particionados sólo para la partición especificada.
Cláusula de índice
- ALLOW NO ACCESS
- Para REORG INDEXES, especifica que ningún otro usuario puede acceder a la tabla mientras los índices se están reorganizando. Si se especifica la cláusula ON
DATA PARTITION para una tabla particionada, sólo la partición especificada está restringida al nivel de modalidad de acceso.
Para REORG INDEX, especifica que ningún otro usuario puede acceder a la tabla mientras se reorganiza el índice no particionado.
- ALLOW READ ACCESS
- Para REORG INDEXES, especifica que otros usuarios pueden tener acceso de sólo lectura a la tabla mientras los índices se están reorganizando. La modalidad ALLOW READ ACCESS no recibe soporte para REORG INDEXES de una tabla particionada a menos que se especifique la opción CLEANUP o RECLAIM EXTENTS o la cláusula ON DATA PARTITION. Si se especifica la cláusula ON
DATA PARTITION para una tabla particionada, sólo la partición especificada está restringida al nivel de modalidad de acceso.
Para REORG INDEX, especifica que se puede tener acceso de sólo lectura a la tabla mientras se reorganiza el índice no particionado.
- ALLOW WRITE ACCESS
- Para REORG INDEXES, especifica que los otros usuarios pueden leer la tabla y grabar datos en ella mientras los índices se están reorganizando. La modalidad ALLOW
WRITE ACCESS no recibe soporte para una tabla particionada a menos que se especifique la opción CLEANUP o RECLAIM EXTENTS o la cláusula ON DATA PARTITION. Si se especifica la cláusula ON
DATA PARTITION para una tabla particionada, sólo la partición especificada está restringida al nivel de modalidad de acceso.
Para REORG INDEX, especifica que se puede leer y grabar en la tabla mientras se reorganiza el índice no particionado.
La modalidad ALLOW WRITE ACCESS no recibe soporte para las tablas de clúster multidimensional (MDC) o de clúster de tiempo de inserción (ITC) o los índices ampliados a menos que se especifique la opción CLEANUP o RECLAIM EXTENTS.
El parámetro ALLOW WRITE ACCESS no es admitido por las tablas organizado por columnas si especifica el parámetro REBUILD.
- Sólo la partición de datos especificada está restringida al nivel de modalidad de acceso. Los usuarios pueden leer las demás particiones de la tabla y grabar datos en ellas mientras los índices particionados de una partición especificada se están reorganizando.La tabla siguiente lista las modalidades de acceso que están soportadas y el acceso concurrente que está autorizado en otras particiones de la tabla cuando se especifica la cláusula ON DATA PARTITION.
Tabla 2. Modalidades de acceso soportadas y acceso simultáneo permitido cuando se especifica la cláusula ON DATA PARTITION con REORG INDEXES ALL Modalidad de acceso Acceso simultáneo que está permitido en la partición especificada Acceso simultáneo que está permitido en otras particiones ALLOW NO ACCESS Sin acceso Acceso de lectura y grabación ALLOW READ ACCESS Lectura en la partición hasta que se actualice el índice Acceso de lectura y grabación ALLOW WRITE ACCESS Acceso de lectura y grabación en la partición hasta que el índice se actualice Acceso de lectura y grabación - Sólo se reorganizan los índices particionados para la partición especificada. Los índices no particionados de la tabla particionada no se reorganizan.
Si hay algún índice no particionado en la tabla marcado como "no válido" o "para reconstruir", estos índices se reconstruyen antes de la reorganización. Si no, sólo se reorganizan o reconstruyen los índices particionados en la partición especificada si el objeto de índice se ha marcado como "no válido" o "para reconstruir".
- Sólo se limpian los índices particionados para la partición especificada cuando también se especifica la opción CLEANUP o RECLAIM EXTENTS.
| Mandato | Tipo de tabla | Cláusula de particionamiento de tabla | Parámetros adicionales que se han especificado para la cláusula de índice | Modalidad de acceso soportada |
|---|---|---|---|---|
| REORG INDEXES | Tabla no particionada | No aplicable | Cualquiera |
ALLOW NO ACCESS,
ALLOW READ ACCESS1, ALLOW WRITE ACCESS |
| REORG INDEX | Tabla particionada | No aplicable | Cualquiera |
ALLOW NO ACCESS,
ALLOW READ ACCESS1, ALLOW WRITE ACCESS |
| REORG INDEXES | Tabla particionada | Ninguna | REBUILD (es el valor por omisión si no se ha especificado ningún valor) |
ALLOW NO ACCESS 1
|
| REORG INDEXES | Tabla particionada | ON DATA PARTITION | REBUILD (es el valor por omisión si no se ha especificado ningún valor) |
ALLOW NO ACCESS,
ALLOW READ ACCESS1, ALLOW WRITE ACCESS |
| REORG INDEXES | Tabla particionada | Con o sin la cláusula ON DATA PARTITION | Se especifican CLEANUP o RECLAIM EXTENTS |
ALLOW NO ACCESS,
ALLOW READ ACCESS1, ALLOW WRITE ACCESS |
- Modalidad por omisión cuando no se especifica una cláusula de acceso.
Utilice la opción ALLOW READ ACCESS o ALLOW WRITE ACCESS para que otras transacciones de sólo lectura o de lectura-grabación tengan acceso a la tabla mientras se reorganizan los índices. No está permitido ningún acceso a la tabla cuando se recrea un índice durante el periodo durante el cual las copias reorganizadas de los índices pasan a estar disponibles.
- REBUILD
- La opción REBUILD es la opción por omisión y representa las mismas funciones que las que proporciona la reorganización de índice en releases anteriores cuando no se especifican as cláusulas CLEANUP y CONVERT. La opción REBUILD de la reorganización de índice vuelve a crear los datos de índice en páginas contiguas físicamente. La modalidad de acceso por omisión depende del tipo de tabla.
Opciones-reclamación-espacio
- CLEANUP
- Cuando se solicita CLEANUP se realiza una limpieza, en lugar de realizarse una acción REBUILD. Los índices no se recrean y no pasa a estar disponible ninguna página liberada para que la reutilicen los índices que están definidos solo en esta tabla.
- ALL
- Especifica que los índices se debe borrar eliminando las claves pseudosuprimidas y las páginas pseudovacías confirmadas.
La opción CLEANUP ALL libera páginas pseudovacías confirmadas, así como elimina claves pseudosuprimidas confirmadas de páginas que no están pseudovacías. Esta opción también intenta fusionar páginas hoja fusionadas si se produce que una página hoja fusionada tenga al menos un espacio libre PCTFREE en la página hoja fusionada. PCTFREE es el porcentaje de espacio libre que está definido para el índice durante la creación del índice. El valor por omisión de PCTFREE es 10 por ciento. Si se pueden fusionar dos páginas, una de las páginas se libera. El número de claves pseudosuprimidas en un índice, excepto para las claves en páginas pseudovacías, se puede determinar ejecutando RUNSTATS y, después, seleccionando NUMRIDS DELETED de SYSCAT.INDEXES. La opción ALL borra NUMRIDS DELETED y NUM EMPTY LEAFS, si se han determinado para la confirmación.
- PAGES
- Especifica que las páginas pseudovacías confirmadas se deben eliminar del árbol del índice. Este paso no borra las claves pseudosuprimidas en páginas que no están pseudovacías. Puesto que solo comprueba las páginas de hoja pseudovacías, en la mayoría de los casos, es considerablemente más rápido que utilizar la opción ALL.
La opción CLEANUP PAGES busca y libera páginas pseudovacías confirmadas. Una página pseudovacía confirmada es aquélla en que todas las claves de la página están marcadas como suprimidas y se sabe que todas estas supresiones están confirmadas. El número de páginas pseudovacías en un índice se puede determinar ejecutando RUNSTATS y consultando la columna NUM EMPTY LEAFS en SYSCAT.INDEXES. La opción PAGES borra NUM EMPTY LEAFS si se han determinado para confirmarse.
- RECLAIM EXTENTS
- Especifica el índice para reorganizar y reclamar extensiones que no se utilizan. Esta acción mueve páginas de índice dentro del objeto de índice para crear extensiones vacías. Este paso libera estas extensiones vacías para que el objeto de índice no haga un uso exclusivo y hace que el espacio esté disponible para ser utilizado por otros objetos de base de datos. Las extensiones vuelven a reclamarse desde el objeto de índice hasta el espacio de tablas. ALLOW READ ACCESS es el valor por omisión, pero están soportadas todas las modalidades de acceso.
Cláusula de tabla
- CLASSIC
- Reorganiza la tabla al crear una nueva copia de la tabla y luego reemplaza la tabla original con la copia reorganizada. Cualquier índice en la tabla se vuelve a crear después del reemplazo. Es posible que la tabla original esté disponible para consultas hasta que inicie la operación de reemplazo, dependiendo de la cláusula de acceso,que se describe a continuación.
- INPLACE
- Reorganiza la tabla al tiempo que permite el acceso del usuario.
La reorganización de tabla INPLACE sólo está permitida en tablas no particionadas, no MDC y no ITC sin índices ampliados y sin índices definidos en las columnas XML de la tabla. Además, para una tabla particionada, se permite la reorganización de tabla INPLACE sólo si no hay índices no particionados (excepto índices de vía de acceso XML generados por el sistema) definidos en la tabla y si ON DATA PARTITION está espedicifado. Sólo se puede reorganizar una partición de datos a la vez. La reorganización de tablas INPLACE sólo se puede ejecutar sobre tablas que tengan al menos tres páginas.
Antes de que se pueda emitir START para la reorganización INPLACE de una tabla, cualquier reorganización pausada o que se esté ejecutando in situ se debe completar o detener en esa tabla. Para una tabla particionada, si hay una reorganización IN PLACE detenida o en ejecución en alguna partición, antes de que se pueda emitir START para una reorganización INPLACE en otra partición, la reorganización pausada debe completarse o detenerse en esa tabla.
La reorganización de tablas in situ se lleva a cabo de modo asíncrono y es posible que no se haga efectiva inmediatamente.
- STOP
- Detiene el proceso de REORG in situ en el punto actual.
- PAUSE
- Suspende o hace una pausa en REORG en su punto actual.
- RECLAIM EXTENTS
- Especifica la tabla para reorganizar y reclamar extensiones que no se utilizan. La variable nombre-tabla debe especificar una tabla de clúster multidimensional (MDC), una tabla de clúster de tiempo de inserción (ITC) o tablas organizadas en columnas. Se puede utilizar el nombre o el alias con el formato: esquema.nombre-tabla. El esquema es el nombre de usuario bajo el que se ha creado la tabla. Si se omite el nombre de esquema, se supone que se trata del esquema por omisión.
Opciones clásicas
- ALLOW NO ACCESS
- Especifica que ningún otro usuario puede acceder a la tabla mientras se
esté reorganizando.
La modalidad ALLOW NO ACCESS es la modalidad de acceso por omisión y la única soportada cuando se reorganiza una tabla particionada sin la cláusula ON DATA PARTITION.
Si se especifica la cláusula ON DATA PARTITION para una tabla particionada de datos, sólo se reorganiza la partición de datos especificada:- Si no hay ningún índice no particionado definido en la tabla (excepto índices de vía de acceso XML generados por el sistema), sólo la partición especificada está restringida a la modalidad ALLOW NO ACCESS. Los usuarios pueden leer las demás particiones de la tabla y grabar datos en ellas.
- Si hay índices no particionados definidos en la tabla (excepto los índices de vía de acceso XML generados por el sistema), la modalidad ALLOW NO ACCESS es el valor por omisión y la única modalidad de acceso soportada. En este caso, la tabla se sitúa en modalidad ALLOW NO ACCESS.
- ALLOW READ ACCESS
- Permite solo el acceso de lectura a la tabla durante la reorganización.
La modalidad ALLOW READ ACCESS es la modalidad por omisión para una tabla no particionada.
Si se especifica la cláusula ON DATA PARTITION para una tabla particionada de datos, sólo se reorganiza la partición de datos especificada:- Si no hay ningún índice no particionado definido en la tabla (excepto índices de vía de acceso de XML generados por el sistema), la modalidad ALLOW READ ACCESS es la modalidad por omisión. Sólo la partición especificada está restringida al nivel de modalidad de acceso. Los usuarios pueden leer las demás particiones de la tabla y grabar datos en ellas.
- Si hay índices no particionados definidos en la tabla (excepto índices de vía de acceso XML generados por el sistema), la modalidad ALLOW READ ACCESS no recibe soporte. Si, en este caso, se especifica ALLOW READ ACCESS, se devuelve SQL1548N (SQLSTATE 5U047).
- USE nombre-espaciotablas
- Especifica el nombre de un espacio de tablas temporal del sistema donde
se puede almacenar una copia temporal de la tabla que se ha reorganizado. Si no se proporciona un nombre de espacios de tablas, el
gestor de bases de datos almacena una copia de trabajo de la tabla en los espacios de tablas que
contienen la tabla que se ha reorganizado.
Para un 8 KB, 16 KB, o 32 KB tabla de objeto, si el tamaño de página del espacio de tablas temporal del sistema que especifique no coincide con el tamaño de página de los espacios de tablas en los que residen los datos de tabla, el Db2 del producto base intentará encontrar un espacio de tablas temporal del tamaño correcto de los objetos LONG/LOB. Dicho espacio de tablas ya debe existir para que la reorganización sea satisfactoria.
Para tablas particionadas, el espacio de tablas temporal se utiliza como almacenamiento temporal para la reorganización de particiones de datos en la tabla. La reorganización de la tabla particionada completa reorganiza una única partición de datos a la vez. El espacio de tablas temporal tiene que poder contener la partición de datos más grande de la tabla y no toda la tabla. Cuando se especifica la cláusula ON DATA PARTITION, el espacio de tablas temporal tiene que poder contener la partición especificada.
Si no suministra un nombre de espacio de tablas para una tabla particionada, se utilizará el espacio de tablas en el que se encuentra cada partición de datos para el almacenamiento temporal de esa partición de datos. En el espacio de tablas de cada partición de datos debe haber suficiente espacio libre para que quepa una copia de la partición de datos.
- INDEX nombre-índice
- Especifica el índice a utilizar cuando se reorganiza la tabla. Si no especifica el nombre totalmente calificado
con el formato: esquema.nombre-índice, se toma el esquema por
omisión. El esquema es el nombre de usuario bajo el
cual se ha creado el índice.
El gestor de bases de datos utiliza el índice para volver a ordenar físicamente los
registros de la tabla que está reorganizando.
En el caso de una reorganización de tablas in situ, si se define un índice de clúster en la tabla y se especifica un índice, tiene que ser el índice de clúster. Si no se especifcia la opción in situ, se utiliza cualquier índice que se haya especificado. Si no se especifica el nombre de un índice, los registros se reorganizan sin importar el orden. No obstante, si la tabla tiene definido un índice de clústeres y no se especifica ningún índice, se utiliza el índice de clústeres para crear el clúster de la tabla. No se puede especificar un índice si se está reorganizando una tabla MDC o ITC.
Si una reorganización de tabla utiliza la cláusula INDEX y la cláusula ON DATA PARTITION, sólo se reorganiza la partición especificada mediante el índice nombre-índice.
- INDEXSCAN
- Para un clúster REORG, se utiliza una exploración del índice para reordenar los registros de tabla.
Para reorganizar las filas de la tabla, acceda a la tabla mediante un índice. El
método por omisión es explorar la tabla y clasificar el resultado para
reorganizar la tabla, utilizando los espacios de tablas temporales como sea
necesario. Aunque las claves de índice están dispuestas en el orden de clasificación, la
exploración y la clasificación suelen ser más rápidas que captar filas
leyendo primero el identificador de fila desde un índice.
En el caso de tablas con tamaño de fila ampliado, no se admite el método predeterminado para la exploración y la ordenación del resultado para reorganizar la tabla.
Para los índices que se basan en expresiones, no se admite el método predeterminado para la exploración y la clasificación del resultado para reorganizar la tabla.
- LONGLOBDATA
- Los datos de campo largo y LOB se han de reorganizar.
Este paso no es obligatorio, aunque la tabla contenga columnas largas o LOB. El valor por omisión es evitar la reorganización de estos objetos porque consume tiempo y no mejora el clúster. Sin embargo, ejecutar una reorganización con la opción LONGLOBDATA en las tablas con columnas XML reclama espacio no utilizado y reduce el tamaño del objeto de almacenamiento XML.
Este parámetro solo es necesario cuando se convierten datos LOB existentes en datos LOB en línea.
En el caso de tablas con tamaño de fila ampliado, el primer REORG fuera de línea tras la modificación de una tabla impone LONGLOBDATA.
- USE nombre-espaciotablalargo
- Este parámetro es opcional y se puede utilizar para especificar el nombre de un espacio de tablas temporal que se utilizará para recrear datos largos. Si no se especifica un espacio de tablas temporal para
el objeto tabla ni para los objetos largos, los objetos se
construyen en el espacio de tablas en el que residen
actualmente. Si se especifica un espacio de tablas temporal para la tabla, pero esta parámetro no se ha especificado, se utiliza el espacio de tablas que se utiliza para los datos de reorganización base, sin embargo, si los tamaños de páginas difieren, el sistema de base de datos Db2 intenta elegir un contenedor temporal del tamaño de página apropiado para crear los objetos largos.
Si se especifica USE nomb-estblargos, también debe especificarse USE nomb-esptb. De lo contrario, se omite el argumento nomb-esptblargos.
- KEEPDICTIONARY
- Si el atributo
COMPRESSde la tabla esYESy la tabla tiene un diccionario de compresión, no se construye un nuevo diccionario. Todas las filas que se procesan durante la reorganización están sujetas a la compresión utilizando el diccionario existente. Si el atributoCOMPRESSesYESy no existe un diccionario de compresión para la tabla, se crea un diccionario (y la tabla comprimida) en este escenario solo si la tabla es de un tamaño determinado (aproximadamente 1 - 2 MB) y si existen datos suficientes en esta tabla. Si, en cambio, indica de forma explícita REORG RESETDICTIONARY, se crea un diccionario siempre que haya, al menos, una fila en la tabla. Si el atributoCOMPRESSpara la tabla esNOy la tabla tiene un diccionario de compresión, el proceso de la reorganización conserva el diccionario. Todas las filas de la tabla recién reorganizada están en un formato no comprimido. No se pueden comprimir algunos datos como los datos LOB que no están almacenados en la fila de tabla base.Si no se especifica la opción LONGLOBDATA, solo se reorganizan los datos de fila de la tabla. En la tabla siguiente se describe el comportamiento de la sintaxis KEEPDICTIONARY en el mandato REORG cuando no se especifica la opción LONGLOBDATA.
Tabla 4. REORG KEEPDICTIONARY Comprimir Diccionario existe Resultado; consecuencia S S Se conserva el diccionario; se comprimen las filas. S N Crear diccionario; filas comprimidas N S Conservar diccionario; todas las filas sin comprimir N N Sin efecto; todas las filas sin comprimir En la tabla siguiente se describe el comportamiento de la sintaxis KEEPDICTIONARY en el mandato REORG cuando se especifica la opción LONGLOBDATA.
Tabla 5. REORG KEEPDICTIONARY cuando se especifica la opción LONGLOBDATA. Comprimir Existe el diccionario de datos de fila de tabla Existe el diccionario de objetos de almacenamiento XML1 Diccionario de compresión Compresión de datos S S S Conservar diccionarios. Los datos existentes se comprimen. Los datos nuevos se comprimirán. S S N Conservar el diccionario de filas de tabla y crear un diccionario de objetos de almacenamiento XML. Los datos existentes se comprimen. Los datos nuevos se comprimirán. S N S Crear diccionario de filas de tabla y conservar el diccionario XML. Los datos existentes se comprimen. Los datos nuevos se comprimirán. S N N Crear diccionarios de filas de tabla y XML. Los datos existentes se comprimen. Los datos nuevos se comprimirán. N S S Conservar diccionarios de filas de tablas y XML. Los datos de la tabla no se comprimen. Los datos nuevos no se comprimirán. N S N Conservar diccionario de filas de tabla. Los datos de la tabla no se comprimen. Los datos nuevos no se comprimirán. N N S Conservar diccionario XML. Los datos de la tabla no se comprimen. Los datos nuevos no se comprimirán. N N N Sin efecto. Los datos de la tabla no se comprimen. Los datos nuevos no se comprimirán. Nota:- Se puede crear un diccionario de compresión para el objeto de almacenamiento XML de una tabla solo si las columnas XML se añaden a la tabla en Db2 V9.7 o posteriormente, si la tabla se migra utilizando ADMIN_MOVE_TABLE.
Para cualquier reinicialización o truncamiento de una tabla (como por ejemplo, la operación de sustitución), si el atributo de compresión para la tabla es NO, se eliminará el diccionario, en caso de que exista. Por el contrario, si hay un diccionario y el atributo de compresión de la tabla es YES, un truncamiento guardará el diccionario y no lo descarta. El diccionario se anota en su totalidad para la recuperación y para el soporte futuro con cambios de captura de datos (es decir, duplicación).
- RESETDICTIONARY
- Si el atributo
COMPRESSde la tabla esYES, se construye un nuevo diccionario de compresión de filas. Todas las filas que se procesan durante la reorganización están sujetas a la compresión utilizando este nuevo diccionario. Este diccionario sustituye a cualquier otro diccionario anterior. Si el atributoCOMPRESSpara la tabla esNOy la tabla no tiene un diccionario de compresión existente, el proceso de reorganización elimina el diccionario y todas las filas de la tabla recién reorganizada estarán en un formato no comprimido. No se pueden comprimir algunos datos como los datos LOB que no están almacenados en la fila de tabla base.Si no se especifica la opción LONGLOBDATA, solo se reorganizan los datos de fila de la tabla. En la tabla siguiente se describe el comportamiento de la sintaxis RESETDICTIONARY en el mandato REORG cuando no se especifica la opción LONGLOBDATA.
Tabla 6. REORG RESETDICTIONARY Comprimir Diccionario existe Resultado; consecuencia S S Crear diccionario nuevo*; filas comprimidas. Si la opción DATA CAPTURE CHANGES se especifica en las sentencias CREATE TABLE o ALTER TABLE, el diccionario actual se conserva (se conoce como diccionario histórico de compresión). S N Crear diccionario nuevo; filas comprimidas N S Eliminar diccionario; todas las filas sin comprimir. Si la opción DATA CAPTURE NONE se especifica en las sentencias CREATE TABLE o ALTER TABLE, también se elimina el diccionario histórico de compresión correspondiente a la tabla especificada. N N Sin efecto; todas las filas sin comprimir * Si existe un diccionario y el atributo de compresión está habilitado pero actualmente no hay datos en la tabla, la operación RESETDICTIONARY conserva el diccionario existente. Las filas que son menores en tamaño que la longitud mínima interna y las filas que no demuestran que su longitud de registro se acorta cuando se realiza un intento de comprimirlos se consideran "insuficientes" en este caso.
En la tabla siguiente se describe el comportamiento de la sintaxis RESETDICTIONARY en el mandato REORG cuando se especifica la opción LONGLOBDATA.
Tabla 7. REORG RESETDICTIONARY cuando se especifica la opción LONGLOBDATA. Comprimir Existe el diccionario de datos de fila de tabla Existe el diccionario de objetos de almacenamiento XML1 Diccionario de datos Compresión de datos S S S Crear diccionarios2 3. Los datos existentes se comprimen. Los datos nuevos se comprimirán. S S N Crear nuevo diccionario de filas de tabla y crear nuevo diccionario XML3. Los datos existentes se comprimen. Los datos nuevos se comprimirán. S N S Crear diccionario de datos de filas de tabla y crear nuevo diccionario XML. Los datos existentes se comprimen. Los datos nuevos se comprimirán. S N N Crear diccionarios. Los datos existentes se comprimen. Los datos nuevos se comprimirán. N S S Elimina diccionarios. Los datos existentes y nuevos no se comprimen. Los datos de tabla existentes no se comprimen. Los datos nuevos no se comprimirán. N S N Eliminar diccionario de filas de tabla. Todos los datos están sin comprimir.
Los datos de tabla existentes no se comprimen. Los datos nuevos no se comprimirán. N N S Elimina el diccionario de objetos de almacenamiento XML. Los datos de tabla existentes no se comprimen. Los datos nuevos no se comprimirán. N N N Sin efecto. Los datos de tabla existentes no se comprimen. Los datos nuevos no se comprimirán. Nota:- Se puede crear un diccionario de compresión para el objeto de almacenamiento XML de una tabla solo si las columnas XML se añaden a la tabla en Db2 V9.7 o posterior, o si la tabla se migra utilizando un movimiento de tabla en línea.
- Si existe un diccionario y el atributo de compresión está habilitado pero, actualmente, no hay ningún dato en la tabla, la operación RESETDICTIONARY conserva el diccionario existente. Las filas que son menores en tamaño que la longitud mínima interna y las filas que no demuestran que su longitud de registro se acorta cuando se realiza un intento de comprimirlos se consideran "insuficientes" en este caso.
- Si la opción DATA CAPTURE CHANGES se especifica en las sentencias CREATE TABLE o ALTER TABLE, el diccionario de datos actual se conserva (se conoce como diccionario histórico de compresión).
opciones-en el lugar
- ALLOW READ ACCESS
- Permite solo el acceso de lectura a la tabla durante la reorganización.
- ALLOW WRITE ACCESS
- Permite el acceso de grabación a la tabla durante la reorganización. Éste es el comportamiento por omisión.
- FULL
- La tabla se reorganiza para llenar páginas mientras se respeta PCTFREE para esa tabla. De forma opcional, cuando se especifica la cláusula INDEX, los datos de la fila se mueven dentro de la tabla para volver a organizar los datos en clústeres. Los registros del exceso de flujo también se convierten a registros normales como parte de este proceso. Este es el comportamiento predeterminado.
- INDEX nombre-índice
- Especifica el índice a utilizar cuando se reorganiza la tabla. Si no especifica el nombre totalmente calificado
con el formato: esquema.nombre-índice, se toma el esquema por
omisión. El esquema es el nombre de usuario bajo el
cual se ha creado el índice.
El gestor de bases de datos utiliza el índice para volver a ordenar físicamente los
registros de la tabla que está reorganizando.
En el caso de una reorganización de tablas in situ, si se define un índice de clúster en la tabla y se especifica un índice, tiene que ser el índice de clúster. Si no se especifcia la opción in situ, se utiliza cualquier índice que se haya especificado. Si no se especifica el nombre de un índice, los registros se reorganizan sin importar el orden. No obstante, si la tabla tiene definido un índice de clústeres y no se especifica ningún índice, se utiliza el índice de clústeres para crear el clúster de la tabla. No se puede especificar un índice si se está reorganizando una tabla MDC o ITC.
Si una reorganización de tabla utiliza la cláusula INDEX y la cláusula ON DATA PARTITION, sólo se reorganiza la partición especificada mediante el índice nombre-índice.
- TRUNCATE TABLE
- Recupere todas las extensiones que estén vacías al final de la tabla y devuélvalas al espacio de tabla. La recuperación de espacio se ejecuta al final de la reorganización in situ. Durante el recorte, la tabla tiene un bloqueo S, lo cual impide las actualizaciones a la tabla. Las actualizaciones no son posibles incluso si se especifica ALLOW WRITE ACCESS. Este es el comportamiento predeterminado.
- NOTRUNCATE TABLE
- Esta operación permite el acceso de escritura durante toda la reorganización cuando se especifica ALLOW WRITE ACCESS. No se intenta recuperar el espacio que utiliza esa tabla. No se trunca la tabla después de la reorganización in situ. Durante el truncamiento, la tabla tiene un bloqueo S.
- START
- Inicia el proceso de REORG in situ. Puesto que esta opción es la opción por omisión, esta palabra clave es opcional.
- RESUME
- Continúa o reanuda una reorganización de tablas in situ tras una pausa previa. Cuando se reanuda la reorganización en línea, si desea tener las mismas opciones que las que había al pausar la reorganización, debe especificar de nueva esas opciones mientras se reanuda.
- CLEANUP OVERFLOWS
- Una reorganización INPLACE CLEANUP OVERFLOWS atraviesa la tabla y busca registros de puntero o exceso de flujo. La operación convierte cualquier registro que encuentre en un registro normal. Esta operación mejora el rendimiento de las tablas que tienen un número significativo de registros de puntero o de exceso de flujo. La operación no produce una reducción del tamaño de la tabla.
Cláusula de particionamiento de tabla
- ON DATA PARTITION nombre-partición
- En el caso de tablas particionadas de datos, especifica la partición de datos para la reorganización.
Para Db2 V9.7 Fixpack 1 y releases posteriores, se puede utilizar la cláusula con el mandato REORG INDEXES ALL para reorganizar los índices particionados en una partición específica y el mandato REORG TABLE para reorganizar datos de una partición específica.
Cuando se utiliza la cláusula con un mandato REORG TABLE o REORG INDEXES ALL en una tabla particionada, la reorganización falla y devuelve SQL2222N con un código de razón 1 si la partición nombre-partición no existe para la tabla especificada. La reorganización falla y devuelve SQL2222N con el código de razón 3 si la partición nombre-partición está en estado enlazado o desenlazado.
Si el mandato REORG INDEX se emite con la cláusula ON DATA PARTITION, la reorganización falla y devuelve SQL2222N con el código de razón 2.
El mandato REORG TABLE falla y devuelve SQL1549N (SQLSTATE 5U047) si la tabla particionada está en estado pendiente de reorganización y hay índices no particionados definidos en la tabla.
Partición de base de datos
- ON DBPARTITIONNUM | ON DBPARTITIONNUMS
- Realiza la operación en un conjunto de particiones de base de datos.
- ALL DBPARTITIONNUMS
- Especifica que la operación ha de realizarse en todas las particiones de base de datos especificadas en el archivo db2nodes.cfg. Esta opción es la opción por omisión si no se especifica una cláusula de partición de base de datos.
- EXCEPT
- Especifica que la operación se debe realizar en todas las particiones de base de datos que se han especificado en el archivo db2nodes.cfg, excepto aquellas particiones especificadas en la lista de particiones de base de datos.
Cláusula de selección de partición
- part-bd-núm1
- Especifica un número de partición de base de datos en la lista de particiones de base de datos.
- número2-partición-bd
- Especifica el segundo número de partición de base de datos, de manera que todas las particiones de base de datos desde partición-bd-núm-1 hasta partición-bd-núm-2 inclusive se incluyen en la lista de particiones de base de datos.
Ejemplo
CALL SYSPROC.ADMIN_CMD ('REORG TABLE employee
INDEX empid ON DBPARTITIONNUM (1,3,4)')Notas de uso
- El estado de la ejecución del mandato se devuelve en el área de comunicaciones SQL (SQLCA) obtenida a partir de la sentencia CALL.
- El programa de utilidad REORG emite una sentencia COMMIT al principio de la operación, que con conexiones del tipo 2, provoca que el procedimiento devuelva SQL30090N con el código de razón 2.
- El programa de utilidad REORG no permite utilizar apodos.
- El mandato REORG TABLE no se admite en tablas temporales declaradas o en tablas temporales creadas.
- El mandato REORG TABLE no se puede usar en las vistas.
- La reorganización de una tabla no es compatible con las tablas agrupadas por clústeres de rangos porque el área de rango de la tabla siempre permanece agrupada en clústeres.
- No se puede usar REORG TABLE en una tabla particionada de un espacio de tablas DMS mientras se esté haciendo una copia de seguridad en línea de CUALQUIER espacio de tablas en el que resida la tabla, incluidos los LOB y los índices.
- REORG TABLE no puede utilizar un índice basado en una extensión de índice.
- Si una tabla está en un estado pendiente de reorganización, no está permitido realizar una reorganización in situ en la tabla.
- La reorganización simultánea de tablas que comparten el mismo espacio de tablas DMS temporal no está soportada.
- Si una tabla tiene un índice con una clave basada en expresiones definida para la misma, no se admite la reorganización de la tabla in situ.
- Antes de ejecutar una operación de reorganización contra una tabla en la que graban los supervisores de sucesos, tiene que desactivarlos en esa tabla.
- Para tablas particionadas de datos:
- La tabla debe tener una ACCESS_MODE en SYSCAT.TABLES igual a Acceso Completo.
- La reorganización se salta las particiones de datos que tienen un estado restringido debido a una operación de enlace o desenlace. Si se especifica la cláusula ON DATA PARTITION, se debe poder acceder totalmente a esa partición.
- Si se produce un error durante la reorganización de la tabla, algunos índices o particiones de índice pueden invalidarse. Los índices no particionados de la tabla se marcan como no válidos si la reorganización ha alcanzado o pasado la fase de sustitución para la primera partición de datos. Las particiones de índice de cualquier partición de datos que ya haya alcanzado o pasado la fase de sustitución se marcan como no válidas. Los índices se volverán a generar en los siguientes accesos a la tabla o a la partición de datos.
- Si se produce un error durante la reorganización del índice cuando se utiliza la modalidad de acceso ALLOW NO ACCESS, algunos índices de la tabla pueden invalidarse. Para índices RID no particionados en la tabla, solo el índice que se está reorganizando en el momento de producirse el error queda invalidado. Para tablas MDC con índices de bloques no particionados, es posible que uno o más índices de bloques queden invalidados en caso de producirse un error. Para tablas MDC o ITC con índices particionados, solo queda invalidado el objeto de índice de la partición de datos que se organiza. Los índices marcados como no válidos se volverán a generar en los siguientes accesos a la tabla o a la partición de datos.
- Cuando una tabla particionada de datos únicamente con índices particionados definidos en la tabla está en estado de reorganización pendiente, al emitir un mandato REORG TABLE con la cláusula ON DATA PARTITION sólo sale del estado de reorganización pendiente la partición de datos especificada. Para sacar del estado de reorganización pendiente el resto de particiones de la tabla, emita el mandato REORG TABLE para toda la tabla (sin la cláusula ON DATA PARTITION). También puede emitir un mandato REORG TABLE con la cláusula ON DATA PARTITION para cada una de las particiones restantes.
La información acerca del progreso actual de la reorganización de la tabla se graba en el archivo histórico para la actividad de la base de datos. El archivo histórico contiene un registro para cada suceso de reorganización. Para ver este archivo, ejecute el mandato LIST HISTORY para la base de datos que contiene la tabla que está reorganizando.
También puede utilizar instantáneas de tabla para supervisar el progreso de la reorganización de la tabla. Los datos de supervisión de reorganización de tabla se registran independientemente del valor del Conmutador de tabla de supervisor de base de datos.
Si se produce un error, se grabará un vuelco SQLCA en el archivo histórico. Para una reorganización de tablas in situ, el estado se registrará como PAUSED.
Para la reorganización de tabla INPLACE, si la tabla tiene dos o menos páginas, la operación REORG no se realiza. Tampoco habrá ninguna entrada en el archivo histórico para la operación REORG, y las métricas de supervisión y las instantáneas no mostrarán información de REORG.
Cuando se modifica una tabla de índices demasiadas veces, los datos de los índices podrían quedar fragmentados. Si la tabla tiene un clúster respecto a un índice, la tabla y el índice pueden salir del orden del clúster. Ambos factores pueden afectar negativamente al rendimiento de las exploraciones que utilizan el índice y pueden influir en la eficacia de la captación previa de páginas de índice. Para reorganizar uno o todos los índices de una tabla, puede utilizar REORG INDEX o REORG INDEXES con la opción REBUILD. La reorganización de índices elimina la fragmentación existente y restaurará el clúster físico en las páginas hoja. Utilice el mandato REORGCHK como ayuda para determinar si un índice se debe reorganizar. Asegúrese de completar todas las operaciones de base de datos y liberará todos los bloqueos antes de invocar la reorganización de índices. Este paso se puede realizar emitiendo una sentencia COMMIT después de cerrar todos los cursores abiertos WITH HOLD, o emitiendo ROLLBACK.
Una reorganización de tabla clásica (reorganización fuera de línea) vuelve a construir los índices durante la última fase de la reorganización. Cuando existe más de un espacio de tablas temporal, es posible que un espacio de tablas temporal además del espacio en el mandato REORG TABLE se pueda utilizar para clasificaciones adicionales que pueden acompañar el proceso de reorganización de tabla. Sin embargo, la reorganización de tabla in situ (reorganización en línea) no vuelve a construir los índices. Es recomendable emitir un mandato REORG INDEXES después de que finalice una reorganización de tabla in situ. Una reorganización de tabla in situ es un proceso asíncrono. Por lo tanto, se debe tener cuidado para garantizar que la reorganización de tabla in situ se ha completado antes de emitir el mandato REORG INDEXES. La emisión del mandato REORG INDEXES antes de que se complete la reorganización de tabla in situ, puede causar que falle la reorganización (SQLCODE -2219).
Cuando REORG reconstruye los índices en una tabla MDC, no se establecen los bits de la sugerencia Full_Block. Dado que no se establece la sugerencia Full_Block, es posible que experimente un rendimiento de inserción degradado si inserta filas procedentes de valores de dimensión existentes después de que se completa REORG y de que se activa la variable de registro DB2_TRUST_MDC_BLOCK_FULL_HINT. El rendimiento de inserción mejora automáticamente para cada valor de dimensión después de que se completa una inserción de ese valor de dimensión. Para obtener más información, consulte la variable de rendimiento DB2_TRUST_MDC_BLOCK_FULL_HINT.
Las tablas que se han modificado tantas veces que los datos están fragmentados y el rendimiento de acceso es notablemente lento, son candidatas para el mandato REORG TABLE. También debe invocar este programa de utilidad después de modificar la longitud en línea de una columna de tipo estructura para poder beneficiarse de la longitud en línea modificada. Utilice el mandato REORGCHK para determinar si una tabla necesita reorganización. Asegúrese de completar todas las operaciones de base de datos y liberar todos los bloqueos antes de invocar REORG TABLE. Este paso se puede realizar emitiendo una sentencia COMMIT después de cerrar todos los cursores abiertos WITH HOLD, o emitiendo ROLLBACK. Después de reorganizar una tabla, utilice RUNSTATS para actualizar las estadísticas de tabla, y REBIND para volver a vincular los paquetes que utilizan dicha tabla. El programa de utilidad de reorganización cierra de forma implícita todos los cursores.
- Cada mandato REORG debe especificar una partición distinta con la cláusula ON DATA PARTITION.
- Cada mandato REORG debe utilizar el acceso de restricción de la modalidad ALLOW NO ACCESS a las particiones de datos.
- La tabla particionada sólo debe tener índices particionados si se emiten mandatos REORG TABLE. En la tabla no se pueden definir índices no particionados (excepto los índices de vía de acceso XML generados por el sistema).
REORG INDEXES ALL FOR TABLE T1 ALLOW NO ACCESS ON DATA PARTITION P1
REORG TABLE T1 ALLOW NO ACCESS ON DATA PARTITION P2
REORG INDEXES ALL FOR TABLE T1 ALLOW NO ACCESS ON DATA PARTITION P3- Utilizar un mandato REORG sin la cláusula ON DATA PARTITION en la tabla.
- Utilizar una sentencia ALTER TABLE en la tabla para añadir, enlazar o desenlazar una partición de datos.
- Cargar datos en la tabla.
- Realizar una copia de seguridad en línea que incluya la tabla.
Si la tabla contiene un formato de filas mixto porque se activa o desactiva la compresión de valores de tabla, una reorganización de tabla fuera de línea puede convertir todas las filas existentes al formato de fila de destino.
Si la tabla se distribuye en varias particiones de base de datos y la reorganización de tabla o índice falla en cualquiera de las particiones de base de datos afectadas, solo se retrotrae la reorganización de tabla o índice de las particiones de base de datos que fallan.
Si la reorganización no es satisfactoria, no se deberán suprimir los archivos temporales. El gestor de bases de datos utiliza dichos archivos para recuperar la base de datos.
Si se especifica el nombre de un índice, el gestor de bases de datos reorganiza los datos de acuerdo con el orden del índice. Para maximizar el rendimiento, especifique un índice que se utilice con frecuencia en consultas de SQL. Si el nombre de un índice no se especifica y si existe un índice de agrupación en clúster, los datos se ordenan de acuerdo con el índice de la agrupación en clúster.
El valor PCTFREE de una tabla determina la cantidad de espacio libre designado por página. Si el valor no se ha establecido, el programa de utilidad llenará tanto espacio como sea posible en cada página.
Para realizar una recuperación en avance del espacio de tablas después de una reorganización de tabla, tanto los espacios de tablas normales como los de gran tamaño se deberán habilitar para la recuperación en avance.
Si la tabla contiene columnas LOB que no utilizan la opción COMPACT, el objeto de almacenamiento LOB DATA puede ser significativamente mayor después de la reorganización de la tabla. Este paso puede ser el resultado del orden en el que se han reorganizado las filas y se han utilizado los tipos de espacios de tablas (SMS o DMS).
El mandato REORG INDEXES/TABLE podría recrear los índices sobre datos XML. Si desea más información, consulte Recreación de índices sobre datos XML.
Es posible que una operación REORG in situ no pueda reclamar completamente espacio en una tabla porque no puede mover registros internos.
No puede crear índices en las tablas organizado por columnas . Sin embargo, se utiliza un índice internamente para hacer un seguimiento de las páginas dentro de estas tablas, y se puede internamente utilizar un índice adicional para imponer restricciones únicas o de clave primaria. La gestión de espacio para las tablas organizado por columnas incluye la gestión del espacio consumido por el mapa de la página y estos índices internos. Una operación de reorganización en la tabla genera claves pseudo suprimidas en los índices del mapa de la página, que se limpian durante una operación posterior de limpieza. Actualice y suprima el resultado de las operaciones en claves pseudo suprimidas en cualquier índice de obligatoriedad exclusivo. Considere ejecutar un mandato REORG INDEX, especificando los parámetros CLEANUP y RECLAIM EXTENTS. El mantenimiento automático de las tablas, si está habilitado, gestionará el proceso de limpieza y recuperación de espacio para los índices.
