Preparación para actualizar el archivo de zona horaria
Una actualización de archivos de zona horaria tiene dos fases separadas: preparación y actualización. Si bien no es necesario, recomendamos encarecidamente que realice el paso de preparación. En este paso, descubrirá qué datos se verán afectados al ejecutar el procedimiento PL/SQL DBMS_DST.FIND_AFFECTED_TABLES
. Para obtener más información sobre la ventana de preparación, consulte Actualización del archivo de zona horaria y la marca de hora con datos de zona horaria
Para preparar la actualización del archivo de zona horaria
-
Conecte el cliente SQL a la base de datos de Oracle utilizando el cliente SQL.
-
Determine la versión actual del archivo de zona horaria utilizada.
SELECT * FROM V$TIMEZONE_FILE;
-
Determine la última versión del archivo de zona horaria disponible en su instancia de base de datos.
SELECT DBMS_DST.GET_LATEST_TIMEZONE_VERSION FROM DUAL;
-
Determine el tamaño total de las tablas que tienen columnas de tipo
TIMESTAMP WITH LOCAL TIME ZONE
oTIMESTAMP WITH TIME ZONE
.SELECT SUM(BYTES)/1024/1024/1024 "Total_size_w_TSTZ_columns_GB" FROM DBA_SEGMENTS WHERE SEGMENT_TYPE LIKE 'TABLE%' AND (OWNER, SEGMENT_NAME) IN (SELECT OWNER, TABLE_NAME FROM DBA_TAB_COLUMNS WHERE DATA_TYPE LIKE 'TIMESTAMP%TIME ZONE');
-
Determine los nombres y tamaños de los segmentos que tienen columnas de tipo
TIMESTAMP WITH LOCAL TIME ZONE
oTIMESTAMP WITH TIME ZONE
.SELECT OWNER, SEGMENT_NAME, SUM(BYTES)/1024/1024/1024 "SEGMENT_SIZE_W_TSTZ_COLUMNS_GB" FROM DBA_SEGMENTS WHERE SEGMENT_TYPE LIKE 'TABLE%' AND (OWNER, SEGMENT_NAME) IN (SELECT OWNER, TABLE_NAME FROM DBA_TAB_COLUMNS WHERE DATA_TYPE LIKE 'TIMESTAMP%TIME ZONE') GROUP BY OWNER, SEGMENT_NAME;
-
Ejecute el paso de preparación.
-
El procedimiento
DBMS_DST.CREATE_AFFECTED_TABLE
crea una tabla para almacenar cualquier dato afectado. Se pasa el nombre de esta tabla al procedimientoDBMS_DST.FIND_AFFECTED_TABLES
. Para obtener más información, consulte el Procedimiento CREATE_AFFECTED_TABLEen la Documentación de la base de datos de Oracle. -
Este procedimiento
CREATE_ERROR_TABLE
crea una tabla para registrar errores. Para obtener más información, consulte el Procedimiento CREATE_ERROR_TABLEen la Documentación de la base de datos de Oracle.
En el siguiente ejemplo se crean los datos afectados y las tablas de errores, y se buscan todas las tablas afectadas.
EXEC DBMS_DST.CREATE_ERROR_TABLE('
my_error_table
') EXEC DBMS_DST.CREATE_AFFECTED_TABLE('my_affected_table
') EXEC DBMS_DST.BEGIN_PREPARE(new_version
); EXEC DBMS_DST.FIND_AFFECTED_TABLES('my_affected_table
', TRUE, 'my_error_table
'); EXEC DBMS_DST.END_PREPARE; SELECT * FROMmy_affected_table
; SELECT * FROMmy_error_table
; -
-
Consulte las tablas afectadas y de error.
SELECT * FROM
my_affected_table
; SELECT * FROMmy_error_table
;