Estou tentando configurar o usuário para executar o logMiner do trabalho agendado periodicamente.
meu usuário chamado admin, concedi ao usuário administrador o seguinte:
grant select on v_$database to admin
grant execute on DBMS_LOGMNR to admin
grant select on v_$logmnr_contents to admin
mas ainda assim, quando estou tentando selecionar v $ logmnr_contents, recebo - ORA-01031 privilégios insuficientes.
para testar estou rodando o seguinte script:
create or replace procedure Test_LogMiner AS
first_scn NUMBER(8);
last_scn NUMBER(8);
log_count NUMBER(8);
BEGIN
Select current_scn into last_scn from V$DATABASE;
--Select max(mined_scn) into first_scn from my_table;
first_scn := last_scn-100;
DBMS_LOGMNR.START_LOGMNR(startScn=>first_scn, endScn=>last_scn,
options=>DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG+DBMS_LOGMNR.CONTINUOUS_MINE);
WRITE_LOG('LOG_DIR', 'After START_LOGMNR');
-- get error on this select - ORA-01031 insufficient privileges--
select count(*) into log_count from v$logmnr_contents;
WRITE_LOG('LOG_DIR', 'select count(*)='||log_count);
DBMS_LOGMNR.END_LOGMNR();
WRITE_LOG('LOG_DIR', 'After END_LOGMNR');
EXCEPTION WHEN OTHERS THEN
WRITE_LOG('LOG_DIR', 'Error: '||SQLERRM);
END;
Posso executar o mesmo cenário, ou seja, iniciar o logMiner e selecionar v$logmnr_contents, quando não for executado como procedimento, do desenvolvedor SQL como usuário administrador (significa: o proc. de criação removido e o código restante colocado em outro begin
/ end
)
Ele também é executado quando eu executo o procedimento do usuário 'sys as dba'.
Minha pergunta é: o que mais devo conceder para que o procedimento funcione?
Você precisa
EXECUTE_CATALOG_ROLE
ser atribuído ao usuário.Para obter detalhes: Usando o LogMiner para analisar arquivos de redo log