2017-10-05 25 views
1
jdbcTemplate.execute("alter table UKIADATA rename to UKIADATA_temp"); 

jdbcTemplate.execute("alter table UKIADATA_2 rename to UKIADATA"); 

jdbcTemplate.execute("alter table UKIADATA_temp rename to UKIADATA_2"); 

logger.info("Tables swapped."); 

J'obtiens l'erreur SQL [alter table UKIADATA renommer UKIADATA_temp]; ORA-00054: ressource occupée et acquit avec NOWAIT spécifié ou timeout expiré ; Exception imbriquée est java.sql.SQLException: ORA-00054: ressource occupée et acquérir avec NOWAIT spécifié ou délai expiré,ORA-00054: ressource busy et d'acquérir avec NOWAIT spécifié ou délai expiré, exception est java.sql.SQLException

En plus de cela pouvez-vous m'aider comment puis-je insérer des instructions de validation dans ce morceau de code.

Répondre

0

Pour l'instant, la table que vous essayez de renommer est occupée par une autre session (lecture, insertion de données, mise à jour, suppression). Pour que votre demande s'exécute sans cette erreur, vous devez fermer d'autres sessions ou arrêter d'accéder à cette table. Les opérations DDL ne nécessitent pas de correction, elles ne nécessitent que la fixation des commandes d'insertion, de mise à jour et de suppression. Toute commande DDL va également valider les données avant de commencer son travail. Ce code SQL déterminera les sessions qui bloquent la table. Et le SQL suivant mettra fin à ces sessions avec force.

select s.sid, s.serial# 
from v$locked_object l, dba_objects o, v$session s 
where o.object_name in('UKIADATA','UKIADATA_2') and 
l.object_id = o.object_id and l.session_id = s.sid 

alter system kill session 'sid,serial#' 
+0

Quelle est la solution, comment puis-je fermer la session dans le code avant de modifier la table de base de données –