Usuário com melhor resposta
Erro query link server

Pergunta
-
Prezados,
boa tarde!
Criei um Link Server do Sql Server 2008 para o MySql, testei a conexão e deu certo.
Quando eu vou executar a consulta abaixo me retorna o erro
select authuser from traffic where date="2013-04-26"
O provedor do OLE DB "MSDASQL" para o servidor vinculado "MYSQL" retornou a mensagem "[MySQL][ODBC 5.1 Driver][mysqld-5.1.52]MySQL client ran out of memory".
Mensagem 7320, Nível 16, Estado 2, Linha 6
Não é possível executar a consulta "select authuser from traffic where date="2013-04-26"" no provedor do OLE DB "MSDASQL" para o servidor vinculado "MYSQL".
Porem se eu coloco um Distinct antes ele me traz os valores, so que eu preciso pegar todos os campos mesmo que repetido porque é uma tabela que guarda informações de acesso a internet. Entao com esse select vou pegar os dados coletados por dia na base Mysql, fazer um insert em uma tabela Sql Server.
Alguém sabe o que pode esta ocasionando esse erro?
Respostas
-
Carlos, um monte de gente usa Linked Server pra fazer o que vc quer mas todos que precisam trazer grande quantidade de dados sofrem do mesmo problema. Com o SSIS você consegue sim criar os pacotes e automatizar sem passar por esses transtornos. Abs!
Luiz Mercante
MCITP SQL 2008 | MCTS SQL 2008 | MCTS Windows Apps | MCTS Windows Network | MCP 2003
sqldicas@outlook.com
http://sqldicas.com.br
Se a resposta foi útil de alguma forma, classifique.- Sugerido como Resposta Luiz MercanteModerator segunda-feira, 29 de abril de 2013 13:12
- Marcado como Resposta Luiz MercanteModerator quinta-feira, 9 de maio de 2013 02:52
Todas as Respostas
-
Fala Carlos, blz?
Roda um @@VERSION e passa pra gente a versão do seu SQL Server.
O mais correto pra extrair dados de uma base MySQL e inserir em outra base do SQL Server seria utilizando o Integration Services:
http://www.packtpub.com/article/mysql-data-transfer-using-sql-server-integration-services-ssis
Tem certeza que os data types estão corretos (os dados que estão vindo do MySQL estão no formato correto da coluna destino?
Luiz Mercante
MCITP SQL 2008 | MCTS SQL 2008 | MCTS Windows Apps | MCTS Windows Network | MCP 2003
sqldicas@outlook.com
http://sqldicas.com.br
Se a resposta foi útil de alguma forma, classifique. -
Oi Luiz,
bom dia!
Obrigado pelo retorno, segue a versãoMicrosoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (Intel X86) Apr 2 2010 15:53:02 Copyright (c) Microsoft Corporation Express Edition with Advanced Services on Windows NT 6.0 <X86> (Build 6002: Service Pack 2) (Hypervisor)
Sim os data types estão corretos como eu citei se eu fizer um select com o distinct ele me retorna os valores, porem eu tenho que trazer todos os registros na data especifica, estou montando um relatório de acesso a internet então o distinct não vai ser útil nesse caso. Eu estava pensando em utilizar o link server para fazer o select das informações e em seguida inserir numa base SQL... com isso eu iria criar uma procedure e um agendamento para fazer o select e inserção nas tabelas para melhorar o desempenho da consulta.
Vou olhar sua dica do Integration Services, mas com o Integration eu consigo pegar dados do Mysql e puxar para o SQL de forma automatizada?
- Sugerido como Resposta Luiz MercanteModerator segunda-feira, 29 de abril de 2013 13:12
- Não Sugerido como Resposta Luiz MercanteModerator segunda-feira, 29 de abril de 2013 13:12
-
Carlos, um monte de gente usa Linked Server pra fazer o que vc quer mas todos que precisam trazer grande quantidade de dados sofrem do mesmo problema. Com o SSIS você consegue sim criar os pacotes e automatizar sem passar por esses transtornos. Abs!
Luiz Mercante
MCITP SQL 2008 | MCTS SQL 2008 | MCTS Windows Apps | MCTS Windows Network | MCP 2003
sqldicas@outlook.com
http://sqldicas.com.br
Se a resposta foi útil de alguma forma, classifique.- Sugerido como Resposta Luiz MercanteModerator segunda-feira, 29 de abril de 2013 13:12
- Marcado como Resposta Luiz MercanteModerator quinta-feira, 9 de maio de 2013 02:52
-
Meu caro, por favor, colabore com o Fórum e dê um retorno para continuarmos te ajudando. Abs!
Luiz Mercante
MCITP SQL 2008 | MCTS SQL 2008 | MCTS Windows Apps | MCTS Windows Network | MCP 2003
sqldicas@outlook.com
http://sqldicas.com.br
Se a resposta foi útil de alguma forma, classifique. -
Pessoal,
desculpa pela demora... Vejam como ficou, dessa forma esta funcional
INSERT INTO [icsar].[dbo].[Trafego] (Cod_Usuario, Des_Login,Dta_Trafego,Hor_Trafego,Num_Bytes,Des_Url) SELECT usersID,authuser,date,time,bytes,url FROM OPENQUERY (MYSQL,'SELECT usersID,authuser,date,time,bytes,url FROM traffic where date = curdate()'); GO
Porem vejam que ele esta pegando de acordo com a data atual no select, gostaria que viesse a data de uma consulta sql. Ou seja ele vai fazer um select na tabela Trafego, checar qual é a ultima data, guarda esse valor em variavel e com isso fazer o select onde a data or maior que a ultima data no banco.
Obrigado
-
Meu caro,
Acho que você está querendo criar uma procedure, onde você coloca como parâmetro o valor que quer para a data, tipo:
EXEC usp_ImportMySQL @Data = '13/05/2013"
Se for, dá uma lida aqui:
Luiz Mercante
MCITP SQL 2008 | MCTS SQL 2008 | MCTS Windows Apps | MCTS Windows Network | MCP 2003
sqldicas@outlook.com
http://sqldicas.com.br
Se a resposta foi útil de alguma forma, classifique. -
Oi Luiz,
na verdade não é bem uma procedure, se for o caso criar a procedure posso criar sim... o que eu quero é que no lugar onde esta
FROM traffic where date = curdate()
seja substituído pelo resultado de uma consulta, ou seja eu vou selecionar qual é a ultima data que esta no banco guardar em uma variável e subsituir o curdate() pela variável... só que não estou conseguindo usar a variável.
Mas de qualquer forma obrigado!