Eu tenho um banco de dados e quero mover os arquivos .mdf
e .ldf
para outro local. Mas não quero interromper o MSSQLSERVER
serviço e não quero exportar para outro servidor.
Como posso fazer isso?
fonte
Eu tenho um banco de dados e quero mover os arquivos .mdf
e .ldf
para outro local. Mas não quero interromper o MSSQLSERVER
serviço e não quero exportar para outro servidor.
Como posso fazer isso?
Você não precisa interromper o serviço SQL Server para mover arquivos de banco de dados, mas precisa colocar o banco de dados específico offline. Isso ocorre porque você não pode mover arquivos enquanto eles estão sendo acessados e colocar o banco de dados offline impede que os arquivos sejam usados pelo aplicativo SQL Server.
O processo para movê-los é bastante simples. Desanexar / Anexar já foi descrito, mas não é tão complexo assim.
Altere os locais dos arquivos com um ALTER DATABASE
comando:
USE master; --do this all from the master
ALTER DATABASE foo
MODIFY FILE (name='DB_Data1'
,filename='X:\NewDBFile\DB_Data1.mdf'); --Filename is new location
Observe que você não precisa declarar o local antigo neste comando. A alteração desse caminho não entra em vigor imediatamente, mas será usada na próxima vez que o banco de dados for inicializado.
Defina o banco de dados offline
(Eu uso WITH ROLLBACK IMMEDIATE
para expulsar todos e reverter todas as transações atualmente abertas)
ALTER DATABASE foo SET OFFLINE WITH ROLLBACK IMMEDIATE;
Mover / copiar os arquivos para o novo local
Basta copiar os arquivos usando seu método favorito (clique em 'arrastar, XCopy, Copiar item, Robocopy)
Coloque o banco de dados online
ALTER DATABASE foo SET ONLINE;
Você pode ver isso descrito em mais detalhes aqui .
USE master; --do this all from the master ALTER DATABASE foo MODIFY FILE (name='DB_Data1_log' ,filename='X:\NewDBFile\DB_Data1_log.ldf'); --Filename is new location
MODIFY FILE
ordem é mutável. Se você executar o MODIFY FILE primeiro, ele informará que o comando é executado com êxito e o local será alterado após uma operação offline-online (o texto é diferente, mas você entendeu). A ordem Offline-> Mover arquivos-> Online, no entanto, é importante por motivos óbvios. Marque também a nota de Demonslay335. A permissão de arquivo é importante.Os arquivos MDF e LDF são protegidos e não podem ser movidos enquanto o banco de dados estiver online.
Se você não se importa de impedir que o banco de dados funcione, você pode
DETACH
, mova os arquivos e depoisATTACH
.Properties
Files
guiaPath
eFileName
de MDF e arquivos LDF . Esta etapa é importante caso você não queira acabar procurando arquivos ausentes ...Tasks -> Detach
Databases
nó do seu servidorAttach
Add
botãoOK
Você deveria estar bem agora. Informações sobre o
DETACH
-ATTACH
processo pode ser encontrada aqui .No link about
DETACH
-ATTACH
há uma recomendação de usar aALTER DATABASE
instrução se manter o banco de dados na mesma instância do SQL Server. Mais referência em Mover bancos de dados do usuário .Se você quiser mantê-lo funcionando enquanto se move, faça um
BACKUP
-RESTORE
. No processo de restauração, você pode definir o novo local dos arquivos de banco de dados.fonte
Para mover arquivos de banco de dados do sistema, siga estas etapas:
Efetue login como usuário no SSMS
Faça um backup do banco de dados criado pelo usuário por segurança.
Mate todas as sessões conectadas ao servidor pelo SSMS.
Execute o seguinte comando para verificar o local do arquivo atual dos bancos de dados do sistema:
USE master;
SELECT * FROM sys.master_files;
Identifique o caminho e anote o caminho atual dos arquivos.
Use TSQL para alterar o caminho do arquivo para todos os bancos de dados, exceto o mestre:
ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name , FILENAME = 'new_path\os_file_name' )
Por exemplo:
Agora o local do arquivo foi alterado.
Certifique-se de mover os arquivos ldf e mdf
No SSMS, clique com o botão direito do mouse no servidor e selecione propriedades. As propriedades internas vão para Configurações do banco de dados. Altere os locais padrão do banco de dados para Dados e Log para o caminho de destino. Faça logoff do servidor.
Por exemplo: mude
C:\Program Files\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQL\DATA\
paraE:\projects\DataBaseFiles\MSSQL\DATA\
Pare a instância do SQL Server.
Copie o arquivo ou arquivos para o novo local. Use Robocopy para mover os arquivos para copiar as permissões de acesso para a pasta de destino. Abra o cmd e execute como administrador e use o seguinte comando:
robocopy / sec sourceFolder destinationFolder
É melhor ir para o local de origem para executar o comando. Exclua outros arquivos que não sejam arquivos de banco de dados do sistema que são copiados. Por exemplo:
(Aqui estamos movendo todos os arquivos de banco de dados do sistema para um novo local.)
Execute as seguintes etapas no SQL Server Configuration Manager:
No nó Serviços do SQL Server, clique com o botão direito do mouse na instância do SQL Server (por exemplo, SQL Server (MSSQLSERVER)) e escolha Propriedades. Na caixa de diálogo Propriedades do SQL Server (instance_name), clique na guia Parâmetros de Inicialização. Na caixa Parâmetros existentes, selecione o parâmetro –d para mover o arquivo de dados mestre. Clique em Atualizar para salvar a alteração. Na caixa Especificar um parâmetro de inicialização, altere o parâmetro para o novo caminho do banco de dados mestre. Na caixa Parâmetros existentes, selecione o parâmetro –l para mover o arquivo de log principal. Clique em Atualizar para salvar a alteração. Na caixa Especificar um parâmetro de inicialização, altere o parâmetro para o novo caminho do banco de dados mestre.
O valor do parâmetro para o arquivo de dados deve seguir o parâmetro -d e o valor para o arquivo de log deve seguir o parâmetro -l. O exemplo a seguir mostra os valores dos parâmetros para o local padrão do arquivo de dados mestre.
Se a realocação planejada para o arquivo de dados mestre for E: \ SQLData, os valores dos parâmetros serão alterados da seguinte maneira:
Pare a instância do SQL Server clicando com o botão direito do mouse no nome da instância e escolhendo Parar. Reinicie a instância do SQL Server.
Efetue login como
sa
usuário no SSMS e verifique o local dos arquivos de banco de dados executando a seguinte consulta:USE master;
SELECT * FROM sys.master_files;
Tudo feito.
fonte
Você faz passo a passo:
fechar todas as conexões
ALTER DATABASE MyDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE
definir banco de dados com status offline
ALTER DATABASE MyDB SET OFFLINE
Para o novo caminho
ALTER DATABASE MyDB MODIFY FILE (Nome = MyDB, Nome do arquivo = 'N: \ DATA \ MyDB.MDF')
definir banco de dados com status online
ALTER DATABASE MyDB SET ONLINE
definir multiusuário
ALTER DATABASE MyDB SET MULTI_USER
fonte
Existe uma maneira de mover arquivos de dados do banco de dados (ainda não tenho certeza se existe uma maneira de fazer isso para arquivos de log) sem colocar o banco de dados offline.
Dejan Nakarada-Kordic tem uma explicação + scripts para este método aqui: https://www.itprotoday.com/sql-server/move-database-files-without-taking-database-offline
A versão curta é que você adiciona outro arquivo de banco de dados no novo local e usa o DBCC Shrinkfile, com a opção EMPTYFILE para mover os dados do arquivo antigo para o novo arquivo. Quando isso for feito, você poderá remover o arquivo de dados antigo.
Não é a minha solução, eu estava procurando por essa solução e achei muito útil para o nosso ambiente de produção.
Thorfinn
fonte
Siga estes 4 passos simples:
CurrentLocation
coluna.Agora, pare o servidor clicando com o botão direito do mouse em
Server_Name
que você pode ver no Pesquisador de Objetos (lado esquerdo).Em seguida, mover os dois arquivos de Caminho Velho para Novo Caminho e novamente iniciar o servidor por-clique direito sobre Server_Name. Confirme o novo caminho do banco de dados executando novamente a consulta da 1ª etapa.
fonte
Não tenho certeza de que seja a melhor maneira (gostaria de receber comentários para me dizer como não é), mas é muito simples (e rápido se você tiver um pequeno banco de dados):
Primeiro, faça backup do banco de dados em um arquivo .bak. Em seguida, restaure o banco de dados do mesmo arquivo .bak, escolhendo os novos locais de arquivo .mdf e .ldf em opções de arquivo para a tarefa de restauração.
Eu não faria isso em um ambiente de produção fora de uma janela de manutenção, pois você não pode acessar o banco de dados durante a restauração. Outros métodos que vi acima teriam desvantagens semelhantes. Após a conclusão da tarefa de restauração, você não precisa excluir o arquivo antigo. É feito automaticamente.
fonte
Para complementar as respostas existentes: Aqui está um script para criar as
ALTER DATABASE ... MOVE ...
instruções para todos os bancos de dados:Nota:
Substitua
REPLACE(f.physical_name, 'C:\', 'D:\')
por qualquer transformação que você deseja fazer nos caminhos do arquivo.master
está isento, pois seu caminho é determinado pelas opções de inicialização do SQL Server (consulte, por exemplo, esta resposta para obter detalhes).fonte