none
Comando Update via Linked Server muito lento RRS feed

  • Pergunta

  • Bom dia 

    Pessoal estou com um problema para integração entre dois sistemas um utilizando o Banco SQL Server 2008 Express com o Oracle 10 G criamos algumas stored procedure para integração entra os dois bancos utilizando Linked Server, com isso surgiu a necessidade que dentro dessa stored procedure utilizar o comando Update, verificamos que para realizar o Insert e Select dentro das procedures esta super rápido porém quando utilizamos o comando update o processo fica extremamente demorado, realizar uma tentativa de executar um comando select utilizando o mesmo filtro da clausula where do update e o retorno foi extremamente rápido no select o retorno vem em 10 segundos enquanto o update o resultado é executado em mais de 1 minuto, alguém já passou por uma situação parecida ou sabe o pq esta ocorrendo esse problema?

    segunda-feira, 10 de fevereiro de 2014 10:47

Respostas

  • Eder,

    Como os dados serão atualizados em outro servidor (ORACLE -> SQL Express), o SQL Server demora um pouco mais para escrever os dados no arquivo de LOG e, depois de executar o "parser" do comando UPDATE, só depois ele efetua o COMMIT para escrever os dados no seu banco de dados.

    No caso do comando SELECT, o SQL Server não necessita escrever este comando no LOG. Basicamente esta é a diferença de sua performance.

    Eu já tive um problema semelhante e a solução foi criar uma procedure no SQL Server, para executar à inclusão/atualização dos dados e esta ser chamado pelo outro servidor (no seu caso o ORACLE).

    Para que você consiga executar esta procedure "remota", você vai precisar ativar o RPC no seu linkedserver do SQL Server. Veja na imagem abaixo:

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA - SQL Server 2012
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
    segunda-feira, 10 de fevereiro de 2014 11:23

Todas as Respostas

  • Eder,

    Como os dados serão atualizados em outro servidor (ORACLE -> SQL Express), o SQL Server demora um pouco mais para escrever os dados no arquivo de LOG e, depois de executar o "parser" do comando UPDATE, só depois ele efetua o COMMIT para escrever os dados no seu banco de dados.

    No caso do comando SELECT, o SQL Server não necessita escrever este comando no LOG. Basicamente esta é a diferença de sua performance.

    Eu já tive um problema semelhante e a solução foi criar uma procedure no SQL Server, para executar à inclusão/atualização dos dados e esta ser chamado pelo outro servidor (no seu caso o ORACLE).

    Para que você consiga executar esta procedure "remota", você vai precisar ativar o RPC no seu linkedserver do SQL Server. Veja na imagem abaixo:

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA - SQL Server 2012
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
    segunda-feira, 10 de fevereiro de 2014 11:23
  • Cara valeu eu vou tentar fazer dessa forma só tenho uma dúvida vc tem algum exemplo de como eu executo uma procedure do sql server dentro do oracle nunca fiz esse procedimento?
    segunda-feira, 10 de fevereiro de 2014 12:22
  • Oi, Eder;

    Veja se o documento do link abaixo te ajuda:

    SQL Server Integration Services with Oracle Database 10g

    http://download.microsoft.com/download/6/9/d/69d1fea7-5b42-437a-b3ba-a4ad13e34ef6/OracleSSIS.docx

    At.,

    De Lucca

    segunda-feira, 10 de fevereiro de 2014 12:33
  • Cara valeu eu vou tentar fazer dessa forma só tenho uma dúvida vc tem algum exemplo de como eu executo uma procedure do sql server dentro do oracle nunca fiz esse procedimento?

    Eder,

    Veja este post no Fórum Americano que explica como executar uma procedure, semelhante ao processo que você precisa:

    http://social.msdn.microsoft.com/Forums/sqlserver/en-US/12e9c126-496b-49ad-9bf7-4320f7d09af8/execute-procedure-from-linked-server-oracle

    Tente também executar no Oracle o script abaixo. Faça às devidas adaptações ao seu caso:

    EXECUTE('begin SuaProcedure; end;') AT SeuLinkedServer;
    

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA - SQL Server 2012
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
    segunda-feira, 10 de fevereiro de 2014 12:48
  • Eder,

    Você esta utilizando OpenRowSet ou OpenDataSourace?

    Recomendo verificar as configurações da sua conexão ODBC.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]


    segunda-feira, 10 de fevereiro de 2014 13:28
    Moderador