
Estoy creando una imagen de Docker para la base de datos Oracle y se generarán muchos contenedores diferentes a partir de la misma imagen.
Cuando inicio la instancia de Oracle, por alguna razón se escriben algunos bytes en todos los archivos de datos activos. Docker guarda una diferencia del contenedor en la imagen base, y la diferencia es el archivo completo que cambió, por lo que cada vez que inicio un contenedor se escriben más de 6 GB en el disco solo para iniciar la base de datos.
Entonces, ¿por qué Oracle escribe en los archivos de datos al iniciar la base de datos? El comportamiento más lógico sería escribir en los archivos de datos sólo cuando los datos se modifican y confirman. ¿Puedo hacer algo para cambiar eso?
Además de Oracle Linux (que es la base de mi imagen), también lo probé en Windows y el comportamiento es el mismo, todos los archivos de datos están escritos.
Intenté configurar los espacios de tabla en solo lectura. Eso evita la operación de escritura; sin embargo, cuando configuro el espacio de tabla para lectura-escritura, inmediatamente escribe en el archivo, causando el problema nuevamente.
Para que quede claro, necesito que los espacios de tabla se puedan escribir, pero solo cuando los datos realmente cambien.
Respuesta1
No hay manera de evitarlo. Además de los datos de los usuarios, Oracle también contiene muchos metadatos que también deben mantenerse. Internamente Oracle mantiene un número llamado SCN (Número de cambio de sistema). Este número aumenta cada vez que "algo" cambia en la base de datos.
Este número SCN está escrito en el encabezado de cada archivo de datos y también en cada archivo de control. Al abrir (iniciar) la base de datos Oracle comprueba que este número sea el mismo en todos los archivos. Entonces se supone que los archivos son consistentes.
Este SCN aumenta incluso si no hay carga para la base de datos. También hay trabajos en segundo plano, como la recopilación de estadísticas, que cargan algo. Además, los usuarios pueden crear un activador del sistema ON DATABASE STARTUP
que ejecutará algún trabajo cuando se inicie la base de datos.
Generalmente los servidores de bases de datos Oracle no son buenos candidatos para la virtualización. El personal que lleva el diario de Oracle también lo hace internamente, por lo que usted conserva los mismos datos dos veces (estos archivos se denominan registros de rehacer archivo). Entonces, si elimina las diferencias del contenedor (solo para archivos de datos), Oracle podrá sobrevivir, porque podrá reproducir transacciones desde registros de rehacer.
PD: Al clonar bases de datos, también debería considerar cambiar el SID de la base de datos para que sea único. O al menos deberías usar nid para cambiar el número único de la base de datos DBID. De lo contrario, puede tener problemas al restaurar las copias de seguridad de la base de datos RMAN.