Usando Always Encrypted, estamos tentando criptografar uma coluna do tipo varchar(50) em uma tabela que contém 5,5 milhões de linhas com a criptografia determinística. Depois de um tempo o assistente retorna falha devido ao seguinte erro:
Exception of type 'System.OutOfMemoryException' was thrown..
Alguma ideia de como evitar esse erro?
Para tabelas grandes, eu definitivamente trabalharia com T-SQL ou Powershell em vez do assistente - UIs desajeitadas que executam todos os tipos de coisas em segundo plano e usam bloqueios superprotetores não têm um ótimo histórico. Por exemplo, este assistente oferece uma opção para gerar Powershell:
Eu faria isso. Aqui está o que ele produz:
Agora, isso ainda pode levar muito tempo; Eu não fiz benchmarks completos sobre a criptografia de dados existentes. Mas você não ficará sem memória (esse erro foi devido às limitações do SSMS, não do SQL Server).
Olhei rapidamente e, embora seja fácil gerar scripts T-SQL para criar chaves mestras e de coluna, não conheço uma maneira de executar ALTER TABLE. Isso passa nas verificações de sintaxe:
No entanto, ele falha em tempo de execução com:
Sua tabela tem uma chave primária ou um índice clusterizado? Há um problema conhecido no assistente/PowerShell que pode fazer com que fique sem memória, se a tabela não tiver um índice primário ou clusterizado, portanto, uma solução alternativa pode ser criar uma chave primária/índice clusterizado, se você não já não tem.
Você também pode tentar usar o PowerShell de 64 bits. Usar o PowerShell de 32 bits em vez do SSMS provavelmente não ajudará, pois o SSMS e o PowerShell usam a mesma biblioteca (DacFx) para dar suporte à maioria dos cenários Always Encrypted.