Bonjour,
Est-il possible de récuperer un package dropé ? sachant que le package a été supprimé le 16/06/2011 à 18h.
Base : Oracle 9.2
OS : (AIX)
merci par vance
Bonjour,
Est-il possible de récuperer un package dropé ? sachant que le package a été supprimé le 16/06/2011 à 18h.
Base : Oracle 9.2
OS : (AIX)
merci par vance
Malheureusement, les opérations DDL comme le DROP sont définitives, car elles sont suivies par un COMMIT implicite.
Si vraiment la récupération de ce paquetage est vitale et que vous êtes prêt à une manipulation assez lourde, je ne vois qu'une restauration de votre base sur une machine de test pour vous sortir de ce mauvais pas.
Après il suffira d'extraire le code source (dans DBA_SOURCE, par DBMS_METADATA ou un quelconque outil graphique), et de le rejouer sur la base de prod.
Consultant / formateur Oracle indépendant
Certifié OCP 12c, 11g, 10g ; sécurité 11g
Ma dernière formation Oracle 19c publiée sur Linkedin : https://fr.linkedin.com/learning/oracle-19c-l-administration
Merci mais je n'ai pas compri votre réponse.
Restaurer la base à partir d'un dump ? mais le dump n'existe pas.
Si tu as une ancienne sauvegarde par exp, tu peux aussi sortir uniquement le script complet de la bd qui devrait contenir ton package.
Ça t'évitera d'avoir à créer une nouvelle bd.
Je ne sais plus l'option précise, je n'ai pas de bd oracle à porter de main, lance une recherche.
non, le package n'est pas disponible dans une ancienne version. il a été créé cette semaine.
Regarde ceci :
Retrieve old versions of procedures with Flashback Query
et dépèche toi car le flashback n'est possible qu'un temps limité
Using Oracle Flashback Query (SELECT AS OF)
Normalement cette requête devrait te convenir à executer sous sys (et joue autour de l'horraire):
Dans sqlplus tu ne verras peut être pas tout le code.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 select text from dba_source as of timestamp TO_TIMESTAMP('16/06/2011 17:55:00', 'DD/MM/YYYY HH24:MI:SS') where OWNER = 'LE_USER' and name='NOM_DU_PACKAGE' order by line;
Pour être sûr de ne pas perdre le code (s'il est encore disponnible) le temps de mettre en place ton script spool je te conseil de le sauvegarder dans une table :
A priori la disponnibilité est de quelques heures à quelques jours (max 5) en fonction de l'undo management et de l'activité de la base.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 create table UN_SCHEMA_CAR_TU_NE_VEUX_PAS_CREER_UNE_TABLE_DANS_SYS.pkg_back as select text from dba_source as of timestamp TO_TIMESTAMP('16/06/2011 17:55:00', 'DD/MM/YYYY HH24:MI:SS') where OWNER = 'LE_USER' and name='NOM_DU_PACKAGE' order by line;
Consultant / formateur Oracle indépendant
Certifié OCP 12c, 11g, 10g ; sécurité 11g
Ma dernière formation Oracle 19c publiée sur Linkedin : https://fr.linkedin.com/learning/oracle-19c-l-administration
Au fait plutôt comme ça, en rajoutant le numéro de ligne, et pense qu'il y a aussi un header :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 CREATE TABLE UN_SCHEMA_CAR_TU_NE_VEUX_PAS_CREER_UNE_TABLE_DANS_SYS.pkg_back AS SELECT line,text FROM dba_source AS of timestamp TO_TIMESTAMP('16/06/2011 17:55:00', 'DD/MM/YYYY HH24:MI:SS') WHERE OWNER = 'LE_USER' AND name='NOM_DU_PACKAGE' ORDER BY line;Merci, en même temps l'absence de backup n'est pas normal...Excellent, je m'en veux de ne pas y avoir pensé !
Merci bcp pour vos réponses,
mais mon undo_retention=10800s soit 180min
je dois réécrire le package.
A vrai dire, la syntaxe AS OF n'existe qu'à partir de la V10.
En V9, il faut d'abord positionner la session en mode Flashback en précisant le point de retour en arrière, faire un SELECT ordinaire, mais qui fera référence au passé, puis repasser la session en mode normal.
Voir un exemple ici http://helyos.developpez.com/flashback/#L4.3
J'ajoute, pour le demandeur qui a visiblement renoncé sans même tester, que la valeur UNDO_RETENTION n'est qu'indicative par défaut, et que selon l'activité modificative subie par la base, on peut retrouver les anciennes données pendant beaucoup moins ou beaucoup plus de temps.
J'ai même eu un cas dans lequel les données visées semblaient perdues, mais où une augmentation après coup de UNDO_RETENTION les a rendues accessibles. Elles étaient donc toujours présentes dans l'UNDO, mais il fallait un peu forcer la porte.
Ca peut donc valoir le coup de tenter sa chance sans pessimisme.
Ceci amène une autre question : jusqu'où peut-on réellement remonter par requête Flashback ?
En V9, je ne connais aucun moyen, mais dès la V10, la requête suivante fournira la réponse :
On peut considérer cette vue comme une sorte de table externe donnant accès au contenu de l'UNDO.
Code : Sélectionner tout - Visualiser dans une fenêtre à part select min(start_timestamp) from flashback_transaction_query;
Consultant / formateur Oracle indépendant
Certifié OCP 12c, 11g, 10g ; sécurité 11g
Ma dernière formation Oracle 19c publiée sur Linkedin : https://fr.linkedin.com/learning/oracle-19c-l-administration
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager