Триггер удаления раздела в Oracle - PullRequest
0 голосов
/ 02 ноября 2018

Как мы можем создать триггер DDL для разделов в Oracle. Например, Предположим, что мы создаем триггер DDL для захвата или предотвращения, если кто-либо запускает сброс TABLE / INDEX или что-то еще в нашей схеме. Создать или заменить триггер my_trg После DROP на схеме

Можем ли мы сделать то же самое для выпадающего раздела.

Можем ли мы сохранить подробности .. как этот раздел был удален этим конкретным пользователем.

Можем ли мы запретить пользователю сбросить раздел с помощью триггера или перехватить, какой пользователь удалил раздел

1 Ответ

0 голосов
/ 02 ноября 2018

Триггер будет таким:

CREATE OR REPLACE TRIGGER LOG_ALTER
    BEFORE ALTER ON SCHEMA
    WHEN (ora_dict_obj_type = 'TABLE' AND ora_dict_obj_name = 'YOUR_TABLE')
DECLARE

    sqlcmd T_USER_LOGGING.ULOG_SQL_CMD%TYPE;
    sql_text ora_name_list_t;
    n NUMBER;

BEGIN

    n := ora_sql_txt(sql_text);
    IF n IS NOT NULL THEN
        FOR i IN 1..n LOOP
            sqlcmd := sqlcmd || sql_text(i);
        END LOOP;
    END IF;

    IF REGEXP_LIKE(sqlcmd, 'DROP\s+PARTITION', 'i') THEN
        RAISE_APPLICATION_ERROR(-20010, 'User '||ora_login_user||' must not drop partition from table YOUR_TABLE');
    END IF;     

END;
/

Но обратите внимание, пользователь с системной привилегией ADMINISTER DATABASE TRIGGER может в любом случае удалить раздел, игнорируя RAISE_APPLICATION_ERROR

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...