AUDIT e DBA_AUDIT_OBJECT - Portuguese

Olá, pessoas!Estou precisando criar uma auditoria na qual fiquem registras consultas a uma tabela. Pois bem, logado como SYSDBA, executei: AUDIT SELECT ON u1.T1 by access; Logado como 'u1', 'u2' e 'u3' realizei selects nesta tabela. Entretanto, ao analisar a view DBA_AUDIT_OBJECT não consta NENHUM registro. O QUE EU JÁ TENTEI FAZER: 1.) Já tentei fazer um alter system setando audit_trail para 'db' sem sucesso;alter system set AUDIT_TRAIL=db, extended scope=spfile;  2.) Após o procedimento acima, realizei o bounce no banco e ainda assim, o problema persiste. Ao efetuar o comando SHOW PARAMETER audit, parece estar tudo ok.  Alguém teria alguma idéia? Já não sei mais o que fazer... Desde já, muito obrigado pela atenção!

Olá Leandro Você não menciona a Edição e Versão do Database que está utilizando, mas creio que o link abaixo possa lhe ajudar em se tratando de Standard Edition 11g: https://docs.oracle.com/cd/E11882_01/server.112/e10575/tdpsg_auditing.htm#TDPSG50000  Tutorial: Creating a Standard Audit Trail Tente fazer o select na tabela DBA_AUDIT_TRAIL:  Espero que isso ajude. abs

Blz ? Então, minha Primeira pergunta é : ** qual *** a sua Versão Exata e Edição do RDBMS Oracle ?? Vc ** consultou ** a documentação Oracle na sua exata versão pra esse parâmetro ?? Pergunto isso porque SEI que antigamente(10g pra ser exato) no parâmetro AUDIT_TRAIL vc NÃO TINHA db,extended (ou só colocava TRUE ou só colocava db ou colucava DB_EXTENDED), vide https://docs.oracle.com/cd/B12037_01/server.101/b10755/initparams015.htm... Aí em versões  mais recentes sim foi introduzido a possibilidade de DB,EXTENDED, vide https://docs.oracle.com/cd/B28359_01/server.111/b28320/initparams017.htm#REFRN10006 ... Tenha CERTEZA de estar usando a sintaxe CORRETA pra sua versão.... Outra possibilidade : por padrão o acesso como SYSDBA normalmente não é auditadoi no bano, mas sim em arquivo externo, em arquivos .AUD - CERTEZA que os usuários que vc tá conectando não tem priv de SYSDBA ??? E finalmente : no comando AUDIT vc tem que indicar o ** DONO ** da tabela a auditar : então, se vc escreveu :  AUDIT SELECT ON u1.T1 by access;  isso só funciona ** SE REALMENTE ** T1 é ** mesmo ** uma tabela (e não sinônimo) E o usuário U1 é MESMO o dono dessa tabela T1.... Consule a DBA_OBJECTS e a DBA_TABLES e confirme isso...  Blz ? 

Agradeço pela resposta. Então, antes da criação da auditoria efetuei alguns procedimentos como:- Criação de Novos Usuários ('u1', 'u2' e 'u3');- Criação de Role;- Criação de Profile (Limitando 'u2' a ter apenas uma conexão ativa);- Criação da Tabela T1 por 'u2'; Acredito que eu possa ter cometido algum equívoco, ainda que não identificado. Utilizei uma nova VM (new), criei os usuários e a tabela e funcionou normalmente. Lá, o AUDIT_TRAIL estava setado como DB e não 'DB, EXTEND'. A sintaxe está correta, a tabela realmente chama-se 'T1' e é proveniente do schema 'U1'.Em tempo, gostaria de agradecer pela resposta. Sou novo neste mundo de TI - Banco de Dados (cerca de 4 meses) e essas respostas acrescentaram bastante. Sucesso!

Related

É possível saber o que foi modificado em uma trigger?

Olá pessoal,Preciso descobrir o que foi alterado em algumas triggers e views. Isto é possível?Com a query SELECT * FROM user_objects WHERE object_type = 'TRIGGER' eu consegui descobrir quais e quando foram modificadas, porém não sei o que foi modificado nelas. Obrigado!
Olá, Qual a versão do oracle? Existe alguma auditoria habilitada no seu banco?Caso não haja nenhuma auditoria, a única forma que me vem a cabeça para tentar identificar o ddl executado e quem rodou é utilizar o logminer. Para tal você vai precisar primeiro dar uma lida na documentação sobre o assunto (http://docs.oracle.com/cd/B19306_01/server.102/b14215/logminer.htm) e ter os archives que compreendam o horário da alteração (assumindo que a sua database está em "archivelog mode"). Espero ter ajudado,Anatoli A.
Bom dia, Depende do nível de auditoria que você tem habilitado e da versão de seu banco. Dá uma olhada na DBA_AUDIT_TRAIL http://docs.oracle.com/cd/B19306_01/server.102/b14237/statviews_3056.htm#i1619732The SQL_BIND and SQL_TEXT columns are only populated if the AUDIT_TRAIL initialization parameter is set to db,extended.As opções que você tem são o LOGMINER ou se tiver flashback e/ou os dados em UNDO ainda:Retrieve old versions of procedures with Flashback Query | The Oracle Instructor
Pessoal,Oracle 11g versão 11.2.0.3.0Nivel de auditoria = dbA base é de produção (está em archivelog) Dei uma olhada no LogMiner mas não consegui entender muito bem. Vou dar mais uma pesquisada e se alguém já usou, favor me ajudar. Obrigado pelo ajuda Anatoli e Alex!! Abs
O uso do LogMiner é bem simples, seguem dois posts que podem te ajudar:  Using Log Miner « Oracle DBA - Tips and Techniques https://oracle-base.com/articles/8i/logminer
Utilizei o logminer algumas vezes e é bem tranquilo.Os links que o Alex passou são suficientes para entenderes melhor e tentar recuperar essa info da trigger.  Anatoli A.

Duvidas no impdp/expdp

Salve a todos, Esses dias tive um problema estranho e gostaria de tirar algumas duvidas. No log do impdp/expdp tem a lista de todas as tabelas importadas ou exportadas.Se ela não estiver la ela não foi importada ou exportada, correto? Aconteceu um problema no expdp/impdp que algumas tabelas não foram importadas, não foi usado exclude nas tabelas.Mais estranho é que não deu erro de dependências de fks, o dump subiu sem erros. Alguem ja passou por isso? Mais uma duvida tem como eu dar remap_tablespace sem mencionar a tablespace do dump?Alguns dumps não eu não tenho a informação de quais são as tablespaces para o remap. Obrigado pela ajuda
Olá, Interessante essa sua situação, quanto às tabelas, tu dizes que elas não aparecem no log de export, isso?Quanto a questão do remap, remap tem que ter as duas informações, porém acho mais fácil você tentar descobrir as tablespaces originais. Para isso tem duas vias, uma você pode gerar um sqlfile e ver lá dentro em quais tablespaces o impdp tentaria criar os segmentos. A outra é uma "manha" que o Richard Harrison tem, que trata-se de atualizar a master table com as informações do dump de forma que você consiga consultar ela. Link do artigo completo do Rich: Oracle DBA Blog 2.0: What tablespaces do i need to import a datapump dumpfile? Espero tenha ajudado,Anatoli A.
Anatoli obrigado pela ajuda. Sim ela não apareceu no log de export. Estranho ne. Essas opções do remap são bem legais.Fiquei com uma duvida do artigo, após gerar a master table e verificar as tbs, eu preciso apaga-la?
Olá, Eu indico sempre dropar as tabelas master após terem sido geradas. Abraços.
Opa, Como o Carlos disse, acredito que dropar seja a melhor abordagem, já que esse seria o caminho natural delas. Quanto as tabelas faltando, fica meio difícil dizer precisamente o que houve com as informações passadas... Sempre me vem na cabeça a ideia de tabelas da recyclebin que aparecem na dba_objects quando fazemos um count mas não são levadas pelo datapump afinal estão na lixeira... Como que você verificou que estão faltando tabelas?Essas tabelas tem dados (segment deferred creation pode causar esse problema também, pelo que lembro...)? Espero que possa ajudar,Anatoli A.
Anatoli, Descobrimos quando subimos a aplicação e estava reclamando de tabela faltando.Subimos um dump mais antigo e funcionou. Bom acho que nunca vamos saber, rsrs.Mandei aqui para ver se alguém já tinha passado por isso, é a primeira vez que vejo isso acontecer, muito estranho. Obrigado pela ajuda de todos

Clonar bases?

Olá, Possuo duas bases no mesmo servidor, sendo uma de produção e outra pra simulação. Preciso que a de simulação funcione como um espelhamento da base de produção.Qual a melhor alternativa pra isto?Automatizar por script a restauração uma vez ao dia da base de simulação ou existe alguma alternativa melhor? Configurações: Oracle EE 11.0.2 Obrigado!! Guilherme
Olá Guilherme, Então, acredito que a melhor forma é ter um script a mão para realizar o refresh da base de "simulação" periodicamente.O refresh pode ser feito tanto com restore/recover, quanto via datapump (acredito ser uma forma interessante pois pode se atualizar apenas alguns schemas que se precisa de novas informações...).Caso queira fixar um período para realizar o refresh ainda dá para por na cron (ou agendador de tarefas...). Dica: como as bases ficarão no mesmo servidor, tome cuidado com os nomes delas e dos seus arquivos e também para as simulações não impactarem em produção... Espero ter ajudado,Anatoli A.
Exato. O grande "porém" da minha dúvida é a influência no banco de produção. Não poderei fazer muitas exportações (mesmo por datapump) pra não influenciar no banco de produção. Alinharei este fato com o cliente.Também já estou deixando outros scripts agendados via cron. Muito obrigado! Guilherme
Bom dia, Se o teu storage possui suporte a SnapShots, seria a melhor alternativa e mais rápida. Você pode usar o RMAN DUPLICATE DATABASE ou Restore/Recover, com isso você ainda tem o benefício de testar se o seu backup funciona. E por último, dá uma olhada nas soluções da Delphix - http://www.delphix.com/ Abs

Dúvidas - Memória

Olá pessoal,Estou com algumas dúvidas referente a memória no Oracle 10g. - Como saber a quantidade de memória que foi disponibilizada pra uma base já criada?Utilizei os seguintes comandos: show parameter sga e show parameter pgaSomei sga_max_size e pga_aggregate_target, resultando em +/- 16 GB, este é a quantidade de memória da base? Estou certo? - Como devo proceder na hora de criar uma base no Oracle 10g? No Oracle 11g basta setar o memory_target, e no Oracle 10g? Como faço a divisão da SGA e PGA se precisar configurar uma base com 16GB, por exemplo? - Se precisar alterar a quantidade de memoria de uma base já criada, o que e como devo fazer? Pelo que havia dado uma lida, devo alterar o pfile da base, correto? Fico no aguardo de respostas destas dúvida...Obrigado! Abs.
Olá, GuilhermeF, Com relação a imagem que você postou, os valores totalizam cerca de 3G (1536M + 1484M). Na questão da alocação de memória, existem alguns padrões estabelecidos pela Oracle mas cada ambiente é único e deve ser avaliado com mais detalhes. De acordo com esses padrões, em ambientes OLTP seria 80% da memória para SGA e 20% para PGA, em ambiente DW seria cerca de 60% SGA e 40% PGA ou até mesmo 50-50%. Também é recomendado utilizar cerca de 85% da memória do servidor para as instâncias de banco de dados - se este servidor é exclusivo para banco de dados -, ou seja, se uma base que possui característica OLTP está em um servidor com 32GB de RAM, o ponderável seriam cerca de 27GB para o Oracle onde 22GB para SGA e 5GB para PGA. Na versão 10g, ainda não havia o Gerenciamento Automático de Memória (AMM) portanto, os parâmetros são esses mesmo que você mencionou. Para o memory_target na versão 11g, é recomendado trabalhar com este em bases que possuem valores abaixo de 10G pois acima disso o recomendado é utilizar Huge Pages que não é compatível com o AMM no Linux. E para modificar o valor de memória de uma instância no Oracle, o procedimento é alterar o spfile e reiniciar a instância. Na versão 12c, o conceito se torna um pouco diferente em arquiteturas Multitenant. Recomendo a você a leitura dos guias da Oracle que são bem detalhados (http://docs.oracle.com/database/121/index.htm) Abraços.
Obrigado pela ajuda caadecarvalho.Se reparar novamente na imagem tem 1536M + 14848M, ou seja, cerca de 16 GB mesmo.E como devo proceder com a alteração de memória de uma base já criada? Muito obrigado! Abs.
Entendi, então os valores estão bem estranhos, porque 15GB de PGA e 1,5GB de SGA é complicado. Para alterar, basta logar na base e executar os comandos abaixo, atente que desta forma estará removendo o AMM. De preferencia, faça um backup do seu spfile, caso você possua dificuldade em manuseá-lo. 
ALTER SYSTEM SET PGA_AGGREGATE_TARGET=3G SCOPE=SPFILE;
ALTER SYSTEM SET SGA_MAX_SIZE=10G SCOPE=SPFILE;
ALTER SYSTEM SET SGA_TARGET=9G SCOPE=SPFILE;
ALTER SYSTEM RESET MEMORY_TARGET SCOPE=SPFILE;
ALTER SYSTEM RESET MEMORY_MAX_TARGET SCOPE=SPFILE;
SHU IMMEDIATE
STARTUP
  Abraços.
caadecarvalho,Encontrei esses valores em uma base Oracle 11g. A base foi criada com 16 GB de memória, sendo utilizado gerenciamento automático de memória. Só mostrei esta tela como exemplo, pra ver se eu estava verificando a memória de uma base corretamente, pois meu objetivo era verificar em uma base 10g.  Agora fiquei com mais dúvida... heheheh Como pode o Oracle 11g ter feito esta divisão de forma errada? Pois distribuiu 14848M para PGA e 1536M para SGA.Novamente muito obrigado pela ajuda!!Abs
GuilhermeF Isso ai está com cara de dedo e não de algo feito pelo próprio Oracle =] Abraços.
caadecarvalho,Não foi dedo, pois pude acompanhar esta instalação, ela foi feita em silent mode. No arquivo dbca.rsp foi alterado os seguintes valores: TOTALMEMORY = "16384", AUTOMATICMEMORYMANAGEMENT = "TRUE" e #MEMORYPERCENTAGE = "40" (Ficou comentado).Revisei o arquivo novamente e não encontrei nenhuma erro, como citei acima, acredito que os parâmetros foram configurados corretamente... Abraço
Pode se encaixar nesta nota aqui: DBCA Creation Silent Mode Failed to Enable Automatic Memory Management (Doc ID 1370820.1) Abraços.
Não possuo este acesso

Desfazer restauração, é possível?

Olá pessoal,Havia perguntado na comunidade PL/SQL, porém ninguém respondeu...Realizei uma restauração para um determinado dia e horário, porém os dados que eu gostaria não estavam naquele horário...Como faço pra voltar uma restauração feita? É possível reverter a restauração da base, deixando no estado anterior da restauração?Oracle 11g EE, base em archivelog. Realizei com RMAN, com o seguinte script:run{set until time "to_date('27/07/2015 13:00:00','dd/mm/yyyy hh24:mi:ss');restore database;recover database;} Fico no aguardo.Obrigado pessoal. Abs
Olá Guilherme, Se compreendi bem a sua pergunta... você poderia fazer um restore de volta para a posição anterior (usando um set until scn), porém precisará lidar com a questão das "incarnations" do banco. Teria de verificar pelo rman, as incarnations e os seus scns correspondentes e realizar um reset para uma posição antes de você ter aberto o seu banco com resetlogs pela última vez, antes de realizar o restore.  Espero que ajude,Anatoli A.
Olá AnatoliAndrei,Exato.Realizei a restauração da base pro dia 27/07/2015 às 13:00, porém não é o horário que eu realmente gostaria (procurava).Conforme verificação dos "incarnations", obtive 3 resultados, sendo o terceiro com marcação do dia 29/07/2015 que foi o dia que realizei a restauração.Acredito que ele tenha "marcado" esse ponto, então resolvi voltar a restauração feito pro dia 29/07/2015, utilizando o scn correspondente, porém quando executo a restauração me devolve o seguinte erro: RMAN-20208: UNTIL CHANGE is before RESETLOGS change, ou seja, não estou conseguindo voltar pro dia 19/07/2015, que foi a data de alteração da base.O que devo fazer? Obrigado pela ajuda. Abs 
***Corrigindo: "RMAN-20208: UNTIL CHANGE is before RESETLOGS change, ou seja, não estou conseguindo voltar pro dia 29/07/2015, que foi a data de alteração da base."
Guilherme, Ok, como comentei antes, você precisa realizar um reset para o incarnation antes do último open resetlogs. Se você possui 3 incarnations listados e o terceiro é o do dia 29, esse foi gerado automaticamente após você realizar o seu restore mal sucedido e abrir o banco (incarnations são gerados quando você dá o open resetlogs), logo, em tese o que deve ser feito é realizar um reset para o incarnation 2 e rodar o restore/recover até a posição desejada. Alguns links que talvez ajudem a entender melhor o assunto... http://docs.oracle.com/cd/B28359_01/backup.111/b28273/rcmsynta036.htm RMAN Recover to a Previous Incarnation Anatoli A.
AnatoliAndrei,Muito obrigado pela ajuda!!!!Consegui aqui, está tudo ok.Mais uma vez obrigado!Abs

Categories

Resources