O SQL Server 2000 precisa impedir logons enquanto executa um backup para uma migração lado a lado

1

Estou procurando uma maneira de impedir que os logons ocorram para fazer um backup completo de um banco de dados para migrar de sua instância atual do SQL Server 2000 para uma nova instância do SQL 2005. Um amigo meu sugeriu a execução de um script que colocaria o DB em um estado de reversão. Não sendo um DBA meu DDL é muito pobre e executar um script que eu não entendo pode não ser a melhor idéia.

Uma opção que pode ser mais fácil é simplesmente desanexar e copiar, para o novo servidor.

Qualquer sugestão seria muito apreciada.

    
por pigeon 09.03.2010 / 02:51

3 respostas

1

detach / copy / attach funcionaria. (Não deixe o (s) arquivo (s) LDF. Eles são importantes, mesmo que algumas pessoas não o considerem, especialmente se você for forçar o banco de dados rapidamente. Você pode perder dados se o log não estiver corretamente conectado ao arquivo. novo servidor).

Eu tenho outra alternativa que usa o muito negligenciado recurso "Pause" do SQL Server.

Acho que configurar um banco de dados para um único usuário pode ser um problema quando você tem muitos usuários que estão entrando nesse banco de dados. Eles chegam a ser o "usuário único" antes da minha conexão.

Meu método funciona melhor se você for útil com uma janela de consulta, em vez de usar a GUI do SSMS. Esse método pode não funcionar bem se você estiver usando um cluster (já faz anos desde que eu teria tentado, e não me lembro do resultado. Você não quer acionar acidentalmente um failover).

Além disso, esse método pode não funcionar bem se houver outros bancos de dados para outros aplicativos em produção no mesmo SQL Server.

  1. Faça login em uma janela de consulta como administrador. Você usará essa conexão para eliminar spids (em instantes) e depois fazer backup do banco de dados pela última vez.

  2. Pause o serviço do SQL Server. (No SSMS, clique com o botão direito do mouse no ícone do Servidor ou use o applet do painel de controle ou qualquer programa de controle de serviço similar.)

Isso evitará qualquer novos logons nessa instância, incluindo conexões de administrador, conexões db_owner e conexões do SQL Agent, conexões existentes mas existentes não serão descartadas. Enquanto o servidor estiver em pausa, as tentativas de conexão falharão e receberão uma mensagem de erro. Você pode avisar seus usuários ou equipe de suporte.

  1. Encerre os aplicativos do usuário com facilidade e / ou expulse as conexões existentes de usuários comuns usando o KILL. Isso gravará os comandos kill para você, apenas altere / USE para o banco de dados a ser migrado primeiro e, em seguida, execute o seguinte: selecione 'kill' + convert (varchar, spid) de master.dbo.sysprocesses onde spid! = @@ SPID e dbid = DB_ID ()

Copie a saída em sua janela de consulta e execute-a. Ele matará todas as conexões no banco de dados atual, mas as suas.

  1. Por fim, execute seu comando de backup, exatamente como você pretendia.

Você pode usar "Continuar", no mesmo menu que "Pausar", para permitir logins quando estiver pronto, se quiser. Defina o banco de dados antigo como somente leitura ou off-line (de preferência) antes de permitir a entrada das pessoas. (Off-line é melhor que somente leitura porque você deseja que as pessoas recebam mensagens de erro caso você tenha ignorado algo ao apontar cadeias de conexão para o novo servidor. Descartar o banco de dados também fornecerá mensagens de erro, mas off-line não é permanente Se você tem que voltar para o servidor antigo, é fácil apenas alterar o banco de dados online, mas você teria que passar por uma restauração se você deixou cair o banco de dados.Você sempre pode soltar o banco de dados offline amanhã, depois de ter certeza ter uma migração bem sucedida.)

É claro que você precisa restaurar o backup para o servidor para o qual está migrando, consertar todos os logins do SQL e, em seguida, corrigir as seqüências de conexão dos aplicativos ou alterar a entrada DNS do servidor, dependendo de como você está lidando. , ative o recurso de soma de verificação do banco de dados, execute uma reindexação completa em todas as tabelas, atualize o nível de compatibilidade do banco de dados, se isso for apropriado, etc.

Se você é novo nisso ou se isso é particularmente importante ou tem usuários exigentes, eu sugiro tentar pelo menos uma corrida seca primeiro. Você não precisaria expulsar todos para uma execução seca, apenas fazer um backup e restaurá-lo no novo servidor. Fazer uma restauração força você a descobrir onde os arquivos vão (as letras e os caminhos da unidade podem ser diferentes em servidores diferentes) e dá uma ideia de quanto tempo levará para fazer a restauração. (Quando for real, se você já tiver uma cópia do banco de dados no novo servidor, geralmente é um pouco mais rápido se você estiver restaurando "com substituir" do que se estiver indo do zero. Isso lhe dá uma margem de manobra ao dar uma cópia estimar para os usuários quanto tempo o sistema ficará inativo para a migração.)

A menos que você esteja usando apenas logins do Windows, você quer testar se os logins do SQL funcionam antes de fazer isso para "real". É melhor se você tem um sistema de teste que imita a produção, onde você pode trabalhar o seu "WTF?" momentos primeiro, mas nem todo mundo tem esse luxo.

    
por 09.03.2010 / 15:59
2

Existem várias maneiras de fazer isso, algumas mais elegantes do que outras:

  1. Desanexar, copiar para o novo servidor, anexar no novo servidor, anexar novamente no servidor atual

  2. Coloque o banco de dados no modo de usuário único e faça backup dele

  3. Desconecte o cabo de rede no servidor

  4. Bloqueie conexões de entrada para a porta 1433

por 09.03.2010 / 03:43
0

colocar o banco de dados no modo de usuário único funcionará como um tratamento. Você precisará fazer o backup imediatamente na conexão atual, para impedir que outras conexões voltem a funcionar se você fechar a conexão & tente usar o Enterprise Manager para fazer o backup. Você também deseja colocar o banco de dados offline quando terminar. Aqui está um exemplo usando o northwind.

use northwind
alter database northwind set single_user with rollback immediate 
backup database northwind to disk='c:\northwind.bak' with init
use master
alter database northwind set offline
    
por 09.03.2010 / 04:42