Exception ORA-08103: l'objet n'existe plus sur l'utilisation de setfetchsize de Hibernate
Je suis de l'utilisation d'Hibernate. J'ai besoin de récupérer environ 1000000 dossiers et il fera exception délai. Donc je suis en utilisant setfetchsize
de 6000 dossiers, de sorte qu'il distribuera l'opération dans de multiples transactions chacun de 6000 dossiers.
Il prendra autour de 21 heures à chercher tous les.
Mais en attendant, la récupération des documents si quelqu'un supprime l'un de l'enregistrement qui a été récupéré puis-je obtenir ORA-08103: object no longer exists
.
Maintenant, je veux ignorer que l'objet qui est supprimé lors de la récupération. Comment puis-je faire cela?
Ne connais pas le contexte de ce que vous essayez de faire, mais pourquoi devez-vous utiliser hibernate, et pas directement de sql ou pl/sql appels. Serait beaucoup plus rapide.
Je ne peux pas remplacer Hibernate car il vous en coûtera plus de temps de la consommation de projet.Mon problème est que sur l'exécution de executeQuery oracle va jeter ORA-08103: l'objet n'existe plus exception parce que quelqu'un a supprimé un dossier dont j'ai été chercher de l'aide executeQuery. Maintenant je ne peux pas empêcher quiconque de supprimer une ligne du temps quand je suis aller chercher des dossiers, donc je veux une technique qui va provoquer oracle de ne pas jeter l'exception de l'enregistrement supprimé au lieu de cela Il doit ignorer que d'enregistrer et de procéder à la prochaine.
Pourquoi êtes-vous récupérer un million de lignes dans l'application? Il me semble qu'il y a possibilité de faire un traitement supplémentaire dans la base de données, d'économiser beaucoup de temps.
Je ne peux pas remplacer Hibernate car il vous en coûtera plus de temps de la consommation de projet.Mon problème est que sur l'exécution de executeQuery oracle va jeter ORA-08103: l'objet n'existe plus exception parce que quelqu'un a supprimé un dossier dont j'ai été chercher de l'aide executeQuery. Maintenant je ne peux pas empêcher quiconque de supprimer une ligne du temps quand je suis aller chercher des dossiers, donc je veux une technique qui va provoquer oracle de ne pas jeter l'exception de l'enregistrement supprimé au lieu de cela Il doit ignorer que d'enregistrer et de procéder à la prochaine.
Pourquoi êtes-vous récupérer un million de lignes dans l'application? Il me semble qu'il y a possibilité de faire un traitement supplémentaire dans la base de données, d'économiser beaucoup de temps.
OriginalL'auteur Barney | 2013-09-11
Vous devez vous connecter pour publier un commentaire.
Plus probable qu'un curseur est ouvert sur une table temporaire globale(GTT), qui avait été créé avec
ON COMMIT DELETE ROWS
option. Et la cause de laORA-08103: object no longer exists
erreur estcommit
déclaration qui a suivi juste après ladelete
déclaration. Voici un exemple simple:Des loisirs de la table temporaire globale avec
on commit preserve rows
clause lui permettront de récupérer des données à partir d'un curseur qui est basé sur la table sans avoir peur de faire face àORA-08103:
erreur.insert.. select
) à partir d'une vue dans une table sur laquelle supprime pas se produire. C'est possible qu'un autre processus est en train d'essayer de tronquer la table en dessous, mais la "première" table doit être verrouillé, ce qui permettrait d'éviter que cela se produise.si vous êtes à la troncation d'une table tandis qu'un
insert select
instruction en cours, oui, vous obtiendrez la même erreur simplement parce queselect
déclaration est un curseur ettruncate
déclaration, comme c'est une instruction DDL, cause double - validation avant de les tronquer et puis après.Ah, oui, bien sûr; merci Nicolas. Je vais avoir à traquer que rogue processus, alors...
OriginalL'auteur
Après avoir passé une semaine enfin j'ai résolu le Problème:
Solution: le Plus probable qu'un curseur est ouvert sur une table temporaire globale(GTT), qui avait été créé avec SUR les COMMETTRE SUPPRIMER des LIGNES d'option. Et la cause de l'ORA-08103: l'objet n'existe plus d'erreur est s'engager déclaration qui a suivi juste après l'instruction delete. DBA équipe n'a pas d'accord pour changer la GTT, comme lors de la validation de préserver les lignes donc, finalement, j'ai ajouté le code de base en Java de la Couche de Service[la mise en Œuvre de la collection Printemps - Transaction Programmatique]
OriginalL'auteur