Conectar a Banco de Dados Oracle

Olá a todos…

Estou com um problema e nem com muita pesquisa consegui resolver. Para eu me conectar a um banco de dados Oracle, eu utilizo a seguinte string de conexão:

jdbc:oracle:thin:@192.168.90.5:1521:orcl

Porém, no SGBD eu tenho criado vários bancos, como o BDLOCAL, BDBACKUP, etc. Como que eu faço para me conectar a um destes bancos? Porque na string de conexão eu não o determino, eu defino apenas o SID, no meu caso ORCL. E eu estava dando uma olhada no arquivo tnsnames.ora, e o SID de todos os bancos de dados é o mesmo.

Como faço para me conectar a um banco específico?

Tente fazer dessa forma

("jdbc:oracle:thin:@192.168.0.2:1521:CORP", "banco", "senha");

Abraços

[quote=nandobgi]Tente fazer dessa forma

("jdbc:oracle:thin:@192.168.0.2:1521:CORP", "banco", "senha");

Abraços[/quote]

Olá… Obrigado pela resposta…

Mas assim, o segundo parâmetro que você cita não seria o nome de usuário?

Desculpe ricardo eu confundi pois o nome do banco e do user são iguais, aqui só utilizo um banco fico te devendo essa.

Abraços

Ricardo dá uma olhada nessa post, talvez possa te ajudar

http://www.guj.com.br/posts/list/39085.java

Abraços

[quote=RicardoLuis]
Porém, no SGBD eu tenho criado vários bancos, como o BDLOCAL, BDBACKUP, etc. Como que eu faço para me conectar a um destes bancos? Porque na string de conexão eu não o determino, eu defino apenas o SID, no meu caso ORCL. E eu estava dando uma olhada no arquivo tnsnames.ora, e o SID de todos os bancos de dados é o mesmo.

Como faço para me conectar a um banco específico?[/quote]

Vamos a um pouco de teoria: ao instalar um servidor Oracle de base de dados (SGBD), você pode instalar uma ou mais instancias. Cada instancia é identificada por um SID. No TNSNAMES.ORA você cria “alias” para acessar uma instancia, identificando também o servidor (IP ou nome) e porta. Se no seu SGDB tem várias instancias, então deve existir um único SID para cada instancia. Agora se você só tem uma instancia, mas vários “alias” no TNSNAMES.ORA para acessar a mesma instancia, então com JDBC você vai ter uma única URL, pois o modo thin não usa TNSNAMES.ORA para acessar o SGDB.

Hmmm oyama, agora as coisas estão ficando mais claras. Mas assim, quando eu utilizo o SID orcl, em qual dos alias eu estou me conectando? É possível eu selecionar em qual deles eu desejo me conectar?

Dica: esqueça o TNSNAMES.ORA. Não tem diferença nenhuma usar um “alias” ou outro se todos apontam para a mesma instancia. No modo thin o JDBC não usa TNSNAMES.ORA. Se quer usar as entradas do TNSNAMES.ORA, tem que usar o modo OCI (precisa de um Oracle Client instalado na máquina onde vai rodar o seu programa). Não recomendo usar o modo OCI.

Só para ver se eu entendi de verdade…
Então na verdade todos apontam para a mesma instância, dessa forma se eu der um select em uma tabela, em todos os casos ele retornará os mesmos valores? Não existem diferenças entre eles por eles terem a mesma instância?

Não. A instância é vc quem define na string de conexão.

Para conectar ao Oracle vc precisa saber:
O IP ou o nome da máquina;
A porta;
O serviço (SID).

Esses 3 são passados no primeiro parâmetro. O resto é o usuário e a senha.

“jdbc:oracle:thin:@192.168.0.2:1521:CORP”, “banco”, “senha”

No exemplo do nandobgi, o servidor é o 192.168.0.2, a porta 1521 e o serviço do Oracle é CORP (o default do Oracle costuma ser ORCL ou XE).

[quote=marciosantri]Não. A instância é vc quem define na string de conexão.

Para conectar ao Oracle vc precisa saber:
O IP ou o nome da máquina;
A porta;
O serviço (SID).

Esses 3 são passados no primeiro parâmetro. O resto é o usuário e a senha.

“jdbc:oracle:thin:@192.168.0.2:1521:CORP”, “banco”, “senha”

No exemplo do nandobgi, o servidor é o 192.168.0.2, a porta 1521 e o serviço do Oracle é CORP (o default do Oracle costuma ser ORCL ou XE).
[/quote]

Sim sim, me conectar ao banco eu consigo (como dito na primeira mensagem), o problema é como selecionar um outra alias, sendo que todos eles possuem o mesmo SID.

É possível fazer isso?

Nesta metodologia de conexão não existe “alias”.
Tudo o que vc precisa está na string de conexão. Mais nada.
Servidor + Porta + Serviço (SID ou Instância)

Digamos que todos eles têm o mesmo SID (se forem do mesmo servidor)
a conexão será a mesma (pelo menos pelo o que entendi).

Se vc tem vários alias apontando para o mesmo no SID para o mesmo servidor então é a mesma conexão. Ou não é isso q vc quer dizer?

Sim, é a mesma conexão, mas como diferenciar em qual eu estou conectado. Porque existe um banco BDLOCAL, um BDBACKUP, etc. Todos eles possuem o mesmo SID. Como diferenciar em qual banco eu estou conectado?

Estes 2 bancos estão no mesmo servidor com o mesmo SID?

Sim.

Mano, isto está me parecendo usuário ao invés de banco como vc me disse.
Neste caso, é o parâmetro 2.

“jdbc:oracle:thin:@192.168.0.2:1521:CORP”, “banco”, “senha”

Onde está “banco”.

Para eu me conectar ao banco eu faço da seguinte forma:

connection = DriverManager.getConnection("jdbc:oracle:thin:@192.168.90.5:1521:orcl", userName, password);

Sendo que o userName e o password são usuários cadastrados no banco.
Acho que não tem nada a ver com usuário.
Pelo menos acho que não.

Poste o seu TNSNAMES.ORA pra gente ae…

Arquivo tnsname.ora

# tnsnames.ora Network Configuration File: C:\Oracle\product\10.1.0\Client_1\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.

BDBACKUP =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.90.5)(PORT = 1521))
    )
    (CONNECT_DATA = 
         (SID = orcl))
  )

BDLOCAL =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.90.5)(PORT = 1521))
    )
    (CONNECT_DATA = (SID = orcl))
  )

Ok, agora ficou claro.

O seus 2 alias se conectam ao mesmo banco (192.168.90.5), pela porta 1521 usando o serviço ORCL. Em outras palavras, são idênticos.

Logo, terão strings de conexão idênticas. Neste caso, o JDBC não toma nem conhecimento deste arquivo (TNSNAMES.ORA). Na verdade, nem o Oracle Client instalado vc precisa, o que eu já considero uma grande vantagem. Os clients do Oracle 10 XE não estão nem vindo mais TNSNAMES.ORA.

O conceito de conexão muda um pouco…