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.
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?
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.
R
RicardoLuis
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?
O
oyama
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.
R
RicardoLuis
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?
M
marciosantri
Não. A instância é vc quem define na string de conexão.
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).
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?
M
marciosantri
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?
R
RicardoLuis
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?
M
marciosantri
Estes 2 bancos estão no mesmo servidor com o mesmo SID?
R
RicardoLuis
Sim.
M
marciosantri
Mano, isto está me parecendo usuário ao invés de banco como vc me disse.
Neste caso, é o parâmetro 2.
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…
R
RicardoLuis
Isso quer dizer que na verdade eu tenho apenas um banco de dados com dois aliases diferentes?
Ou seja, independente de em qual eu me conecte o banco é o mesmo?
Para ter bancos diferentes é necessário na instalação criar várias instâncias do oracle?
O
oyama
RicardoLuis:
Isso quer dizer que na verdade eu tenho apenas um banco de dados com dois aliases diferentes?
Ou seja, independente de em qual eu me conecte o banco é o mesmo?
Para ter bancos diferentes é necessário na instalação criar várias instâncias do oracle?
Voltando a thread…
Isto mesmo, para ter dois “bancos de dados” em um mesmo SGDB, é necessário ter duas instancias. Daria para usar schema, mas dependendo do que ser feito não vai dar certo. Um schema no Oracle é um usuário no SGDB.
R
RicardoLuis
Ahmm tah, agora entendi melhor as coisas…
Irei conversar com os responsáveis pelo banco de dados e quando surgirem novas dúvidas eu começo novamente esta thread.