

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Preparazione all'aggiornamento del file di fuso orario
<a name="Appendix.Oracle.Options.Timezone-file-autoupgrade.preparing"></a>

L'aggiornamento di un file di fuso orario prevede due fasi distinte: preparazione e aggiornamento. Anche se non richiesto, è fortemente consigliabile eseguire la fase di preparazione. In questo passaggio, scopri quali dati saranno interessati dall'esecuzione della PL/SQL procedura`DBMS_DST.FIND_AFFECTED_TABLES`. Per ulteriori informazioni sulla finestra di preparazione, consulta [Aggiornamento del file di fuso orario e del timestamp con dati di fuso orario](https://docs.oracle.com/en/database/oracle/oracle-database/19/nlspg/datetime-data-types-and-time-zone-support.html#GUID-B0ACDB2E-4B49-4EB4-B4CC-9260DAE1567A) nella documentazione di Oracle Database.

**Per preparare l'aggiornamento del file di fuso orario**

1. Connettersi al database Oracle usando un client SQL.

1. Determinare la versione corrente del file di fuso orario utilizzata.

   ```
   SELECT * FROM V$TIMEZONE_FILE;
   ```

1. Determinare la versione più recente del file di fuso orario disponibile nell'istanza database.

   ```
   SELECT DBMS_DST.GET_LATEST_TIMEZONE_VERSION FROM DUAL;
   ```

1. Determinare la dimensione totale delle tabelle con colonne di tipo `TIMESTAMP WITH LOCAL TIME ZONE` o `TIMESTAMP 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');
   ```

1. Determinare i nomi e le dimensioni dei segmenti con colonne di tipo `TIMESTAMP WITH LOCAL TIME ZONE` o `TIMESTAMP 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;
   ```

1. Eseguire la fase di preparazione. 
   + La procedura `DBMS_DST.CREATE_AFFECTED_TABLE` crea una tabella per l'archiviazione dei dati interessati. Passare il nome di questa tabella alla procedura `DBMS_DST.FIND_AFFECTED_TABLES`. Per ulteriori informazioni, consulta [Procedura CREATE\$1AFFECTED\$1TABLE](https://docs.oracle.com/en/database/oracle/oracle-database/19/arpls/DBMS_DST.html#GUID-C53BAABA-914A-404C-9CD5-823257BE0B00) nella documentazione del database Oracle.
   + La procedura `CREATE_ERROR_TABLE` crea una tabella per registrare gli errori. Per ulteriori informazioni, consulta [Procedura CREATE\$1ERROR\$1TABLE](https://docs.oracle.com/en/database/oracle/oracle-database/19/arpls/DBMS_DST.html#GUID-6A7EA024-B02D-4486-B1D6-EF6ABF5DE507) nella documentazione del database Oracle.

   Nell'esempio seguente vengono create le tabelle dei dati e degli errori interessati e vengono trovate tutte le tabelle interessate.

   ```
   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 * FROM my_affected_table;
   SELECT * FROM my_error_table;
   ```

1. Eseguire una query sulle tabelle interessate e di errore.

   ```
   SELECT * FROM my_affected_table;
   SELECT * FROM my_error_table;
   ```