Mostrando entradas con la etiqueta triggers. Mostrar todas las entradas
Mostrando entradas con la etiqueta triggers. Mostrar todas las entradas

martes, 11 de mayo de 2021

Crear disparadores (Triggers) en Google Cloud

Tras recibir el error:

ERROR 1419 (HY000): You do not have the SUPER privilege and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)


Leí que SUPER no está habilitado en las instancias de Google Cloud. Lo que permiten es configurar Marcas de bases de datos.

Seguir el procedimiento indicado:
  • Abrir la Consola
  • Ir a la instancia SQL
  • Editarla (En mi caso pidió activar la API de la consola previamente)
  • En la sección Marcas agregar el elemento deseado de la lista desplegable. log_bin_trust_function_creators
  • Guardar


Esperar a que el proceso termine y luego ya se puede crear disparadores. Después se puede eliminar la marca.

sábado, 16 de julio de 2011

Activar/desactivar disparadores Oracle

Si queremos activar o desactivar todos los triggers asociados a las tablas de un esquema, tendríamos que programarlo. Un ejemplo de ello es el post sobre «Activar/desactivar todos los triggers de todas la tablas».

Para activar o desactivar un trigger, necesitamos conocer su nombre, además, tener el privilegio adecuado:

—Si es nuestro (el usuario con el que iniciamos sesión): CREATE TRIGGER, lleva implícito el poder eliminar, modificar código y estado de nuestros disparadores.
—No es nuestro trigger: necesitamos ALTER ANY TRIGGER.
—Si es un trigger sobre base de datos ADMINISTER DATABASE TRIGGER.

Por ejemplo:
alter trigger hr.secure_employees disable; 
alter trigger hr.secure_employees enable;

«Si utilizamos una herramienta gráfica como SQL Developer, esta tarea se puede hacer como se indica en la imagen.»
Si queremos ver su estado podemos consultarlo:
select   statusfrom     all_triggerswhere  trigger_name='SECURE_EMPLOYEES';
Si queremos desactivar/activarlos todos los triggers de una tabla:
alter table hr.employees enable all triggers; 
alter table hr.employees disable all triggers;

«Si utilizas SQL Developer, se puede realizar la activación/desactivación de todos los triggers como se indica en la imagen.»
Otros enlaces:
Consultar información sobre los disparadores.
Mas información en Oracle: enabling and disabling triggers.

sábado, 16 de abril de 2011

Activar/desactivar todos los disparadores de todas las tablas. Oracle.

Diagrama sentencia ALTER TABLE
Si solo se quiere desactivar un disparador o todos los de una sola tabla, ver el post «Activar/desactivar disparadores»

Para poder desactivar o activar todos los disparadores —triggers— de todas las tablas de un esquema determinado en Oracle, creamos el siguiente procedimiento que realizará la tarea. (distinto es, triggers de los cuales se es propietario)

create or replace procedure ena_dis_all_tri
(    p_opcion    varchar2    default 'DISABLE'
,    p_owner     varchar2    default USER
)
/*
-- procedimiento que activa o desactiva todos los disparadores de todas las tablas del esquema especificado
-- recibe dos parametros opcionalmente:
-- p_opcion (enable, disable).
-- p_owner esquema/usuario al que le desactivamos/activamos los triggers de sus tablas.
-- valores por defecto de los parametros:
-- p_opcion=disable p_owner=user
-- Uso: ena_dis_all_tri[([p_opcion=>'p_opcion'][,p_usuario=>'p_usuario'])]
-- Ejemplos:
-- ena_dis_all_tri; --desactiva los triggers del usuario que ejecuta
-- ena_dis_all_tri(p_opcion=>'enable'); --activa los triggers del usuario que ejecuta
-- ena_dis_all_tri(p_usuario=>'hr'); --desactiva los triggers del usuario hr
-- ena_dis_all_tri(p_opcion=>'enable',p_usuario=>'hr'); --activa los triggers del usuario hr
*/ 
as
    --variable auxiliar
    v_aux        number;
    --cursor que nos dará el nombre de las tablas
    --que hay que activar/desactivar todos los triggers
     cursor cur is
        select    table_name
        from     all_triggers
        where   table_owner=upper(p_owner)
            and status<>p_opcion||'D';
begin
    --------------esta partes es opcional, solo sirve para realizar unas comprobaciones
    --comprobamos de que no se ha introducido mal el nombre de usuario
    select  count(username)
     into     v_aux
     from    all_users
     where username=upper(p_owner);
    if v_aux=0 then
        raise_application_error(-20000,'El usuario "'||p_owner||'" no existe.');
    end if;
    --comprobamos de que no se ha introducido mal la opcion
    if upper(p_opcion) not in ('ENABLE','DISABLE') then
        raise_application_error(-20001,'Opción "'||p_opcion||'" no válida. Usar: "ENABLE" o "DISABLE"');
    end if;
    --------------fin parte opcional
    --ejecutamos la tarea
    for reg in cur loop
        execute immediate 'alter table '||p_owner||'.'||reg.table_name
                                      ||' '||p_opcion||' all triggers';
    end loop;
end ena_dis_all_tri;
/

Se ha realizado en una base de datos Oracle 10.2.0.1

El procedimiento se ejecutará con los permisos del usuario que cree el procedimiento. Debe tener privilegio CREATE ANY TRIGGER para poder visualizar los triggers en la vista ALL_TRIGGERS o tener acceso a las tablas. Además, permiso ALTER sobre las tablas y sobre los triggers, éste último porque pueden existir triggers asociados a las tablas del esquema creados por otro usuario.
grant alter any trigger,
          alter any table,
          create any trigger to usuario;
Comprobar la información con la siguiente SELECT:
select  owner,trigger_name,table_name,status
from    all_triggers
where  table_owner='USUARIO';
El uso del procedimiento queda bajo responsabilidad de quien lo utilice.