none
Microsoft Sync Framework 在oracle中出现的错误(Blob 32K) 麻烦各位大大帮忙看下 RRS feed

  • 问题

  • 使用下面的方式更新作用域表的时候就会报错,数据量有几个G,貌似在Oracle中 Blob 字段 有32K 的 限制,麻烦各位能给个解决方案!~
    
    
    OracleCommand updReplicaInfoCmd = new OracleCommand();
    updReplicaInfoCmd.CommandType = CommandType.Text;
    updReplicaInfoCmd.CommandText = "begin update scope_info set "
                    + "scope_sync_knowledge = :"
                    +DbSyncSession.SyncScopeKnowledge + ", "
                    +"scope_id = :"
                    +DbSyncSession.SyncScopeId + ", "
                    +"scope_forgotten_knowledge = :" 
                    +DbSyncSession.SyncScopeCleanupKnowledge + " "
                    +"where scope_name = :" 
                    + DbSyncSession.SyncScopeName + " and "
                    + " ( :"
                    +DbSyncSession.SyncCheckConcurrency 
                    + " = 0 or scope_timestamp = :"
                    + DbSyncSession.SyncScopeTimestamp + ");" 
                    +":" + DbSyncSession.SyncRowCount + " := sql%rowcount; end;";
    updReplicaInfoCmd.Parameters.Add(DbSyncSession.SyncScopeKnowledge, OracleType.Blob,Int32.MaxValue);
    updReplicaInfoCmd.Parameters.Add(DbSyncSession.SyncScopeCleanupKnowledge, OracleType.Blob, Int32.MaxValue);
    updReplicaInfoCmd.Parameters.Add(DbSyncSession.SyncScopeName, OracleType.NVarChar, 100);
    updReplicaInfoCmd.Parameters.Add(DbSyncSession.SyncCheckConcurrency, OracleType.Int32);      updReplicaInfoCmd.Parameters.Add(DbSyncSession.SyncScopeId, OracleType.Raw);
    updReplicaInfoCmd.Parameters.Add(DbSyncSession.SyncScopeTimestamp, OracleType.Number);
    updReplicaInfoCmd.Parameters.Add(DbSyncSession.SyncRowCount, OracleType.Int32).Direction = ParameterDirection.Output;
    provider.UpdateScopeInfoCommand = updReplicaInfoCmd;
    
    

    ERROR  , DEP_TaskService, 5, 03/25/2011 08:10:19:562, Caught exception while executing UpdateScopeInfoCommand
    System.Data.OracleClient.OracleException: ORA-01460: unimplemented or unreasonable conversion requested

       在 System.Data.OracleClient.OracleConnection.CheckError(OciErrorHandle errorHandle, Int32 rc)
       在 System.Data.OracleClient.OracleCommand.Execute(OciStatementHandle statementHandle, CommandBehavior behavior, Boolean needRowid, OciRowidDescriptor& rowidDescriptor, ArrayList& resultParameterOrdinals)
       在 System.Data.OracleClient.OracleCommand.ExecuteNonQueryInternal(Boolean needRowid, OciRowidDescriptor& rowidDescriptor)
       在 System.Data.OracleClient.OracleCommand.ExecuteNonQuery()
       在 Microsoft.Synchronization.Data.DbSyncScopeHandler.WriteScope(IDbConnection connection, IDbTransaction transaction, WriteScopeType writeType)

    ERROR  , DEP_TaskService, 5, 03/25/2011 08:10:19:640, Caught exception while applying changes: Microsoft.Synchronization.Data.DbSyncException: Failed to Execute Provider Command: 'UpdateScopeInfoCommand'; the transaction was rolled back. Ensure that the command syntax is correct.. ---> System.Data.OracleClient.OracleException: ORA-01460: unimplemented or unreasonable conversion requested

       在 System.Data.OracleClient.OracleConnection.CheckError(OciErrorHandle errorHandle, Int32 rc)
       在 System.Data.OracleClient.OracleCommand.Execute(OciStatementHandle statementHandle, CommandBehavior behavior, Boolean needRowid, OciRowidDescriptor& rowidDescriptor, ArrayList& resultParameterOrdinals)
       在 System.Data.OracleClient.OracleCommand.ExecuteNonQueryInternal(Boolean needRowid, OciRowidDescriptor& rowidDescriptor)
       在 System.Data.OracleClient.OracleCommand.ExecuteNonQuery()
       在 Microsoft.Synchronization.Data.DbSyncScopeHandler.WriteScope(IDbConnection connection, IDbTransaction transaction, WriteScopeType writeType)
       --- 内部异常堆栈跟踪的结尾 ---
       在 Microsoft.Synchronization.Data.DbSyncScopeHandler.WriteScope(IDbConnection connection, IDbTransaction transaction, WriteScopeType writeType)
       在 Microsoft.Synchronization.Data.SyncScopeHandlerBase.WriteScopeWithRetry(IDbTransaction transaction)
       在 Microsoft.Synchronization.Data.RelationalSyncProvider.WriteScopeInfoAndCommitTransaction(DbSyncScopeMetadata scopeMetadata, ChangeApplicationAction action)
       在 Microsoft.Synchronization.Data.RelationalSyncProvider.ApplyChanges(DbSyncScopeMetadata scopeMetadata, DataSet dataSet, DbSyncSession DbSyncSession, Boolean commitTransaction, String batchFileName, ChangeApplicationAction& action)

    2011年3月30日 2:21

答案

  • 你好,

    这个问题的话涉及到Oracle数据库,根本原因也倾向于数据库方面,建议你去Oracle相关的论坛询问解决方案,那里的相关技术专家会比较多。

    另外的话,建议你可以先测试不通过程序,在数据库中是否可以更新数据成功。还可以在数据库中写一个procedure完成更新操作,程序中调用该procedure。


    Paul Zhou [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 Paul Zhou 2011年4月29日 3:24
    2011年4月15日 2:51

全部回复

  • 靠,连个解决问题的人都么有!~ 囧!~

    2011年4月14日 3:00
  • 你好,

    这个问题的话涉及到Oracle数据库,根本原因也倾向于数据库方面,建议你去Oracle相关的论坛询问解决方案,那里的相关技术专家会比较多。

    另外的话,建议你可以先测试不通过程序,在数据库中是否可以更新数据成功。还可以在数据库中写一个procedure完成更新操作,程序中调用该procedure。


    Paul Zhou [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 Paul Zhou 2011年4月29日 3:24
    2011年4月15日 2:51