AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 45366
Accepted
rzuech
rzuech
Asked: 2013-06-28 07:32:19 +0800 CST2013-06-28 07:32:19 +0800 CST 2013-06-28 07:32:19 +0800 CST

O fornecedor deseja executar o trabalho do MSDB a cada 5 minutos para o aplicativo de negócios

  • 772

Temos um fornecedor terceirizado tentando integrar 2 aplicativos diferentes em que ambos os bancos de dados residem em nossa instância do SQL Server com mais de 150 outros bancos de dados e eles desejam criar um trabalho MSDB para "sincronizar" os 2 aplicativos diferentes a cada 5 minutos (no início, eles queria executá-lo a cada minuto).

Meu palpite inicial é que eles deveriam fazer isso de alguma forma na camada do aplicativo com um trabalho agendado do Windows, ou talvez até mesmo um gatilho temido (ao qual normalmente recorremos em situações como essa).

Eu prefiro manter os trabalhos MSDB reservados para tarefas DBA tanto quanto possível para reduzir a confusão lá, e também me deparei com consultas lentas do MSDB ao visualizar históricos de trabalhos com trabalhos superativos como este (que também afogam e eliminam históricos de trabalhos importantes de coisas mais importantes, como históricos de backup). Mas, novamente, talvez minhas preferências estejam erradas e eu precise abrir espaço para a camada de aplicativos no MSDB, arregaçar as mangas e corrigir problemas de históricos de trabalho que demoram uma eternidade para carregar quando preciso reter muito mais entradas de histórico para capturar o coisas importantes como backups (ou limpar as entradas de trabalho hiperativas).

Outro problema que tenho é que agora preciso dar a este fornecedor direitos de "sysadmin" em vez de apenas direitos de "dbo" apenas em seus bancos de dados quando eles executam suas atualizações por meio de sua GUI e espero que eles não explodam a instância onde minha missão crítica Os bancos de dados são (uma das desvantagens da consolidação).

Acho que posso colocá-los em outra instância "isolada" onde colocamos todos os fornecedores que não jogam bem, mas então precisamos reconfigurar os aplicativos para apontar para a nova instância SQL ( suspiro infelizmente não é trivial neste caso).

O fornecedor já rejeitou minhas preocupações falando sobre como os gatilhos são ruins. Então, eu "pesquisei" um pouco sobre isso e não encontrei nada. Alguém viu algum link por aí com "aparência autoritária" que isso é uma má ideia e eu posso encaminhá-lo para ele? Ou devo abraçar a abordagem deles?

Acho que nunca postei em um fórum de sql antes de pedir ajuda, então espero que minha pergunta esteja devidamente enquadrada.

EDIT: Estamos executando o SQL Server 2008 Enterprise R2 x64 SP1 (obrigado por apontar que esqueci de mencionar a versão!). Hmmm, esperamos que eles não precisem alterar seus scripts de atualização do MSDB quando formos para uma versão mais recente.

Obrigado pelo seu tempo! Rico

sql-server sql-server-2008-r2
  • 2 2 respostas
  • 1511 Views

2 respostas

  • Voted
  1. Best Answer
    Remus Rusanu
    2013-06-28T10:42:48+08:002013-06-28T10:42:48+08:00

    IMO, seu fornecedor está realmente no caminho certo.

    Um trabalho de camada de aplicativo exigiria que ele refizesse vários recursos do SQL Agent prontos para uso (por exemplo, lógica para não executar um trabalho que já está em execução, criar uma solução de armazenamento de segurança e credenciais, integrar os resultados do trabalho com relatório de erros e rastreamento de resultados em SQL etc etc etc etc). E, o mais importante, forneça uma solução de backup/HA/DC para o agendamento. Você não deseja que sua história de recuperação de desastres seja 'e depois de terminar de recuperar o servidor em espera, crie essas 50 tarefas do agendador do NT'. Portanto, ele está certo em resistir ao uso do agendador do sistema, pois ele não tem nada dos recursos e capacidades que o Agente tem.

    Ele está ainda mais certo em recuar contra os gatilhos. A substituição de um trabalho periódico por um gatilho síncrono aumenta a latência da solicitação, aumenta a coesão e o acoplamento (pense em alterações de esquema...), aumenta o risco de tempo de inatividade devido a problemas de sincronização (erro de gatilho->erro de aplicativo vs. erro de trabalho->corrigir e tentar novamente mais tarde) , aumenta drasticamente os problemas de impasse (devido a atualizações cruzadas entre rastreado/rastreado) e tem muito mais problemas.

    A solução mais fácil é, de fato, um trabalho de Agente e msdbnão é de forma alguma reservada para DBAs. Uma solução mais sofisticada seria usar timers de conversação e ativação interna , o que teria algumas vantagens sobre os trabalhos do agente, principalmente devido à contenção (tudo está dentro do banco de dados do aplicativo, pense em cenários de failover de espelhamento), mas posso entender totalmente se o seu fornecedor é relutam em experimentar algo que requer um know-how muito específico. BTW, espero que você não queira dizer um trabalho a cada 5 minutos por banco de dados .

    Quanto às permissões de administrador de sistema: o nome do jogo é assinatura de código . Você pode dar qualquer permissão para procedimentos específicos, inspecionados e validados por você, assinando-os com seu certificado privado.

    • 13
  2. db2
    2013-06-28T09:44:55+08:002013-06-28T09:44:55+08:00

    Minha preferência pessoal seria usar gatilhos para lidar com pelo menos parte da sincronização. Não me importo particularmente com a sincronização de pesquisa agendada, pois você precisa lidar com possíveis conflitos, dados obsoletos, impacto no desempenho do trabalho repetido etc. é para mitigar conflitos e desatualização, e o imediatismo de um gatilho resolveria isso.

    Se tudo estiver acontecendo no mesmo servidor, você provavelmente não terá problema em colocar o código de sincronização nos gatilhos ou fazer com que os gatilhos chamem um procedimento armazenado que sincroniza cada registro afetado. Se a sincronização abranger servidores ou se você quiser ter certeza de que ter um banco de dados offline não impedirá que o outro banco de dados seja utilizável, procure usar o Service Broker para lidar com atualizações assíncronas. Eu fiz isso para sincronizar os números de entrada de vendas com os dados do CRM entre dois servidores diferentes, enquanto permitia que qualquer um dos servidores ficasse offline sem afetar o outro aplicativo. Depois de voltar, o Service Broker entrega as mensagens e atualiza os dados no servidor remoto.

    E realmente não há nada inerentemente ruim sobre gatilhos, mas como a maioria dos aspectos do T-SQL, é muito possível escrever um código com desempenho horrível. Escrevi um artigo sobre as armadilhas comuns dos gatilhos, se isso ajudar.

    Escrevendo gatilhos bem comportados

    • 2

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Conceder acesso a todas as tabelas para um usuário

    • 5 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve