:on error exit :out "$(OutputDir)\sql-diagnostics.txt" SET NOCOUNT ON; SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; SELECT CAST(SERVERPROPERTY('ProductVersion') AS varchar(30)) AS product_version, DB_NAME() AS database_name, SYSUTCDATETIME() AS checked_at_utc, CONVERT(datetime2(3), '$(StartUtc)', 127) AS export_start_utc, '$(WarehouseId)' AS warehouse_id; SELECT package_id, package_version, installed_at FROM alg.shadow_package_manifest; SELECT warehouse_id, snapshot_generation, snapshot_status, synchronized_at, DATEDIFF(SECOND, synchronized_at, SYSUTCDATETIME()) AS snapshot_age_seconds, CONVERT(varchar(64), source_signature, 2) AS source_signature, source_row_count, instance_id, last_error FROM alg.shadow_snapshot_state WHERE warehouse_id = '$(WarehouseId)'; SELECT warehouse_id, instance_id, claimed_at, last_seen_at, DATEDIFF(SECOND, last_seen_at, SYSUTCDATETIME()) AS heartbeat_age_seconds FROM alg.shadow_instance_heartbeat WHERE warehouse_id = '$(WarehouseId)'; SELECT 'cargo_space_snapshot' AS entity_name, state.snapshot_generation, COUNT_BIG(snapshot.space_id) AS row_count FROM alg.shadow_snapshot_state state LEFT JOIN alg.cargo_space_snapshot snapshot ON snapshot.warehouse_id = state.warehouse_id AND snapshot.snapshot_generation = state.snapshot_generation WHERE state.warehouse_id = '$(WarehouseId)' GROUP BY state.snapshot_generation UNION ALL SELECT 'active_job_snapshot', state.snapshot_generation, COUNT_BIG(snapshot.job_id) FROM alg.shadow_snapshot_state state LEFT JOIN alg.active_job_snapshot snapshot ON snapshot.warehouse_id = state.warehouse_id AND snapshot.snapshot_generation = state.snapshot_generation WHERE state.warehouse_id = '$(WarehouseId)' GROUP BY state.snapshot_generation UNION ALL SELECT 'shadow_inbound_request_snapshot', state.snapshot_generation, COUNT_BIG(snapshot.task_no) FROM alg.shadow_snapshot_state state LEFT JOIN alg.shadow_inbound_request_snapshot snapshot ON snapshot.warehouse_id = state.warehouse_id AND snapshot.snapshot_generation = state.snapshot_generation WHERE state.warehouse_id = '$(WarehouseId)' GROUP BY state.snapshot_generation UNION ALL SELECT 'shadow_outbound_request_snapshot', state.snapshot_generation, COUNT_BIG(snapshot.stockout_detail_id) FROM alg.shadow_snapshot_state state LEFT JOIN alg.shadow_outbound_request_snapshot snapshot ON snapshot.warehouse_id = state.warehouse_id AND snapshot.snapshot_generation = state.snapshot_generation WHERE state.warehouse_id = '$(WarehouseId)' GROUP BY state.snapshot_generation; SELECT request.session_id, request.blocking_session_id, request.status, request.wait_type, request.wait_time, request.command, SUBSTRING(sql_text.text, (request.statement_start_offset / 2) + 1, ((CASE request.statement_end_offset WHEN -1 THEN DATALENGTH(sql_text.text) ELSE request.statement_end_offset END - request.statement_start_offset) / 2) + 1) AS statement_text FROM sys.dm_exec_requests request OUTER APPLY sys.dm_exec_sql_text(request.sql_handle) sql_text WHERE request.database_id = DB_ID() AND (request.blocking_session_id <> 0 OR sql_text.text LIKE '%alg.%') ORDER BY request.session_id; GO :out "$(OutputDir)\comparison-detail.txt" SET NOCOUNT ON; SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; SELECT decision_type, result_code, CASE WHEN result_code = 'MATCH' THEN 'VALID_MATCH' WHEN result_code = 'DIFFERENT' THEN 'VALID_DIFFERENT' WHEN result_code LIKE 'SKIP_%' THEN 'SKIP' WHEN result_code LIKE 'ERROR_%' THEN 'ERROR' ELSE 'OTHER' END AS outcome_group, COUNT_BIG(*) AS row_count, MIN(created_at) AS first_created_at, MAX(created_at) AS last_created_at FROM alg.decision_log WHERE warehouse_id = '$(WarehouseId)' AND created_at >= CONVERT(datetime2(3), '$(StartUtc)', 127) GROUP BY decision_type, result_code, CASE WHEN result_code = 'MATCH' THEN 'VALID_MATCH' WHEN result_code = 'DIFFERENT' THEN 'VALID_DIFFERENT' WHEN result_code LIKE 'SKIP_%' THEN 'SKIP' WHEN result_code LIKE 'ERROR_%' THEN 'ERROR' ELSE 'OTHER' END ORDER BY decision_type, result_code; SELECT decision_id, warehouse_id, decision_type, input_version, result_code, reason, created_at FROM alg.decision_log WHERE warehouse_id = '$(WarehouseId)' AND created_at >= CONVERT(datetime2(3), '$(StartUtc)', 127) ORDER BY created_at, decision_id; SELECT SUM(CASE WHEN decision_type = 'INBOUND' THEN 1 ELSE 0 END) AS inbound_plan_count, SUM(CASE WHEN decision_type = 'INBOUND_COMPARE' THEN 1 ELSE 0 END) AS inbound_compare_count, SUM(CASE WHEN decision_type = 'OUTBOUND' THEN 1 ELSE 0 END) AS outbound_plan_count, SUM(CASE WHEN decision_type = 'OUTBOUND_COMPARE' THEN 1 ELSE 0 END) AS outbound_compare_count FROM alg.decision_log WHERE warehouse_id = '$(WarehouseId)' AND created_at >= CONVERT(datetime2(3), '$(StartUtc)', 127); GO :out "$(OutputDir)\runtime-metrics.txt" SET NOCOUNT ON; SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; SELECT warehouse_id, metric_name, bucket_upper_micros, metric_count, metric_total_micros, metric_max_micros, flushed_at FROM alg.shadow_runtime_metric WHERE warehouse_id = '$(WarehouseId)' ORDER BY metric_name, bucket_upper_micros; SELECT CASE WHEN metric_name LIKE 'SKIP_%' THEN 'SKIP' WHEN metric_name LIKE 'ERROR_%' THEN 'ERROR' WHEN metric_name = 'ADMITTED' THEN 'ADMITTED' ELSE 'HISTOGRAM' END AS metric_group, SUM(metric_count) AS metric_count, MAX(flushed_at) AS latest_flush_at FROM alg.shadow_runtime_metric WHERE warehouse_id = '$(WarehouseId)' GROUP BY CASE WHEN metric_name LIKE 'SKIP_%' THEN 'SKIP' WHEN metric_name LIKE 'ERROR_%' THEN 'ERROR' WHEN metric_name = 'ADMITTED' THEN 'ADMITTED' ELSE 'HISTOGRAM' END ORDER BY metric_group; GO :out "$(OutputDir)\inventory-parity.txt" SET NOCOUNT ON; SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; WITH legacy_stock AS ( SELECT stock.stock_id, stock.cargo_space_id, stock.tray_code, stock.spare4 AS project_no, stock.product_id AS product_no, stock.lot_no, stock.quantity, stock.out_quantity FROM dbo.bas_stock stock WITH (NOLOCK) INNER JOIN dbo.bas_cargo_space space WITH (NOLOCK) ON space.cargo_space_id = stock.cargo_space_id WHERE TRY_CONVERT(decimal(38,0), LTRIM(RTRIM(space.warehouse_id))) = TRY_CONVERT(decimal(38,0), '$(WarehouseId)') ), shadow_stock AS ( SELECT snapshot.stock_id, snapshot.space_id AS cargo_space_id, snapshot.tray_code, snapshot.project_no, snapshot.product_no, snapshot.lot_no, snapshot.quantity, snapshot.out_quantity FROM alg.inventory_item_snapshot snapshot INNER JOIN alg.shadow_snapshot_state state ON state.warehouse_id = snapshot.warehouse_id AND state.snapshot_generation = snapshot.snapshot_generation AND state.snapshot_status = 'PUBLISHED' WHERE snapshot.warehouse_id = '$(WarehouseId)' ) SELECT SUM(CASE WHEN legacy.stock_id IS NULL THEN 1 ELSE 0 END) AS shadow_only_count, SUM(CASE WHEN shadow.stock_id IS NULL THEN 1 ELSE 0 END) AS legacy_only_count, SUM(CASE WHEN legacy.stock_id IS NOT NULL AND shadow.stock_id IS NOT NULL AND (ISNULL(legacy.cargo_space_id, '') <> ISNULL(shadow.cargo_space_id, '') OR ISNULL(legacy.tray_code, '') <> ISNULL(shadow.tray_code, '') OR ISNULL(legacy.project_no, '') <> ISNULL(shadow.project_no, '') OR ISNULL(legacy.product_no, '') <> ISNULL(shadow.product_no, '') OR ISNULL(legacy.lot_no, '') <> ISNULL(shadow.lot_no, '') OR ISNULL(legacy.quantity, 0) <> ISNULL(shadow.quantity, 0) OR ISNULL(legacy.out_quantity, 0) <> ISNULL(shadow.out_quantity, 0)) THEN 1 ELSE 0 END) AS differing_row_count, COUNT_BIG(*) AS compared_stock_count FROM legacy_stock legacy FULL OUTER JOIN shadow_stock shadow ON shadow.stock_id = legacy.stock_id; GO :out stdout SELECT 'EXPORT_SQL_OK' AS export_status, SYSUTCDATETIME() AS completed_at_utc;