Read only table - Oracle 11g
agosto 29th, 2009 por jccorreaOlá,
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 jccorreaOlá,
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 jccorreaContinuando 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 jccorreaFlashback 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 jccorreaPessoal,
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 jccorreaPesquisando 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 jccorreaUm 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 jccorreaSegue 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,














