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 / 45899
Accepted
Sean Long
Sean Long
Asked: 2013-07-09 05:03:01 +0800 CST2013-07-09 05:03:01 +0800 CST 2013-07-09 05:03:01 +0800 CST

Os arquivos de um banco de dados podem ser copiados enquanto um banco de dados está online?

  • 772

Estou trabalhando na configuração de uma cópia de desenvolvimento de um banco de dados de produção no SQL Server 2008 R2 SP1. Atualmente, o banco de dados ativo está sendo pouco usado por dois desenvolvedores para consultas somente leitura, mas o novo banco de dados também terá atualizações.

Como o banco de dados tem 2,1 TB e levou um total de 3 dias para restaurar e atualizar para a versão mais recente que precisamos para teste, meu plano original era criar um novo conjunto de arquivos de backup e restaurar a partir desses arquivos. Isso me permitiria criar a cópia de desenvolvimento do banco de dados na mesma instância e máquina SQL, sem precisar colocar o banco de dados atual offline.

No entanto, para economizar alguns dias, pensei que seria uma boa ideia copiar os arquivos físicos do banco de dados e anexar a nova cópia do banco de dados. Infelizmente quando tento copiar recebo um erro referente ao bloqueio que o SQL Server coloca nesses arquivos.

Como não posso deixar o banco de dados offline para nada além de transferir os arquivos de log (posso terminar isso antes que as pessoas cheguem pela manhã), existe alguma maneira de copiar os arquivos de banco de dados ativos sem colocar o banco de dados em um estado offline? Ou devo esperar até que as pessoas voltem para casa para fazer isso?

sql-server sql-server-2008-r2
  • 4 4 respostas
  • 27086 Views

4 respostas

  • Voted
  1. Best Answer
    Aaron Bertrand
    2013-07-09T05:44:03+08:002013-07-09T05:44:03+08:00

    Por que leva 3 dias para fazer backup/restaurar um banco de dados de 2,1 TB? Se se trata de mover o backup, suspeito que copiar os arquivos MDF/LDF seria realmente mais lento , pois pelo menos o backup poderia ser compactado. E se se trata apenas de restaurar, a gravação das cópias do arquivo não deve ser mais rápida do que o próprio processo de restauração - certifique-se de ter a inicialização instantânea do arquivo ativada . Ou obtenha E/S mais rápida no sistema secundário.

    De qualquer forma, não, você não pode copiar os arquivos MDF/LDF enquanto o banco de dados estiver online, você teria que colocá-lo offline para fazer isso. E esta é a maneira absolutamente MENOS segura de copiar um banco de dados. Se algo acontecer com os arquivos enquanto eles estiverem desanexados/offline, agora você tem zero cópias do seu banco de dados.

    Sugiro procurar maneiras de tornar o backup/restauração mais rápido - seja garantindo que você esteja compactando seus backups e transferindo os arquivos da melhor maneira possível, usando o melhor subsistema de E/S disponível, obtendo melhor E/S, tornando certifique-se de que o IFI está ativado, etc.

    Outra opção a considerar é o envio de logs round robin - supondo que a produção esteja em recuperação total e você esteja fazendo backups de log regulares, você pode realizar o envio de logs para um banco de dados enquanto os desenvolvedores trabalham em outro e, quando chegar a um ponto estável, restaurar com recuperação e faça com que os desenvolvedores troquem, levando suas mudanças recentes com eles. Agora reinicie o envio de logs na cópia em que eles pararam de trabalhar e ela estará pronta para eles na próxima transição "estável", sem espera.

    • 11
  2. Tanner Corbin
    2013-07-09T05:43:02+08:002013-07-09T05:43:02+08:00

    Não, você terá que colocá-lo offline para copiar os arquivos. Se você tiver seu banco de dados dividido em arquivos/grupos de arquivos menores, isso pode ajudar a tornar a restauração de backup mais rápida depois de ter feito isso uma vez (dependendo de quais dados estão sendo alterados e quais dados são necessários para a cópia de desenvolvimento).

    • 0
  3. Mandar Shindagi
    2013-09-05T05:50:05+08:002013-09-05T05:50:05+08:00

    Eu vi as outras respostas e elas fazem todo o sentido. No entanto, apenas para responder à sua pergunta, você certamente pode copiar arquivos de banco de dados sem deixar o banco de dados offline. Você precisará usar a programação SMO para essa finalidade. Confira: http://technet.microsoft.com/en-us/library/ms162175(v=sql.100).aspx

    Observe que o link fornecido é para objetos gerais de programação SMO e não uma resposta específica para esta pergunta. Eu ainda não fiz isso, mas em breve vou tentar isso e vou deixar todos saberem (se eu me lembrar), o que eu descobrir.

    • 0
  4. RAVicioso
    2017-08-01T05:43:09+08:002017-08-01T05:43:09+08:00

    Os arquivos de um banco de dados podem ser copiados enquanto um banco de dados está online?

    Sim.

    Tudo o que você precisa fazer é definir o banco de dados como somente leitura:

    1. Corre:

      USE [master]
      GO
      ALTER DATABASE [Database] SET READ_ONLY WITH NO_WAIT
      GO
      
    2. Copie os arquivos de banco de dados - MDF, LDF, etc. para seu novo destino

    3. Depois que a cópia estiver concluída, você poderá desanexar e anexar novamente no novo local. Apenas certifique-se de redefinir a opção somente leitura e de que você está usando a mesma conta de usuário ao manipular esses arquivos. Além disso, você pode querer excluir os arquivos antigos após a movimentação.

    Outro método

    Depois que os arquivos forem copiados com sucesso (etapa 2 acima):

    Você pode definir o banco de dados para: Single_Usermode então:

    1. Corre:

      USE [master]
      GO
      ALTER DATABASE [Database] SET  Single_USER WITH NO_WAIT
      GO
      
    2. D:\sendo o novo local

      ALTER DATABASE Database MODIFY FILE
      (NAME = DATABASE, FILENAME = 'D:\DATABASE.mdf')
      GO
      ALTER DATABASE OHDSI MODIFY FILE
      (NAME = DATABASE_LOG, FILENAME = 'D:\DATABASE_LOG.ldf')
      GO
      
    3. Certifique-se de que os arquivos de dados no novo local ( D:\) tenham acesso total à conta de serviço que está executando o SQL Server.

    4. Reinicie os serviços SQL

    5. Corre:

      USE [master]
      GO
      ALTER DATABASE [Database] SET  Multi_USER WITH NO_WAIT
      GO
      

    Feito!

    • -1

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