Mostrando postagens com marcador oracle. Mostrar todas as postagens
Mostrando postagens com marcador oracle. Mostrar todas as postagens

quinta-feira, 14 de agosto de 2014

NLS_SORT Oracle

Versão em Português

Today I had problems to order uppercase and lowercase letters in the Oracle database.

Running the following command solved the problem:
ALTER SESSION SET NLS_SORT = WEST_EUROPEAN;

This problem occurred in the client environment but not locally because the NLS_SORT parameter was setted to "BINARY" (responsible for sorting [AZ to az]), and what we needed it to be the "WEST_EUROPEAN" [Aa to Zz] standard.

The trigger below changes the value of the NLS_SORT parameter whenever a session starts in the schema. Do not forget to change the schema name.

create or replace trigger PARAM_SESSION_TRIG
after logon
on NomeDoSchema.schema
begin
execute immediate 'ALTER SESSION SET NLS_SORT=WEST_EUROPEAN';
end;

Kind regards!
Adrian Schmidt

NLS_SORT Oracle

English version

Hoje tive problemas com ordenação entre letras maiúsculas e minúsculas no banco de dados Oracle.

Executando o comando abaixo resolveu:
ALTER SESSION SET NLS_SORT=WEST_EUROPEAN;

Este problema aconteceu no ambiente do cliente mas não localmente, pois o parâmetro nls_sort estava setado como "BINARY" (responsável pela ordenação [AZ a az]), e precisávamos que fosse o padrão "WEST_EUROPEAN" [Aa a Zz] .

A trigger abaixo altera o valor do parâmetro nls_sort sempre que inicia-se uma sessão no schema. Não esqueça de alterar o nome do schema.

create or replace trigger PARAM_SESSION_TRIG
after logon
on NomeDoSchema.schema
begin
execute immediate 'ALTER SESSION SET NLS_SORT=WEST_EUROPEAN';
end;

Abraços!
Adriano Schmidt

domingo, 20 de julho de 2014

Atualizar nextval oracle

Pessoal, tenho uma tabela que um monte de gente inseriu dados na mão e não respeitou a sequence.

Então utilizei este script para atualizar o nextval da sequence com o max()+1 da coluna id.


declare
  v_prox_numero number;
  v_numero_atual number;
  v_novo_numero number;
  v_numero number;
 
  v_texto varchar2(100);
begin
 
  select max(t.id)+1
    into v_prox_numero
    from nome_tabela t;
   
  select nome_sequence.nextval
    into v_numero_atual
    from dual;
   
  v_novo_numero := (v_prox_numero - v_numero_atual)+1;
 
  if v_novo_numero > 0 then
    for reg_seq in 1..v_novo_numero loop
       
      select nome_sequence.nextval
      into v_numero
      from dual;
   
    end loop;
  end if;
end;


Créditos à Ana Karina Pereira.

Abraços!
Adriano Schmidt

domingo, 15 de junho de 2014

Deletar todas as tabelas de um banco de dados Oracle

Script que deleta todas as tabelas do banco:

begin
 for deleta in (select table_name, 'DROP TABLE '||table_name||' cascade constraints' AS dropar from user_tables) loop
 BEGIN
  EXECUTE IMMEDIATE deleta.dropar;
  dbms_output.put_line('DROP TABLE '||deleta.table_name||' cascade constraints;');
  EXCEPTION WHEN OTHERS THEN
  dbms_output.put_line('Erro ao tentar dropar a tabela:'||deleta.table_name);
 END;
 end loop;
end;

Simples e rápido!

Para deletar todas as sequences do banco é só rodar o seguinte comando:

begin
 for deleta in (select sequence_name, 'DROP SEQUENCE '||sequence_name||' ' AS dropar from user_sequences) loop
 BEGIN
  EXECUTE IMMEDIATE deleta.dropar;
  dbms_output.put_line('DROP SEQUENCE '||deleta.sequence_name||' ;');
  EXCEPTION WHEN OTHERS THEN
  dbms_output.put_line('Erro ao tentar dropar a tabela:'||deleta.sequence_name);
 END;
 end loop;
end;

Fonte: http://golker.blogspot.com.br/2009/05/dropar-todos-os-tipos-e-tabelas-no.html

Abraço!
Adriano Schmidt

domingo, 9 de fevereiro de 2014

Criar Schema Oracle

Pessoal..

Hoje tive que fazer uma atividade simples, criar um schema no oracle, porém era necessário saber a sintaxe, saber um pouco sobre tablespaces e também dar os grants corretos.

Assim sendo, resolvi documentar aqui para caso alguém tenha que fazer algo semelhante:

Segue abaixo uma sugestão de script para criar os databases. Não esqueça de alterar nome_schemad, nome_schema, caminho_sevidor_datafiles:

CREATE TABLESPACE nome_schemad  
DATAFILE ‘caminho_servidor_datafiles\nome_schemad.DBF' SIZE 100M AUTOEXTEND ON
/

CREATE USER nome_schema IDENTIFIED BY nome_schema
DEFAULT TABLESPACE nome_schemad TEMPORARY TABLESPACE TEMP
/
grant connect, resource, create any view, create any synonym, create any table, create database link to nome_schema
/


Ou mais simples ainda usando a TABLESPACE users:

CREATE USER nome_schema IDENTIFIED BY nome_schema
DEFAULT TABLESPACE users TEMPORARY TABLESPACE TEMP
/
grant connect, resource, create any view, create any synonym, create any table, create database link to nome_schema
/

A senha é o que vem depois do IDENTIFIED BY, caso queira pode mudar.

É isso aí, abraços!!
Adriano Schmidt

terça-feira, 10 de dezembro de 2013

Instalar GlassFish 3.1.2.2 (build 5) - Final

Pessoal..

Tive que instalar um GlassFish em um cliente.. por mais que seja uma operação simples vou documentar aqui o passo-a-passo.

* Verifique se existe o JDK está instalado na máquina (Caso não esteja, você vai precisar instalar)
$java -version

* Baixe o zip do GlassFish (Existem os instaladores .exe e .sh, mas eu sempre prefiro os zip's)
https://glassfish.java.net/downloads/3.1.2.2-final.html

* Descompacte o zip na pasta desejada. Se for linux pode ser algo assim:
$cd /home
$mkdir glassfish-3.1.2.2
$cd glassfish-3.1.2.2
[então você copia para essa pasta o zip]
$unzip glassfish-3.1.2.2.zip

* Agora é só startar, para isso basta executar os seguintes comandos:
$cd /home/glassfish-3.1.2.2/glassfish3/glassfish/bin/
$nohup ./startserv &
$[ctrl + c]

* Para parar o GlassFish basta executar os seguintes comandos:
$cd /home/glassfish-3.1.2.2/glassfish3/glassfish/bin/
$./stopserv

* Para acessar é só utilizar estas URLs:
Home: http://[IP DA MÁQUINA]:8080/
Admin: http://[IP DA MÁQUINA]:4848/

* O ideal é startar através de um serviço ou algo do gênero para ser mais fácil para os administradores do ambiente.

* Outra coisa, recomendo NUNCA startarem o GlassFish com o usuário root. Pois através de uma aplicação Java, com poucas linhas de código, caso o servidor de aplicação tenha sido startado com root, é possível acessar e alterar o disco, entre outras atividades não desejáveis.

* Para liberar acesso ao console administrativo por outras máquinas é necessário realizar os seguintes comandos:
$./asadmin --port 4848 change-admin-password
Enter admin user name [default: admin]> [Apenas aperte enter]
Enter admin password> [Apenas aperte enter]
Enter new admin password> [Digite a senha para o admin]
Enter new admin password again> [Digite a senha para o admin]
Command change-admin-password executed successfully.

$./asadmin --host [IP DESSA MÁQUINA] --port 4848 enable-secure-admin

Bom, é isso galera. Precisando podem comentar aqui no post que eu tentarei ajudar.

Abraços!
Adriano Schmidt

sexta-feira, 11 de março de 2011

ORA-01452: cannot CREATE UNIQUE INDEX

Olá,

Fui criar um índice único no oracle:

CREATE UNIQUE INDEX nome_do_indice ON nome_da_tabela (coluna1, coluna2, coluna3);

e aconteceu o seguinte erro:

Error: ORA-01452: cannot CREATE UNIQUE INDEX; duplicate keys found

Isso aconteceu pois na tabela que fui inserir o índice já haviam registros que violavam esse índice, por isso não permitiu criar..

Para resolver removi os registros que violavam o índice e deu tudo certo.

Mais detalhes sobre o erro: http://ora-01452.ora-code.com/
Mais detalhes sobre índices no oracle: http://www.techonthenet.com/oracle/indexes.php

Vaaleu!
Adriano Schmidt.

quinta-feira, 3 de março de 2011

join type not supported by OracleJoinFragment

Hoje ao usar um right join num banco oracle tive o seguinte erro:

join type not supported by OracleJoinFragment (use Oracle9iDialect/Oracle10gDialect)

Para resolver tive que trocar o hibernate.dialect do persistence.xml de:
org.hibernate.dialect.OracleDialect
para:
org.hibernate.dialect.Oracle10gDialect

Pronto, resolvido.
Adriano Schmidt