It actually only seems to happen if direct path is used:

Code:
create table test_load (a number)

grant all on test_load to xxxxxxxxxxx

create public synonym test_load for test_load
Control file:

Code:
OPTIONS (
DIRECT=TRUE
)
LOAD DATA
APPEND
INTO TABLE TEST_LOAD
FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS (A)
Shell:

Code:
sqlldr userid=xxxxxxxxxxx/xxxxxxxxx@xxxxxxxx,control=test_load.ctl,log=test_load.log
Running the shell script gets:


SQL*Loader: Release 9.0.1.0.0 - Production on Tue Nov 22 10:09:13 2005

(c) Copyright 2001 Oracle Corporation. All rights reserved.

SQL*Loader-951: Error calling once/load initialization
ORA-00604: error occurred at recursive SQL level 1
ORA-00972: identifier is too long

Remove the "direct=true" or switch to a username/password@db combination with only 21 characters and it works.