AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题

问题[change-data-capture](dba)

Martin Hope
Nemo
Asked: 2021-03-09 15:36:20 +0800 CST

T SQL,获取从历史表中添加或删除的新客户

  • 0

我有一个包含历史数据的表。每天都会添加相同的员工名单和新的日期(每天有 1200-12500 名员工,但今天可能只有少数员工是新添加的,或者他们可能昨天离开公司而没有显示在今天的名单上)。

我想知道每天哪些员工不在昨天的名单上,这是新员工,员工昨天出现但今天没有,因为他们离开了公司。我已经尝试了以下但不高兴请帮助我的历史表如下所示,我需要一个脚本来仅获取 ID4 和 ID5 的行。

员工编号 员工姓名 人口普查日期
ID1 职员1 2021 年 2 月 3 日
ID1 职员1 2021 年 3 月 3 日
ID2 职员2 2021 年 2 月 3 日
ID2 职员2 2021 年 3 月 3 日
ID3 职员3 2021 年 2 月 3 日
ID3 职员3 2021 年 3 月 3 日
ID4 职员4 2021 年 2 月 3 日 今天不显示
ID5 员工5 2021 年 3 月 3 日 今天新增
ID6 员工6 2021 年 2 月 3 日
ID6 员工6 2021 年 3 月 3 日
ID7 员工7 2021 年 2 月 3 日
ID7 员工7 2021 年 3 月 3 日
SELECT StaffID, StaffNAME, CensusDate
FROM table1 AS A 
LEFT JOIN table1 AS B 

ON A.StaffID = B.StaffID AND A.date = GETDATE())  AS date) 
and B.date = CAST(DATEADD(day, -1, convert(date, GETDATE())) AS date) 
AND A.staffID IS NULL
sql-server-2016 change-data-capture
  • 2 个回答
  • 41 Views
Martin Hope
bomaboom
Asked: 2016-07-14 05:59:09 +0800 CST

CDC vs 复制 vs 其他任何东西

  • 3

在我的产品中,我们需要为报告团队创建一个解决方案来提取和处理数据。我们需要从我们的数据库向他们发送增量数据更改。我正在评估各种解决方案。研究了 CDC 和 Replication,但不确定要使用哪一个或构建一个自定义的。

虽然 CDC 易于配置并且需要比复制更少的基础架构,但更改表位于同一个数据库中,性能可能会降低,具体取决于报告团队查询数据库的频率。

复制似乎更畅销,但它需要大量的基础设施。看起来也必须在同一服务器中有单独的数据库实例或使用另一台服务器。

定制解决方案在这里会有所帮助吗?有没有办法创建数据库副本并从源数据库读取日志并通过作业将增量数据推送到目标数据库。

transactional-replication change-data-capture
  • 2 个回答
  • 5269 Views
Martin Hope
Kim Stacks
Asked: 2015-02-03 22:25:18 +0800 CST

当数据仓库的星型模式中事实频繁变化时该怎么办?

  • 0

我有一个作为 CRUD Web 应用程序构建的报价管理系统。

随着时间的推移,我意识到我需要改进它,以便管理层可以有他们的报告。

因此,我研究了数据仓库的 Kimball 方法。

我现在熟悉维度表和事实表的概念。

在纸和笔上,我已将报价单行项目标识为事实表。

我的问题是有时,销售代表和客户就订单项经常来回切换,所以订单项会频繁更改数量甚至被删除。

我知道根据 Kimball 的书,事实表不应该有零行。

我的问题是如何处理事实表中的此类更改?

根据消息来源,我应该不断更新事实表。

请指教。

data-warehouse change-data-capture
  • 1 个回答
  • 3792 Views
Martin Hope
Mahdi Tahsildari
Asked: 2014-09-02 03:14:19 +0800 CST

SQL Server 2012 更改数据捕获奇怪的行为

  • 2

在我的 Sql Server 2012 数据库中有下表

CREATE TABLE [dbo].[HumanResource](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [Name] [nvarchar](50) NOT NULL,
    [IsHired] [bit] NULL,
    [Address] [nvarchar](max) NULL,
    [Score] [bigint] NULL,
    [LastUpdate] [datetime] NULL,
 CONSTRAINT [PK_HumanResource] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

当我更新地址字段(nvarchar,不是 null)时,它被捕获如下

NULL 3 2 mahmood True here 111 2014-09-01 14:42:28.913
NULL 4 2 mahmood True there 111 2014-09-01 14:42:28.913

但是当我更新 Score 字段 (nvarchar, null ) 时,它被捕获

NULL 3 2 mahmood True NULL 111 2014-09-01 14:42:28.913 NULL
4 2 Mahmood True 111 2014-09-01 14:42:28.913


**编辑(更新和选择查询):

update HumanResource set Address = 'blah blah blah' where id = 2
update HumanResource set Score = Score + 1 where id = 2

SELECT        TOP (10000) __$start_lsn, __$end_lsn, __$seqval, __$operation,  
__$update_mask, ID, Name, IsHired, Address, Score, LastUpdate
FROM            cdc.dbo_HumanResource_CT

在此处输入图像描述

考虑到 sql server 更新是一个链式删除和插入,第一行是删除行捕获,第二行是插入行捕获。

但我不明白为什么当我更新其他字段时地址被跟踪为 NULL,我将不胜感激有关此问题的任何信息。

sql-server-2012 change-data-capture
  • 1 个回答
  • 1083 Views
Martin Hope
Thomas
Asked: 2014-04-16 09:07:06 +0800 CST

将 NOLOCK 与 CDC 捕获表一起使用

  • 1

在使用 SQL Server 的更改数据捕获时,我注意到 fn_cdc_get_all_changes_... 表值函数在查询捕获表时都使用 NOLOCK。在查询捕获表时,这是推荐的做法吗?如果是,为什么?

sql-server change-data-capture
  • 1 个回答
  • 300 Views
Martin Hope
magnattic
Asked: 2014-03-27 05:55:55 +0800 CST

如何检索给定表的捕获实例?

  • 2

使用 SQL Server 2012,我有一个分层表布局 (TPT)。所有表“继承”同一个基表 ( dbo.DataObjects)。所有表都启用了通过 CDC 进行的历史跟踪。

我正在尝试编写一个通用函数,该函数返回给定类型的 CDC 历史信息,包括来自所有基表的相关信息。

假设我的类型是直接继承自User的表,我的查询应该是这样的:dbo.Usersdbo.DataObjects

DECLARE @Begin_LSN binary(10),@End_LSN binary(10) 
SELECT @Begin_LSN = sys.fn_cdc_get_min_lsn('dbo_Users') 
SELECT @End_LSN = sys.fn_cdc_get_max_lsn() 
SELECT * FROM cdc.fn_cdc_get_all_changes_dbo_DataObjects(@Begin_LSN, @End_LSN,'ALL') AS a 
JOIN cdc.fn_cdc_get_all_changes_dbo_Users(@Begin_LSN, @End_LSN,'ALL') AS b 
ON a.__$start_lsn = b.__$start_lsn
WHERE ID = 10;

这将为我提供 ID 为 10 的用户的完整历史记录,包括基表中的列。

现在我想动态构建这种查询。

我的问题之一是用于检索历史信息的 cdc 函数包括捕获实例的名称:

cdc.fn_cdc_get_all_changes_<capture_instance>

我还需要第二行中捕获实例的名称来获取最小 lsn:

sys.fn_cdc_get_min_lsn('<capture_instance>') 

捕获实例名称要么在我为表启用 CDC 时自动创建,要么手动传递。如果我不想自己跟踪捕获实例名称,有没有办法检索给定表的捕获实例名称?

我知道每个表可以有多个捕获实例(我认为最多 2 个),但我可能总是每张表只使用一个。

PS:我也知道捕获实例名称通常是内置的<schema>_<table>,但是依靠这个假设似乎有点冒险。未来版本的命名约定可能会发生变化,或者有人可以提供手动捕获实例名称/更改名称。

sql-server change-data-capture
  • 2 个回答
  • 7293 Views
Martin Hope
Greg
Asked: 2013-12-11 19:24:28 +0800 CST

哪些表受变更数据捕获影响

  • 7

我们正在研究在 SQL 2012 中使用更改数据捕获。我们正在尝试确定是否有一种简单的方法可以找出给定 lsn 更改了哪些表。是否有内置函数,或者我们是否需要查询每个 cdc 表以查看 lsn 是否在其中?

更新以解释更多关于我们正在尝试做的事情:

我们正在尝试构建一个进程来查看数据库中所有表的 cdc 数据(想想 100 个)。该进程将按计划运行,并且会知道它处理的最后一个 lsn。当它运行时,我们希望对自上次记录 lsn 以来发生更改的每个 cdc 表执行一些操作。

我们可以检查fn_cdc_get_all_changes_dbo_tablename(@lastlsn, @currentlsn, 'all'),但问题是我们必须运行它 100 次(每个表一次)。我们可以检查一个中心位置吗?

sql-server-2012 change-data-capture
  • 2 个回答
  • 2309 Views
Martin Hope
Mike Diaz
Asked: 2013-06-20 11:52:49 +0800 CST

将 Change Data Capture 与频繁变化的模式结合使用

  • 2

我们遵循敏捷开发流程,在这种情况下,这意味着我们经常更改数据库架构,例如添加新列、将数据移动到其他列等。

是否有一种机制可以将 CDC 表更新为新模式,在迁移数据库模式时是否有关于如何处理捕获数据的最佳实践?

sql-server change-data-capture
  • 2 个回答
  • 1118 Views
Martin Hope
Mike Diaz
Asked: 2013-06-20 07:49:34 +0800 CST

查询变更数据捕获数据

  • 3

我启用了更改数据捕获并且工作正常。我的问题是如何查询数据以向用户显示发生了什么变化。

sql-server change-data-capture
  • 1 个回答
  • 2280 Views
Martin Hope
jaczjill
Asked: 2013-03-26 01:39:45 +0800 CST

在变更数据捕获 (CDC) 中,为什么使用 lsn 而不是时间戳?

  • 7

我正在学习在 SQL Server 2008 中使用 CDC,我已经读到 LSN 总是递增并且基于时间戳,所以为什么需要 LSN,如果它是从时间戳计算的,它可以用作所做更改的增量序列 ID。我相信lsn也会有其他用途。

sql-server-2008 change-data-capture
  • 1 个回答
  • 1448 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve