[Tuto] Exporter les Workspace et Applications APEX (sous linux)
L'automatisation des exports des applications Apex n'est pas franchement bien documenté chez Oracle et sur le net, et l'utilisation de l'export par l'interface est pénible dès que l'on commence à avoir des fichiers statiques, des images, plusieurs appli, etc...
Il existe une classe Java fournie dans les scripts d'install Apex (dans le répertoire utilities) avec un readme.txt qui donne quelques exemples.
Première chose : Garder le répertoire utilities (si comme moi vous supprimez les fichiers d'install)
Je copie le répertoire utilities dans mon répertoire de scripts d'export
Code:
1 2
| cp -pr apex/utilities/ /home/oracle/export/
mv /home/oracle/export/utilities/ /home/oracle/export/ApexUtilities |
Créer ensuite un script exportApex.sh
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| #!/bin/sh
REP=/home/oracle/export
EXPORTDIR=$REP/daily/
SERVEUR=monserveur
BASE=apexdev
USER=McM
PASSWORD=pwd
export CLASSPATH=.:${ORACLE_HOME}/jdbc/lib/ojdbc6.jar
# Il faut le GRANT APEX_ADMINISTRATOR_ROLE TO McM; pour exporter le workspace
#Oracle dit qu'il faut obligatoirement être dans le répertoire utilities, c'est faux, avec -Duser.dir on va pouvoir lancer le java d'ailleurs.
cd ${EXPORTDIR}
# Export des workspace
java -Duser.dir=${REP}/ApexUtilities/ oracle.apex.APEXExport -db ${SERVEUR}:1521:$BASE -user $USER -password "$PASSWORD" -expWorkspace > ${EXPORTDIR}/${BASE}Workspace.log
for WORKSPACEID in $( grep "^Exporting Workspace" ${BASE}Workspace.log | sed "s/ /:/g" | cut -d':' -f3 )
do
echo "On exporte les applications du workspace $WORKSPACEID" >> ${BASE}Appli.log
java -Duser.dir=${REP}/ApexUtilities/ oracle.apex.APEXExport -db ${SERVEUR}:1521:$BASE -user $USER -password "$PASSWORD" -workspaceid $WORKSPACEID >> ${BASE}Appli.log
echo "On exporte les fichiers du workspace $WORKSPACEID" >> ${BASE}Appli.log
java -Duser.dir=${REP}/ApexUtilities/ oracle.apex.APEXExport -db ${SERVEUR}:1521:$BASE -user $USER -password "$PASSWORD" -expFiles -workspaceid $WORKSPACEID >> ${BASE}Appli.log
done |
A la fin du script, plusieurs fichiers sont créés dans /home/oracle/export/daily
apexdevWorkspace.log qui contient la liste des workspaces (autre qu'INTERNAL)
des fichiers wXXXX.sql : Scripts d'export/import du workspace XXXX (workspace+users)
apexAppli.log : Contient la liste des applications exportées par Workspace
des fichiers fxxx.sql : Scripts d'export/import de l'application xxx (que l'application, sans les fichiers statics et images)
des fichiers files_XXXX.sql : Scripts d'export/import des fichiers et images du workspace XXXX
ll ne reste plus qu'à les zipper pour avoir une sauvegarde.
Code:
zip -m -j Apex_${BASE}_${JOUR}.zip *.sql ${BASE}Workspace.log ${BASE}Appli.log