www.dbajccorrea.com atualizado!

fevereiro 24th, 2010 por jccorrea

Pessoal,

www.dbajccorrea.com está atualizado!

Abs,

JC

Read only table - Oracle 11g

agosto 29th, 2009 por jccorrea

Olá,

Outra funcionalidade interessante no Oracle 11g é o modo read only em tabelas.

Vejamos um exemplo :

dbajccorrea@ORCL11G> alter session set nls_language=english;

Session altered.

dbajccorrea@ORCL11G> set lines 2000 pages 50 timing on serveroutput on

Table dropped.

Elapsed: 00:00:00.96

dbajccorrea@ORCL11G> create table test_read
2 (x number,y varchar2(20)) ;

Table created.

Elapsed: 00:00:00.07
dbajccorrea@ORCL11G>
dbajccorrea@ORCL11G> insert into test_read values(1,’OCA’);

1 row created.

Elapsed: 00:00:00.01
dbajccorrea@ORCL11G> insert into test_read values(2,’OCP’);

1 row created.

Elapsed: 00:00:00.01
dbajccorrea@ORCL11G> commit ;

Commit complete.

Elapsed: 00:00:00.01
dbajccorrea@ORCL11G> alter table test_read read only ;

Table altered.

Elapsed: 00:00:00.07
dbajccorrea@ORCL11G> insert into test_read values(3,’OCM’) ;
insert into test_read values(3,’OCM’)
*
ERROR at line 1:
ORA-12081: update operation not allowed on table “DBAJCCORREA”.”TEST_READ”

Elapsed: 00:00:00.03
A mensagem parece estranha,mas informa que a operação não é permiitida mesmo sabendo que como owner da tabela tenho todos os privilégios sobre a tabela.Realmente deixa a tabela em modo read only.

dbajccorrea@ORCL11G> select owner,table_name,read_only from dba_tables
2 where table_name =’TEST_READ’ ;

OWNER TABLE_NAME REA
—————————— —————————— —
DBAJCCORREA TEST_READ YES

Elapsed: 00:00:00.08

dbajccorrea@ORCL11G> alter table test_read read write ;

Table altered.

Elapsed: 00:00:00.02

dbajccorrea@ORCL11G> alter table test_read read write;

Table altered.

Elapsed: 00:00:00.01
dbajccorrea@ORCL11G> select owner,table_name,read_only from dba_tables
2 where table_name =’TEST_READ’ ;

OWNER TABLE_NAME REA
—————————— —————————— —
DBAJCCORREA TEST_READ NO

Elapsed: 00:00:00.01

dbajccorrea@ORCL11G> insert into test_read values(3,’OCM’) ;

1 row created.

Elapsed: 00:00:00.01
dbajccorrea@ORCL11G> commit ;

Commit complete.

Elapsed: 00:00:00.00
dbajccorrea@ORCL11G>

Abs,

JC

Flashback Data Archive (Oracle Total Recall) III

agosto 29th, 2009 por jccorrea

Olá,

Vamos ao terceiro artigo rápido explicando um pouco como funciona no Flashback Data Archive.

Eu removi um arquivo da nossa tablespace de testes “acidentalmente”.Como é um banco de testes em Windows,vamos resolver o problema:

idle> alter database open;
alter database open
*
ERRO na linha 1:
ORA-01157: não e possivel identificar/bloquear arquivo de dados 6 - consulte
arquivo de analise DBWR
ORA-01110: 6 do arquivo de dados: ‘D:\DATA\FBDA01.DBF’

Solução:

idle> alter database datafile ‘D:\DATA\FBDA01.DBF’ offline;
Banco de dados alterado.
idle> alter database open ;
Banco de dados alterado.

Em outra janela:

SQL*Plus: Release 11.1.0.6.0 - Production on Sßb Ago 29 00:44:29 2009

Copyright (c) 1982, 2007, Oracle. All rights reserved.

Informe o nome do usußrio: sys / as sysdba
Informe a senha:

Conectado a:
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

GLOBAL_NAME
———————————————————————sys@ORCL11G

sys@ORCL11G> drop tablespace fbda01 including contents and datafiles;

Tablespace eliminado.

Continuando o terceiro post…

No post anterior criamos uma tablespace para armazenar o nosso Flashback Data Archive e também o próprio flashback archive com um período de retenção de 5 anos(somente para teste).

Relembrando:

sys@ORCL11G> create tablespace fbda01
2 datafile ‘d:\data\fbda01.dbf’ size 1g;
Tablespace criado.
sys@ORCL11G> create flashback archive fb_test
2 tablespace fbda01 retention 5 year;
Archive de flashback criado.

Esqueci de mencionar no post anterior mas você pode especificar uma quota na tablespace para um flashback data archive.
Ex.

sys@ORCL11G> create flashback archive fbtest02
2 tablespace fbda01 quota 250m
3 retention 2 year;
Flashback archive created.
sys@ORCL11G>
Vamos adicionar duas linhas na nossa tabela de testes:

sys@ORCL11G> select * from tb_test_fb;

no rows selected

Elapsed: 00:00:00.00
sys@ORCL11G>
sys@ORCL11G> insert into tb_test_fb values(8,10) ;

1 row created.

Elapsed: 00:00:00.04
sys@ORCL11G>
sys@ORCL11G> insert into tb_test_fb values(1,20);

1 row created.

Elapsed: 00:00:00.00
sys@ORCL11G>

Agora vamos testar um update na tabela e ver se realmente é gravado no flashback archive:
sys@ORCL11G> update tb_test_fb set x=16 where x=1 ;

1 row updated.

Elapsed: 00:00:00.02
sys@ORCL11G>
sys@ORCL11G> commit ;

Commit complete.

Elapsed: 00:00:00.02
sys@ORCL11G>

Consulta a tabela :

sys@ORCL11G> select * from tb_test_fb;

X Y
———- ———-
8 10
16 20

Elapsed: 00:00:00.02

Será que conseguimos buscar do histórico armazenado no flashback archive?

sys@ORCL11G> select dbms_flashback.get_system_change_number from dual ;

GET_SYSTEM_CHANGE_NUMBER
————————
1589292

Elapsed: 00:00:00.03
sys@ORCL11G>

sys@ORCL11G> update tb_test_fb set x=16 where x=1 ;

1 row updated.

Elapsed: 00:00:00.00
sys@ORCL11G> commit ;

Commit complete.

Elapsed: 00:00:00.00
sys@ORCL11G>
sys@ORCL11G>
sys@ORCL11G> select * from tb_test_fb ;

X Y
———- ———-
8 10
16 20

Elapsed: 00:00:00.01
sys@ORCL11G>
sys@ORCL11G> select * from tb_test_fb
2 as of timestamp (systimestamp - interval ‘5′ minute) ;

X Y
———- ———-
8 10
1 20

Elapsed: 00:00:00.04
sys@ORCL11G>
sys@ORCL11G> select dbms_flashback.get_system_change_number from dual ;

GET_SYSTEM_CHANGE_NUMBER
————————
1589821

Elapsed: 00:00:00.01
sys@ORCL11G> select sysdate from dual;

SYSDATE
——————-
29/08/2009 01:50:05

Elapsed: 00:00:00.01

Como visto,conseguimos recuperar o valor antes da mudança como se fosse na tablespace de undo.

Foi um post simples,mas acredito que mostrou a funcionalidade desta feature.

Abs,

JC

Flashback Data Archive (Oracle Total Recall) II

agosto 24th, 2009 por jccorrea

Continuando o post anterior vamos colocar a mão na massa e criar os “objetos” necessários para demonstrar o uso desta feature.

Criação da tablespace  e o flashback data archive de teste:

Conectado a:
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
GLOBAL_NAME
——————————————————————————–
sys@ORCL11G

sys@ORCL11G> select * from v$version;

BANNER
——————————————————————————–
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
PL/SQL Release 11.1.0.6.0 - Production
CORE 11.1.0.6.0 Production
TNS for 32-bit Windows: Version 11.1.0.6.0 - Production
NLSRTL Version 11.1.0.6.0 - Production

sys@ORCL11G> create tablespace fbda01
2 datafile ‘d:\data\fbda01.dbf’ size 1g;

Tablespace criado.

sys@ORCL11G> create flashback archive fb_test
2 tablespace fbda01 retention 5 year;

Archive de flashback criado.

Abaixo as visões onde podemos obter informações sobre os objetos:

sys@ORCL11G> SELECT FLASHBACK_ARCHIVE#,TABLESPACE_NAME
2 FROM DBA_FLASHBACK_ARCHIVE_TS;

FLASHBACK_ARCHIVE# TABLESPACE_NAME
—————— ——————————
1 FBDA01

Decorrido: 00:00:00.00
sys@ORCL11G>

sys@ORCL11G> select flashback_archive_name,flashback_archive#,retention_in_days
2 from dba_flashback_archive;

FLASHBACK_ARCHIVE_NAME
—————————————————————————————————-
FLASHBACK_ARCHIVE# RETENTION_IN_DAYS
—————— —————–
FB_TEST
1 1825
Decorrido: 00:00:00.00
sys@ORCL11G>

Atribuição de permissões para Flashback Data Archive

Para criar ou modificar um flashback data archive um usuário necvessita ter o privilégio de sistema FLASHBACK ARCHIVE ADMINISTER.Já para ativar o  rastreamento em uma tabela ou seja monitorar os updates e deletes é necessário o privilégio de objeto FLASHBACK ARCHIVE.

Para terminar o nosso post vamos criar uma tabela e atribuir a mesma a um flashback data archive :sys@ORCL11G>
sys@ORCL11G> create table tb_test_fb
2 (x number,y number)
3 tablespace users
4 flashback archive fb_test;

Tabela criada.

Decorrido: 00:00:01.87
sys@ORCL11G>
sys@ORCL11G> create table tb_testfb2
2 (a number,b number)
3 tablespace users
4 ;

Tabela criada.

Decorrido: 00:00:00.02
sys@ORCL11G> alter table tb_testfb2 flashback archive fb_test;

Tabela alterada.

Decorrido: 00:00:00.46

No proximo post vamos testar como funciona o armazenamento dos dados no Flashback Data Archive.

Abs,

JC

Flashback Data Archive (Oracle Total Recall) I

agosto 23rd, 2009 por jccorrea

Flashback Data Archive (Oracle Total Recall) é uma nova feature do Oracle Database originada na versão 11g.

Devido a necessidade  de um controle maior nas alterações feitas nas linhas de uma determinada tabela,normalmente tabelas críticas do banco de dados a Oracle lançou esta feature para dar suporte a regulamentações recentes como SOX/Sarbox(Sarbanes-Oxley Act) e HIPAA(Health Insurance Portability and Accountability Act ) que são leis criadas nos US para regulamentar auditoria/segurança nas empresas e a ultima para a área da saúde são exemplos desta necessidade.

Na parte prática ou tecnica temos uma criação de uma ou mais áreas de repositórios que pode ser uma área padrão,período de retenção para os objetos no repositório e é claro os objetos a serem monitorados para coletar estas mudanças.

Podemos também acessar usando a feature Flashback Query com a cláusula AS OF em uma instrução SELECT .

O  Flashback Data Archive funciona de maneira parecida com a tableapace de Undo mas registra apenas instruções Update e Delete.

Nos próximos posts iremos criar um Flashback Data Archive,conceder permissões a usuários e objetos e é claro consultar os dados que foram para o histórico.

Abs,

JC

Dica útil - Catalogando arquivos com RMAN

agosto 18th, 2009 por jccorrea

Pessoal,

Este post é rápido.Uma dica muito útil para catalogar multiplos arquivos de uma só vez com o RMAN.

Isto se faz usando o comando  CATALOG START WITH dentro do RMAN.

Um exemplo:

CATALOG START WITH ‘/Transfer/hmlg/archives/310709′ NOPROMPT;

A palavra NOPROMPT não exibe a opção de confirmação.

Essa foi a dica!

Abs,

JC

Mini-vídeo : Arquitetura do Oracle

agosto 16th, 2009 por jccorrea

Pesquisando alguns videos sobre Oracle no Youtube,eu encontrei este aqui.É uma visão geral bem simplificada da Arquitetura do Oracle,que pode ser uma porta de entrada para iniciantes nesta área.

Já estou a algum tempo sem postar no blog,acredito que o vídeo possa contribuir para alguem.

Oracle Architecture in less than 10 minutes

Abs,

JC

DBMS_SCHEDULER - Alteração de atributo do JOB

março 6th, 2009 por jccorrea

Um exemplo simples de alteração de um atributo de um JOB via DBMS_SCHEDULER.

C:\Documents and Settings\jcorrea>sqlplus /nolog

SQL*Plus: Release 10.2.0.1.0 - Production on Sex Mar 6 10:34:37 2009

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

idle> conn jccorrea@cmt
Informe a senha:
Conectado.
jccorrea@CMT> select repeat_interval from dba_scheduler_jos
2
jccorrea@CMT> select repeat_interval from dba_scheduler_jobs
2  where job_name=’EXEC_PRC_SEARCH_DUP_TSN’;

REPEAT_INTERVAL
——————————————————————————————
———-
FREQ = WEEKLY ; INTERVAL= 1

jccorrea@CMT> begin
2  dbms_scheduler.set_scheduler_attribute(’EXEC_PRC_SEARCH_DUP_TSN’,'REPEAT_INTERVAL’,'F
REQ = DAILY; interval=1′);
3  end;
4  /
dbms_scheduler.set_scheduler_attribute(’EXEC_PRC_SEARCH_DUP_TSN’,'REPEAT_INTERVAL’,'FREQ =
DAILY; interval=1′);
*
ERRO na linha 2:
ORA-06550: line 2, column 1:
PLS-00306: wrong number or types of arguments in call to ‘SET_SCHEDULER_ATTRIBUTE’
ORA-06550: line 2, column 1:
PL/SQL: Statement ignored

jccorrea@CMT> begin
2  dbms_scheduler.set_attribute(’EXEC_PRC_SEARCH_DUP_TSN’,'REPEAT_INTERVAL’,'FREQ = DAIL
Y; interval=1′);
3  end;
4  /

Procedimento PL/SQL concluÝdo com sucesso.

jccorrea@CMT> select repeat_interval from dba_scheduler_jobs
2  where job_name=’EXEC_PRC_SEARCH_DUP_TSN’;

REPEAT_INTERVAL
——————————————————————————————
———-
FREQ = DAILY; interval=1

jccorrea@CMT>

Abs,

Database Reverse Engineering no Jdeveloper

março 5th, 2009 por jccorrea

É possível?

Sim.

Fiz uma engenharia reversa de 800 tabelas.É claro que ficou ilegível o modelo de dados.Mas foi só para testar quantas tabelas ela conseguiria “puxar”.Com outro software beta da Oracle,consegui somente 70(OSDM).

Escrevi um mini tutorial(rápido) e coloquei as imagens que segue o tutorial.Se quiser leia o tutorial ou siga direto nas imagens e acompanhe.É bem simples.

Tutorial:

Abra o Jdeveloper 11g.

1.Crie um novo projeto(use o wizard)
2.Dê um nome ao seu projeto.
3.Na aba Aplication Navigator,selecione o seu projeto criado anteriormente,botão direito do mouse e clique em New.Selecione Copy Database Objects to a project
4.No Step 1,confirme a conexão com o banco de dados(caso ela já exista) ou crie uma manualmente no icone novo(+).
5.No Step 2 clique com o botão direito em Offiline Database e crie um novo offiline Database.Coloque um nome e um nome para o schema.Clique em ok.
6.Clique em Next.No Step 3,selecione o botão Query para mostrar os objetos disponíveis.Selecione eles e clique na seta “>>” para passar os objetos para o lado direito da janela.
7.Clique em Next e depois Finish para gerar os objetos.
8. Na aba Aplciation Navigator,selecione o seu Database offline criado anteriormente e com o botão direito clique em New.Selecione “Create Database Diagram” .
9.Coloque um nome para o seu diagrama,confirme os dados do projeto e clique em Ok.
10.Novamente em Aplication Navigator,selecione todos os objetos que você quer que apareça no diagrama e “drag and drop”(puxe e arraste rs) para dentro do diagrama.
11.Salve o seu projeto.

Parabéns.Você acaba de fazer uma engenharia reversa com um software free.

Imagens:


Abs,

Humildes testes com Oracle ADF

março 4th, 2009 por jccorrea

Segue alguns screenshots dos meus humildes testes com Oracle ADF.

Para quem normalmente usa putty,linux terminal e batch process  rsrs!

Not bad hein?

Tenho muita dificuldade na parte de layout,mas vou tentando aqui.

Abs,