oracle / dotnet-db-samples

.NET code samples for Oracle database developers #OracleDotNet
http://otn.oracle.com/dotnet
MIT License
408 stars 190 forks source link

23.2.0-dev gives ORA-50028: Invalid parameter binding (Parameter '1') when fetching MDSYS.SDO_GEOMETRY #317

Closed nobodo closed 8 months ago

nobodo commented 9 months ago

Hi, I gave a try for the prerelease version of Oracle.ManagedDataAccess.Core in a project that deals with Oracle spatial data.

For example a simple query to get just the spatial data field fails with the following exception:

System.ArgumentException : ORA-50028: Invalid parameter binding (Parameter '1') Stack Trace: at OracleInternal.ServiceObjects.OracleFailoverMgrImpl.OnError(OracleConnection connection, CallHistoryRecord chr, Object mi, Exception ex, Boolean bTopLevelCall, Boolean& bCanRecordNewCall) at Oracle.ManagedDataAccess.Client.OracleDataReader.GetValue(Int32 i) at Oracle.ManagedDataAccess.Client.OracleCommand.ExecuteScalarInternalAsync(Boolean bAsync) at Oracle.ManagedDataAccess.Client.OracleCommand.ExecuteScalarAsyncHelper(CancellationToken cancellationToken)

The same code works with Oracle.EntityFrameworkCore version 7.x (just to say that the UDT part is done properly)

alexkeh commented 9 months ago

What DB version are you connecting to? ODP.NET 23c supports DB 19c and higher. ODP.NET 21c, which is what is used by Oracle EF Core 7, supports 12.1 and higher.

If that's not issue, can you share an ODP.NET trace of the problem?

nobodo commented 9 months ago

Sorry forgot to mention that, it's 19c. I'll try to provide the traces once I figure out how (reading https://medium.com/oracledevs/odp-net-tracing-the-basics-5b110c266bce)

alexkeh commented 9 months ago

Here's sample code how to set up tracing in Oracle EF Core with TraceFileLocation and TraceLevel. https://docs.oracle.com/en/database/oracle/oracle-database/21/odpnt/EFCoreClasses.html#GUID-D5D99935-D8AF-4E16-BD52-88B2A7537B84

nobodo commented 9 months ago

I hope this is enough, I left out some parts from the beginning that did not seem relevant. This shows what I do after executing the reader, basically it does ReadAsync in while loop and reads the results using IsDBNullAsync + GetFieldValueAsync

2023-10-09 18:24:21.485474 TID:14 (PRI) (SVC) (CID1) ExecuteReader => [RowsToFetch: 25, RowsFetched: 11] 2023-10-09 18:24:21.485492 TID:14 (PRI) (SVC) (ENT) (CID1) OracleConnectionImpl.GetInitializedDataReaderImpl() 2023-10-09 18:24:21.485503 TID:14 (PRI) (SVC) (ENT) (CID1) OracleDataReaderImpl.Init() 2023-10-09 18:24:21.485510 TID:14 (PRI) (SVC) (EXT) (CID1) OracleDataReaderImpl.Init() 2023-10-09 18:24:21.485515 TID:14 (PRI) (SVC) (EXT) (CID1) OracleConnectionImpl.GetInitializedDataReaderImpl() 2023-10-09 18:24:21.485522 TID:14 (PRI) (SVC) (EXT) (CID1) OracleCommandImpl.ExecuteReader() 2023-10-09 18:24:21.485532 TID:14 (PRI) (ENT) (CID1) OracleConnection.CheckForWarnings() 2023-10-09 18:24:21.485537 TID:14 (PRI) (EXT) (CID1) OracleConnection.CheckForWarnings() 2023-10-09 18:24:21.485546 TID:14 (PRI) (SVC) (ENT) (CID1) OracleCommandImpl.ExtractAccessorValuesIntoParam() 2023-10-09 18:24:21.485558 TID:14 (PRI) (SVC) (EXT) (CID1) OracleCommandImpl.ExtractAccessorValuesIntoParam() 2023-10-09 18:24:21.485566 TID:14 (PRI) (ENT) (CID1) OracleDataReader.ctor() 2023-10-09 18:24:21.485579 TID:14 (PRI) (EXT) (CID1) OracleDataReader.ctor() 2023-10-09 18:24:21.485585 TID:14 (PRI) (EXT) (CID1) OracleCommand.ExecuteReaderInternal() 2023-10-09 18:24:21.485613 TID:14 (PUB) (EXT) (CID1) OracleCommand.ExecuteReaderAsyncHelper() 2023-10-09 18:24:21.485710 TID:14 (PUB) (ENT) (CID1) OracleDataReader.ReadAsync() 2023-10-09 18:24:21.485725 TID:14 (PUB) (ENT) (CID1) OracleDataReader.ReadAsyncHelper() (CancellationToken) 2023-10-09 18:24:21.485733 TID:14 (PUB) (ENT) (CID1) OracleDataReader.ReadInternal() 2023-10-09 18:24:21.485739 TID:14 (PUB) (EXT) (CID1) OracleDataReader.ReadInternal() 2023-10-09 18:24:21.485746 TID:14 (PUB) (EXT) (CID1) OracleDataReader.ReadAsyncHelper() (CancellationToken) 2023-10-09 18:24:21.485751 TID:14 (PUB) (EXT) (CID1) OracleDataReader.ReadAsync() 2023-10-09 18:24:21.485848 TID:14 (PUB) (ENT) (CID1) OracleDataReader.IsDBNullAsync() 2023-10-09 18:24:21.485870 TID:14 (PUB) (ENT) (CID1) OracleDataReader.IsDBNull() 2023-10-09 18:24:21.485876 TID:14 (PUB) (EXT) (CID1) OracleDataReader.IsDBNull() 2023-10-09 18:24:21.485881 TID:14 (PUB) (EXT) (CID1) OracleDataReader.IsDBNullAsync() 2023-10-09 18:24:21.485886 TID:14 (PUB) (ENT) (CID1) OracleDataReader.GetFieldValueAsync() 2023-10-09 18:24:21.485892 TID:14 (PUB) (ENT) (CID1) OracleDataReader.GetFieldValueAsyncHelper() (CancellationToken) 2023-10-09 18:24:21.485902 TID:14 (PUB) (ENT) (CID1) OracleDataReader.GetValueInternal() 2023-10-09 18:24:21.485907 TID:14 (PUB) (ENT) (CID1) OracleDataReader.IsDBNull() 2023-10-09 18:24:21.485917 TID:14 (PUB) (EXT) (CID1) OracleDataReader.IsDBNull() 2023-10-09 18:24:21.485922 TID:14 (PUB) (ENT) (CID1) OracleDataReader.GetStringInternal() 2023-10-09 18:24:21.485928 TID:14 (PUB) (ENT) DataUnmarshaller.UnmarshalCLR_ScanOnly() 2023-10-09 18:24:21.485936 TID:14 (PUB) (EXT) DataUnmarshaller.UnmarshalCLR_ScanOnly() 2023-10-09 18:24:21.486038 TID:14 (PUB) (EXT) (CID1) OracleDataReader.GetStringInternal() 2023-10-09 18:24:21.486047 TID:14 (PUB) (EXT) (CID1) OracleDataReader.GetValueInternal() 2023-10-09 18:24:21.486058 TID:14 (PUB) (EXT) (CID1) OracleDataReader.GetFieldValueAsyncHelper() (CancellationToken) 2023-10-09 18:24:21.486064 TID:14 (PUB) (EXT) (CID1) OracleDataReader.GetFieldValueAsync() 2023-10-09 18:24:21.486090 TID:14 (PUB) (ENT) (CID1) OracleDataReader.IsDBNullAsync() 2023-10-09 18:24:21.486098 TID:14 (PUB) (ENT) (CID1) OracleDataReader.IsDBNull() 2023-10-09 18:24:21.486103 TID:14 (PUB) (EXT) (CID1) OracleDataReader.IsDBNull() 2023-10-09 18:24:21.486108 TID:14 (PUB) (EXT) (CID1) OracleDataReader.IsDBNullAsync() 2023-10-09 18:24:21.486112 TID:14 (PUB) (ENT) (CID1) OracleDataReader.GetFieldValueAsync() 2023-10-09 18:24:21.486122 TID:14 (PUB) (ENT) (CID1) OracleDataReader.GetFieldValueAsyncHelper() (CancellationToken) 2023-10-09 18:24:21.486127 TID:14 (PUB) (ENT) (CID1) OracleDataReader.GetValueInternal() 2023-10-09 18:24:21.486132 TID:14 (PUB) (ENT) (CID1) OracleDataReader.IsDBNull() 2023-10-09 18:24:21.486136 TID:14 (PUB) (EXT) (CID1) OracleDataReader.IsDBNull() 2023-10-09 18:24:21.486141 TID:14 (PUB) (ENT) (CID1) OracleDataReader.GetStringInternal() 2023-10-09 18:24:21.486145 TID:14 (PUB) (ENT) DataUnmarshaller.UnmarshalCLR_ScanOnly() 2023-10-09 18:24:21.486154 TID:14 (PUB) (EXT) DataUnmarshaller.UnmarshalCLR_ScanOnly() 2023-10-09 18:24:21.486161 TID:14 (PUB) (EXT) (CID1) OracleDataReader.GetStringInternal() 2023-10-09 18:24:21.486166 TID:14 (PUB) (EXT) (CID1) OracleDataReader.GetValueInternal() 2023-10-09 18:24:21.486171 TID:14 (PUB) (EXT) (CID1) OracleDataReader.GetFieldValueAsyncHelper() (CancellationToken) 2023-10-09 18:24:21.486175 TID:14 (PUB) (EXT) (CID1) OracleDataReader.GetFieldValueAsync() 2023-10-09 18:24:21.486198 TID:14 (PUB) (ENT) (CID1) OracleDataReader.IsDBNullAsync() 2023-10-09 18:24:21.486211 TID:14 (PUB) (ENT) (CID1) OracleDataReader.IsDBNull() 2023-10-09 18:24:21.486217 TID:14 (PUB) (EXT) (CID1) OracleDataReader.IsDBNull() 2023-10-09 18:24:21.486222 TID:14 (PUB) (EXT) (CID1) OracleDataReader.IsDBNullAsync() 2023-10-09 18:24:21.486227 TID:14 (PUB) (ENT) (CID1) OracleDataReader.GetFieldValueAsync() 2023-10-09 18:24:21.486231 TID:14 (PUB) (ENT) (CID1) OracleDataReader.GetFieldValueAsyncHelper() (CancellationToken) 2023-10-09 18:24:21.486236 TID:14 (PUB) (ENT) (CID1) OracleDataReader.GetValueInternal() 2023-10-09 18:24:21.486241 TID:14 (PUB) (ENT) (CID1) OracleDataReader.IsDBNull() 2023-10-09 18:24:21.486251 TID:14 (PUB) (EXT) (CID1) OracleDataReader.IsDBNull() 2023-10-09 18:24:21.486256 TID:14 (PUB) (ENT) (CID1) OracleDataReader.GetStringInternal() 2023-10-09 18:24:21.486274 TID:14 (PUB) (ENT) DataUnmarshaller.UnmarshalCLR_ScanOnly() 2023-10-09 18:24:21.486281 TID:14 (PUB) (EXT) DataUnmarshaller.UnmarshalCLR_ScanOnly() 2023-10-09 18:24:21.486286 TID:14 (PUB) (EXT) (CID1) OracleDataReader.GetStringInternal() 2023-10-09 18:24:21.486290 TID:14 (PUB) (EXT) (CID1) OracleDataReader.GetValueInternal() 2023-10-09 18:24:21.486295 TID:14 (PUB) (EXT) (CID1) OracleDataReader.GetFieldValueAsyncHelper() (CancellationToken) 2023-10-09 18:24:21.486305 TID:14 (PUB) (EXT) (CID1) OracleDataReader.GetFieldValueAsync() 2023-10-09 18:24:21.486328 TID:14 (PUB) (ENT) (CID1) OracleDataReader.IsDBNullAsync() 2023-10-09 18:24:21.486337 TID:14 (PUB) (ENT) (CID1) OracleDataReader.IsDBNull() 2023-10-09 18:24:21.486341 TID:14 (PUB) (EXT) (CID1) OracleDataReader.IsDBNull() 2023-10-09 18:24:21.486350 TID:14 (PUB) (EXT) (CID1) OracleDataReader.IsDBNullAsync() 2023-10-09 18:24:21.486372 TID:14 (PUB) (ENT) (CID1) OracleDataReader.IsDBNullAsync() 2023-10-09 18:24:21.486392 TID:14 (PUB) (ENT) (CID1) OracleDataReader.IsDBNull() 2023-10-09 18:24:21.486397 TID:14 (PUB) (EXT) (CID1) OracleDataReader.IsDBNull() 2023-10-09 18:24:21.486402 TID:14 (PUB) (EXT) (CID1) OracleDataReader.IsDBNullAsync() 2023-10-09 18:24:21.486424 TID:14 (PUB) (ENT) (CID1) OracleDataReader.IsDBNullAsync() 2023-10-09 18:24:21.486432 TID:14 (PUB) (ENT) (CID1) OracleDataReader.IsDBNull() 2023-10-09 18:24:21.486437 TID:14 (PUB) (EXT) (CID1) OracleDataReader.IsDBNull() 2023-10-09 18:24:21.486441 TID:14 (PUB) (EXT) (CID1) OracleDataReader.IsDBNullAsync() 2023-10-09 18:24:21.486451 TID:14 (PUB) (ENT) (CID1) OracleDataReader.GetFieldValueAsync() 2023-10-09 18:24:21.486456 TID:14 (PUB) (ENT) (CID1) OracleDataReader.GetFieldValueAsyncHelper() (CancellationToken) 2023-10-09 18:24:21.486461 TID:14 (PUB) (ENT) (CID1) OracleDataReader.GetValueInternal() 2023-10-09 18:24:21.486465 TID:14 (PUB) (ENT) (CID1) OracleDataReader.IsDBNull() 2023-10-09 18:24:21.486470 TID:14 (PUB) (EXT) (CID1) OracleDataReader.IsDBNull() 2023-10-09 18:24:21.486474 TID:14 (PUB) (ENT) (CID1) OracleDataReader.GetStringInternal() 2023-10-09 18:24:21.486483 TID:14 (PUB) (ENT) DataUnmarshaller.UnmarshalCLR_ScanOnly() 2023-10-09 18:24:21.486488 TID:14 (PUB) (EXT) DataUnmarshaller.UnmarshalCLR_ScanOnly() 2023-10-09 18:24:21.486493 TID:14 (PUB) (EXT) (CID1) OracleDataReader.GetStringInternal() 2023-10-09 18:24:21.486497 TID:14 (PUB) (EXT) (CID1) OracleDataReader.GetValueInternal() 2023-10-09 18:24:21.486502 TID:14 (PUB) (EXT) (CID1) OracleDataReader.GetFieldValueAsyncHelper() (CancellationToken) 2023-10-09 18:24:21.486507 TID:14 (PUB) (EXT) (CID1) OracleDataReader.GetFieldValueAsync() 2023-10-09 18:24:21.487006 TID:14 (PUB) (ENT) (CID1) OracleDataReader.IsDBNullAsync() 2023-10-09 18:24:21.487017 TID:14 (PUB) (ENT) (CID1) OracleDataReader.IsDBNull() 2023-10-09 18:24:21.487024 TID:14 (PUB) (EXT) (CID1) OracleDataReader.IsDBNull() 2023-10-09 18:24:21.487030 TID:14 (PUB) (EXT) (CID1) OracleDataReader.IsDBNullAsync() 2023-10-09 18:24:21.487034 TID:14 (PUB) (ENT) (CID1) OracleDataReader.GetFieldValueAsync() 2023-10-09 18:24:21.487091 TID:14 (PUB) (ENT) (CID1) OracleDataReader.GetFieldValueAsyncHelper() (CancellationToken) 2023-10-09 18:24:21.487100 TID:14 (PUB) (ENT) (CID1) OracleDataReader.GetValueInternal() 2023-10-09 18:24:21.487109 TID:14 (PUB) (ENT) (CID1) OracleDataReader.IsDBNull() 2023-10-09 18:24:21.487114 TID:14 (PUB) (EXT) (CID1) OracleDataReader.IsDBNull() 2023-10-09 18:24:21.487484 TID:14 (PRI) (ENT) (CID1) OracleDataReader.GetCustomObject() 2023-10-09 18:24:21.487495 TID:14 (PRI) (ENT) (AC) (CID1) OracleFailoverMgrImpl.DisableReplayByApplicationCall() 2023-10-09 18:24:21.487501 TID:14 (PRI) (EXT) (AC) (CID1) OracleFailoverMgrImpl.DisableReplayByApplicationCall() 2023-10-09 18:24:21.487708 TID:14 (PRI) (ENT) SQLMetaData.GetUDTType() 2023-10-09 18:24:21.489966 TID:14 (PUB) (ENT) OracleCommand.ctor() 2023-10-09 18:24:21.489994 TID:14 (PUB) (EXT) OracleCommand.ctor() 2023-10-09 18:24:21.490149 TID:14 (PRI) (SVC) (ENT) OracleParameterImpl.ctor() 2023-10-09 18:24:21.490159 TID:14 (PRI) (SVC) (EXT) OracleParameterImpl.ctor() 2023-10-09 18:24:21.490165 TID:14 (PUB) (ENT) OracleParameter.ctor() 2023-10-09 18:24:21.490192 TID:14 (PUB) (EXT) OracleParameter.ctor() 2023-10-09 18:24:21.490295 TID:14 (PRI) (ENT) OracleParameterCollection.ctor() 2023-10-09 18:24:21.490305 TID:14 (PRI) (EXT) OracleParameterCollection.ctor() 2023-10-09 18:24:21.490310 TID:14 (PUB) (ENT) OracleParameterCollection.Add() 2023-10-09 18:24:21.490317 TID:14 (PUB) (EXT) OracleParameterCollection.Add() 2023-10-09 18:24:21.490321 TID:14 (PRI) (SVC) (ENT) OracleParameterImpl.ctor() 2023-10-09 18:24:21.490331 TID:14 (PRI) (SVC) (EXT) OracleParameterImpl.ctor() 2023-10-09 18:24:21.490341 TID:14 (PUB) (ENT) OracleParameter.ctor() 2023-10-09 18:24:21.490346 TID:14 (PUB) (EXT) OracleParameter.ctor() 2023-10-09 18:24:21.490390 TID:14 (PUB) (ENT) OracleParameterCollection.Add() 2023-10-09 18:24:21.490399 TID:14 (PUB) (EXT) OracleParameterCollection.Add() 2023-10-09 18:24:21.490403 TID:14 (PRI) (SVC) (ENT) OracleParameterImpl.ctor() 2023-10-09 18:24:21.490407 TID:14 (PRI) (SVC) (EXT) OracleParameterImpl.ctor() 2023-10-09 18:24:21.490417 TID:14 (PUB) (ENT) OracleParameter.ctor() 2023-10-09 18:24:21.490421 TID:14 (PUB) (EXT) OracleParameter.ctor() 2023-10-09 18:24:21.490426 TID:14 (PUB) (ENT) OracleParameterCollection.Add() 2023-10-09 18:24:21.490431 TID:14 (PUB) (EXT) OracleParameterCollection.Add() 2023-10-09 18:24:21.490435 TID:14 (PRI) (SVC) (ENT) OracleParameterImpl.ctor() 2023-10-09 18:24:21.490439 TID:14 (PRI) (SVC) (EXT) OracleParameterImpl.ctor() 2023-10-09 18:24:21.490443 TID:14 (PUB) (ENT) OracleParameter.ctor() 2023-10-09 18:24:21.490452 TID:14 (PUB) (EXT) OracleParameter.ctor() 2023-10-09 18:24:21.490456 TID:14 (PUB) (ENT) OracleParameterCollection.Add() 2023-10-09 18:24:21.490461 TID:14 (PUB) (EXT) OracleParameterCollection.Add() 2023-10-09 18:24:21.490465 TID:14 (PRI) (SVC) (ENT) OracleParameterImpl.ctor() 2023-10-09 18:24:21.490469 TID:14 (PRI) (SVC) (EXT) OracleParameterImpl.ctor() 2023-10-09 18:24:21.490474 TID:14 (PUB) (ENT) OracleParameter.ctor() 2023-10-09 18:24:21.490482 TID:14 (PUB) (EXT) OracleParameter.ctor() 2023-10-09 18:24:21.490487 TID:14 (PUB) (ENT) OracleParameterCollection.Add() 2023-10-09 18:24:21.490492 TID:14 (PUB) (EXT) OracleParameterCollection.Add() 2023-10-09 18:24:21.490496 TID:14 (PRI) (SVC) (ENT) OracleParameterImpl.ctor() 2023-10-09 18:24:21.490501 TID:14 (PRI) (SVC) (EXT) OracleParameterImpl.ctor() 2023-10-09 18:24:21.490505 TID:14 (PUB) (ENT) OracleParameter.ctor() 2023-10-09 18:24:21.490509 TID:14 (PUB) (EXT) OracleParameter.ctor() 2023-10-09 18:24:21.490519 TID:14 (PUB) (ENT) OracleParameterCollection.Add() 2023-10-09 18:24:21.490523 TID:14 (PUB) (EXT) OracleParameterCollection.Add() 2023-10-09 18:24:21.490528 TID:14 (PRI) (SVC) (ENT) OracleParameterImpl.ctor() 2023-10-09 18:24:21.490532 TID:14 (PRI) (SVC) (EXT) OracleParameterImpl.ctor() 2023-10-09 18:24:21.490536 TID:14 (PUB) (ENT) OracleParameter.ctor() 2023-10-09 18:24:21.490541 TID:14 (PUB) (EXT) OracleParameter.ctor() 2023-10-09 18:24:21.490545 TID:14 (PUB) (ENT) OracleParameterCollection.Add() 2023-10-09 18:24:21.490553 TID:14 (PUB) (EXT) OracleParameterCollection.Add() 2023-10-09 18:24:21.490558 TID:14 (PRI) (SVC) (ENT) OracleParameterImpl.ctor() 2023-10-09 18:24:21.490562 TID:14 (PRI) (SVC) (EXT) OracleParameterImpl.ctor() 2023-10-09 18:24:21.490566 TID:14 (PUB) (ENT) OracleParameter.ctor() 2023-10-09 18:24:21.490570 TID:14 (PUB) (EXT) OracleParameter.ctor() 2023-10-09 18:24:21.490575 TID:14 (PUB) (ENT) OracleParameterCollection.Add() 2023-10-09 18:24:21.490579 TID:14 (PUB) (EXT) OracleParameterCollection.Add() 2023-10-09 18:24:21.490587 TID:14 (PRI) (SVC) (ENT) OracleParameterImpl.ctor() 2023-10-09 18:24:21.490592 TID:14 (PRI) (SVC) (EXT) OracleParameterImpl.ctor() 2023-10-09 18:24:21.490596 TID:14 (PUB) (ENT) OracleParameter.ctor() 2023-10-09 18:24:21.490600 TID:14 (PUB) (EXT) OracleParameter.ctor() 2023-10-09 18:24:21.490605 TID:14 (PUB) (ENT) OracleParameterCollection.Add() 2023-10-09 18:24:21.490609 TID:14 (PUB) (EXT) OracleParameterCollection.Add() 2023-10-09 18:24:21.490624 TID:14 (PRI) (SVC) (ENT) OracleParameterImpl.ctor() 2023-10-09 18:24:21.490630 TID:14 (PRI) (SVC) (EXT) OracleParameterImpl.ctor() 2023-10-09 18:24:21.490634 TID:14 (PUB) (ENT) OracleParameter.ctor() 2023-10-09 18:24:21.490639 TID:14 (PUB) (EXT) OracleParameter.ctor() 2023-10-09 18:24:21.490644 TID:14 (PUB) (ENT) OracleParameterCollection.Add() 2023-10-09 18:24:21.490648 TID:14 (PUB) (EXT) OracleParameterCollection.Add() 2023-10-09 18:24:21.490968 TID:14 (PRI) (ENT) (UDT) UDTTypeCache.GetUDTType() MDSYS.SDO_GEOMETRY in Connection pool:49017889 cache 2023-10-09 18:24:21.490987 TID:14 (PRI) (UDT) UDTTypeCache.GetUDTType() Created MDSYS.SDO_GEOMETRY in UDTTypeCache.GetUDTType() in Connection pool:49017889 cache 2023-10-09 18:24:21.491969 TID:14 (PRI) (SVC) (ENT) OracleCommandImpl.Copy() 2023-10-09 18:24:21.491980 TID:14 (PRI) (SVC) (EXT) OracleCommandImpl.Copy() 2023-10-09 18:24:21.492621 TID:14 (PRI) (UDT) UDTNamedType.GetNamedTypeMetaData() Getting Meta Data: MDSYS.SDO_GEOMETRY 2023-10-09 18:24:21.493066 TID:14 (PRI) (ENT) OracleParameterCollection.FindParamByName() 2023-10-09 18:24:21.493100 TID:14 (PRI) (EXT) OracleParameterCollection.FindParamByName() 2023-10-09 18:24:21.493552 TID:14 (PUB) (ENT) (CID1) OracleCommand.ExecuteNonQuery() 2023-10-09 18:24:21.494226 TID:14 (PUB) (ENT) (CID1) OracleCommand.ExecuteNonQueryInternal() 2023-10-09 18:24:21.494285 TID:14 (PRI) (ENT) (CID1) OracleCommand.DoPreExecuteProcessing() 2023-10-09 18:24:21.494295 TID:14 (PRI) (EXT) (CID1) OracleCommand.DoPreExecuteProcessing() 2023-10-09 18:24:21.502439 TID:14 (PRI) (SVC) (ENT) (CID1) OracleCommandImpl.ExecuteNonQuery() 2023-10-09 18:24:21.502474 TID:14 (PRI) (SVC) (ENT) (CID1) OracleCommandImpl.ValidateStatementCacheSize() 2023-10-09 18:24:21.502480 TID:14 (PRI) (SVC) (EXT) (CID1) OracleCommandImpl.ValidateStatementCacheSize() 2023-10-09 18:24:21.502493 TID:14 (PRI) (SVC) (ENT) (CID1) OracleCommandImpl.GetSqlStatementType() 2023-10-09 18:24:21.502501 TID:14 (PRI) (SVC) (EXT) (CID1) OracleCommandImpl.GetSqlStatementType() 2023-10-09 18:24:21.502507 TID:14 (PRI) (SVC) (ENT) (CID1) OracleCommandImpl.ParseCommandText() 2023-10-09 18:24:21.502518 TID:14 (PRI) (SVC) (ENT) OracleCommandImpl.GetPlaceHolderName() 2023-10-09 18:24:21.502523 TID:14 (PRI) (SVC) (EXT) OracleCommandImpl.GetPlaceHolderName() 2023-10-09 18:24:21.502527 TID:14 (PRI) (SVC) (ENT) OracleCommandImpl.GetPlaceHolderName() 2023-10-09 18:24:21.502532 TID:14 (PRI) (SVC) (EXT) OracleCommandImpl.GetPlaceHolderName() 2023-10-09 18:24:21.502535 TID:14 (PRI) (SVC) (ENT) OracleCommandImpl.GetPlaceHolderName() 2023-10-09 18:24:21.502538 TID:14 (PRI) (SVC) (EXT) OracleCommandImpl.GetPlaceHolderName() 2023-10-09 18:24:21.502545 TID:14 (PRI) (SVC) (ENT) OracleCommandImpl.GetPlaceHolderName() 2023-10-09 18:24:21.502549 TID:14 (PRI) (SVC) (EXT) OracleCommandImpl.GetPlaceHolderName() 2023-10-09 18:24:21.502552 TID:14 (PRI) (SVC) (ENT) OracleCommandImpl.GetPlaceHolderName() 2023-10-09 18:24:21.502556 TID:14 (PRI) (SVC) (EXT) OracleCommandImpl.GetPlaceHolderName() 2023-10-09 18:24:21.502560 TID:14 (PRI) (SVC) (ENT) OracleCommandImpl.GetPlaceHolderName() 2023-10-09 18:24:21.502564 TID:14 (PRI) (SVC) (EXT) OracleCommandImpl.GetPlaceHolderName() 2023-10-09 18:24:21.502570 TID:14 (PRI) (SVC) (ENT) OracleCommandImpl.GetPlaceHolderName() 2023-10-09 18:24:21.502574 TID:14 (PRI) (SVC) (EXT) OracleCommandImpl.GetPlaceHolderName() 2023-10-09 18:24:21.502577 TID:14 (PRI) (SVC) (ENT) OracleCommandImpl.GetPlaceHolderName() 2023-10-09 18:24:21.502581 TID:14 (PRI) (SVC) (EXT) OracleCommandImpl.GetPlaceHolderName() 2023-10-09 18:24:21.502584 TID:14 (PRI) (SVC) (ENT) OracleCommandImpl.GetPlaceHolderName() 2023-10-09 18:24:21.502587 TID:14 (PRI) (SVC) (EXT) OracleCommandImpl.GetPlaceHolderName() 2023-10-09 18:24:21.502594 TID:14 (PRI) (SVC) (ENT) OracleCommandImpl.GetPlaceHolderName() 2023-10-09 18:24:21.502598 TID:14 (PRI) (SVC) (EXT) OracleCommandImpl.GetPlaceHolderName() 2023-10-09 18:24:21.502601 TID:14 (PRI) (SVC) (EXT) (CID1) OracleCommandImpl.ParseCommandText() 2023-10-09 18:24:21.502605 TID:14 (PRI) (SVC) (ENT) OracleCommandImpl.GetBindByPositionBasedParameterCollection() 2023-10-09 18:24:21.505134 TID:14 (PRI) (ENT) OracleException.HandleError() from OracleCommandImpl.GetBindByPositionBasedParameterCollection() 2023-10-09 18:24:21.506492 TID:14 (PRI) (SVC) (ERR) OracleException.HandleError() from OracleCommandImpl.GetBindByPositionBasedParameterCollection()(txnid=n/a) System.ArgumentException: ORA-50028: Invalid parameter binding (Parameter '1') at OracleInternal.ServiceObjects.OracleCommandImpl.GetBindByPositionBasedParameterCollection(OracleParameterCollection orclParamColl, ArrayList placeHolderCollection, Boolean bXmlQuerySave) 2023-10-09 18:24:21.506515 TID:14 (PRI) (EXT) OracleException.HandleError() from OracleCommandImpl.GetBindByPositionBasedParameterCollection() 2023-10-09 18:24:21.506575 TID:14 (PRI) (SVC) (EXT) OracleCommandImpl.GetBindByPositionBasedParameterCollection() 2023-10-09 18:24:21.506601 TID:14 (PRI) (ENT) (CID1) OracleException.HandleError() from OracleCommandImpl.ExecuteNonQuery() 2023-10-09 18:24:21.506740 TID:14 (PRI) (SVC) (ERR) (CID1) OracleException.HandleError() from OracleCommandImpl.ExecuteNonQuery()(txnid=n/a) System.ArgumentException: ORA-50028: Invalid parameter binding (Parameter '1') at OracleInternal.ServiceObjects.OracleCommandImpl.GetBindByPositionBasedParameterCollection(OracleParameterCollection orclParamColl, ArrayList placeHolderCollection, Boolean bXmlQuerySave) at OracleInternal.ServiceObjects.OracleCommandImpl.ExecuteNonQuery(String commandText, OracleParameterCollection paramColl, CommandType commandType, OracleConnectionImpl connectionImpl, Int32 longFetchSize, Int64 clientInitialLOBFS, OracleDependencyImpl orclDependencyImpl, OracleConnection connection, ENQ_RefAndOutParamArgCtx enq_refOutArgCtx, Boolean isFromEF, Boolean bAsync) 2023-10-09 18:24:21.506750 TID:14 (PRI) (EXT) (CID1) OracleException.HandleError() from OracleCommandImpl.ExecuteNonQuery() 2023-10-09 18:24:21.506788 TID:14 (PRI) (SVC) (EXT) (CID1) OracleCommandImpl.ExecuteNonQuery() 2023-10-09 18:24:21.507154 TID:14 (PRI) (ENT) (CID1) OracleException.HandleError() from OracleCommand.ExecuteNonQuery() 2023-10-09 18:24:21.507219 TID:14 (PUB) (ERR) (CID1) OracleException.HandleError() from OracleCommand.ExecuteNonQuery()(txnid=n/a) System.ArgumentException: ORA-50028: Invalid parameter binding (Parameter '1') at OracleInternal.ServiceObjects.OracleCommandImpl.GetBindByPositionBasedParameterCollection(OracleParameterCollection orclParamColl, ArrayList placeHolderCollection, Boolean bXmlQuerySave) at OracleInternal.ServiceObjects.OracleCommandImpl.ExecuteNonQuery(String commandText, OracleParameterCollection paramColl, CommandType commandType, OracleConnectionImpl connectionImpl, Int32 longFetchSize, Int64 clientInitialLOBFS, OracleDependencyImpl orclDependencyImpl, OracleConnection connection, ENQ_RefAndOutParamArgCtx enq_refOutArgCtx, Boolean isFromEF, Boolean bAsync) at Oracle.ManagedDataAccess.Client.OracleCommand.ExecuteNonQueryInternal(Boolean bAsync) 2023-10-09 18:24:21.507226 TID:14 (PRI) (EXT) (CID1) OracleException.HandleError() from OracleCommand.ExecuteNonQuery() 2023-10-09 18:24:21.507277 TID:14 (PUB) (EXT) (CID1) OracleCommand.ExecuteNonQueryInternal() 2023-10-09 18:24:21.507636 TID:14 (PUB) (EXT) (CID1) OracleCommand.ExecuteNonQuery() 2023-10-09 18:24:21.507658 TID:14 (PRI) (UDT) UDTNamedType.GetNamedTypeMetaData() Get UDT type Meta Data: MDSYS.SDO_GEOMETRY, . Exception Message: ORA-50028: Invalid parameter binding (Parameter '1') 2023-10-09 18:24:21.507719 TID:14 (PRI) (UDT) UDTNamedType.GetNamedTypeMetaData() Done Getting Meta Data: MDSYS.SDO_GEOMETRY 2023-10-09 18:24:21.507909 TID:14 (PRI) (SVC) (ENT) OracleCommandImpl.Copy() 2023-10-09 18:24:21.507916 TID:14 (PRI) (SVC) (EXT) OracleCommandImpl.Copy() 2023-10-09 18:24:21.507923 TID:14 (PRI) (EXT) (UDT) UDTTypeCache.GetUDTType() MDSYS.SDO_GEOMETRY in Connection pool:49017889 cache 2023-10-09 18:24:21.507930 TID:14 (PRI) (EXT) SQLMetaData.GetUDTType() 2023-10-09 18:24:21.507936 TID:14 (PRI) (ENT) (CID1) OracleException.HandleError() from OracleDataReader.GetCustomObject() 2023-10-09 18:24:21.508050 TID:14 (PUB) (ERR) (CID1) OracleException.HandleError() from OracleDataReader.GetCustomObject()(txnid=n/a) System.ArgumentException: ORA-50028: Invalid parameter binding (Parameter '1') at OracleInternal.UDT.Types.UDTNamedType.GetNamedTypeMetaData(OracleConnection conn, OracleCommand getTypeCmd) at OracleInternal.UDT.Types.UDTTypeCache.GetMetaData(OracleConnection conn, UDTNamedType udtType) at OracleInternal.UDT.Types.UDTTypeCache.CreateUDTType(OracleConnection conn, String schemaName, String typeName) at OracleInternal.UDT.Types.UDTTypeCache.GetUDTType(OracleConnection conn, String schemaName, String typeName) at OracleInternal.ConnectionPool.OraclePoolManager.GetUDTType(OracleConnection conn, String schemaName, String typeName) at Oracle.ManagedDataAccess.Client.OracleConnectionInternal.GetUDTTypeFromCache(String schemaName, String typeName) at Oracle.ManagedDataAccess.Client.OracleConnection.GetUDTTypeFromCache(String schemaName, String typeName) at OracleInternal.Common.SQLMetaData.GetUDTType(OracleConnection conn, Int32 columnIndex) at Oracle.ManagedDataAccess.Client.OracleDataReader.GetCustomObject(Int32 i) 2023-10-09 18:24:21.508068 TID:14 (PRI) (EXT) (CID1) OracleException.HandleError() from OracleDataReader.GetCustomObject() 2023-10-09 18:24:21.508108 TID:14 (PUB) (EXT) (CID1) OracleDataReader.GetCustomObject() 2023-10-09 18:24:21.508128 TID:14 (PRI) (ENT) (CID1) OracleException.HandleError() from OracleDataReader.GetValueInternal() 2023-10-09 18:24:21.508383 TID:14 (PUB) (ERR) (CID1) OracleException.HandleError() from OracleDataReader.GetValueInternal()(txnid=n/a) System.ArgumentException: ORA-50028: Invalid parameter binding (Parameter '1') at OracleInternal.UDT.Types.UDTNamedType.GetNamedTypeMetaData(OracleConnection conn, OracleCommand getTypeCmd) at OracleInternal.UDT.Types.UDTTypeCache.GetMetaData(OracleConnection conn, UDTNamedType udtType) at OracleInternal.UDT.Types.UDTTypeCache.CreateUDTType(OracleConnection conn, String schemaName, String typeName) at OracleInternal.UDT.Types.UDTTypeCache.GetUDTType(OracleConnection conn, String schemaName, String typeName) at OracleInternal.ConnectionPool.OraclePoolManager.GetUDTType(OracleConnection conn, String schemaName, String typeName) at Oracle.ManagedDataAccess.Client.OracleConnectionInternal.GetUDTTypeFromCache(String schemaName, String typeName) at Oracle.ManagedDataAccess.Client.OracleConnection.GetUDTTypeFromCache(String schemaName, String typeName) at OracleInternal.Common.SQLMetaData.GetUDTType(OracleConnection conn, Int32 columnIndex) at Oracle.ManagedDataAccess.Client.OracleDataReader.GetCustomObject(Int32 i) at Oracle.ManagedDataAccess.Client.OracleDataReader.GetValueInternalAsync(Int32 i, Boolean bAsync, CallHistoryRecord chr) 2023-10-09 18:24:21.508395 TID:14 (PRI) (EXT) (CID1) OracleException.HandleError() from OracleDataReader.GetValueInternal() 2023-10-09 18:24:21.508430 TID:14 (PUB) (EXT) (CID1) OracleDataReader.GetValueInternal() 2023-10-09 18:24:21.508592 TID:14 (PUB) (EXT) (CID1) OracleDataReader.GetFieldValueAsyncHelper() (CancellationToken) 2023-10-09 18:24:21.508630 TID:14 (PUB) (EXT) (CID1) OracleDataReader.GetFieldValueAsync() 2023-10-09 18:24:21.508709 TID:14 (PUB) (ENT) (CID1) OracleDataReader.Dispose() 2023-10-09 18:24:21.508718 TID:14 (PUB) (ENT) (CID1) OracleDataReader.Close()

alexkeh commented 9 months ago

One major change in ODP.NET 23c is support for async. Are you using parameter array binding? I can't tell from the trace excerpt you provided. If so, you are likely hitting bug 35698455, which has been fixed in ODP.NET 23.3 being released in a week or two. Another customer hit that issue.

If not, this is likely a new bug related to async. We'll need more of the trace (i.e. parameters being bound, statement being executed, etc.) and/or enough of a test case for Oracle to reproduce in house to debug and fix the issue.

nobodo commented 9 months ago

Yes that async support is the reason why I wanted to test this, so all my oracle calls are using the async versions. I also tried non-async versions of the functions, but the issue did not go away.

I am using input array binding, but to rule out issues with those, I tried two things:

1) Removed the relevant SDO_GEOMETRY field from the sql query and from the code that reads the results from the reader -> no problem. 2) Tried a simple sql without input parameters. Basically just SELECT MY_GEOMETRY FROM MY_TABLE FETCH FIRST ROW ONLY and then used ExecuteScalarAsync to get the result as object -> exception

Looking at the trace, to me it looks that the issue is oracle internal code where it figures out the UDT and does some internal query ... 2023-10-09 18:24:21.492621 TID:14 (PRI) (UDT) UDTNamedType.GetNamedTypeMetaData() Getting Meta Data: MDSYS.SDO_GEOMETRY ... 2023-10-09 18:24:21.502439 TID:14 (PRI) (SVC) (ENT) (CID1) OracleCommandImpl.ExecuteNonQuery() ... 2023-10-09 18:24:21.502605 TID:14 (PRI) (SVC) (ENT) OracleCommandImpl.GetBindByPositionBasedParameterCollection() 2023-10-09 18:24:21.505134 TID:14 (PRI) (ENT) OracleException.HandleError() from OracleCommandImpl.GetBindByPositionBasedParameterCollection()

nobodo commented 9 months ago

I tested with a simple console app with the UDT:s taken from this repository (with slight modifications) and it worked just fine, so it might boil down to the UDT definitions on my side.

nobodo commented 9 months ago

The exception comes if OracleConnection is having BindByName true:

var connection = new OracleConnection(connectionString) { BindByName = true };

When set to false, it works.

alexkeh commented 9 months ago

If the problem also occurs using the sync APIs, then it's a regression in ODP.NET 23c. Can you provide a simple test with BindByName= true? I'll try it out to reproduce the issue. Once I have it reproduced, I'll file a bug and the dev team will fix it.

nobodo commented 9 months ago

https://github.com/nobodo/OracleUdtTest

Here is a simple reproducible example. The db table is set up by the instructions from Spatial-UDT.cs (exact copy from this repository). I used https://github.com/gvenzl/oci-oracle-free as the db. Tested with async and synchronous calls, same result.

alexkeh commented 9 months ago

@nobodo Thanks for providing the test case. I was able to confirm this problem occurs with ODP.NET Core with both sync and async APIs. And the problem doesn't occur with ODP.NET 21c with sync APIs even with BindByName enabled. I've filed bug 35901069 for the dev team to fix the issue.

We're actually planning to release the 23.3 version soon, which means it's too late for a fix to make that release, but we'll fix it for the release after 23.3.

nobodo commented 9 months ago

Ok, thanks for your support too.

Btw, are there any plans/timelines for a version of Oracle.EntityFrameworkCore that would be using the async version of Oracle.ManagedDataAccess.Core?

One more thing I noticed while working on this: the traces you suggested, I was not able to create them with macos. Tried few different paths but did not manage to get them to appear anywhere, checked also the default location as per the documentation, but no luck. I used a linux container to get the trace logs out for this investigation.

alexkeh commented 9 months ago

The 23.3 dev release is already supporting Oracle EF Core. The Oracle EF Core 6 version is 6.23.2-dev on NuGet Gallery. There's a 7.23.2-dev version for EF Core 7 that's unlisted. Since EF Core 7 itself has only a few more months of production support and ODP.NET 23c not yet production, the amount of ODP.NET 23c and EF Core 7 usage is likely to be low.

Which macOS version and chip type are you using (i.e. Intel or ARM)?

nobodo commented 9 months ago

Ok, found it. I'll give it a try. Any estimates when the official release is for these?

macOS 13.6, M1 chip

alexkeh commented 9 months ago

We'll release when Oracle goes production with DB 23c overall. which is planned for the first half of CY 2024.

alexkeh commented 8 months ago

@nobodo I had a team member with a macOS and M1 chip try enabling ODP.NET tracing and it worked for him. Do you have the code with tracing enabled? If you can share it, we can try testing that specifically with ODP.NET Core 23.2.

nobodo commented 8 months ago

I added tracing to the same example repository which was used to reproduce the original problem. Still no output.

alexkeh commented 8 months ago

@nobodo

We're able to reproduce the ODP.NET trace file is not generated under “/tmp/odp.net”. However, this is expected behavior because the ODP.NET application has no write permission on that directory. The “/tmp” is not the current user’s temp directory. If execute the command “echo $TMPDIR”, you should see the current user’s temp directory is located somewhere else. On one of our Macs, it is “/var/folders/wf/(long string)/T/”. Since the application does not have write permission to “/tmp” directory, it writes the trace file to the “$TMPDIR/odp.net/core/trace” directory.

Can you check if the trace file was generated in: “$TMPDIR/odp.net/core/trace”? You can try specifying the trace directory to a location you know the application has write permission for.

nobodo commented 8 months ago

Thanks, for some reason it is not able to access /tmp/odp.net although my username had write permission rights for that. Also tried "~/odp.net" but it does not seem to understand the tilde, so got it working only by specifying the full path to a folder under my homedir.