# 🕑 Tutorial: Revisión de Cambio de Hora en Sistemas Oracle y Linux (Chile)

## Introducción

En Chile, el cambio de hora se realiza dos veces al año, alternando entre:

* **Horario de verano:** UTC-3 (desde septiembre)
    
* **Horario de invierno:** UTC-4 (desde abril)
    

Este tutorial está dirigido a administradores de bases de datos y sistemas que utilizan:

* **Oracle Database:** 12c, 19c, 21c y 23c
    
* **Sistemas Operativos:** Oracle Linux 7.9 y 8
    

Aquí aprenderás a **verificar**, **ajustar** y **automatizar** el cambio de hora, evitando problemas de sincronización en tus sistemas críticos.

---

## 🔍 Paso 1: Verificar Zona Horaria en Oracle Database

### 1.1 Verificación de zona horaria actual

```sql
sqlCopiarEditarSELECT DBTIMEZONE FROM DUAL;
```

### 1.2 Cambiar zona horaria (si aplica)

```sql
sqlCopiarEditarALTER DATABASE SET TIME_ZONE = 'America/Santiago';
```

> ⚠️ **Este cambio requiere reiniciar la base de datos.**

---

## 🖥️ Paso 2: Configuración de Zona Horaria en Oracle Linux

### 2.1 Verificar configuración actual

```sql
timedatectl
```

### 2.2 Cambiar zona horaria

```sql
sudo timedatectl set-timezone America/Santiago
```

---

## 🔁 Paso 3: Automatización del Cambio de Hora

### 3.1 Usar `cron` para ajustar automáticamente en las fechas oficiales

> Asegúrate de revisar las fechas oficiales del cambio de hora cada año en [horaoficial.cl](https://www.horaoficial.cl/).

Ejemplo de entradas en `crontab` (modo root):

```sql
# Horario de verano (primer sábado de septiembre a las 03:00 AM)
0 3 1-7 9 6 timedatectl set-timezone America/Santiago

# Horario de invierno (primer sábado de abril a las 03:00 AM)
0 3 1-7 4 6 timedatectl set-timezone America/Santiago
```

---

## 📅 ¿Funciona este `cron` para 2026, 2027, 2028, 2029 y 2030?

### Recordemos la lógica:

```sql
bashCopiarEditar# Horario de verano: primer sábado de septiembre (días 1 a 7 de septiembre, si es sábado)
0 3 1-7 9 6 timedatectl set-timezone America/Santiago

# Horario de invierno: primer sábado de abril (días 1 a 7 de abril, si es sábado)
0 3 1-7 4 6 timedatectl set-timezone America/Santiago
```

* El número `6` al final = sábado
    
* `1-7` = primeros 7 días del mes
    
* `9` = septiembre, `4` = abril
    
* Hora = 03:00 AM
    

---

### 🔍 Validación práctica por año (primer sábado del mes):

| Año | Abril | Septiembre |
| --- | --- | --- |
| 2026 | Sábado 4 | Sábado 5 |
| 2027 | Sábado 3 | Sábado 4 |
| 2028 | Sábado 1 | Sábado 2 |
| 2029 | Sábado 7 | Sábado 1 |
| 2030 | Sábado 6 | Sábado 7 |

✅ **En todos los años del 2026 al 2030**, **el primer sábado del mes cae entre el día 1 y el 7**, **así que el cron propuesto funcionará perfectamente**.

### 🧠 Recomendación extra de La Botica del DBA:

* Aun así, **revisar anualmente** el sitio [horaoficial.cl](http://horaoficial.cl) [es buena práctica](https://www.horaoficial.cl/), porque **los gobiernos pueden c**[**ambiar la polí**](https://www.horaoficial.cl/)**tica de horarios** (como ya ha pasado en Chile antes).
    
* Puedes dejar un `recordatorio recurrente` en tu calendario para revisar esto a fines de marzo y agosto [de cada año.](https://www.horaoficial.cl/)
    

## ✅ Paso 4: Validación del Cambio

### 4.1 En Oracle Database

```sql
SELECT DBTIMEZONE FROM DUAL;
```

### 4.2 En Oracle Linux

```sql
timedatectl
```

---

## 📧 Paso 5: Envío de Alertas por Correo (Opcional)

Puedes configurar **correos automáticos antes y después del cambio de hora** para confirmar que los sistemas han sido ajustados correctamente.

### 5.1 Query de control antes y después del cambio:

```sql
-- Fecha actual del sistema
SELECT TO_CHAR(SYSDATE, 'dd/mm/yyyy HH24:MI:SS') FROM dual;

-- Nombre de la instancia
SELECT instance_name FROM v$instance;
```

### 5.2 Enviar correo con `mailx`

Ejemplo de script de envío:

```sql
#!/bin/bash
ASUNTO="Cambio de Hora SRBOTICAP - $(date '+%d/%m/%Y %H:%M')"
MENSAJE="Se ha realizado/verificado el cambio de hora en el servidor $(hostname). Fecha actual: $(date)"
echo "$MENSAJE" | mailx -r SRBOTICAP@laboticadeldba.com -s "$ASUNTO" admin@laboticadeldba.com
```

> 💡 Puedes programar este script como `cronjob` minutos después del cambio de hora, o ejecutarlo manualmente como parte del procedimiento.

---

## 📚 Recursos Adicionales

* [Oracle Database Time Zone Support](https://docs.oracle.com/en/)
    
* [Oracle Linux System Administrator Guide](https://docs.oracle.com/en/operating-systems/)
    
* [Hora Oficial de Chile](https://www.horaoficial.cl/)
    

---

## 🧪 Bonus: Comprobación en Sistemas Distribuidos

Si estás en un entorno **Oracle RAC** o tienes múltiples servidores, asegúrate de **validar el cambio en todos los nodos** para evitar inconsistencias de tiempo en los logs, trace files o sincronización de procesos.

---

## 🧭 Conclusión

El cambio de hora en Chile puede parecer trivial, pero una configuración incorrecta puede causar:

* Fallas en sincronización de jobs
    
* Inconsistencias en registros de auditoría
    
* Problemas con backups y replicación
    

Este tutorial busca ayudarte a tener tus sistemas preparados y evitar estos problemas con pasos simples pero efectivos.

**¿Lo probaste? ¿Tienes dudas?**  
Comenta aquí abajo o escríbeme directamente: [**admin@laboticadeldba.com**](mailto:admin@laboticadeldba.com)

---

📬 *Suscríbete a La Botica del DBA para más recetas técnicas, hacks y tips.*
