pentaho/pentaho-kettle · error · KettleException
OraBulkLoaderMeta.Exception.UnableToSaveStepInfoToRepository
Error message
OraBulkLoaderMeta.Exception.UnableToSaveStepInfoToRepository
What it means
saveRep() persists the step's settings to the repository; any Exception is wrapped in a KettleException with OraBulkLoaderMeta.Exception.UnableToSaveStepInfoToRepository plus id_step. The step-database relationship insert (insertStepDatabase) and attribute writes are the usual sources. The transformation is not saved for this step until fixed.
Solutions
- Check the cause chain and repository logs for the underlying SQL/privilege error
- Ensure the repository user has write privileges on the repository tables
- Test/re-establish the repository connection and retry the save
- If the repository is intentionally read-only, save the transformation as a local .ktr file instead
Defensive patterns
Strategy: try-catch
Validate before calling
// ensure the repository user can write before saving // (run a probe write or check grants in the repository DB) rep.insertStepDatabase( id_transformation, id_step, dbMeta.getObjectId() ); // will throw if not writable
Try / catch
try {
transMeta.saveRep( rep, metaStore, "transformation-name" );
} catch ( KettleException e ) {
if ( e.getMessage().contains( "UnableToSaveStepInfoToRepository" ) ) {
// fall back to saving as a local .ktr file
}
} Prevention
- Use a repository account with INSERT/UPDATE grants
- Check network stability to the repository DB for large saves
- Fall back to local .ktr export when working against read-only repositories
When it happens
Trigger: rep.saveStepAttribute*/insertStepDatabase throws during saveRep — repository connection loss, read-only repository user, constraint violation, or duplicate object ids.
Common situations: Saving a transformation with a repository user lacking INSERT/UPDATE privileges; network drop to the repository database mid-save; saving to a read-only production repository; stale repository sessions after timeouts.
Related errors
- GPLoadMeta.Exception.UnableToSaveStepInfoToRepository
- Unable to save step information to the repository for…
- Unable to save step information to the repository for…
- AddSequenceMeta.Exception.UnableToSaveStepInfo
- AggregateRowsMeta.Exception.UnableToSaveStepInfo
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/d078c3fd6d69d81b.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/oracle-bulk-loader/impl/src/main/java/org/pentaho/di/trans/steps/orabulkloader/OraBulkLoaderMeta.java:609
rep.saveStepAttribute( id_transformation, id_step, "character_set", characterSetName );
rep.saveStepAttribute( id_transformation, id_step, "fail_on_warning", failOnWarning );
rep.saveStepAttribute( id_transformation, id_step, "fail_on_error", failOnError );
rep.saveStepAttribute( id_transformation, id_step, "parallel", parallel );
rep.saveStepAttribute( id_transformation, id_step, "alt_rec_term", altRecordTerm );
for ( int i = 0; i < fieldTable.length; i++ ) {
rep.saveStepAttribute( id_transformation, id_step, i, "stream_name", fieldTable[i] );
rep.saveStepAttribute( id_transformation, id_step, i, "field_name", fieldStream[i] );
rep.saveStepAttribute( id_transformation, id_step, i, "date_mask", dateMask[i] );
}
// Also, save the step-database relationship!
if ( databaseMeta != null ) {
rep.insertStepDatabase( id_transformation, id_step, databaseMeta.getObjectId() );
}
} catch ( Exception e ) {
throw new KettleException( BaseMessages.getString(
PKG, "OraBulkLoaderMeta.Exception.UnableToSaveStepInfoToRepository" )
+ id_step, e );
}
}
@Override
public void getFields( Bowl bowl, RowMetaInterface rowMeta, String origin, RowMetaInterface[] info, StepMeta nextStep,
VariableSpace space, Repository repository, IMetaStore metaStore ) throws KettleStepException {
// Default: nothing changes to rowMeta
}
public void check( List<CheckResultInterface> remarks, TransMeta transMeta, StepMeta stepMeta,
RowMetaInterface prev, String[] input, String[] output, RowMetaInterface info, VariableSpace space,
Repository repository, IMetaStore metaStore ) {
CheckResult cr;
String error_message = "";
if ( databaseMeta != null ) {View on GitHub (pinned to f3058517a1)