MetricSign
NL|ENStart free →
error-reference9 min·

Lakeflow Connect SQL Server: Waarom de database-configuratiestap steeds mislukt

De installatiewizard lijkt eenvoudig. Vier stappen, een paar opgeslagen procedures, klaar. Maar de database-installatie mislukt zonder aan te geven welke voorwaarde daadwerkelijk is gecontroleerd en afgewezen.

Read this article in English →

De installatiewizard verbergt vijf verschillende foutscenario's achter één foutmelding.

Discussies op het Databricks-communityforum over de SQL Server connector van Lakeflow Connect vertonen een terugkerend patroon: de database-configuratie mislukt, de foutmelding is vrijwel nutteloos en de engineer besteedt uren aan het aanpassen van machtigingen die mogelijk helemaal niet het probleem zijn.

De configuratiestap voert wel degelijk werk uit op de achtergrond. Het controleert of het hulpprogramma-script correct is geïnstalleerd, of Change Tracking (CDC) is ingeschakeld op zowel database- als tabelniveau, bevestigt dat de gebruiker die de gegevens opneemt de juiste machtigingen heeft en valideert of DDL-ondersteuningsobjecten bestaan voor schema-evolutie. Elk van deze controles kan mislukken, maar de wizard meldt slechts één algemene fout.

Hieronder volgen de vijf oorzaken, gerangschikt op hoe vaak ze in de praktijk voorkomen:

  1. De gebruiker die het hulpprogramma-script uitvoerde, was geen lid van de groep db_owner, waardoor de opgeslagen procedures onvolledig zijn geïnstalleerd of stilzwijgend machtigingen hebben overgeslagen.
  1. De CDC-vastleggingsinstanties zijn vol — SQL Server staat maximaal twee per tabel toe, en als beide bezet zijn door niet-Lakeflow-instanties, kan de connector de instantie met het voorvoegsel lakeflow_ niet aanmaken.
  1. De ingestiegebruiker heeft geen SELECT-rechten op sys.change_tracking_tables, sys.change_tracking_databases of het cdc-schema.
  1. De versie van het hulpprogrammascript is verouderd — de huidige versie is 1.5 en oudere versies gebruiken een ander voorvoegsel voor vastleggingsinstanties (New_ in plaats van lakeflow_) dat de nieuwste gateway niet herkent.
  1. Change tracking of CDC is ingeschakeld op databaseniveau, maar niet op de specifieke tabellen die je voor ingestie hebt geselecteerd.

Elk van deze problemen vereist een andere oplossing. In de rest van dit bericht wordt uitgelegd hoe je kunt controleren welke oplossing op je van toepassing is.

db_owner is vereist voor de configuratie, niet voor het importeren van gegevens — en dat onderscheid zorgt voor verwarring.

De Databricks-documentatie stelt duidelijk dat de gebruiker die het utility-objectscript uitvoert, lid moet zijn van de groep db_owner. Er staat echter ook dat de ingestiegebruiker alleen specifieke SELECT-rechten nodig heeft. Engineers interpreteren dit als "mijn ingestiegebruiker heeft geen db_owner nodig" — wat correct is — en voeren vervolgens het utility-script uit als de ingestiegebruiker. Het script loopt niet vast. Het installeert een aantal objecten, slaat andere stilzwijgend over en de setup-stap wijst de onvolledige installatie later af.

Om dit te controleren, maakt je verbinding als een gebruiker met db_owner en voert je het volgende uit:

SELECT dbo.lakeflowUtilityVersion_1_5() AS UtilityVersion;

SELECT dbo.lakeflowDetectPlatform() AS Platform;

Als een van beide functies niet bestaat, is het script niet voltooid. Om de rol db_owner toe te kennen aan je setup-gebruiker in moderne SQL Server (2012+):

USE [uw_database];

ALTER ROLE db_owner ADD MEMBER [uw_setup_gebruiker];

GO

Gebruik in plaats daarvan sp_addrolemember in oudere instanties of beperkte omgevingen:

USE [uw_database];

EXEC sp_addrolemember 'db_owner', 'uw_setup_gebruiker';

GO

Nadat je de rol hebt toegekend, voert je het volledige utility_script.sql opnieuw uit. Ga er niet van uit dat een gedeeltelijke installatie kan worden hersteld — het script is ontworpen om idempotent te zijn, dus een schone herstart is veiliger dan proberen individuele objecten te patchen. Zodra het script is voltooid, voert je de verificatiefuncties opnieuw uit. Beide zouden waarden zonder fouten moeten retourneren.

Een veelvoorkomende variant van dit probleem doet zich voor bij Azure SQL Database, waar de gebruiker die de installatie uitvoert lid moet zijn van de serverrol ##MS_DatabaseConnector## in plaats van individuele masterdatabase-toegang. Als je Azure SQL Managed Instance gebruikt, hebt je VIEW ANY DATABASE op serverniveau nodig, plus expliciete toegang tot de masterdatabase. Het platform is van belang.

Lakeflow Connect SQL Server Pre-Flight Checklist 1 Confirm utility script v1.5 installed: SELECT dbo.lakeflowUtilityVersi 2 Verify setup user has db_owner role on target database 3 Check database-level change tracking or CDC is enabled 4 Verify table-level CT/CDC activation for all target tables 5 Confirm CDC capture instance slots available (max 2 per table) 6 Run lakeflowFixPermissions with @User parameter set 7 Verify SQL Server Agent is running (on-premise/RDS only) 8 Test ingestion user can SELECT from cdc schema and sys.change_tracking
Lakeflow Connect SQL Server Pre-Flight Checklist

De beschikbare CDC-opname-instance-slots raken stilletjes vol.

SQL Server hanteert een strikte limiet van twee capture-instanties per tabel. Lakeflow Connect heeft minimaal één beschikbare plek nodig om zijn lakeflow__

_1-instantie te creëren. Als beide plekken bezet zijn door bestaande capture-instanties van andere systemen — een oudere replicatie-configuratie, een zelfontwikkelde CDC-client of een eerdere Lakeflow-installatie met het verouderde voorvoegsel New_ — kan de connector niet verder.

Deze fout is bijzonder frustrerend, omdat CDC ingeschakeld lijkt te zijn. De controle op databaseniveau slaagt. De controle op tabelniveau slaagt. Maar de connector kan geen eigen capture-instantie creëren en de configuratiestap mislukt.

Om het gebruik van capture-instanties per tabel te controleren:

```sql SELECT

SCHEMA_NAME(t.schema_id) + '.' + t.name AS TableName,

ct.capture_instance,

ct.start_lsn,

ct.create_date FROM cdc.change_tables ct INNER JOIN sys.tables t ON ct.source_object_id = t.object_id;

``

Als een tabel twee capture-instanties heeft en geen van beide begint met lakeflow_, dan hebt je het probleem gevonden. je opties: verwijder een van de bestaande capture-instanties als deze niet langer nodig is, of schakel die tabel over naar change tracking in plaats van CDC. Change tracking werkt voor elke tabel met een primaire sleutel, gebruikt minder overhead op de bron en heeft geen limiet van twee instanties.

Als je een upgrade uitvoert vanaf een oudere versie van het utility-script, ziet je mogelijk capture-instanties met het voorvoegsel New_ in plaats van lakeflow_. Het uitvoeren van de nieuwste utility_script.sql (versie 1.5) voert deze migratie automatisch uit, maar alleen als er tijdens de overgang een capture-instantie beschikbaar is voor de nieuwe naamgevingsconventie. Stop de gateway voordat je de upgrade uitvoert. Het script vervangt namelijk DDL-ondersteuningsobjecten en een actieve pipeline verliest DDL-auditgebeurtenissen tijdens de vervanging.

De hybride aanpak die Databricks aanbeveelt – wijzigingsregistratie voor tabellen met primaire sleutels en CDC voor tabellen zonder – omzeilt het slotprobleem volledig voor de meeste schema's.

Het toegangsgebied van de gebruiker voor gegevensinvoer is groter dan het lijkt.

Zelfs nadat het hulpprogramma-script succesvol is uitgevoerd, kan de gebruiker die de gegevens opneemt nog steeds onvoldoende machtigingen hebben, waardoor de configuratiestap mislukt. De vereiste machtigingen vallen in drie categorieën: toegang tot de systeem catalogus, toegang tot wijzigingsdetectie en SELECT-toegang op tabelniveau.

Voor toegang tot de systeem catalogus heeft de gebruiker die de gegevens opneemt SELECT-toegang nodig op sys.databases, sys.schemas, sys.tables, sys.columns, sys.key_constraints, sys.foreign_keys, sys.check_constraints, sys.default_constraints, sys.change_tracking_tables, sys.change_tracking_databases, sys.objects, sys.triggers, sys.indexes en sys.index_columns. Het vereist ook EXECUTE-rechten op sp_tables, sp_columns_100, sp_pkeys en sp_statistics_100, plus VIEW DATABASE PERFORMANCE STATE.

Specifiek voor CDC heeft de gebruiker SELECT-rechten nodig op het volledige cdc-schema. Op on-premise en RDS-instanties is ook VIEW SERVER STATE vereist om sys.dm_server_services op te vragen, wat Lakeflow gebruikt om te controleren of SQL Server Agent actief is. Als Agent is gestopt, worden CDC-wijzigingen niet vastgelegd en zal de connector weigeren verder te gaan.

De procedures lakeflowSetupChangeTracking en lakeflowSetupChangeDataCapture van het hulpprogramma-script verlenen automatisch CDC- en CT-specifieke machtigingen, maar alleen als de parameter @User is ingesteld. Als je de procedures hebt uitgevoerd zonder @User op te geven, zijn de machtigingen niet verleend. Voer lakeflowFixPermissions uit om de ontbrekende rechten te herstellen:

EXEC dbo.lakeflowFixPermissions

@User = 'uw_ingestion_user',

@Tables = 'ALL';

Dit verleent SELECT-rechten op systeem- en tabelniveau. Het is veilig om dit herhaaldelijk uit te voeren — de procedure is idempotent. Controleer na het uitvoeren de configuratiestap nogmaals. Als je zich richt op specifieke schema's in plaats van alle tabellen, vervang dan 'ALL' door 'SCHEMAS:Sales,HR' of een door komma's gescheiden tabellijst om het principe van minimale bevoegdheden te volgen.

Het inschakelen van wijzigingsdetectie op databaseniveau heeft geen zin zonder activering op tabelniveau.

Dit is de meest voorkomende vorm van valse zekerheid. Een engineer schakelt wijzigingsregistratie in op databaseniveau en gaat ervan uit dat tabellen dit automatisch overnemen. Dat is niet het geval. Wijzigingsregistratie moet expliciet voor elke tabel worden ingeschakeld en CDC (Change Data Capture) moet expliciet worden ingeschakeld met een capture-instantie per tabel.

Om te controleren of wijzigingsregistratie op databaseniveau is ingeschakeld:

SELECT

d.name AS DatabaseName,

ctd.is_auto_cleanup_on,

ctd.retention_period,

ctd.retention_period_units_desc
FROM sys.change_tracking_databases ctd
INNER JOIN sys.databases d ON ctd.database_id = d.database_id
WHERE d.name = DB_NAME();

Om te controleren voor welke tabellen daadwerkelijk wijzigingsregistratie is ingeschakeld:

SELECT

SCHEMA_NAME(t.schema_id) + '.' + t.name AS TableName,

ct.is_track_columns_updated_on,

ct.begin_version,

ct.cleanup_version
FROM sys.change_tracking_tables ct
INNER JOIN sys.tables t ON ct.object_id = t.object_id;

``

Als je doeltabellen ontbreken in deze resultaatset, mislukt de installatiestap ongeacht de configuratie op databaseniveau. De oplossing is eenvoudig: voer de installatieprocedure opnieuw uit met de juiste tabellijst:

sql EXEC dbo.lakeflowSetupChangeTracking

@Tables = 'Sales.Orders,Production.Products',

@User = 'your_ingestion_user',

@Retention = '2 DAYS';

``

De parameter @Retention bepaalt hoe lang de wijzigingsgeschiedenis wordt bewaard voordat deze door de automatische opschoning wordt verwijderd. Twee dagen is de aanbeveling van Databricks voor de meeste workloads, maar als je ingestie pipeline zelden draait of langdurig downtime ondervindt, kunt je deze periode verlengen. Als het bewaarvenster verloopt voordat de pipeline de wijzigingen heeft gelezen, activeert Lakeflow een volledige refresh van die tabel. Dit is een kostbare bewerking bij grote datasets die ook de downstream watermarks reset.

Voor CDC kunt je de inschakeling op tabelniveau controleren door cdc.change_tables op te vragen. Als een tabel is_cdc_enabled = 1 heeft op databaseniveau, maar geen vermelding in cdc.change_tables, is de capture-instantie nooit aangemaakt. Voer lakeflowSetupChangeDataCapture uit, gericht op die specifieke tabellen.

Voer de verificatiequery's uit vóór de wizard, niet erna.

De foutmeldingen van de installatiewizard worden met elke nieuwe Databricks runtime-release beter, maar begin 2026 worden meerdere foutmodi nog steeds samengevoegd in generieke berichten. De meest betrouwbare aanpak is om de volledige verificatiesuite uit te voeren voordat je de installatiestap probeert.

Een checklist in SQL:

```sql -- 1. Controleer de versie van het hulpprogrammascript SELECT dbo.lakeflowUtilityVersion_1_5() AS UtilityVersion;

-- 2. Controleer de platformdetectie SELECT dbo.lakeflowDetectPlatform() AS Platform;

-- 3. Controleer de wijzigingsdetectie op databaseniveau SELECT * FROM sys.change_tracking_databases WHERE database_id = DB_ID();

-- 4. Controleer de wijzigingsdetectie op tabelniveau SELECT SCHEMA_NAME(t.schema_id) + '.' + t.name FROM sys.change_tracking_tables ct JOIN sys.tables t ON ct.object_id = t.object_id;

-- 5. Bevestig CDC-databaseniveau SELECT is_cdc_enabled FROM sys.databases WHERE database_id = DB_ID();

-- 6. Bevestig CDC-opname-instanties SELECT capture_instance FROM cdc.change_tables;

-- 7. Bevestig machtigingen voor de ingestiegebruiker EXEC dbo.lakeflowFixPermissions

@User = 'uw_ingestiegebruiker',

@Tables = 'ALLE';

``

Als elke query de verwachte resultaten oplevert en lakeflowFixPermissions zonder fouten wordt voltooid, zou de configuratiestap moeten slagen. Als het nog steeds mislukt, controleer dan de logboeken van de gateway-clusterdriver. Download deze van de pagina met pipelinedetails en zoek naar INGESTION_GATEWAY_CONNECTION_ERROR of INGESTION_GATEWAY_INTERNAL_ERROR. De eerste wijst op problemen op netwerkniveau (firewall regels, onjuiste hostnaam of poort), terwijl de laatste inspectie op logniveau vereist voor stacktraces.

Voor teams die meerdere Lakeflow Connect-pipelines uitvoeren over verschillende SQL Server instanties, groepeert MetricSign ingestiefouten op basis van de hoofdoorzaak. Hierbij worden permissie fouten, verbindingstime-outs en configuratieproblemen met CDC onderscheiden. Zo ziet de dienstdoende engineer één incident per onderliggend probleem in plaats van één melding per mislukte pipeline. Dit is belangrijk wanneer een enkele wachtwoordwijziging in Active Directory de ingestie in twaalf databases tegelijk verstoort.

Veelgestelde vragen

Waarom mislukt de configuratiestap van de Lakeflow Connect-database, ook al is CDC ingeschakeld?+
CDC ingeschakeld op databaseniveau wordt niet automatisch ingeschakeld voor individuele tabellen. Voor elke tabel is een expliciete capture-instantie nodig, die wordt aangemaakt via lakeflowSetupChangeDataCapture. Daarnaast heeft de gebruiker die de gegevens opneemt SELECT-rechten nodig op het cdc-schema, en vereisen on-premise of RDS-instanties VIEW SERVER STATE om de status van SQL Server Agent te controleren. Voer de verificatiequery's uit op cdc.change_tables om de inschakeling op tabelniveau te bevestigen.
Heb ik de db_owner-parameter nodig voor de Lakeflow Connect-ingestiegebruiker?+
Nee, db_owner is alleen vereist voor de gebruiker die het hulpprogramma-script (utility_script.sql) uitvoert. De gebruiker die de gegevens opneemt, heeft specifieke SELECT-rechten nodig op systeem catalogus weergaven, het CDC-schema (indien CDC wordt gebruikt) en doeltabellen. De opgeslagen procedure lakeflowFixPermissions verleent deze rechten automatisch wanneer deze wordt aangeroepen met de parameter @User.
Wat gebeurt er als beide CDC-opname-instanties op een tafel bezet zijn?+
SQL Server staat maximaal twee capture-instanties per tabel toe. Als beide slots bezet zijn door instanties die geen Lakeflow-instanties zijn, kan de connector de instantie met het voorvoegsel lakeflow_ niet aanmaken en mislukt de installatiestap. Verwijder een ongebruikte capture-instantie of schakel die tabel over naar change tracking in plaats van CDC. Change tracking kent geen vergelijkbare slotbeperking.
Hoe kan ik upgraden van een oudere versie van het Lakeflow-hulpprogrammascript?+
Stop eerst de gateway en voer vervolgens het nieuwste utility_script.sql (v1.5) opnieuw uit als db_owner-gebruiker. Het script verwijdert objecten met eerdere versies en installeert nieuwe. Voer na de installatie lakeflowSetupChangeTracking en lakeflowSetupChangeDataCapture opnieuw uit met je oorspronkelijke parameters. De upgrade migreert automatisch het oude New_ capture-instantievoorvoegsel naar het nieuwe lakeflow_ voorvoegsel.

Gerelateerde integraties