Duvida na conexão com oracle

Java

29/05/2011

Colegas,percebi que na minha conexão eu não passei o nome do meu banco de dados "Treinamento", passei XE, e quando mudo para Treinamento da uma mensagem de erro. Abaixo o codigo da conexao.

Caused by: oracle.net.ns.NetException: Listener refused the connection with the following error:ORA-12505, TNS:listener does not currently know of SID given in connect descriptor  at oracle.net.ns.NSProtocol.connect(NSProtocol.java:386) at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1054) at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:308)
[CODE]    public Connection getConnection() {        try {                                            Class.forName("oracle.jdbc.OracleDriver");           Connection cx = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE",teste","teste");                                return cx;        } catch (Exception ex) {            Logger.getLogger(GenericaDao_Proc.class.getName()).log(Level.SEVERE, null, ex);            return null;        }    }[/CODE/
Nilo Souza

Nilo Souza

Curtidas 0

Respostas

Anthony Accioly

Anthony Accioly

29/05/2011

Oi Nilo,

O Oracle adota um padrão um pouco diferente de outros bancos para a questão de databases e schemas. Um database é simplesmente uma coleção de arquivos. O Oracle XE só permite o uso de um database, que, por default, possui o SID XE. Se você quiser mudar o SID, siga essas instruções: http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:963124000346653522. (Não se esqueça de fazer um backup de tudo e tomar cuidado ao executar esses passos, se alguma coisa der errado você corre um sério risco de perder o database inteiro).

Bom, dito isso, é com certeza possível ter vários databases "lógicos" no Oracle XE. O truque aqui é o uso de schemas. Cada usuário possui seu próprio schema. Assim, fazendo uma simplificação burra para fins explicativos, você pode entender que um usuário funciona como um "database" separado.
É claro que é possível dar permissões para outros usuários usarem objetos do seu schema: http://www.oracleoverflow.com/questions/862/grant-access-to-all-objects-in-a-schema-to-another-user-schema, de forma a compartilhar tabelas, stored procedures, etc entre múltiplos usuários, mas acho que isso foge ao escopo da sua pergunta.

Abraços,
GOSTEI 0
Nilo Souza

Nilo Souza

29/05/2011

Deixa eu ver se eu entendi.Eu alem da minha conexão no sql developer chamada Treinamento, fui e criei outra de teste chamada petshop, mas até ai tudo bem, ele deixou eu criar, mas quando eu for fazer a conexão jdbc por ser XE (free) ele não permitira especificar o banco? E essas instruções que vc me passou é para conseguir fazer isso?
Eu uso o linux qual seria melhor, oracle ou sql server? Alias, acho que não  é possivel instalar o sq server 2008 no linux certo?
GOSTEI 0
Anthony Accioly

Anthony Accioly

29/05/2011

Nilo,

Não. O que eu quis dizer é que uma das limitações do Oracle XE é que você só pode ter um database por instalação, cujo SID inicialmente é XE. Você pode sim fazer quantas conexões simultâneas a instância aguentar. De fato, se você abrir as propriedades da sua nova conexão no SQL Developer verá que sua conexão com o petshop também está apontando para a mesma instância física (cujo SID é XE).

Isso não é uma limitação para conexões JDBC ao Oracle. É uma limitação do banco em si.

As instruções que eu passei foram para explicar que no Oracle usuários usam por padrão schemas separados, de forma que você não precisa realmente de múltiplos SIDs apenas para separar seus objetos (tabelas, procedures, etc), basta criar um usuário novo. Faça um teste: Crie um usuário separado para o petshop. Você verá que as tabelas dele estarão separadas das tabelas que você usa com o usuário teste.


Em relação ao melhor database, isso é muito relativo. Depende de gosto / contrato e necessidade.
O Oracle XE é um excelente SGBD se você puder conviver com as limitações dele: http://download.oracle.com/docs/cd/B25329_01/doc/install.102/b25143/toc.htm#BABIECJA.
Só permite a criação / uso de um database
Máximo de 4 Gb de armazenamentoSó usa um núcleo do processador
Não usa mais do que 1 Gb de RAM
Não recomendo a "instalação" de SQL Server em ambiente linux a não ser que seja extremamente necessário (da última vez que fiz isso foi necessário virtualizar uma instalação do Windows e esbarrei em um monte de problemas).

O principal ponto aqui é: Para que você vai usar a database? Se for para aprender PL/SQL, então fique no Oracle. Se você está tentando aprender sobre triggers e stored procedures em geral, você tem outras excelentes opções Open Source como o MySQL e o PostgreSQL.
Eu sou sempre a favor do "mínimo possível / mais portátil possível". Por essa lógica, se você estiver apenas tentando aprender JDBC eu recomendo fortemente o H2 (um banco de dados de menos de 1 mb, escrito puramente em Java, com suporte a triggers, stored procedures e um monte de outras coisas: http://a.accioly.7rtc.com/2011/03/satisfacao-imediata-com-o-banco-de.html ). Com o H2 você pode simplesmente colocar o jar dentro do seu projeto e carregá-lo onde for necessário (Linux, Windows, OS X... etc), sem necessidade de instalação, configuração, etc. Eu pessoalmente estou com umas 10 "instâncias" do H2 contendo exercícios de meus alunos no Pen Drive hehehe.

Abraços,
GOSTEI 0
Nilo Souza

Nilo Souza

29/05/2011

Na verdade eu quero comercializar, claro, quero ir aprendendo mas já dentro de um banco que eu vou usar como que "definitivo" a comercialização entende. Gosto do firebird mas a ferramente de desenvolvimento dele "flamerobin" é muito ruim e no netbeans aparecem um monte de tabela de systemas. Gostei do oracle, mas ao mesmo tempo é cheio de coisa tb. Indica algum para desktop e web?
GOSTEI 0
Nilo Souza

Nilo Souza

29/05/2011

Baixei o banco de dados. Tem alguma ferramenta grafica para ele?Se tiver algum tutorial de como criar a banco e tambem adicionar no classpath do linux te agradeço.
GOSTEI 0
Nilo Souza

Nilo Souza

29/05/2011

Baixei o banco de dados. Tem alguma ferramenta grafica para ele? Se tiver algum tutorial de como criar a banco e tambem adicionar no classpath do linux te agradeço.
  Outra coisa, tem como instalar esse bando de dados no pendrive
GOSTEI 0
Davi Costa

Davi Costa

29/05/2011

Tem como fzer um backup do banco no pendrive, mas instalar o Oracle não.

att Davi
GOSTEI 0
Nilo Souza

Nilo Souza

29/05/2011

Na verdade estou testando o banco de dados h2 orientado pelo amigo Anthony. Mas uso no pendrive pq a aqui na empresa vou estudando na hora do almoço.
GOSTEI 0
Anthony Accioly

Anthony Accioly

29/05/2011

Se a idéia é usar o banco só para desenvolvimento você pode baixar uma versão mais completa do Oracle sob licença OTN: (http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html?ssSourceSiteId=ocomen). Mas lembre-se que se você desenvolver para Oracle / SQL Server, estará automaticamente limitando o produto final a clientes que tem ou podem comprar uma licença.
Existem milhares de grandes projetos em produção usando MySQL e PostgreSQL também.

Quanto ao H2: http://a.accioly.7rtc.com/2011/03/satisfacao-imediata-com-o-banco-de.html
Além do ambiente web com code completion você pode conectar o Netbeans ou qualquer outra ferramenta de desenvolvimento a ele via JDBC.

Abraços
GOSTEI 0
Anthony Accioly

Anthony Accioly

29/05/2011

Na verdade estou testando o banco de dados h2 orientado pelo amigo Anthony. Mas uso no pendrive pq a aqui na empresa vou estudando na hora do almoço.


Sim. É só mover o jar do banco e todos os arquivos gerados de cada instância para o pen drive.
Eu geralmente já deixo tudo dentro de um projeto Eclipse / Netbeans usando caminhos relativos para a conexão. Exemplo: jdbc:h2:./DB/MeuBanco/MeuBanco;AUTO_SERVER=TRUE. Assim dá para abrir em qualquer lugar com qualquer OS que roda uma VM. Basta abrir o projeto e mandar bala.

Abraços,
GOSTEI 0
Nilo Souza

Nilo Souza

29/05/2011

Estive pensando em usar para deskotp o firebird e para web postgres. O que acha?
GOSTEI 0
Anthony Accioly

Anthony Accioly

29/05/2011

Estive pensando em usar para deskotp o firebird e para web postgres. O que acha?


São boas escolhas. Não tenho muita experiência com firebird mas todo mundo que eu conheço de Delphi diz que é o puro creme do milho. Em relação ao PostgreSQL, é um banco de excelência. O resto vai de gosto (pessoalmente, eu gosto mais do MySQL).

Abraços,
GOSTEI 0
Nilo Souza

Nilo Souza

29/05/2011

Pra fechar. Este banco que me disse h2, é um banco somente para aprendizado ou serve tb para alta produção (comercialização)?
GOSTEI 0
Anthony Accioly

Anthony Accioly

29/05/2011

Pra fechar. Este banco que me disse h2, é um banco somente para aprendizado ou serve tb para alta produção (comercialização)?


Minha opinião sobre o assunto no post que enviei do meu blog hehehe.
Dúvido que a maioria das aplicações esbarrem em limitações técnicas do banco. Porém, se por comercializável você quer dizer, ter alguma empresa que o cliente possa comprar licenças / suporte / processar, então o H2 não é a melhor opção. Se você vai precisar instalar um cluster gigante (a maioria das aplicações não requer algo assim) então o H2 não é uma opção.
Por outro lado, conforme seus estudos forem avançando você vai aprender sobre Hibernate / JPA. Com essas ferramentas migrar de banco / desenvolver uma solução que funcione em todos os bancos "padrão de mercado" não é realmente um problema.
Em projetos pessoais eu várias vezes desenvolvi com H2 migrando para MySQL depois.

Abraços,
GOSTEI 0
Nilo Souza

Nilo Souza

29/05/2011

Se entendi, vc pode desenvolver em h2 (trigger, procedures) e depois migrar para outro banco? Meu problema é mais a ferramenta de desenvolvimento no linux, estou cada dia mais afastado o windows. Não consegui um tutorial que me ensine as sintaxes de procedure, trigger do h2. Tem algum?
GOSTEI 0
Anthony Accioly

Anthony Accioly

29/05/2011

Se entendi, vc pode desenvolver em h2 (trigger, procedures) e depois migrar para outro banco? Meu problema é mais a ferramenta de desenvolvimento no linux, estou cada dia mais afastado o windows. Não consegui um tutorial que me ensine as sintaxes de procedure, trigger do h2. Tem algum?


Aí é que está o trade-off. O Hibernate e JPA funcionam perfeitamente para gerar SQL dinâmico e acabar com inconsistências entre bancos. Porém, triggers e procedures são o tipo de coisa que ainda são muito dependentes do próprio banco. É o que eu disse: Se você vai desenvolver com PL/SQL fique no Oracle. Se vai usar T-SQL fique no SQL Server.
Se você puder usar Hibernate / JPA (que mapeiam para SQL puro) então pode desenvolver no H2 sem problema que migrar para Oracle / SQL Server / MySQL / Postgre / etc é bem fácil.

GOSTEI 0
Anthony Accioly

Anthony Accioly

29/05/2011

Se entendi, vc pode desenvolver em h2 (trigger, procedures) e depois migrar para outro banco? Meu problema é mais a ferramenta de desenvolvimento no linux, estou cada dia mais afastado o windows. Não consegui um tutorial que me ensine as sintaxes de procedure, trigger do h2. Tem algum?


Resolvido? Se sim, por favor não se esqueça de fechar o chamado.
GOSTEI 0
POSTAR