Tag Archive for 'oracle'

Dicas para SQL Relacional

Fonte: http://www.catswhocode.com/blog/10-sql-tips-to-speed-up-your-database

Aproveitando a dica do @pinceladasdaweb, dei uma lida no post e vou fazer uma tradução livre aqui, acrescentando meu ponto de vista e mais algumas dicas sobre SQL em um banco de dados relacional:

1. Defina seu banco de dados com cuidado
Um bom banco de dados é um banco de dados bem desenhado, que não gera tanto trabalho para buscar as informaçoes e que não guarda dados duplicados. É um banco que tem uma estrutura clara e com nomes de tabelas e campos identificáveis.
Continuar lendo ‘Dicas para SQL Relacional’

ORA-01172

Hoje, aqui na empresa, tive um problema no oracle, depois de uma possivel queda de luz no final de semana dizendo o seguinte quando subi o banco:

SQL> startup
ORACLE instance started.

Total System Global Area 2348810240 bytes
Fixed Size                  2022536 bytes
Variable Size             436208504 bytes
Database Buffers         1895825408 bytes
Redo Buffers               14753792 bytes
Database mounted.
ORA-01172: recovery of thread 1 stuck at block 17589 of file 2
ORA-01151: use media recovery to recover block, restore backup if needed

Wow.. jah pensei, putz, vou ter um bom trabalho durante o dia todo para recuperar o banco.. pq com o Oracle é sempre assim… Ledo engano !

Bastou pedir ajuda aos universitários e cheguei até esta resposta. Então fiz o seguinte:

SQL> shutdown immediate
Database dismounted.
ORACLE instance shut down.
SQL>; startup mount
ORACLE instance started.

Total System Global Area 2348810240 bytes
Fixed Size                  2022536 bytes
Variable Size             436208504 bytes
Database Buffers         1895825408 bytes
Redo Buffers               14753792 bytes
Database mounted.
SQL>; recover database
Media recovery complete.
SQL> alter database open ;

Database altered.
SQL> exit;

Perfeito… resolveu ! Ufa !
Pronto para outra.. hehehe

Python e Oracle

Coloquei no wiki um script python que gera o arquivo xml para o Oracle SQL Developer, com todas as conexões para os schemas do banco. Podendo este ser importado pela ferramenta, facilitando assim a vida de quem trabalha com ela.

Já aproveitando, o script tem alguns exemplos interessantes, como strings gigantes, gravação em arquivo, loop while, método “format” da string e claro, como conectar e retornar queryes do Oracle.

Aproveitem e comentem tb …

Link: http://wiki.berlotto.blog.br/index.php?title=Conex%C3%A3o_com_Oracle

ORA-12519

ORA-12519 – TNS:listener could not find available handler with matching protocol

Quando está ocorrendo este erro, intermitentemente ao se conectar no Oracle, provalmente foi o número de PROCESSES/SESSIONS/TRANSACTIONS que estourou.
Para verificar se foi isto mesmo, você pode ver os limites do seu banco com o SQL abaixo:

select RESOURCE_NAME, CURRENT_UTILIZATION, MAX_UTILIZATION from v$resource_limit;

Caso sim, então altere seu banco , aumentando o nro de PROCESSES possíveis, lembrando sempre que o numero de SESSIONS e TRANSACTIONS são derivados de PROCESSES, desta forma:

Sessions = (1.1 * Processes)+5
Transactions = (1.1 * Sessions)

Veja na documentação da Oracle:
PROCESSES
SESSIONS
TRANSACTIONS

Para alterar faça o seguinte:
. conecte como sys
. ALTER SYSTEM SET PROCESSES=300 SCOPE=SPFILE;
. ALTER SYSTEM SET SESSIONS=335 SCOPE=SPFILE;
. ALTER SYSTEM SET TRANSACTIONS=369 SCOPE=SPFILE;
. reiniciar o banco
. Validar novamente se as alterações sustiram efeito com o SQL acima.

PS. 300 é um bom número para processos, que é o dobro do padrão. Mas caso necessário ainda mais, e se você tem bastante maquina disponivel, pode até colocar mais …

Oracle – IMP/EXP – Como alterar as tablespaces

Sempre que eu tinha que importar um dump de um banco de dados Oracle feito com a ferramenta EXP ( e não EXPDP ) e a tablespaces ( ou as tablespaces ) que existitam no dump não existiam em meu banco de dados, eu tinha um grande trabalho para fazer este import, tento que extrair os comandos DDL de tabelas e indices, depois criar as tabelas, depois os dados e depois os indices. Sendo que se tivesse algo a mais específico não viria e tal …

Mas depois de muitas tentativas de achar a melhor maneira de fazer isto, acabei editando um arquivo .dmp com um editor de textos, no meu casos o Notepad++. E o que acabo encontrando dentro do arquivo além de escritos binários ? Um monte de comandos DDL ! hehehe Isto mesmo … os comandos DDL daquele export efetuado é gravado como texto no arquivo de dump do Oracle.

Sendo assim, pensei…
Por que não editá-lo ??

Sim ! Editei-o-o-o !

Fiz um replace-all do nome da tablespace incorreta, juntamente com as aspas para não ter erro, para o nome da minha tablespace correta.

Salvei ! Fechei ! Importei !
Advinha ? FUNCIONOU perfeitamente… parecia um dump original do Oracle ! hehehe

Só não sei se outro tipo de alteração nos arquivos de dump irão funcionar como este, mas a troca da tablespace funcionou !

Resumo da história:

--Exportar banco
exp [usuario]@orcl file=[path]/dumporacle.dmp .......
--Editar o dump dumporacle.dmp e trocar o nome das tablespaces incorretas para as corretas.
--Importar o dump
imp [usuario]@orcl file=[path]/dumporacle.dmp ......

Falow pessoal !

Oracle com JDBC thin/OCI driver

Aqui ( http://www.orafaq.com/faqjdbc.htm ) tem a resposta para estas e algumas outras questões.

Conexão ao Oracle
Banner do banco ao conectar
JSP
JServer
JSQL
Stored Procedures em Java

Divirtam-se…

shibSQL

shibSQL é um software de acesso à base de dados.

Ele funciona por linha de comandos e tem janelas de auxilio. É criado para auxiliar principalmente desenvolvedores que se utilizam de SQL e serve para ser levado em qq pendrive para qq lugar, auxiliando a quem tem que acessar todo tipo de banco em vários lugares que nao se sabe qual recurso tem.

A primeira vista vai ser um programa simples, por linha de comandos, tendo bastante características que auxiliam na sua utilização.

Até agora, a melhor ferramenta de SQL que jah utilizei foi o Oracle SQL Developer, que está em sua versão 1.5, mas este não é o meu foco.

O primeiro passo interessante que tomei com o shibSQL foi o de tornar um JTextArea um InputStream, com o jline (http://jline.sourceforge.net/), e com isto criar algo levemente parecido com o bash do linux, com history e auto-completation e tudo !  Isto sim ficou legal, pq pode ser utilizado para qq intúito.

Bom, sem mais delongas, o trabalho ( seja bom, ou seja ruim ) será visto e avaliado por todos no seu decorrer. E a definição inicial, o esboço do que quero fazer está no meu wiki:

http://www.berlotto.com/wiki/index.php?title=ShibSQL

Há, e um logo ainda será criado … hehehehe

Pulo de IDs com Jboss e Hibernate

Quando utlizamos ( no meu caso 0 JBoss ) , que trabalha com um pool de conexões, e com hibernate, utilizando sequences para geração de ID´s para as tabelas, pode ocorrer de estes ID´s serem gerados com um intervalo diferente do definido no banco. Por exemplo, na criação desta sequence oracle:

CREATE SEQUENCE TABELA_SEQ START WITH 1 INCREMENT BY 1;

Isto irá gerar por padrão uma sequence com cache de 20, ou seja, o oracle já aloca os 20 ids proximos para nao efetuar esta operação novamente no banco durante 20 iterações, ficando em memória e agilizando o processo.

Mas quando utilizamos um pool de conexões, isto nao deve ser feito, pois o cache é feito por conexão do banco, ou seja se o mesmo servidor tem 10 conexoes ao banco, quando uma delas efetuar um TABELA_SEQ.NEXTVAL, vai retornar o proximo id, digamos que seja 1, e irá guardar em memória até o 20. E se após isto, na outra conexão for executado o nextval novamente, irá retornar o 21. E não podemos gerenciar com qual conexão devemos ir ao banco, até pq daí nao teria necessidade de se ter um gerenciamento pelo application server !

Então o correto para criar a sequence é com o comando abaixo:

CREATE SEQUENCE TABELA_SEQ START WITH 1 INCREMENT BY 1 NOCACHE;



Better Tag Cloud