Pergunta

Estou desenvolvendo uma aplicação de pequena empresa que utiliza SQLServer 2005 banco de dados.

Plataforma: NET Framework 3.5; Tipo de aplicação: aplicação de janelas; Idioma: C #

Pergunta:

Eu preciso tomar e restaurar o backup do meu aplicativo. Eu tenho o script necessário gerada a partir de SSME.

Como faço para executar esse script particular (ou scripts) do meu aplicativo winform?

Foi útil?

Solução

Você pode executar esses scripts da mesma maneira que você executar uma consulta, só você não conectar ao banco de dados que você deseja restaurar, você se conectar a mestre em vez.

Outras dicas

Se a máquina onde o aplicativo está em execução tem as ferramentas cliente do SQL Server instalado, você pode usar sqlcmd .

Se você quiser fazê-lo através de programação que você pode usar SMO

Tutorial

Basta usar a sua conexão com o banco de dados (ADO eu presumo?) E enviar suas instruções TSQL simples para o servidor através desta conexão.

Para o backup que você provavelmente vai querer usar xp_sqlmaint. Ele tem a capacidade útil para remover backups antigos, e cria um arquivo de log agradável. Você pode chamá-lo através de algo como: EXECUTAR master.dbo.xp_sqlmaint N '' - S "[ServerName]" [ServerLogonDetails] -D [NomeBaseDados] -RPT "[BackupArchive] \ BackupLog.txt" [RptExpirationSchedule] -CkDB -BkUpDB "[BackupArchive]" -BkUpMedia DISK [BakExpirationSchedule] ''

(substituir os colchetes [], com valores adequados).

Também para o backup que você pode precisar fazer o backup do log de transações. Algo como: IF DATABASEPROPERTYEX ((db_name SELECIONAR (DBID) FROM mestresysprocesses ONDE SPID = @@ SPID), '' Recovery '') <> '' simples '' EXECUTAR master.dbo.xp_sqlmaint N '' -S "[ServerName] "[ServerLogonDetails] -D [DatabaseName] -RPT "[BackupArchive] \ BackupLog_TRN.txt"[RptExpirationSchedule] -BkUpLog "[BackupArchive]" -BkExt TRN -BkUpMedia DISK [BakExpirationSchedule] ''

Eu recomendo armazenar os comandos reais que você está usando em uma tabela de banco de dados (1 linha por comando) e usar algum tipo de regime de substituição modelo para lidar com os valores configuráveis. Isto permitiria mudanças fáceis para os comandos, sem a necessidade de implantar novo código.

Para a restauração você terá que matar todas as conexões, exceto para os internos do SQL Server. Basicamente, ter os resultados de "exec sp_who" e para linhas que correspondem a dbname, e têm um status que não é o "fundo", e uma cmd que não é um dos "rotina de sinais", "MONITOR LOCK", "preguiçoso ESCRITOR" "LOG Writer", "CHECKPOINT SLEEP" fazer um "matar" o sPID. (por exemplo: ExecuteNonQuery ( "matar 1,283"))

Você vai querer prender e ignorar quaisquer excepções ao comando KILL. Não há nada que você pode fazer sobre eles. Se a restauração não pode continuar devido a conexões existentes que irá gerar um erro.

Um perigo com conexões matar é pool de conexão do ADO (mais para asp.net aplicativos de aplicativos do Windows). ADO assume a uma conexão buscados do pool de conexão é válida ... e não reagem bem às conexões que foram mortos. A próxima operação que ocorre nessa conexão falhará. Não me lembro o erro ... você pode ser capaz de interceptar apenas esse erro específico e manipulá-lo ... também com 3,5 Eu acho que você pode lavar o pool de conexão (assim ... interceptar o erro, limpar o pool de conexão , abrir a ligação, tente o comando novamente ... feio, mas pode ser factível).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top