- Este tópico contém 6 respostas, 3 vozes e foi atualizado pela última vez 17 anos, 7 meses atrás por
Samuka.
-
AutorPosts
-
22 de julho de 2008 às 10:31 pm #82287
Samuka
ParticipantePessoas tranqüiles?
Estou tentando fazer uma trigger que me mostre quem fez algum DDL na database, mas estou com um problema na hora de trazer o sql.. segue a trigger
CREATE OR REPLACE TRIGGER xxxxxxxxxx
AFTER DDL ON DATABASE
BEGIN
INSERT INTO audit_sql(user_name, object_type, object_name,
object_owner, sql_usado, creation_date)
VALUES (USER, SYS.DICTIONARY_OBJ_TYPE, SYS.DICTIONARY_OBJ_NAME,
SYS.DICITIONARY_OBJ_OWNER, SYS.SQL_TXT, SYSDATE);END xxxxxxxxxxxxx;
Ele dá um erro na função SQL_TXT.. se eu executar tirando o campo do sql ele faz certinho..
Já indiquei a auditoria do FGA mas querem uma trigger.. bem preciso de ajuada.
Abraços a todos
Samuka
DBA Oracle Jr (Primeira semana.. será que irei durar..rs)23 de julho de 2008 às 1:10 am #82291Regis Araujo
ParticipanteSamuka, boa noite!
Só uma dúvida, o nome correto não é Sql_text ?? E você colocaria como parametro sys.sql_text ???
Abraços..!!
Pois esta informação ele busca da tabela v$sql correto?
23 de julho de 2008 às 9:29 pm #82294Samuka
ParticipanteTentei fazer de outro jeito e .. deu erro..
CREATE OR REPLACE TRIGGER audita_objetos
AFTER DDL ON DATABASE
DECLARE
V_textosql VARCHAR2(2000);
BEGIN
SELECT v$sql.sql_text
INTO V_textosql
FROM v$sql, v$session
WHERE v$session.audsid = userenv (‘sessionid’)
AND v$session.prev_sql_addr = v$sql.address;INSERT INTO audita_ddl (usuario, tipo_objeto, nome_objeto, owner_objeto, ddl_usado, texto_sql, alterado_em)VALUES (USER, SYS.DICTIONARY_OBJ_TYPE, SYS.DICTIONARY_OBJ_NAME,
SYS.DICTIONARY_OBJ_OWNER, ORA_SYSEVENT, V_textosql, SYSDATE);
END audita_objetos;Mensagem de erro:
LINE/COL ERROR
4/4 PL/SQL: SQL Statement ignored
6/17 PL/SQL: ORA-00942: a tabela ou view não existealguém tem uma solução..
Abraços
23 de julho de 2008 às 9:34 pm #82295Marcio68Almeida
ParticipanteSe não existe é por que o usuário não tem permissão de ver essa tabela…
Mas…
Por que mesmo você quer o comando de manipulação de dados ???23 de julho de 2008 às 9:46 pm #82296Samuka
ParticipanteCara estou com o usuário system..
NA verdade estou tentando de várias maneiras.. como não sei quase nada de PL tô meio perdido.. mas se existir um jeito mais facil de se obter estes dados eu agradeceria a informação…
Abraços,
Samuka
23 de julho de 2008 às 9:56 pm #82298Marcio68Almeida
ParticipanteVocê pode começar olhando a DBA_OBJECTS, que tem a data de criação e da última manipulação…
Eu tinha feito em uma empresa uma tabela cópia diária da DBA_TAB_COLUMNS, para saber quando alguma estrutura de tabela foi alterada…
Se você quer saber quem alterou, aí é outra coisa…28 de julho de 2008 às 8:03 pm #82324Samuka
ParticipanteO meu maior problema é só capturar o sql usada no ddl.. o objeto, tipo do ddl, owner, log_os, ip, usuario isso eu consegui.. só estou com um problema para identificar o sql.. eu tentei usar as views v$open_cursor e v$sqltext mas o campo do sql é pequeno Varchar2(64), as outras são tudo CLOB.. tem como eu consultar essas CLOB e inserir em uma varchar?
Abraços,
Samuka
-
AutorPosts
- Você deve fazer login para responder a este tópico.