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.
[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?
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.
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?
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.