Ola pessoal, há uns 10 meses atras eu tive que fazer um programinha em visual basic :alien!: arghhh, esse programinha pegava dados a cada 10 segundos num banco sql server. Os dados na verdade eram gerados por sensores em salas de predio onde ficavam servidores (CTBC Telecom), tudo tinha que ser monitorado, mas os dados eram jogados para o Oracle, entre esses dois bancos um cara criou uma ponte escrita em java, que a cada novo evento ele tirava do oracle e jogava no sql para mim, eu nunca mais vi esse cara para mim perguntar o que ele fez, mas fica a pergunta: como ele alimentava o sql em tempo real? Apenas novos eventos eram inseridos no sql.
Não poderia ser uma trigger no Oracle escrita em Java que acessava o SQL Server e inseria os dados?!?
Sim poderia
Nao, eu vi o cara escrevendo uma parte do código, ele baixou o runtime do java para executa-lo na máquina, o programa fica rodando o tempo todo lá. Com certeza não é trigger.
Deve ser um agente (uma thread) que fica rodando o tempo todo, fazendo SELECTs para ver se novos dados foram inseridos no Oracle.
Até ai tudo certo, mas como ele coloca só os dados novos no sql sem duplica-los?
Eu é que te pergunto isso. Já tentou olhar o código Java?
Que tal um campo com data/hora do registro? Isso pode dizer quais são os novos registros.
Olá
Não sou DBA e muito menos conheço tão bem assim SQL Server. Vou responder mais ou menos de orelhada.
O que quer fazer parece o que se chama de “replicação transacional”, isto é, um agente de replicação monitora quem publica as modificações na base de dados e as transmite para quem as subscreve. Esta transmissão pode ocorrer imediatamente ou periodicamente.
Para isto parece que há nas versões mais novas do SQL Server, serviços chamados DTS (Data Transformation Services) (DTS) que podem empurrar dados para o Oracle através OLE DB. Outra solução vem de um negócio do Oracle chamado “Heterogeneous Services” que acho que apareceu no Oracle 8, permitindo conectar diretamente as 2 bases via ODBC.
Como não sei qual versão das bases de dados usa e porque é assim que quer a solução, vou sugerir um modo programado que consiste em criar tabelas contendo somente as alterações. Um programinha ficaria monitorando estas tabelas e então atualizaria a outra base. As tabelas com as alterações seriam muito menores do que as originais e a performance poderia ser aceitável. O ideal é que as tabelas com as alterações fossem populadas por triggers.
[]s
Luca
Eu não tenho mais acesso ao sistema, fiz o programinha e “piquei a mula”, só sei que nao é nem um processo automatizado do oracle muito menos do sql server, nem nada a ver com o odbc, o cara me contratou me disse que eu tinha que esperar o cara terminar a tal ponte pra mim obter os dados, eu sei que é java por que o cara disse que era e eu vi ele escrevendo uma parte do codigo, e tambem por ter baixado a JVM. E os dados precisam ir para o SQL para ser tratado, pois os dados serão alterados por usuarios, e o banco oracle não pode ficar sobrecarregado de jeito nenhum, os locais que estao sendo vigiados pelos sensores que geram os eventos sao onde estao os servidores que fazem nao sei o que para a companhia telefonica, por isso tanto cuidado… Se alguem tiver mais alguma idéia…
Já que é um projeto tão importante, manda os malas dos diretores abrirem a mão e colocar um espelhamento com Oracle. O Oracle gerencia isso tudo pra você.
Ah! Se bem que depois de instalado você perde o emprego, né. Pois o Oracle faz tudo sozinho. hHeheheheheh.
Mas sério agora… sua dúvida é???
Você perguntou mas não esclareceu ainda!
Desculpem-me se não deixei claro, tudo isso já aconteceu, o cara já fez a ponte e eu já piquei a mula, nem trabalho lá, foi só um bico, eu gostaria de saber como o cara está diferenciando os dados que acabaram de chegar no oracle e jogá-los no sql sem ter duplicação, e isso em tempo real, mesmo se for por marcação de hora, como ele garante que nao tem registro ficando para trás, por exemplo ele faz uma consulta nova, mas neste instante um novo evento foi gerado mas como ele consultou a base, o programa poderia interpretar como registro ja tratado…
Olá
Reli sua mensagem inicial e agora que percebi que seu problema era publicar no Oracle e subscrever no SQL Server. Então assim acho que o DTS não funciona. Mas como o Daniel disse, o Oracle tem estas facilidades. Veja em http://otn.oracle.com/products/oracle9i/datasheets/gateways/gateway_rel2_ds.html
Para reinventar a roda e fazer tudo via programação ainda acho que a solução “meia boca” que lhe passei com as tabelas contendo só as modificações vai funcionar com performance aceitável.
Também estou curioso: afinal o que quer mesmo saber?
[]s
Luca
Tabela: XYZ
Campos:
ABC1 : number(5)
DEF2 : varchar2(50)
HHH99 : varchar2(30)
DATA_REG : timestamp
[code]SELECT ABC1, DEF2, HHH99 FROM XYZ
WHERE DATA_REG >= :dataHoraUltimaAtualizacao
while( existeRegistrosNoResultSet ) {
if( existeRegistroComAMesmaPK ) {
Atualiza no SQL SERVER
} else {
INSERE no SQL SERVER
}
}[/code]
Será que ajuda o quer o código pronto?
Valeu vou dar uma olhada, acho que tambem fica melhor assim. Na verdade eu queria saber como é que o cara juntou as “catracas” e fez aquela coisa medonha funcionar, eu nem preciso disso, mas sei que vou precisar e gostaria de ter alguma ideia… Valeu
Eu to com um problema meio parecido.
Um cliente nosso quer um sistema offline de pedidos (swing). E de tempos eles se conectam e sincronizam a base local com a do servidor.
Mas eles não querem gastar mais uma grana para comprar mais licensas Oracle.
O que terá de ser feito?
- Sincronizar base local (Access) com um MySQL no server.
- Sincronizar MySQL com Oracle, em batch.
Pergunta? Será que não gastar 40 mil dólares com Oracle justifica esse trabalho, para uma empresa que DEPENDE disto?
hummm … valeu a bricadeira de advinha … mas já que você vai fazer de novo, porque, ao invés de tentar imitar uma solução que nem você que viu sabe como é, você não tenta fazer uma direitim direitim?
Tipo, se não for usar replicação nativa do banco de dados pelo menos vai pelo caminho de triggers que o Luca citou, terá boa performance e você terá melhor controle (esquece a thread fazendo selects, overhead demais pra uma replicação de mentirinha)
[quote=“danieldestro”]Eu to com um problema meio parecido.
Um cliente nosso quer um sistema offline de pedidos (swing). E de tempos eles se conectam e sincronizam a base local com a do servidor.
Mas eles não querem gastar mais uma grana para comprar mais licensas Oracle.
O que terá de ser feito?
- Sincronizar base local (Access) com um MySQL no server.
- Sincronizar MySQL com Oracle, em batch.
Pergunta? Seria que não gastar 40 mil dólares com Oracle justifica esse trabalho, para uma empresa que DEPENDE disto?[/quote]
Hummm DEPENDE. ehehehe … depende de quanto ele vai gastar pra ter essa solução funcionando na prática. Na teoria é mais facil do que na pratica porque você tem que gerenciar concorrencia por conta (já que vai estar offline), qd for fazer o sincronismo vai ter que ter um mecanismo pra trabalhar inconcistencia e que no minimo seja espertinho pra ajudar o usuario a tentar resolver essas inconcistencias entre outras coisas que agora não lembro.
Se não for tao cabeludo o problema é porque na verdade você não tem um problema e ele não devia estar usando Oracle desde o começo :shock:
e $40K é muito … uma licenca Standard por processador custa $15k (sem limite de usuarios) e já te dá todo esse suporte.
Isso fica legal quando vc está só em ambiente windows, mas e quando está voce tá numa empresa que é uma “mistureba”, de SO, fica mais dificil fazer esse tipo de replicação…
Na verdade eles têm o Oracle Enterprise Edition: 40K por processador. Os vendedores não têm licensa para uso.
Mas, para quem engavetou um People Soft (400K gastos), acho que todo o projeto começou errado.
Começou BEM, termina ERRADO.
Começou ERRADO, …
Olá
Daniel,[list]1) 5 licenças do Oracle 9i não custam mais do que mil dólares e no servidor vc vai usar menos do que isso.
2) Nunca use o Access para nada;
3) Nunca use o Access a menos que goste de viver perigosamente;
4) Nunca use o Access mesmo para guardar a lista dos seus inimigos.
5 até 50000) Nunca use o Access[/list]Para fazer o que quer, a base local pode ser o MySQL ou o Hypersonic (hsqldb) ou o McKoi (ou o PostgreSQL no Linux) e todos serão melhores do que o Access.
[]s
Luca
E ai Luca,
- Oracle EE por processador = 40K USD (preço de tabela)
- Eles precisariam de no mínimo 40 licenças, o que justifica a compra do EE por processador. (Já vendí Oracle).
- Peguei a dica do cv para usar o hsqldb.
- Access eu tô ligado que SUCKS.
- O Sitema precisa que o Banco rode Embbeded, pois não quero sobrecarregar o processador com MAIS um serviço rodando.
6 a 50000) Aquela Aline Moraes é muito gostosa.