Qual a melhor Replication para esse caso?

Pessoal,

gostaria de saber qual a melhor solução para o seguinte: tenho um Servidor SQLServer 2008 que é utilizado por umas 10 pessoas.

Tenho alguns arquivos txt em linked server que são atualizados diariamente.

Aí que está o problema: quando estou executando stored procedures de atualização, ninguém mais consegue usar o SQL Server até terminar o processamento.

Qual a melhor solução para que seja possível usarmos o servidor enquanto as bases de dados estão sendo atualizadas ? Mirroring ?

obs.: não é necessário tudo estar atualizado, quero dizer, preciso pelo menos disponibilizar as base de dados - antigas mesmo - para trabalharmos.

Agradeço antecipado pela ajuda.

Olá,

Deixa eu ver se entendi… você pega os dados dos txt’s e popula as tabelas ?

O ideal seria vc importar os dados dos txt’s para tabelas temporárias fazendo todas as validações necessárias e alterar a tabela de produção depois. Dessa forma vc diminui o tempo necessário para atualizar a tabela de produção.

t+

Fred

[quote=fre_d]Olá,

Deixa eu ver se entendi… você pega os dados dos txt’s e popula as tabelas ?

O ideal seria vc importar os dados dos txt’s para tabelas temporárias fazendo todas as validações necessárias e alterar a tabela de produção depois. Dessa forma vc diminui o tempo necessário para atualizar a tabela de produção.

t+

Fred[/quote]

Ok. É isso mesmo que eu já faço.
Inclusive as jsps chamam stored procedures que executam direto a partir dos linked servers (p/ txts <600MB).

Tive que migrar a aplicação para um server remoto. A base continua aqui, mas terei que migra-la tambem para o mesmo server da aplicação.

O que eu gostaria de saber é se fazer o Mirroring ou LogShipping é a melhor saída nesse caso.

Quanto a questao da disponibilidade (Mirroring), farei depois que tiver ja migrado toda o bd.

Como me deram um prazo pra migrar, quero fazer um backup completo e restaura-lo no serverRemoto. Eu tenho que fazer o backup apenas do bd MESTRE do sql server e todos os outros bds que tenho nessa instancia ja serao incluidos nesse arquivo de backup a ser gerado ? Ou terei que fazer o backup, um por um, de cada bd para ser recuperado depois ?

Agradeço.

Olá,

Eu faria um backup para cada BD, fica mais fácil de manipular os arquivos e se der erro em algum deles fica mais fácil tentar corrigir. Com um script vc pode fazer backup de todos ao mesmo tempo em arquivos separados.

Quanto a Mirroring ou LogShipping não vou poder ajudar pois conheço pouco o assunto.

Mais uma coisa, já pensasse em usar bulk insert desse arquivo txt. Ele não é transacional e roda muito rápido, mas se der erro terias que refazer todo o processo de importação.

Se você “desenhar” o seu problema (importação dos TXT’s) posso tentar ajuda-lo.

Abraço,

Fred

[quote=fre_d]Olá,

Eu faria um backup para cada BD, fica mais fácil de manipular os arquivos e se der erro em algum deles fica mais fácil tentar corrigir. Com um script vc pode fazer backup de todos ao mesmo tempo em arquivos separados.

Quanto a Mirroring ou LogShipping não vou poder ajudar pois conheço pouco o assunto.

Mais uma coisa, já pensasse em usar bulk insert desse arquivo txt. Ele não é transacional e roda muito rápido, mas se der erro terias que refazer todo o processo de importação.

Se você “desenhar” o seu problema (importação dos TXT’s) posso tentar ajuda-lo.

Abraço,

Fred[/quote]

Tenho uns 80 bd. Seriam 80 arquivos. Vou fazer o backup total deles então. Tem algum exemplo de script ?

Muitas das sp para fazer importação fazem tratamento para algumas colunas, como abaixo, por ex.

Mesmo que tivesse que fazer os tratamentos posteriormente, eu já pensei em usar bulk insert , mas ainda não tive tempo pra testar pra ver se vale a pena.

Em uma arquivo de 1gb, levou 20min para a importação (abaixo), por exemplo.

[code]ALTER PROCEDURE [dbo].[Importa_RELF012]
@DtMov AS SmallDateTime
AS
BEGIN
SET LANGUAGE Brazilian
TRUNCATE TABLE CARTAO…VIP_Plasticos
INSERT INTO CARTAO…VIP_Plasticos
SELECT
TXT.MCI,
TXT.CONTACARTAO,
SUBSTRING(TXT.PLASTICO,2,16) AS PLASTICO,
TXT.TITULARIDADE,
TXT.RESTRICAO,
MESTRE.dbo.IsSmallDateTime(TXT.DTVALIDADE) AS DTVALIDADE,
TXT.EMBOSSAMENTO,
TXT.ENVIO,
TXT.PREFDEP,
MESTRE.dbo.IsSmallDateTime(TXT.DTEMISSAO) AS DTEMISSAO,
MESTRE.dbo.IsSmallDateTime(TXT.DTATIVACAO) AS DTATIVACAO,
MESTRE.dbo.IsSmallDateTime(TXT.DTCANCELAMENTO) AS DTCANCELAMENTO,
TXT.CHIP,
@DtMov AS DTMOV
FROM TXT…RELF012#TXT AS TXT
WHERE TXT.TITULARIDADE < 256

DBCC SHRINKDATABASE (CARTAO) 

END[/code]

É interessante que a tabela para a qual vc vai importar o txt não tenha indices. Vai aumentar a performance. (Você pode criar os indices depois se for o caso).

para backup (peguei na internet esse script) http://www.geekzilla.co.uk/View487F82A5-C96B-4660-A070-F7C8B7FC4431.htm

O artigo abaixo talvez possa ajuda-lo na melhor escolha.(the best result was 24GB in ~2.3 minutes)

http://sqlblog.com/blogs/linchi_shea/archive/2007/08/27/performance-impact-the-most-optimal-insert-script-can-t-beat-bulkcopy.aspx

Abraço,

Fred

Valeu. Ajudou bastante !