What is CDC Log Process and Notification?

I see two system processes in the system agent. They were created by EpicAdmin and are set to run ever 30 mins. What do these do? The say EnterpriseSerach next to them.
Thanks!
Nate

There are two choices when updating your Enterprise Search indexes:

  • Batch Update.
    In Batch Update, a windows task runs the BAQs and rebuilds your indexes for Enterprise Search
  • CDC
    CDC is a SQL Server capability (Change Data Capture) which captures changes made to indexed items and updates your indexes periodically.

CDC is more efficient and “real time” than batch updates.

4 Likes

Interesting. I don’t know that we use any executive search features. What would that include?

ENTERPRISE search, not executive searches. :wink:

image

Or the magnifying glass in the “Modern” shell in the upper right-hand corner.

BTW, Enterprise Search is wildly under utilized. Put in a part number and see all Parts, Inventory, Sales Orders, Purchase Orders, Shipments, etc. all on one screen. It’s a fulltext search across all of the fields in the Enterprise Search BAQs. There’s an included version and a premium one that lets you add/alter the BAQs.

Ohhhh ok I was just blurring the two together. I use THAT search all the time! Thanks Mark! I guess I won’t delete those tasks.

@NateS I haven’t ventured into the CDC realm, but there are others here using it to do some pretty slick stuff. I feel like @bconner did a session on it in the past and how it can be used for other purposes… Or maybe it was another guru @josecgomez @hkeric.wci

1 Like

If you use collaborate CDC is the way collaborate knows what / whom to notify when a record changed.

1 Like

Epicor doesnt use SQL CDC they use CDC on the Entity Framework level, is what I found is that correct @josecgomez

2 Likes

It’s a wrapper around their data model I believe but it isn’t sql native cdc

2 Likes

A cautionary point for those who update their databases directly.

2 Likes

Well actually the way the implemented it is via a DB Trigger :zipper_mouth_face: every table in epicor has a trigger called
TableName_ChangeCapture which is disabled by default.

In Epicor when you enable CDC on a particular entity within Epicor it just “enables” the trigger which runs on Insert,Update, Delete and it just creates a record in the table cdc.CaptureLog it consists of the SysRowID of the record as well as an XML Document of the contents of the INSERTED , CHANGED or DELETED row.

1 Like

So EF CDC uses DB Triggers? I wasn’t aware of that. Doesn’t seem cross-platform… :thinking:

no this is a custom thing they (Epicor) wrote I’ not sure how the regular CDC SQL works.

Oh, I was reacting to what Haso wrote. So, Epicor doesn’t use EF CDC but rolled their own - maybe using EF?

1 Like

Right they rolled their own CDC by using Triggers and a Single Table. Standard CDC creates basically a shadow Log Table for each of the tables you enable.
So if you enable CDC in ABCCode you get cdc.ABCCode_CT etc

The epicor version writes everything to a single tables called cdc.CaptureLog and it stores the fields in a single XML field.

Original CDC is much more efficient since it inserts itself in the transaction directly (reading the transaction log) so it occurs Async from the Insert / Delete operation. While the Epicor version relies on a trigger and its basically the equivalent of a Data Directive

I forget the reason why they went this way @Bart_Elia briefly explained it to me a long time ago it made sense at the time.

2 Likes