intermitternt Object reference error while generating script using SqlAzureDacpacDeployment@1 task.
- Dominant language
- C#
- Stars
- 460
- Forks
- 29
- Avg merge
- 4d 9h
- Merged PRs (30d)
- 7
Description
- SqlPackage or DacFx Version: 162.5.57.1
- .NET Framework (Windows-only) or .NET Core: .NET Framework 4.6.2
- Environment (local platform and source/target platforms): generating Script using SqlAzureDacpacDeployment@1 in azure devops pipeline with `windows-latest` as a build agent. Target platform is `Dedicated SQL pool`
- Here is the yaml build task
```
- task: SqlAzureDacpacDeployment@1
displayName: 'Generate differential script'
inputs:
azureSubscription: [REDACTED]
ServerName: [REDACTED]
DatabaseName: [REDACTED]
SqlUsername: [REDACTED]
SqlPassword: [REDACTED]
DeploymentAction: Script
DacpacFile: '$(Pipeline.Workspace)\sqldwdb.dacpac'
additionalArguments: '/p:ExcludeObjectTypes=Users;Logins;RoleMembership;Permissions /p:DropObjectsNotInSource=false /p:CommandTimeout=3600 /p:IgnoreColumnOrder=True /p:IgnoreWhitespace=True /p:IgnoreSemicolonBetweenStatements=True /TargetTimeout:920 /d:True /dl:Information /df:$(build.SourcesDirectory)\GeneratedOutputFiles\logs.txt'
```
**Steps to Reproduce:**
1. Facing this issue intermittently
**Did this occur in prior versions? If not - which version(s) did it work in?**
(DacFx/SqlPackage/SSMS/Azure Data Studio)
here is the relevant part of log
```
Microsoft.Data.Tools.Diagnostics.Tracer Error: 0 : 2025-02-06T09:10:14 : Failed to run populator: Sql120StatisticPopulator System.NullReferenceException: Object reference not set to an instance of an object.
at Microsoft.Data.Tools.Schema.Sql.SchemaModel.ReverseEngineerPopulators.SqlStatisticColumnPopulator.InsertElementIntoParent(ISqlModelElement element, SqlStatistic parent, ReverseEngineerOption option)
at Microsoft.Data.Tools.Schema.Sql.SchemaModel.ReverseEngineerPopulators.ChildModelElementPopulator`2.CreateChildElement(TParent parent, EventArgs e, ReverseEngineerOption option)
at Microsoft.Data.Tools.Schema.Sql.SchemaModel.ReverseEngineerPopulators.ChildModelElementPopulator`2.PopulateAllChildrenFromCache(IDictionary`2 cache, SqlReverseEngineerRequest request, OrdinalSqlDataReader reader, ReverseEngineerOption option)
at Microsoft.Data.Tools.Schema.Sql.SchemaModel.ReverseEngineerPopulators.TopLevelElementPopulator`1.Populate(SqlReverseEngineerRequest request, OrdinalSqlDataReader reader, ReverseEngineerOption option)
at Microsoft.Data.Tools.Schema.Sql.SchemaModel.SqlReverseEngineerImpl.ExecutePopulators(Tuple`2 connectionTuple, IList`1 populators, Int32 totalPopulatorsCount, Int32 startIndex, Boolean progressAlreadyUpdated, ReverseEngineerOption option, SqlReverseEngineerRequest request)
Microsoft.Data.Tools.Diagnostics.Tracer Information: 24 : 2025-02-06T09:10:22 :
Telemetry event: DacFxOperationEnd,
common properties: name: [DacFxVersion, 162.5.57.1], value: 0,name: [ApplicationName, sqlpackage], value: 1,name: [ApplicationVersion, 162.5.57.1], value: 2,name: [CurrentCulture, en-US], value: 3,name: [DefaultEncoding, Windows-1252], value: 4,name: [DacFxSource, ADO], value: 5,name: [OSVersion, Microsoft Windows NT 6.2.9200.0], value: 6,name: [ProcessArchitecture, X64], value: 7,name: [DotNetPlatform, .NET Framework 4.6.2], value: 8
properties: name: [Action, Script], value: 0,name: [Options, [{'name':'AllowDropBlockingAssemblies','value':'False'},{'name':'AllowExternalLanguagePaths','value':'False'},{'name':'AllowExternalLibraryPaths','value':'False'},{'name':'AllowIncompatiblePlatform','value':'False'},{'name':'BackupDatabaseBeforeChanges','value':'False'},{'name':'BlockOnPossibleDataLoss','value':'True'},{'name':'BlockWhenDriftDetected','value':'True'},{'name':'CommandTimeout','value':'3600'},{'name':'LongRunningCommandTimeout','value':'0'},{'name':'DatabaseLockTimeout','value':'60'},{'name':'CommentOutSetVarDeclarations','value':'False'},{'name':'CompareUsingTargetCollation','value':'False'},{'name':'CreateNewDatabase','value':'False'},{'name':'DeployDatabaseInSingleUserMode','value':'False'},{'name':'IsAlwaysEncryptedParameterizationEnabled','value':'False'},{'name':'DisableAndReenableDdlTriggers','value':'True'},{'name':'DoNotAlterChangeDataCaptureObjects','value':'True'},{'name':'DoNotAlterReplicatedObjects','value':'True'},{'name':'DropConstraintsNotInSource','value':'True'},{'name':'DropDmlTriggersNotInSource','value':'True'},{'name':'IgnoreDatabaseWorkloadGroups','value':'False'},{'name':'IgnoreWorkloadClassifiers','value':'False'},{'name':'DropExtendedPropertiesNotInSource','value':'True'},{'name':'AllowTableRecreation','value':'True'},{'name':'DropIndexesNotInSource','value':'True'},{'name':'DropObjectsNotInSource','value':'False'},{'name':'DropPermissionsNotInSource','value':'False'},{'name':'DropRoleMembersNotInSource','value':'False'},{'name':'DropStatisticsNotInSource','value':'True'},{'name':'DoNotDropDatabaseWorkloadGroups','value':'False'},{'name':'DoNotDropWorkloadClassifiers','value':'False'},{'name':'GenerateSmartDefaults','value':'False'},{'name':'HashObjectNamesInLogs','value':'False'},{'name':'IgnoreAnsiNulls','value':'True'},{'name':'IgnoreAuthorizer','value':'False'},{'name':'IgnoreColumnCollation','value':'False'},{'name':'IgnoreColumnOrder','value':'True'},{'name':'IgnoreComments','value':'False'},{'name':'IgnoreCryptographicProviderFilePath','value':'True'},{'name':'IgnoreDdlTriggerOrder','value':'False'},{'name':'IgnoreDdlTriggerState','value':'False'},{'name':'IgnoreDefaultSchema','value':'False'},{'name':'IgnoreDmlTriggerOrder','value':'False'},{'name':'IgnoreDmlTriggerState','value':'False'},{'name':'IgnoreExtendedProperties','value':'False'},{'name':'IgnoreFileAndLogFilePath','value':'True'},{'name':'IgnoreFilegroupPlacement','value':'True'},{'name':'IgnoreFileSize','value':'True'},{'name':'IgnoreFillFactor','value':'True'},{'name':'IgnoreFullTextCatalogFilePath','value':'True'},{'name':'IgnoreIdentitySeed','value':'False'},{'name':'IgnoreIncrement','value':'False'},{'name':'IgnoreIndexOptions','value':'False'},{'name':'IgnoreIndexPadding','value':'True'},{'name':'IgnoreKeywordCasing','value':'True'},{'name':'IgnoreLockHintsOnIndexes','value':'False'},{'name':'IgnoreLoginSids','value':'True'},{'name':'IgnoreNotForReplication','value':'False'},{'name':'IgnoreObjectPlacementOnPartitionScheme','value':'True'},{'name':'DoNotEvaluateSqlCmdVariables','value':'True'},{'name':'IgnorePartitionSchemes','value':'False'},{'name':'IgnoreTablePartitionOptions','value':'False'},{'name':'IgnorePermissions','value':'True'},{'name':'IgnoreQuotedIdentifiers','value':'True'},{'name':'IgnoreRoleMembership','value':'True'},{'name':'IgnoreRouteLifetime','value':'True'},{'name':'IgnoreSemicolonBetweenStatements','value':'True'},{'name':'IgnoreSensitivityClassifications','value':'False'},{'name':'IgnoreTableOptions','value':'False'},{'name':'IgnoreUserSettingsObjects','value':'False'},{'name':'IgnoreWhitespace','value':'True'},{'name':'IgnoreWithNocheckOnCheckConstraints','value':'False'},{'name':'IgnoreWithNocheckOnForeignKeys','value':'False'},{'name':'AllowUnsafeRowLevelSecurityDataMovement','value':'False'},{'name':'IncludeCompositeObjects','value':'False'},{'name':'IncludeTransactionalScripts','value':'False'},{'name':'NoAlterStatementsToChangeClrTypes','value':'False'},{'name':'PopulateFilesOnFileGroups','value':'True'},{'name':'PreserveIdentityLastValues','value':'False'},{'name':'PerformIndexOperationsOnline','value':'False'},{'name':'RegisterDataTierApplication','value':'False'},{'name':'RunDeploymentPlanExecutors','value':'False'},{'name':'ScriptDatabaseCollation','value':'False'},{'name':'ScriptDatabaseCompatibility','value':'False'},{'name':'ScriptDatabaseOptions','value':'True'},{'name':'ScriptDeployStateChecks','value':'False'},{'name':'ScriptFileSize','value':'False'},{'name':'ScriptNewConstraintValidation','value':'True'},{'name':'ScriptRefreshModule','value':'True'},{'name':'TreatVerificationErrorsAsWarnings','value':'False'},{'name':'RebuildIndexesOfflineForDataPhase','value':'False'},{'name':'RestoreSequenceCurrentValue','value':'True'},{'name':'DisableIndexesForDataPhase','value':'True'},{'name':'DisableParallelismForEnablingIndexes','value':'False'},{'name':'UnmodifiableObjectWarnings','value':'True'},{'name':'VerifyCollationCompatibility','value':'True'},{'name':'VerifyDeployment','value':'True'},]], value: 1,name: [ApplicationProperty, ADO], value: 2
measurements: name: [ReverseEngineerDurationMs, 42915], value: 0,name: [MemoryUsageMB, 213], value: 1,name: [DurationMs, 56612], value: 2
common measurements:
Microsoft.Data.Tools.Diagnostics.Tracer Information: 18 : 2025-02-06T09:10:22 : Time elapsed: 0:00:57.85.
Microsoft.Data.Tools.Diagnostics.Tracer Error: 0 : 2025-02-06T09:10:22 : SqlPackage failed unexpectedly
Exception: System.NullReferenceException: Object reference not set to an instance of an object.
at Microsoft.Data.Tools.Schema.Sql.SchemaModel.ReverseEngineerPopulators.SqlStatisticColumnPopulator.InsertElementIntoParent(ISqlModelElement element, SqlStatistic parent, ReverseEngineerOption option)
at Microsoft.Data.Tools.Schema.Sql.SchemaModel.ReverseEngineerPopulators.ChildModelElementPopulator`2.CreateChildElement(TParent parent, EventArgs e, ReverseEngineerOption option)
at Microsoft.Data.Tools.Schema.Sql.SchemaModel.ReverseEngineerPopulators.ChildModelElementPopulator`2.PopulateAllChildrenFromCache(IDictionary`2 cache, SqlReverseEngineerRequest request, OrdinalSqlDataReader reader, ReverseEngineerOption option)
at Microsoft.Data.Tools.Schema.Sql.SchemaModel.ReverseEngineerPopulators.TopLevelElementPopulator`1.Populate(SqlReverseEngineerRequest request, OrdinalSqlDataReader reader, ReverseEngineerOption option)
at Microsoft.Data.Tools.Schema.Sql.SchemaModel.SqlReverseEngineerImpl.ExecutePopulators(Tuple`2 connectionTuple, IList`1 populators, Int32 totalPopulatorsCount, Int32 startIndex, Boolean progressAlreadyUpdated, ReverseEngineerOption option, SqlReverseEngineerRequest request)
at Microsoft.Data.Tools.Schema.Sql.SchemaModel.SqlReverseEngineerImpl.ExecutePopulatorsInPass(SqlReverseEngineerConnectionContext context, ReverseEngineerOption option, SqlReverseEngineerRequest request, Int32 totalCount, Tuple`2[] populatorsArray)
at Microsoft.Data.Tools.Schema.Sql.SchemaModel.SqlReverseEngineerImpl.PopulateBatch(SqlReverseEngineerConnectionContext context, SqlSchemaModel model, ReverseEngineerOption option, ErrorManager errorManager, SqlReverseEngineerRequest request, SqlImportScope importScope)
at Microsoft.Data.Tools.Schema.Sql.SchemaModel.SqlReverseEngineer.PopulateAll(SqlReverseEngineerConnectionContext context, ReverseEngineerOption option, ErrorManager errorManager, Boolean filterManagementScopedElements, SqlImportScope importScope, Boolean optimizeForQuery, ModelStorageType modelType)
at Microsoft.Data.Tools.Schema.Sql.Deployment.SqlDeploymentEndpointServer.ImportDatabase(SqlReverseEngineerConstructor constructor, DeploymentEngineContext context, ErrorManager errorManager)
at Microsoft.Data.Tools.Schema.Sql.Deployment.SqlDeploymentEndpointServer.OnLoad(ErrorManager errors, DeploymentEngineContext context)
at Microsoft.Data.Tools.Schema.Sql.Deployment.SqlDeployment.PrepareModels()
at Microsoft.Data.Tools.Schema.Sql.Deployment.SqlDeployment.InitializePlanGeneratator()
at Microsoft.Data.Tools.Schema.Sql.Deployment.SqlDeployment.CreateController(Action`1 msgHandler)
at Microsoft.SqlServer.Dac.DacServices.CreateController(SqlDeployment deploymentEngine, ErrorManager errorManager)
at Microsoft.SqlServer.Dac.DacServices.<>c__DisplayClass55_0.b__0(Object operation, CancellationToken token)
at Microsoft.SqlServer.Dac.Operation.Microsoft.SqlServer.Dac.IOperation.Run(OperationContext context)
at Microsoft.SqlServer.Dac.ReportMessageOperation.Microsoft.SqlServer.Dac.IOperation.Run(OperationContext context)
at Microsoft.SqlServer.Dac.OperationExtension.Execute(IOperation operation, DacLoggingContext loggingContext, CancellationToken cancellationToken)
at Microsoft.SqlServer.Dac.DacServices.GenerateDeployScript(DacPackage package, String targetDatabaseName, DacDeployOptions options, Nullable`1 cancellationToken)
at Microsoft.Data.Tools.Schema.CommandLineTool.DacServiceUtil.<>c__DisplayClass13_2.b__4(DacServices service)
at Microsoft.Data.Tools.Schema.CommandLineTool.DacServiceUtil.ExecuteDeployOperation(CommandLineArguments cmdlineArgs, String connectionString, String filePath, String modelFilePath, MessageWrapper messageWrapper, Boolean sourceIsPackage, Boolean targetIsPackage, Boolean authType, String tenantId, String customAuthArgs, String accessToken, String[] referencePaths, IStackLogSettingsContext logSettings, Func`1 generateScriptFromPackage, Func`2 generateScriptFromDatabase)
at Microsoft.Data.Tools.Schema.CommandLineTool.DacServiceUtil.DoDeployAction(DeployArguments deployArgs, Action`1 writeError, Action`2 writeMessage, Action`1 writeWarning, CancellationToken cancellationToken, CommandLineArguments cmdlineArgs, IStackLogSettingsContext logSettings)
at Microsoft.Data.Tools.Schema.CommandLineTool.Program.DoDeployActions(CommandLineArguments parsedArgs, IStackLogSettingsContext logSettings)
at Microsoft.Data.Tools.Schema.CommandLineTool.Program.PerformAction(CommandLineArguments parsedArgs, IStackLogSettingsContext logSettings)
at Microsoft.Data.Tools.Schema.CommandLineTool.Program.Run(String[] args, IStackLogSettingsContext logSettings)
at Microsoft.Data.Tools.Schema.CommandLineTool.Program.Main(String[] args)
```
The following error comes every time the script is generated, but I can see these errors if the script generation is successful. this error occurs right before the object reference error shared above.
```
Microsoft.Data.Tools.Diagnostics.Tracer Error: 19 : 2025-02-06T09:09:31 : Retry requested: Retry count = 1. Delay = 00:00:00, SQL Error Code = -2146232060, SQL Error Number = 104385, Can retry error = False, Will retry = False Microsoft.Data.SqlClient.SqlException (0x80131904): Catalog view 'configurations' is not supported in this version.
at Microsoft.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
at Microsoft.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
at Microsoft.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
at Microsoft.Data.SqlClient.SqlDataReader.TryConsumeMetaData()
at Microsoft.Data.SqlClient.SqlDataReader.get_MetaData()
at Microsoft.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString, Boolean isInternal, Boolean forDescribeParameterEncryption, Boolean shouldCacheForAlwaysEncrypted)
at Microsoft.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, Boolean inRetry, SqlDataReader ds, Boolean describeParameterEncryptionRequest)
at Microsoft.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry)
at Microsoft.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
at Microsoft.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
at Microsoft.Data.Tools.Schema.Common.SqlClient.ReliableSqlConnection.<>c__DisplayClass60_0`1.b__0(RetryState state)
at Microsoft.Data.Tools.Schema.Common.SqlClient.RetryPolicy.ExecuteAction[R](Func`2 func, Nullable`1 token)
ClientConnectionId:[REDACTED]
Error Number:104385,State:1,Class:16
ClientConnectionId before routing:[REDACTED]
Routing Destination:[REDACTED]
Microsoft.Data.Tools.Diagnostics.Tracer Error: 0 : 2025-02-06T09:09:31 : Microsoft.Data.SqlClient.SqlException (0x80131904): Catalog view 'configurations' is not supported in this version.
at Microsoft.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
at Microsoft.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
at Microsoft.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
at Microsoft.Data.SqlClient.SqlDataReader.TryConsumeMetaData()
at Microsoft.Data.SqlClient.SqlDataReader.get_MetaData()
at Microsoft.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString, Boolean isInternal, Boolean forDescribeParameterEncryption, Boolean shouldCacheForAlwaysEncrypted)
at Microsoft.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, Boolean inRetry, SqlDataReader ds, Boolean describeParameterEncryptionRequest)
at Microsoft.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry)
at Microsoft.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
at Microsoft.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
at Microsoft.Data.Tools.Schema.Common.SqlClient.ReliableSqlConnection.<>c__DisplayClass60_0`1.b__0(RetryState state)
at Microsoft.Data.Tools.Schema.Common.SqlClient.RetryPolicy.ExecuteAction[R](Func`2 func, Nullable`1 token)
at Microsoft.Data.Tools.Schema.Common.SqlClient.ReliableSqlConnection.ExecuteWithRetry[T](IDbCommand command, Func`1 func)
at Microsoft.Data.Tools.Schema.Common.SqlClient.ReliableConnectionHelper.ExecuteReader(IDbConnection conn, String commandText, Action`1 readResult, Action`1 initializeCommand, Predicate`1 catchException)
at Microsoft.Data.Tools.Schema.Sql.Deployment.TargetDatabaseConfiguration.ExecuteReader(SqlConnectionFactory connectionFactory, Boolean useMaster, String command, SqlEngineEdition sqlEngineEdition, Action`1 readResult, Action`1 initializeCommand)
ClientConnectionId:[REDACTED]
Error Number:104385,State:1,Class:16
ClientConnectionId before routing:[REDACTED]
Routing Destination:[REDACTED],11008
Microsoft.Data.Tools.Diagnostics.Tracer Error: 1 : 2025-02-06T09:09:32 : Could not connect to server to retrieve default data paths
Microsoft.Data.Tools.Diagnostics.Tracer Error: 1 : 2025-02-06T09:09:32 : Could not connect to server to retrieve default log paths
Microsoft.Data.Tools.Diagnostics.Tracer Information: 0 : 2025-02-06T09:09:37 : Searching for file master.dacpac using relative path D:\a\1
Microsoft.Data.Tools.Diagnostics.Tracer Information: 0 : 2025-02-06T09:09:37 : Searching for file master.dacpac in directory D:\a\1
Microsoft.Data.Tools.Diagnostics.Tracer Information: 0 : 2025-02-06T09:09:37 : Resolved file master.dacpac using path D:\a\1\master.dacpac
```
I think it is related to target db but not sure how to dig deeper. I have also tried directly using `sqlpackage /a:Script` using Bash@3 task but getting the same error.
Contributor guide
Research direction
Start by reproducing the SqlAzureDacpacDeployment@1 Script operation with the supplied SqlPackage 162.5.57.1 configuration and inspect the SqlStatisticColumnPopulator.InsertElementIntoParent stack-trace entry point. Done means identifying a reliable reproduction or cause and confirming that script generation no longer fails with the intermittent NullReferenceException.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- azure, csharp, sql
- Domain
- databases, devops
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100