Aquí hay algo que hago. No da como resultado un tiempo de inactividad cero, pero podría terminar en menos de un segundo.
Cree una base de datos que solo tenga elementos de interfaz con su base de datos real. En mi caso, solo contiene definiciones de vistas y todas las consultas de los usuarios pasan por esta base de datos.
Cree una nueva base de datos cada noche. Cuando haya terminado, actualice las definiciones de vista para hacer referencia a la nueva base de datos. Recomendaría desactivar el acceso del usuario a la base de datos que contiene las vistas mientras las actualiza o eliminar todas las vistas y volver a crearlas; esto evita el acceso parcial a la base de datos anterior. Debido a que la creación de vistas es rápida, esta debería ser una operación muy rápida.
Todo esto lo hacemos a través de un trabajo. De hecho, antes de cambiar las vistas de producción, probamos la creación de la vista en otra base de datos para asegurarnos de que todas funcionan.
Obviamente, si usa alter view
en lugar de requerir coherencia en todas las vistas, no hay tiempo de inactividad, solo un breve período de incoherencia.