(단위)의 데이터를 동기화하기 위해 SQL SERVER의 트랙 데이터와 관련된 이용하여 - (IV)가 ELK 동기화 SQL 데이터

첫째, 관련 문서

오래된 규칙, 당신을 오해 내 설명을 방지하기 위해, 공식 웹 사이트를 통해 SQL 서버 관련 기능의 물결을 이해하시기 바랍니다.

문서 주소 :

전체 기술 문서 : https://docs.microsoft.com/en-us/sql/relational-databases/track-changes/about-change-tracking-sql-server?view=sql-server-2017

변경 데이터 캡처 : https://docs.microsoft.com/en-us/sql/relational-databases/track-changes/about-change-data-capture-sql-server?view=sql-server-2017

변경 내용 추적 : https://docs.microsoft.com/en-us/sql/relational-databases/track-changes/about-change-tracking-sql-server?view=sql-server-2017

불쌍한 영어 친구 EN-US는 URL은에서 zh-CN 중국어보기 문서를 변경 할 수 있습니다

둘째, 특징

내장 SQL 서버는 두 개의 메커니즘 (이하, CDC 라한다) 변경 데이터 캡처라는 데이터 변화 (이하, CT 라 함)라는 또 다른 변경 추적 잡아 제공한다. 이 두 가지 기능은 DML 작업을 수행 할 수있는 경우 변경 데이터를 기록하는 사용자 (삽입, 업데이트, 삭제).

이들의 작동 원리는 데이터 테이블 작업은 SQL Server가 트랜잭션 로그를 기록 할 때 위의 두 기능 중 하나라도있는 경우에, 수 있다는 것입니다, 캡처 SQL 서버에 SQL Server 에이전트 (별도의 프로그램)을 사용 특정 테이블에 이러한 로그와 기록 (그래서 프로그램이 추가 저장 공간 및 서버 성능 오버 헤드가있을 것이다), 최종 SQL 서버는 사용자가 이러한 레코드 목록을 해결하는 데 도움이되는 기능을 제공, 물론 방법이 있습니다 이러한 변경 사항은 기록에 직접 읽을 수 있습니다.

이러한 2014 년의 기능 및 다음 버전은 기업 또는 개발자 버전을 필요로 위의 SQL 서버 2016 버전에서이 기능을 가지고 않습니다, 표준 버전은이 기능이 내장되어 있습니다.

장점 :

  1. 사용자 지정 솔루션없이 내장 시스템
  2. 조정을 필요로하지 않는 데이터 시트 구조는 필요에 ID 열 같은 것을 추가 없습니다
  3. CDC는 내장 된 데이터 지우기 메커니즘 로그 만료 후 통관 메커니즘을 필요로하지 않습니다
  4. 서버 성능에 영향을 미칩니다하지만이 프로그램은 비동기이지만, 모든 프로세스가 독립적 후, 플립 플롭의 사용의 직접적인 영향보다는이 효과는 작다 ( SQL 서버에 별도의 시스템에 에이전트를 배포 할 계획이없는 모른다 큰 형님에 알 수있는 다음을 그 )
  5. 변경 신뢰성 획득해야하며, 프로그램의 순서를 변경 커밋 트랜잭션을 기반으로 커밋 된 트랜잭션, 시간의 순서를 변경합니다.
  6. SQL 서버 구성 및 관리하는 몇 가지 도구를 제공합니다

그것이 작동하는 방법 :

여기에 주로 기반으로 전투는, 그래서 그냥 ~ 느낌의 공식 웹 사이트에 당신이 사진을 넣어

변경 데이터 캡처 데이터 흐름

차이 :

이러한 두 가지 기능의 주요 차이점은, 기록 된 데이터의 포맷은, CDC를보다 상세히 일부 그는, 변경 전후, 즉, 각 필드 데이터의 값을 각 레코드마다 변경 내용을 기록한다는 것이다. 중부 표준시는이 기록은 이전의 내용을 변경 한 특정 변경 내용이 기록되지 않습니다 후, 단지 기록이다.

아래 기록 된 구체적인 내용은 ~ Shaoanwuzao, 당신에게 자세한 설명을 해주십시오 줄 것이다

셋째, 준비

관련 기능을 엽니 다

이 문서뿐만 아니라, 다른 사람들이 정원에 의해 쓰여진 기사를 블로그를 참조하십시오 :

https://www.cnblogs.com/maikucha/p/9039205.html

https://www.cnblogs.com/chenmh/p/4408825.html

1. 파일 전용 그룹을 추가

오른쪽 데이터 변경 사항을 기록해야 할 필요성에 -> 속성 -> 파일 그룹, TDC의라는 이름의 파일 그룹을 추가, 파일 그룹 추가를 클릭합니다.영상

2. 데이터베이스 파일을 추가합니다

문서 탭 페이지로 전환 한 다음 당신은 그냥 좋은 그룹 TDC 파일 그룹을 만든 파일을 새 파일, 데이터의 파일 형식 선택 행을 만들기를 선택하려면 추가 버튼을 클릭합니다.

이 단계는 처음 두 단계는 물론,이 두 단계를 무시할 수있는 공식 문서가 없다, 나는 거기에 다른 블로거에서 배운 것입니다,하지만 내 이해는 이것이 포착하는 두 단계의 주요 공정 및 SQL 서버를 피할 수 있다는 것이다 기본 과정과 동일한 파일을 사용하는 경우 MDF 파일 자원은, 몇 가지 검사를 수행 PRD에 공식 전에, 특히, 성능 문제 및 동시성 문제가 발생할 수 있습니다.

1565873259 (1)

3. SQL Server 에이전트를 사용

SQL Server 에이전트 서비스 내에서 발견 된 Windows 서비스에서, (필요한 경우, 시작시 설정) 시작을 클릭 연결된 MSSQL 데이터베이스의 마지막 표시 한 후 다음과 같이 :

영상

4. 데이터베이스 레벨 관련 기능을 사용

이러한 데이터는 기능은 기본적으로 해제되어 변경 내용 추적,이 기능을 사용하는 경우, 먼저 필요에 데이터베이스 레벨 이 기능을 사용 할 수 있습니다.

CDC 활성화 된 데이터베이스 기능은 다음과 같은 SQL을 수행하는 데 필요한 :

사용보기 MyDB   
GO   
EXEC sys.sp_cdc_enable_db   
GO

CT를 사용할 데이터베이스 함수는 다음과 같은 SQL을 수행하는 데 필요한 :

ALTER DATABASE JaxTest (데이터베이스 이름) 
후 SET CHANGE_TRACKING = 켜짐   
(CHANGE_RETENTION = 2 일의 ON을 AUTO_CLEANUP =)

당신은 데이터베이스에서 마우스 오른쪽 수도 있습니다 -> 속성 -> 구성 변경 내용 추적 페이지 :

영상

5. 테이블 수준의 웹 가능

데이터베이스 수준의 완료가 활성화되면, 또한 다음과 같은 과정이 수, 테이블 수준에서 활성화해야합니다 :

의 테이블을 만들어 보자 :

CREATE TABLE Person
(
    Id INT IDENTITY(1,1) PRIMARY KEY NOT NULL,
    Name NVARCHAR(32) NOT NULL,
    Age INT NOT NULL,
    Remark NVARCHAR(512) NULL
)

启用CDC需要执行下面的SQL:

exec sys.sp_cdc_enable_table 
    [ @source_schema = ] 'source_schema', ---表所属的架构名,一般是dbo
    [ @source_name = ] 'source_name' ,----表名
    [ @role_name = ] 'role_name'---是用于控制更改数据访问的数据库角色的名称。
    [,[ @capture_instance = ] 'capture_instance' ]--是用于命名变更数据捕获对象的捕获实例的名称,这个名称在后面的存储过程和函数中需要经常用到。
    [,[ @supports_net_changes = ] supports_net_changes ]---指示是否对此捕获实例启用净更改查询支持如果此表有主键,或者有已使用 @index_name 参数进行标识的唯一索引,则此参数的默认值为 1。否则,此参数默认为 0。
    [,[ @index_name = ] 'index_name' ]--用于唯一标识源表中的行的唯一索引的名称。index_name 为 sysname,并且可以为 NULL。如果指定,则 index_name 必须是源表的唯一有效索引。如果指定 index_name,则标识的索引列优先于任何定义的主键列,就像表的唯一行标识符一样。
    [,[ @captured_column_list = ] 'captured_column_list' ]--需要对哪些列进行捕获。captured_column_list 的数据类型为 nvarchar(max),并且可以为 NULL。如果为 NULL,则所有列都将包括在更改表中。
    [,[ @filegroup_name = ] 'filegroup_name' ]--是要用于为捕获实例创建的更改表的文件组。
  [,[ @partition_switch = ] 'partition_switch' ]--指示是否可以对启用了变更数据捕获的表执行 ALTER TABLE 的 SWITCH PARTITION 命令。allow_partition_switch 为 bit,默认值为 1。

上面的内容可能有点啰嗦,举个实际例子吧,比如我要对Person这张表启用CDC,则执行的SQL如下:

EXEC sys.sp_cdc_enable_table 
    @source_name = 'Person',
    @source_schema = 'dbo',
    @capture_instance = 'dbo_Personal',
    @filegroup_name = 'TDC',
    @supports_net_changes = 1,
    @role_name = NULL


启用CT需要执行下面的SQL:

ALTER TABLE dbo.Person(表名)
ENABLE CHANGE_TRACKING  
WITH (TRACK_COLUMNS_UPDATED = ON)

当然,也可以在数据表上右键->属性->变更跟踪 Tab页中进行启用。

到这里为止,就已经启用了数据库的CDC和CT两个功能,当然,实际大部分情况下,只需要根据需要,选择其中一种即可,这里只是都做一个说明。你可以只挑一个来进行实践。

使用CDC和CT功能进行变更抓取

1.使用CDC进行变更抓取

在我们先向表中插入一些数据,然后再修改、删除插入的这些数据,再使用SQL SERVER提供的相关SP来抓取这些变更。

本文中的数据变化过程如下:

首先新增三条数据:

영상

然后修改成下面这样子:

영상

最后再把第二条删掉:

영상

此时,我们先使用CDC的相关脚本来查询所有变更:

DECLARE @from_lsn binary(10), @to_lsn binary(10);  
SET @from_lsn = sys.fn_cdc_get_min_lsn('dbo_Personal');  
SET @to_lsn   = sys.fn_cdc_get_max_lsn();  
SELECT * FROM cdc.fn_cdc_get_all_changes_dbo_Personal
  (@from_lsn, @to_lsn, N'all update old');  
GO

这段脚本中有两个地方用到了dbo_Personal这个名字,这个名字其实是在上面启用CDC的时候,指定的@capture_instance = 'dbo_Personal', 这个参数,如果你已经忘记了,可以翻到博客的上面回顾一下~

如果你已经忘记你执行的时候指定的这个参数名字,可以在DB的Function列表中找到它,都是以cdc.fn_cdc_get_all_changes开头的。

执行脚本后,会得到如下结果:

영상

调用这个Function时候的参数含义和返回的每一列的含义可以参考微软官方文档:https://docs.microsoft.com/zh-cn/sql/relational-databases/system-functions/cdc-fn-cdc-get-all-changes-capture-instance-transact-sql?view=sql-server-2017,下面也给懒人朋友们截个图。

영상

영상

从这个LOG中,其实我们已经可以获得非常详细的我们每一次对Person这张表的操作了,而且可以发现,微软的这个顺序也已经是按照我们执行的SQL语句的顺序进行排列了,每一个字段每次的变更前后也记录的非常的清楚了。

此外,对于CDC,也可以抓取净变更记录,即再一段时间内,数据差异,并且把反复修改的中间过程会过滤掉,比如把某条记录的某个字段从A改成B,又从B改成A,这时候就会被忽略掉这个修改:

我们可以执行下面的SQL来抓取净变更:

DECLARE @from_lsn binary(10), @to_lsn binary(10);  
SET @from_lsn = sys.fn_cdc_get_min_lsn('dbo_Personal');  
SET @to_lsn   = sys.fn_cdc_get_max_lsn();  
SELECT * FROM cdc.fn_cdc_get_net_changes_dbo_Personal
  (@from_lsn, @to_lsn, N'all ');  
GO

最终得到的结果如下:

영상

可以看到,对于Id为2的那条数据,是没有体现在这里的,因为他在这个过程中,是从新增变为了删除,相当于是没有变化的,所以这个函数获取出来就没有那条记录~

: 관련 매개 변수의 기능 및 열 의미가 참조 반환 https://docs.microsoft.com/en-us/sql/relational-databases/system-functions/cdc-fn-cdc-get-net-changes-capture -instance-TRANSACT-SQL?보기 = SQL 서버 2017


2. CT 변경 크롤링

사용 CT 크롤링는 다음과 같은 SQL을 필요로 변경 :

SELECT  * 
FROM   CHANGETABLE (CHANGES dbo.Person, 0 ) AS CT

상기 기록 동작을 위해, 최종 결과는 다음과 같이 될 것이다 :

영상

우리는 그가 ID가 변경의 내용이, 그는이 기록되지 않을 것이다 것과 같이 변경되었습니다 기록 할 것이다, CT 레코드의 결과는 매우 간단 볼 수 있지만 다른 곳으로이 변경 내용을 동기화 할 경우 그는 당신에게 말할 것이다 작업을 삽입, 삭제 또는 업데이트 (SYS_CHANGE_OPERATION 열)를 사용하여 필요 물론, 우리는 탐험을 계속해야 할, 많은 고급 사용이 있습니다.


개요

주로 데이터를 캡처 CDC 기능의 변화를 사용하는 방법에 대한 사실, 전체 비교적 얕은이라고 말했다이 문서에서는이 내 자신의 이해 중 하나가 다른 한편으로는, 문서 공간 제약이 문서의 초점 쓸모없는 깊은입니다입니다 도 이러한 것들의 다양한 용도가 명확하게하기 위해, 우리는 단지 하나의 목적을 가지고, 즉, 데이터는 SQL 서버에 ES에 동기화된다. 그것은 다른 기능의 번호와 함께, 오늘에 올 때 그래서 다음 기사 우리는 ES로 데이터를 가져 오려고하기 위해이 기능을 사용합니다.

그것은 ~ 침대 바오 머리로 이동, 늦었다

추천

출처www.cnblogs.com/baiyunchen/p/11361372.html