Bonjour,
Je suis en train d'écrire un script de génération d'un autre script, dont le but est de transférer d'un dossier source vers un dossier cible, les datafiles composant les tablespaces,. Je ne vais pas rentrer dans le détail parce que je ne pense pas que ce soit le forum adéquat, mais voilà ce que je voudrais faire.
Pour un même tablespace, plusieurs datafiles peuvent exister. Je souhaite entourer la partie qui transfère les différents datafile de la manière suivante :
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 spool script.sql break on tbsName select 'alter tablespace ''' || tablespace_name || ''' begin backup;' tbsName, 'dbms_file_transfer.get_file( source_directory_object => ''SOURCE_DIR'', source_file_name => ''' || substr(file_name,instr(file_name,'/',-1)+1) || ''', destination_directory_object => ''DEST_DIR'', destination_file_name => ' || substr(file_name,instr(file_name,'/',-1)+1) || ', source_database => ''SOURCE_DB'');', 'alter tablespace ''' || tablespace_name || ''' end backup;' from dba_data_files where tablespace_name in (select tablespace_name from dba_tablespaces) order by tbsName / spool off
J'ai résolu mon premier soucis à l'aide de la commande BREAK, pour n'afficher qu'une seule fois par tablespace, la requête suivante dans le bloc :
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part 'alter tablespace ''' || tablespace_name || ''' begin backup;'
Mon problème ici, c'est que je ne sais pas comment faire, pour n'afficher la requête suivante, qu'une seule fois par tablespace, à la fin du bloc :
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part 'alter tablespace ''' || tablespace_name || ''' end backup;'
Je ne sais pas si une commande SQL pur peut résoudre mon soucis, ou bien une commande SQL Plus ?
J'espère avoir été assez clair. Merci d'avance pour vos réponses
Partager