Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a: SQL Server 2022 (16.x) e versões
posteriores Azure SQL Database
Azure SQL Managed Instance
Não é possível converter tabelas regulares em tabelas contábeis, mas você pode migrar os dados de uma tabela regular existente para uma tabela contábil e, em seguida, substituir a tabela original pela tabela contábil.
Ao executar uma verificação do ledger da base de dados, o processo exige ordenar todas as operações em cada transação. Caso utilize uma instrução SELECT INTO ou BULK INSERT para copiar alguns milhares de milhões de linhas de uma tabela regular para uma tabela de ledger, tudo será feito em uma única transação. Isso significa que muitos dados precisam ser totalmente classificados, o que será feito em um único thread. A operação de classificação leva muito tempo para ser concluída.
Para converter uma tabela normal em uma tabela de registro, a Microsoft recomenda o uso do procedimento armazenado sys.sp_copy_data_in_batches. Isso divide a operação de cópia em lotes de 10 a 100 K linhas por transação. Como resultado, a verificação do registo de contabilidade da base de dados apresenta transações menores que podem ser classificadas parallelamente. Isso reduz significativamente o tempo de verificação do livro-razão do banco de dados.
Observação
O cliente ainda pode usar outros comandos, serviços ou ferramentas para copiar os dados da tabela de origem para a tabela de destino. Certifique-se de evitar grandes transações, pois isso terá um impacto no desempenho da verificação do livro-razão do banco de dados.
Este artigo mostra como converter uma tabela regular em uma tabela contábil.
Pré-requisitos
Criar uma tabela contábil somente acréscimo ou atualizável
Antes de poder usar o procedimento armazenado sys.sp_copy_data_in_batches , você precisa criar uma tabela contábil somente de acréscimo ou uma tabela contábil atualizável com o mesmo esquema da tabela de origem. O esquema deve ser idêntico em termos de número de colunas, nomes de colunas e seus tipos de dados.
TRANSACTION ID, SEQUENCE NUMBERe as colunas GERADO SEMPRE são ignoradas, uma vez que são geradas pelo sistema. Os índices entre as tabelas podem ser diferentes, mas a tabela de destino só pode ser uma tabela Heap ou ter um índice clusterizado. Índices não agrupados devem ser criados posteriormente.
Suponha que temos a seguinte tabela regular Employees no banco de dados.
CREATE TABLE [dbo].[Employees](
[EmployeeID] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED,
[SSN] [char](11) NOT NULL,
[FirstName] [nvarchar](50) NOT NULL,
[LastName] [nvarchar](50) NOT NULL,
[Salary] [money] NOT NULL
);
A maneira mais fácil de criar uma tabela contábil somente acréscimo ou tabela contábil atualizável é criar scripts para a tabela original e adicionar a LEDGER = ON cláusula. No script abaixo, estamos criando uma nova tabela contábil atualizável, chamada Employees_LedgerTable com base no esquema da Employees tabela.
CREATE TABLE [dbo].[Employees_LedgerTable](
[EmployeeID] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED,
[SSN] [char](11) NOT NULL,
[FirstName] [nvarchar](50) NOT NULL,
[LastName] [nvarchar](50) NOT NULL,
[Salary] [money] NOT NULL
)
WITH
(
SYSTEM_VERSIONING = ON,
LEDGER = ON
);
Copiar dados de uma tabela regular para uma tabela contábil
O procedimento armazenado sys.sp_copy_data_in_batches copia dados da tabela de origem para a tabela de destino depois de verificar se seu esquema é idêntico. Os dados são copiados em lotes em transações individuais. Se a operação falhar, a tabela de destino será parcialmente preenchida. A tabela de destino também deve estar vazia.
No script abaixo, estamos copiando os dados da tabela regular Employees para a nova tabela contábil atualizável, Employees_LedgerTable.
sp_copy_data_in_batches @source_table_name = N'Employees' , @target_table_name = N'Employees_LedgerTable'