In a direct path load, the behavior of a discontinued load varies depending on the reason the load was discontinued:
If a load is discontinued because of space errors, then the behavior of SQL*Loader depends on whether you are loading data into multiple subpartitions.
Space errors when loading data into multiple subpartitions (that is, loading into a partitioned table, a composite partitioned table, or one partition of a composite partitioned table):
If space errors occur when loading into multiple subpartitions, then the load is discontinued and no data is saved unless ROWS
has been specified (in which case, all data that was previously committed will be saved). The reason for this behavior is that it is possible rows might be loaded out of order. This is because each row is assigned (not necessarily in order) to a partition and each partition is loaded separately. If the load discontinues before all rows assigned to partitions are loaded, then the row for record "n" may have been loaded, but not the row for record "n-1". Therefore, the load cannot be continued by simply using SKIP=N
.
Space errors when loading data into an unpartitioned table, one partition of a partitioned table, or one subpartition of a composite partitioned table:
If there is one INTO TABLE
statement in the control file, then SQL*Loader commits as many rows as were loaded before the error occurred.
If there are multiple INTO TABLE
statements in the control file, then SQL*Loader loads data already read from the data file into other tables and then commits the data.
In either case, this behavior is independent of whether the ROWS
parameter was specified. When you continue the load, you can use the SKIP
parameter to skip rows that have already been loaded. In the case of multiple INTO TABLE
statements, a different number of rows could have been loaded into each table, so to continue the load you would need to specify a different value for the SKIP
parameter for every table. SQL*Loader only reports the value for the SKIP
parameter if it is the same for all tables.
If the maximum number of errors is exceeded, then SQL*Loader stops loading records into any table and the work done to that point is committed. This means that when you continue the load, the value you specify for the SKIP
parameter may be different for different tables. SQL*Loader reports the value for the SKIP
parameter only if it is the same for all tables.
If a fatal error is encountered, then the load is stopped and no data is saved unless ROWS
was specified at the beginning of the load. In that case, all data that was previously committed is saved. SQL*Loader reports the value for the SKIP
parameter only if it is the same for all tables.
If SQL*Loader is in the middle of saving data when a Ctrl+C is issued, then it continues to do the save and then stops the load after the save completes. Otherwise, SQL*Loader stops the load without committing any work that was not committed already. This means that the value of the SKIP
parameter will be the same for all tables.