[Duvida] Integração de bases de dados

Pessoal, Boa noite!

Trabalho para um grupo de concessionárias, onde rodo um ERP.
Cada concessionária tem o seu banco temos 11 concessionárias ou seja
11 BDs alimentados de forma independente. Hoje preciso desenvolver uma
solução onde eu consiga tirar informação de estoque disponível de veículos de cada
BD e faço um relatório mostrando dos os veículos disponível. Qual é melhor forma
que vcs acham que deve está implementando para resolver esse problema?

Obrigado!
Att,
Wanderson Carvalho

Wanderson Carvalho,

Pelo que eu entendi vocês estão precisando de um BI (Business Intelligence), correto?

Me fale um pouco mais sobre como são organizados esses bancos de dados…

Bom,

Temos um servidor de banco de dados SQL Server 2005
onde temos 11 bases de dados:

dbConssesionaria1
dbConssesionaria2
dbConssesionaria3

Os bases são exatamente iguais pois roda o mesmo ERP.

Hoje agente faz esse trabalho através de planilhas, onde cada concessionária
envia seu estoque em um xls para administração da holding, onde temos
uma pessoa que faz essa integração tbem em uma planilha.

Seria exatamente uma implementação de BI, estou estudando a possibilidade
de implementar um data warehouse. Mais o que vcs acham?

Obrigado!

Att,
Wanderson Carvalho.

Wanderson,

Perguntei sobre os servidores para saber se eles são geograficamente distribuidos, se são de fornecedores diferentes, enfim, são servidores distintos mas como não é o caso, vejo que não vai precisar de um ETL, facilitando o desenvolvimento do seu “BI”.

O produto ERP é desenvolvido por vocês?

Não…É de uma empresa paulista q desenvolve sistema para esse segmento.

Olá, “superficialmente” falando:

  • você irá apenas mudar a string de conexão com o banco;
  • ou se os BD’s estiverem no mesmo servidor usar o sistema de hierarquia, exemplo do mysql, o sql “banco1.tbX.CampoY”;

Essas foram só as primeiras coisas que me vieram a mente, o que vc usar vai pedender das estrutura que deseja montar.

HJ eu trabalho com um sistema que designa uma Session do hibernate por banco para cada BD de um cliente, e tem um legado que tinha uma Fabrica de SQL que monta as string conforme o cliente… e assim vai.

Complementando o Vmaia,

No SQL-Server você pode ter um User que tem acesso a todas essas 11 bases, o que permite a sua aplicação utilizar uma única conexão.

Falta apenas criar algum mecanismo em nível de aplicação que informa qual banco de dados você estará usando na criação de um cubo, uma dimensão ou de uma simples consulta.

Alguém poderia dar um exemplo como poderia fazer
essa conexão dinâmica para uma query simples.

Wanderson,

Se a sua aplicação estiver usando um usuário que consiga acessar os 11 bancos de dados disponíveis:

private String BANCO_CONCESSIONARIA_SP = "banco1";
private String BANCO_CONCESSIONARIA_MG = "banco2";
  
private String TABELA_VENDAS = "vendas";

public String getSQLConsultaSimples() {
    StringBuffer sql = new StringBuffer();
    sql.append(" SELECT * FROM " + BANCO_CONCESSIONARIA_SP + "." + TABELA_VENDAS + " SP, " + BANCO_CONCESSIONARIA_MG + "." + TABELA_VENDAS + " MG ");
    return sql.toString();
}

Mais dessa forma não tem como eu colocar uma condição, tipo assim:
select * from dbConcess1.estoque t1,dbConcess2.estoque t2 where ?

Por exemplo quero pegar todos os veiculos com status diponivel na minha
tabela estoque tem um campo que informa o status dos veiculos.

Wanderson,

select * from BANCO_CONCESSIONARIA_SP.TABELA_VEICULO  SP  where SP.DISPONIVEL = 'S'
union all
select * from BANCO_CONCESSIONARIA_MG.TABELA_VEICULO  MG  where MG.DISPONIVEL = 'S'
union all
select * from BANCO_CONCESSIONARIA_DF.TABELA_VEICULO  DF  where DF.DISPONIVEL = 'S'

O que acha?

Vlw fabiononato, Essa query resolve meu problema!

Mais uma duvida,

Existe a possibilidade de fazer relacionamento entre tabelas de bancos de dados diferentes,
estou perguntando isso pois vou ter q criar uma nova base de dados para essa aplicação
ontem terá tabelas com informações que complementa as do ERP gerando a necessidade
de um relacionamento.

Obrigado!
Att,
Wanderson Carvalho.

Wanderson,

No SQL-Server existe o recurso chamado linked server.

Bom dia, fabiononato!

Não conhecia e nem havia ouvido falar desse recurso, estou pesquisando na net mais vejo
que tem pouco material aprofundando no assunto. Fiz alguns testes aqui mais sem sucesso,
tenho algumas duvidas na criação.

Na criação do linked server no meu caso entre bases propria do sql server tenho q escolher
o tipo de servidor onde vou conectar(Server type) então estou SQL Server ai vem uma duvida
no campo Linked Server eu coloco o nome do servidor que desejo conectar? Ou pode ser um
nome qualquer? Necessito de fazer alguma configuração?

Olá Wanderson,

Seguem as configurações para um Linked Server http://msdn.microsoft.com/en-us/library/aa213778(SQL.80).aspx

Outra solução que vejo é você garantir a integridade na aplicação, tornando seu produto independente de fornecedor de banco de dados.

fabiononato,

Consegui fazer os relacionamento sem criar um linked server. O sql server estava reclamando que as bases
estava com colletion diferente, mas entre bases com a codificação igual o relacionamento funfo legal. Pelo que eu entendi do linked server ele é util para bases em servidores diferentes ou sgbds diferentes. Muito obrigado!

Att,
Wanderson Carvalho.