Simples pelos conceitos do Oracle.
Quando você faz um DELETE, ele não movimenta os extentds da tabela que estão abaixo da marca dágua, e com isso utiliza a área de UNDO, e consequentemente, tu consegue tem um PONTO DE “RESTAURAÇÃO” dos dados, ou seja, se fizer ROLLBACK os dados conseguem se agrupar novamente.
Porém, quando se realiza um TRUNCATE, a marca dágua é digamos “reduzida” e com isso, a tabela sofre alterações físicas, e com isso tu não consegue voltar os dados da maneira que estava anteriormente, pois a tabela sofreu uma regressão da marca dágua, por isso que para comandos de TRUNCATE não existe COMMIT ou ROLLBACK, você elimina os dados mesmo!
E o erro que está aparecendo para ti, é por causa disso, esse truncate na verdade só deve estar em algum momento errado na transação, pq os dados podem estar sendo utilizados por outra transação, pois ocorre um problema de READ CONSISTENT, ou seja, existe alguma outra transação que deve estar lendo os dados dessa tabela e os dados que você quer manipular deveriam ir para UNDO (Data Buffer Cache e etc) para posteriormente você emitir um comando de DCL (Commit ou Rollback) e efetivar os dados alterados, a transação que estaria lendo os dados estaria com os dados consistentes ou no Dirty Buffer.
E como ocorrer esse tipo de controle nas transações, ao emitir o seu TRUNCATE, você REALMENTE elimina os dados que podem estar sendo utilizado por outra transação e consequentemente gera esse erro ORA.
Abraços,
Rodrigo Almeida