Lock de tabela SQL persistente de C#
-
26-09-2019 - |
Pergunta
Estou tentando criar um bloqueio persistente SQL (SQL Server 2005) em um nível de tabela. Não estou atualizando/consultando a tabela especificada, mas preciso impedir que um aplicativo de terceiros atualize a tabela bloqueada como um meio de impedir que as transações sejam publicadas (a tabela que desejo travar é a chave em sua transação que interfere com meu processamento).
Pela minha experiência, a tabela está bloqueada apenas para o tempo que uma transação específica está ocorrendo. Alguma ideia?
O desenvolvedor de terceiros registrou esse recurso como um aprimoramento, mas como eles estão no meio de lançamento de um grande lançamento, posso esperar esperar pelo menos 6 meses por isso. Sei que essa não é uma ótima solução, já que o software deles cairá, mas é de uma natureza crítica o suficiente que estamos dispostos a conviver com as consequências.
Solução
Mova a tabela para um grupo de arquivos diferente e altere o grupo de arquivos para somente leitura. A tabela estará em vigor somente leitura:
ALTER DATABASE dbName
ADD FILEGROUP ReadOnlyFG;
GO
ALTER DATABASE dbName
ADD FILE (
NAME = ...,
FILENAME = '...')
TO FILEGROUP ReadOnlyFG;
GO
ALTER TABLE tableName MOVE TO ReadOnlyFG;
GO
ALTER DATABASE dbName
MODIFY FILEGROUP ReadOnlyFG READONLY;
Outras dicas
Renomeie a tabela e quando a terceira parte estiver pronta renomeá -la de volta ao que deveria ser