Como armazeno dados em um conjunto de tabelas e excluo a fonte?

1

Eu tenho uma tabela grande no MS SQL que estou tendo problemas de leitura enquanto um aplicativo de terceiros grava nele. Meu plano para resolver o problema é mover todos os dados de um banco de dados e excluir os dados no banco de dados de origem periodicamente. O problema surge quando a tabela tem muitos dados (centenas de milhões de linhas), mas eu preciso ser capaz de ler todos os dados para as linhas que podem superar um bilhão de linhas. Eu não tenho a capacidade de modificar o banco de dados de origem porque é de terceiros.

Estou curioso para saber quais opções podem ajudar a facilitar isso. É possível replicar uma tabela de forma que, quando eu excluir os dados na tabela de origem, ela não seja excluída na tabela de destino?

    
por scottm 08.06.2012 / 15:30

3 respostas

1

Existem várias soluções possíveis para esse problema. Escolher o caminho certo depende do seu ambiente e dos seus requisitos, que não são detalhados aqui.

Com base na sua necessidade declarada de consultar a totalidade da tabela multimilionária (ou bilhões), espero que você precise fazer alguns relatórios do banco de dados dos fornecedores. Aqui estão algumas soluções possíveis que eu consideraria atingir esse objetivo:

  • READ UNCOMMITTED: execute suas consultas como READ UNCOMMITTED (por exemplo, WITH NÃO FECHE). Isso garantirá que as consultas e as atividades de OLTP não estão interferindo uns com os outros, embora seus resultados possam pouco sujo se você estiver consultando dados atualizados.
  • Instantâneos: crie instantâneos de banco de dados para consultas somente leitura. Atualizar eles regularmente, ou antes de executar os relatórios (se eles são ad hoc). Se o desempenho do relatório for o único motivo pelo qual você deseja limpar os dados da tabela, esta pode ser sua melhor solução.
  • ETL: Crie um banco de dados _Archive no mesmo servidor que contém o tabela (s) necessária (s). Populá-los a partir do prod DB com um trabalho de arquivamento diário / semanal / mensal que transfere dados para ele do prod DB, depois apaga do prod após a inserção ser bem sucedida.

Um pouco mais de informação pode nos ajudar a ajudá-lo melhor.

    
por 11.06.2012 / 20:39
0

A abordagem padrão é usar um script ETL de algum tipo para fazer uma cópia dos dados antes da exclusão.

    
por 08.06.2012 / 15:36
0
  • Inserir gatilhos que copiam cada nova entrada na criação
  • Os scripts são executados em intervalos regulares ou antes da exclusão que inserem linhas não duplicadas.

Não há motivo para que suas tabelas de data warehouse precisem estar no mesmo servidor, muito menos ligadas ao banco de dados ativo com restrições. A exclusão não deve afetar o armazém. Apenas tenha comandos que adicionem dados.

    
por 08.06.2012 / 16:34