DML Redirection y proxy user: un choque inesperado


Desde Oracle 19c, Active Data Guard permite ejecutar declaraciones DML (INSERT, UPDATE, DELETE) en una base de datos standby abierta en modo lectura (READ ONLY WITH APPLY), redirigiendo DML automáticamente a la primaria, activando el parámetro ADG_REDIRECT_DML
Sin embargo, en entornos donde se utilizan proxy users, he identificado un fallo poco documentado que provoca que la redirección del DML falle aunque esté configurado correctamente.
Contexto: ¿qué es DML Redirect?
Desde Oracle 19c, si activas:
ALTER SYSTEM SET ADG_REDIRECT_DML = TRUE SCOPE = BOTH;
y la standby está en modo READ ONLY WITH APPLY
, cualquier DML que ejecutes en la standby se redirige automáticamente al primario. Luego el cambio se aplica en la standby vía redo logs.
Cual es el problema?
Cuando te conectas a la standby mediante un proxy user—por ejemplo, proxy_user[target_user]—y se ejecuta un UPDATE, aparece:
ORA-16397: statement redirection from Oracle Active Data Guard standby database to primary database failed
Pero si te conectas directamente como target_user, el mismo UPDATE funciona sin problemas, redirigiéndose correctamente a la primaria.
Esto sucede a pesar de tener:
ADG_REDIRECT_DML=TRUE en ambas bases (primaria y standby)
Causa del comportamiento
Oracle, en la doc (error ORA-16397), indica que la redirección falla si "el usuario actual y el usuario conectado no son iguales"
Al usar proxy users, la sesión incorpora ambas identidades (proxy + target), por lo que Oracle detecta una discrepancia entre el usuario registrado y el usuario del esquema, bloqueando la redirección DML que debería activar ADG_REDIRECT_DML.
Recomendaciones prácticas
Para operaciones DML que se redirigirán desde la standby, no utilices proxy users.
Conéctate directamente como usuario “al uso“:
sqlplus target_user/password@standby
Asegúrate de que:
ADG_REDIRECT_DML=TRUE.
La standby está en READ ONLY WITH APPLY y con real-time apply activo.
Si el uso de proxy user es imprescindible, redirige estas conexiones al primario o crea un método alternativo (DB link).
El parámetro ADG_REDIRECT_DML activa la capacidad de redirigir DML desde la standby hacia el primario en Active Data Guard, pero no puede operar cuando se usa un proxy user, ya que Oracle detecta una inconsisténcia de identidad y cancela el redireccionamiento.
¿Qué dice la documentación?
Si buscamos ORA‑16397 puede deberse a varias causas:
cadena de conexión al primario no establecida ←No es el caso
primario no disponible←No es el caso
usuario actual ≠ usuario logado
redirección DML no soportada para PL/SQL con binds←No es el caso
real-time apply no activo ←No es el caso
El único punto que encaja con mi caso es “usuario actual y usuario logado no son el mismo”. Sin embargo, no hay ninguna referencia a proxy users, aunque encajan perfectamente en esa descripción. por lo que es recomendable evitar proxy users en sesiones que requieran redirección DML, usando conexiones directas en su lugar. Un matiz que no está documentado y puede generar confusión, pero que esta implementación ha sacado a la luz.
Subscribe to my newsletter
Read articles from Carla Muñoz López directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by

Carla Muñoz López
Carla Muñoz López
Mi nombre es Carla y me defino como una apasionada de conocer, compartir ideas, divertirme y aprender todo lo relacionado con Oracle. Alegre y creativa, con un alto grado de autoexigencia, que busca, incluso sin querer, una forma diferente de ver un mismo problema o solución. Defensora del trabajo en equipo en todas las facetas de la vida y de disfrutar todo lo que haces, siempre con humildad. Actualmente cuento con más de 15 años de experiencia como administradora de Oracle, habiendo ocupado previamente posiciones como desarrolladora en la rama de Inteligencia de Negocios. Fue en ese momento que me di cuenta de que no quería centrarme en el desarrollo, sino participar en todas las capas que involucraban los datos, desde el despliegue de la base de datos hasta su explotación final. Siempre estoy dispuesta a ayudar y compartir conocimientos. Creo firmemente que con la tecnología hay que divertirse y no verla como una competencia. La persona con la que tienes que ser el mejor es contigo mismo.