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 / 141527
Accepted
marc_s
marc_s
Asked: 2016-06-18 02:59:08 +0800 CST2016-06-18 02:59:08 +0800 CST 2016-06-18 02:59:08 +0800 CST

Instantâneos do banco de dados do SQL Server para teste de integração

  • 772

Estou tentando definir uma forma de trabalhar com um banco de dados de teste (em SQL Server) para nossos testes de integração.

Minha ideia era fazer essas etapas no lançamento do assembly de teste de integração:

  • criar um banco de dados totalmente vazio
  • execute o script "criar objetos de banco de dados" para criar todos os objetos de banco de dados relevantes (tabela, exibições, sequências etc.)
  • preencha os "dados base" (valores de pesquisa etc.)
  • tire um instantâneo do banco de dados chamado (db)_Basisde "linha de base" para futuros testes de integração

Agora, antes de cada classe de teste (contendo 1-n testes), eu estava planejando simplesmente fazer uma "restauração do instantâneo" para voltar ao estado bem definido, mais ou menos "vazio" do banco de dados. Funciona como um encanto até agora.

No entanto, há um conjunto de testes de integração que precisam operar em um grande banco de dados de teste - então eu esperava fazer isso antes de cada um desses dispositivos de teste (classes com n testes individuais)

  • restaurar banco de dados do (db)_Basisinstantâneo
  • insira essas mais de 50.000 linhas de dados no banco de dados
  • criar outro instantâneo (db)_With_Testdatainstantâneo

(db)_With_Testdatae, em seguida, para cada teste, redefina o banco de dados para a versão instantânea bem definida , execute os testes, verifique o resultado e assim por diante.

O problema é: parece que não consigo ter dois instantâneos de banco de dados ao mesmo tempo - uma vez que o faço, não consigo restaurar meu banco de dados para nenhum deles .... Continuo recebendo este erro:

Msg 3137, Nível 16, Estado 4, Linha 9 O
banco de dados não pode ser revertido. Os nomes primários ou instantâneos foram especificados incorretamente, todos os outros instantâneos não foram descartados ou há arquivos ausentes.

Msg 3013, Nível 16, Estado 1, Linha 9
RESTORE DATABASE está encerrando de forma anormal.

É realmente assim que os instantâneos do banco de dados do SQL Server funcionam? Parece terrivelmente restritivo. ?!?!?

sql-server snapshot
  • 2 2 respostas
  • 2895 Views

2 respostas

  • Voted
  1. Best Answer
    spaghettidba
    2016-06-18T05:03:21+08:002016-06-18T05:03:21+08:00

    Infelizmente, é por design.

    Retirado da página BOL " Reverter um banco de dados para um instantâneo do banco de dados ":

    Limitações e Restrições

    A reversão não é suportada nas seguintes condições:

    • No momento, o banco de dados deve ter apenas um instantâneo de banco de dados , para o qual você planeja reverter.
    • Quaisquer grupos de arquivos somente leitura ou compactados existem no banco de dados.
    • Todos os arquivos agora estão offline, mas estavam online quando o instantâneo foi criado

    Como alternativa, você pode descartar o primeiro instantâneo (db)_Basis. Posso entender que isso parece muito limitante, mas veja desta forma: os instantâneos são arquivos esparsos com base nos arquivos de dados originais, portanto, reverter para um instantâneo específico invalidaria todos os instantâneos de qualquer maneira (os arquivos de dados básicos seriam alterados pela operação de reversão) . A limitação pode ser irritante, mas não parece irracional.

    • 12
  2. Kin Shah
    2016-06-18T07:25:49+08:002016-06-18T07:25:49+08:00

    Outra perspectiva será fazer backups e restaurá -los - já que você está apenas criando um banco de dados e um esquema vazios com alguns valores de pesquisa.

    Além disso, apenas inserindo 50 mil linhas, o banco de dados não ficará tão grande. Se você usar compactação, o tamanho do backup também será menor.

    Você pode ter um TSQL Agent jobs ou apenas scripts (pode ser que você possa criar um procedimento armazenado e apenas chamá-lo após seus testes com base na saída obtida).

    • Backup básico -(db)_Basis
    • Com backup de dados de teste -(db)_With_Testdata

    faça com que seus scripts de integração sejam executados e, com base na saída final, você pode executar qualquer um dos trabalhos acima para reverter para o ponto que desejar.

    Acho que o método de backup/restauração é muito elegante em seu cenário, pois você está atingindo a limitação de instantâneo do banco de dados . Além disso, Paul Randal escreveu no blog sobre um bug desagradável em todas as versões até e incluindo o SQL Server 2012 (não tenho certeza se foi corrigido em uma CU posterior)

    Quando você reverte para o instantâneo do banco de dados, o arquivo de log de transações do banco de dados de origem é removido e substituído por um arquivo de log de 0,5 MB com dois VLFs de 0,25 MB.

    • 4

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

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 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

    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
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • 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
    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