Uma atualização de arquivo de fuso horário tem duas fases separadas: preparar e atualizar. Embora não seja necessário, recomendamos enfaticamente que você execute a etapa de preparação. Nessa etapa, você descobre quais dados serão afetados pela execução do procedimento DBMS_DST.FIND_AFFECTED_TABLES
de PL/SQL. Para ter mais informações sobre a janela de preparação, consulte Upgrading the Time Zone File and Timestamp with Time Zone Data
Para preparar a atualização do arquivo de fuso horário
-
Conecte ao banco de dados Oracle usando um cliente SQL.
-
Determine a versão atual do arquivo de fuso horário usada.
SELECT * FROM V$TIMEZONE_FILE;
-
Determine a versão mais recente do arquivo de fuso horário disponível na instância de banco de dados
SELECT DBMS_DST.GET_LATEST_TIMEZONE_VERSION FROM DUAL;
-
Determine o tamanho total das tabelas que têm colunas do tipo
TIMESTAMP WITH LOCAL TIME ZONE
ouTIMESTAMP 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 os nomes e tamanhos dos segmentos que têm colunas do tipo
TIMESTAMP WITH LOCAL TIME ZONE
ouTIMESTAMP 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;
-
Execute a etapa de preparação.
-
O procedimento
DBMS_DST.CREATE_AFFECTED_TABLE
cria uma tabela para armazenar quaisquer dados afetados. Passe o nome desta tabela ao procedimentoDBMS_DST.FIND_AFFECTED_TABLES
. Para ter mais informações, consulte CREATE_AFFECTED_TABLE Procedure(Procedimento CREATE_AFECTED_TABLE) na documentação do Oracle Database. -
O procedimento
CREATE_ERROR_TABLE
cria uma tabela para registrar erros. Para ter mais informações, consulte CREATE_ERROR_TABLE Procedure(Procedimento ERROR_TABLE) na documentação do Oracle Database.
O exemplo a seguir cria os dados afetados e as tabelas de erro e localiza todas as tabelas de afetados.
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 as tabelas de afetados e de erro.
SELECT * FROM
my_affected_table
; SELECT * FROMmy_error_table
;