ORA-39776: schwerwiegender Direct Path API-Fehler beim laden der Tabelle
Ich versuche zu pass ein .NET-Datenbank in eine Oracle mit OracleBulkCopy über die Oracle ODP.NET (Release 5 (11.2.0.3.20)):
//Copy table to Oracle
OracleBulkCopy bulkCopy = new OracleBulkCopy(cmdOra.Connection);
bulkCopy.DestinationTableName = "INBOUND_JOB_TMP";
bulkCopy.BatchSize = 10000;
bulkCopy.BulkCopyTimeout = 300;
bulkCopy.WriteToServer(dtJobs);
bulkCopy.Dispose();
bulkCopy = null;
Die jobs abgerufen werden aus einer SQL Server-Datenbank:
SqlDataReader reader;
cmdSql.CommandTimeout = 120;
cmdSql.CommandType = CommandType.StoredProcedure;
cmdSql.CommandText = "DOWNLOAD_JOBS";
cmdSql.Parameters.Clear();
reader = cmdSql.ExecuteReader();
//Retrieve Job records
dtJobs = new DataTable();
if (reader.HasRows)
{
dtJobs.Load(reader);
}
else
Trace.WriteLine("No rows returned.");
Eines der Felder übergeben wird ein Feld Signatur:
SQL Server:
CREATE TABLE [dbo].[JOBS_DOWNLOAD](
[UniqueId] [int] IDENTITY(1,1) NOT NULL,
[MobileJobNo] [varchar](20) NOT NULL,
[MobileJobStatus] [varchar](1) NULL,
[TenantSignatureImage] [varbinary](max) NULL,
PRIMARY KEY CLUSTERED
(
[UniqueId] ASC
)
Oracle:
CREATE TABLE "DBA"."INBOUND_JOB_TMP"
("UNIQUE_ID" NUMBER(20,0),
"MOBILE_JOB_NO" VARCHAR2(20) NOT NULL ENABLE,
"TENANT_SIGNATURE" BLOB) ;
Wenn ich jetzt diesen code ausführen zum kopieren von Zeilen von Daten von Sql Server zu Oracle funktioniert es einwandfrei. Das abbild der Unterschrift ist kopiert über.
Jedoch, wenn die Signatur Bild größer ist als etwa 4K in der Größe, bekomme ich die folgende Fehlermeldung:
Oracle.DataAccess.Client.OracleException was unhandled by user code
HResult=-2147467259
Message=Error in row '1' column '1'
ORA-39776: fatal Direct Path API error loading table DBA.INBOUND_JOB_TMP
ORA-00600: internal error code, arguments: [25029], [2147483647], [], [], [], [], [], [], [], [], [], []
Source=Oracle Data Provider for .NET
ErrorCode=-2147467259
DataSource=""
Number=-2754
Procedure=""
StackTrace:
at Oracle.DataAccess.Client.OracleBulkCopy.PerformBulkCopy()
at Oracle.DataAccess.Client.OracleBulkCopy.WriteDataSourceToServer()
at Oracle.DataAccess.Client.OracleBulkCopy.WriteToServer(DataTable table, DataRowState rowState)
at Oracle.DataAccess.Client.OracleBulkCopy.WriteToServer(DataTable table)
at JobDataSync.SyncTables.Jobs.PostJobs() in C:\Development\JobSyncService\JobDataSync\SyncTables\Jobs.cs:line 114
at JobDataSync.SyncTables.Jobs.Sync() in C:\Development\JobSyncService\JobDataSync\SyncTables\Jobs.cs:line 42
at JobDataSync.TransactionalDataSync.SyncData() in C:\Development\JobSyncService\JobDataSync\TransactionalDataSync.cs:line 73
at JobDataSyncConsole.DebugConsole.syncTimer_Elapsed(Object sender, ElapsedEventArgs e) in C:\Development\JobSyncService\JobDataSync\Console\DebugConsole.cs:line 74
at System.Timers.Timer.MyTimerCallback(Object state)
InnerException:
Wenn ich schrieb zurück, um eine SQL Server-Tabelle verwenden, besteht dieses problem nicht.
Irgendwelche Ideen, was falsch ist?
Dank.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieses problem tritt auf, wenn man Daten auf einer Oracle-Tabelle ist definiert als eine Globale temporäre Tabelle im Gegensatz zu einer standard-Datenbank-Tabelle.
Oracle support melden angehoben.