Usuário com melhor resposta
Duvidas sobre indices em alteração de collation

Pergunta
-
Boa Tarde meus caros. Sei que vou perguntar sobre um assunto super batido e muito discutido nesse forum, mas ainda sim tenho uma dúvida.
Vou alterar a collation de um banco que está no SQL 2012.
Sei que o procedimento é(pelo menos é o que li a respeito):
1) Alterar a collation do banco
2) Alterar a collation dos campos
3) Recriar os indices
Minha dúvida é no terceiro procedimento.
1) Quando se diz recriar os indices, está falando de tudo: chave primaria, indices, chaves unicas, etc?
2) Tem uma forma de fazer isso via algum script ou tem que ir em um por um?
3) A não recriação desses indices geraria qual problema?
Obrigada!!!
Respostas
-
Olá Laraw na internet existem diversos scripts que fazem o rebuild do index,
aconselho a não fazer essa operação em horário comercial,
leia um pouco sobre plano de manutenção , vai te ajudar a automatizar seus processos.
seque documentação
eu uso esse.
use AdventureWorks2012 GO DECLARE @TableName VARCHAR(255) DECLARE @sql NVARCHAR(500) DECLARE @fillfactor INT SET @fillfactor = 80 DECLARE TableCursor CURSOR FOR SELECT OBJECT_SCHEMA_NAME([object_id])+'.'+name AS TableName FROM sys.tables OPEN TableCursor FETCH NEXT FROM TableCursor INTO @TableName WHILE @@FETCH_STATUS = 0 BEGIN SET @sql = 'ALTER INDEX ALL ON ' + @TableName +' REBUILD WITH (FILLFACTOR = ' + CONVERT(VARCHAR(3),@fillfactor) + ')' EXEC (@sql) FETCH NEXT FROM TableCursor INTO @TableName END CLOSE TableCursor DEALLOCATE TableCursor GO
Wesley Neves
- Marcado como Resposta LaraW segunda-feira, 20 de fevereiro de 2017 19:00
-
Laraw,
Tente utilizar a stored procedure não documentada: sp_msforeachtable
Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
- Marcado como Resposta LaraW segunda-feira, 20 de fevereiro de 2017 19:01
-
Para alterar a collation de uma coluna que é utilizada por um índice, você terá que excluir esse índice para conseguir fazer isso. Após concluída sua alteração terá que criar o índice novamente.
Os índices que não tem colunas envolvidas na troca de collation não precisariam ser recriados.
Vai ter um grande trabalho.... Mas pode fazer isso várias vezes em teste antes de realizar em produção.
Fabrício França Lima MCITP - SQL Server Database Administrator Trabalho com SQL Server desde 2006 Treinamento DBA ONLINE: http://www.fabriciolima.net/blog/cursos-online/treinamento-tarefas-do-dia-a-dia-de-um-dba-online/
- Marcado como Resposta LaraW segunda-feira, 20 de fevereiro de 2017 19:01
-
Isso aí... Não consegue alterar... Tem que excluir os índices utilizado pelas colunas e depois criar novamente.
Fabrício França Lima MCITP - SQL Server Database Administrator Trabalho com SQL Server desde 2006 Treinamento DBA ONLINE: http://www.fabriciolima.net/blog/cursos-online/treinamento-tarefas-do-dia-a-dia-de-um-dba-online/
- Marcado como Resposta LaraW segunda-feira, 20 de fevereiro de 2017 19:44
Todas as Respostas
-
Acredito que isso te ajude
http://sqlmag.com/database-performance-tuning/seven-step-process-changing-database-collation
Por favor, marque-o como respondidas se está respondeu a sua pergunta
ou marcá-lo como útil se está ajudou a resolver o seu problema
Wesley Neves
MTA-Database Fundamentals
Analista Desenvolvedor.NETWesley Neves
-
-
Wesley, li o documento e justamente na parte de recriação dos indices, deixou a desejar.
Queria saber se posso simplesmente dar um Rebuild All nos indices de cada tabela ou se isso é feito de outra forma ? Se tem uma forma de fazer isso para os indices de todas as tabelas ou tem que ir em tabela por tabela e dar o Rebuild all ?
Grata!!!
-
Olá Laraw na internet existem diversos scripts que fazem o rebuild do index,
aconselho a não fazer essa operação em horário comercial,
leia um pouco sobre plano de manutenção , vai te ajudar a automatizar seus processos.
seque documentação
eu uso esse.
use AdventureWorks2012 GO DECLARE @TableName VARCHAR(255) DECLARE @sql NVARCHAR(500) DECLARE @fillfactor INT SET @fillfactor = 80 DECLARE TableCursor CURSOR FOR SELECT OBJECT_SCHEMA_NAME([object_id])+'.'+name AS TableName FROM sys.tables OPEN TableCursor FETCH NEXT FROM TableCursor INTO @TableName WHILE @@FETCH_STATUS = 0 BEGIN SET @sql = 'ALTER INDEX ALL ON ' + @TableName +' REBUILD WITH (FILLFACTOR = ' + CONVERT(VARCHAR(3),@fillfactor) + ')' EXEC (@sql) FETCH NEXT FROM TableCursor INTO @TableName END CLOSE TableCursor DEALLOCATE TableCursor GO
Wesley Neves
- Marcado como Resposta LaraW segunda-feira, 20 de fevereiro de 2017 19:00
-
Laraw,
Tente utilizar a stored procedure não documentada: sp_msforeachtable
Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
- Marcado como Resposta LaraW segunda-feira, 20 de fevereiro de 2017 19:01
-
Para alterar a collation de uma coluna que é utilizada por um índice, você terá que excluir esse índice para conseguir fazer isso. Após concluída sua alteração terá que criar o índice novamente.
Os índices que não tem colunas envolvidas na troca de collation não precisariam ser recriados.
Vai ter um grande trabalho.... Mas pode fazer isso várias vezes em teste antes de realizar em produção.
Fabrício França Lima MCITP - SQL Server Database Administrator Trabalho com SQL Server desde 2006 Treinamento DBA ONLINE: http://www.fabriciolima.net/blog/cursos-online/treinamento-tarefas-do-dia-a-dia-de-um-dba-online/
- Marcado como Resposta LaraW segunda-feira, 20 de fevereiro de 2017 19:01
-
Boa Tarde a todos,
Fabricio, com base na sua explicação, então esse roteiro para alterar uma collation de um banco e seus objetos está errado. Quando falo do roteiro me refiro ao processo de alterar o collation do banco, depois altera dos campos das tabelas e depois recria os indices.
Essa ordem então não funciona, o correto seria alterar a collation do banco, destruir os indices envolvidos, alterar dos campos das tabelas e depois criar os indices novamente.
Ou seja, não dá para recriar os indices, tem que destruir e criar de novo e em momentos diferentes.
Quando fui alterar a collation das colunas tive problema com alguns indices e não achei que era isso, mas como você fez essa observação.
-
Isso aí... Não consegue alterar... Tem que excluir os índices utilizado pelas colunas e depois criar novamente.
Fabrício França Lima MCITP - SQL Server Database Administrator Trabalho com SQL Server desde 2006 Treinamento DBA ONLINE: http://www.fabriciolima.net/blog/cursos-online/treinamento-tarefas-do-dia-a-dia-de-um-dba-online/
- Marcado como Resposta LaraW segunda-feira, 20 de fevereiro de 2017 19:44
-