pontoNETpt
A comunidade PontoNetPT está direccionada a todos os programadores que trabalhem com a plataforma .NET.
Change Tracking

Talvez se lembrem do meu último post sobre Change Data Control. Desta vez vou continuar a falar sobre outra opção para seguir alterações a tabelas no SQL Server: Change Tracking.

As principais diferenças entre os dois são:

  • Change Tracking funciona com o SQL Server 2008 Express
  • Change Tracking não requer o SQL Server Agent a correr
  • Change Tracking não guarda os valores antigos no caso de um UPDATE ou DELETE
  • Change Data Capture usa um processo ass´ncrono, por isso não existe overhead na operação
  • Change Data Capture requere mais espaço de armazenamento e processamento

Aqui está algum código que ilustra a sua utilização:


-- para efeitos de demonstracao, a tabela Post da base de dados Blog apenas contem duas colunas, PostId e Title

-- activar change tracking para a base de dados Blog, por 2 dias
ALTER DATABASE Blog
SET CHANGE_TRACKING = ON
(CHANGE_RETENTION = 2 DAYS, AUTO_CLEANUP = ON);

-- activar change tracking para a tabela Post
ALTER TABLE Post
ENABLE CHANGE_TRACKING
WITH (TRACK_COLUMNS_UPDATED = ON);

-- ver os registos actuais na tabela Post
SELECT * FROM Post

SELECT * FROM sys.sysobjects WHERE name = 'Post'
SELECT * FROM sys.sysdatabases WHERE name = 'Blog'

-- confirmar que a tabela Post e a a base de dados Blog estao a ser tracked
SELECT * FROM sys.change_tracking_tables
SELECT * FROM sys.change_tracking_databases

-- ver a versao actual da tabela Post
SELECT p.PostId,
	p.Title,
	c.SYS_CHANGE_VERSION,
	c.SYS_CHANGE_CONTEXT
FROM Post AS p
CROSS APPLY CHANGETABLE(VERSION Post, (PostId), (p.PostId)) AS c;

-- actualiza a tabela Post
UPDATE Post
SET Title = 'First Post Title Changed'
WHERE Title = 'First Post Title';

-- ver a versao actual da tabela Post
SELECT p.PostId,
	p.Title,
	c.SYS_CHANGE_VERSION,
	c.SYS_CHANGE_CONTEXT
FROM Post AS p
CROSS APPLY CHANGETABLE(VERSION Post, (PostId), (p.PostId)) AS c;

-- ver as alteracoes desde a versao 0 (inicial)
SELECT p.Title, c.PostId, 
	SYS_CHANGE_VERSION,
	SYS_CHANGE_OPERATION,
	SYS_CHANGE_COLUMNS,
	SYS_CHANGE_CONTEXT 
FROM CHANGETABLE(CHANGES Post, 0) AS c
LEFT OUTER JOIN Post AS p
ON p.PostId = c.PostId;

-- ver se a coluna Title da tabela Post mudou desde a versao 0?
SELECT CHANGE_TRACKING_IS_COLUMN_IN_MASK(COLUMNPROPERTY(OBJECT_ID('Post'), 'Title', 'ColumnId'), (SELECT SYS_CHANGE_COLUMNS FROM CHANGETABLE(CHANGES Post, 0) AS c))	

-- obter a versao corrente
SELECT CHANGE_TRACKING_CURRENT_VERSION()

-- desactivar change tracking para a tabela Post
ALTER TABLE Post
DISABLE CHANGE_TRACKING;

-- desactivar change tracking para a base de dados Blog
ALTER DATABASE Blog
SET CHANGE_TRACKING = OFF;

Podem ler sobre as diferenças entre as duas opçes aqui. Escolham aquela que melhor serve as vossas necessidades!

Bookmark and Share

Posted 1-6-2010 11:16 por Ricardo Peres

Comments

Desenvolvimento Com Um Ponto wrote Checksums Sobre uma Tabela e uma Coluna
on 1-6-2010 20:26

Seguindo os meus últimos posts sobre Change Data Capture e Change Tracking , aqui vai mais uma

Add a Comment

(requerido)  
(opcional)
(requerido)  
Remember Me?
If you can't read this number refresh your screen
Enter the numbers above:  
Powered by Community Server (Commercial Edition), by Telligent Systems