@echo off rem sauvegarde A FROID et immédiatement une base Oracle rem on suppose tous les fichiers dans n répertoires sur n disques rem %1 SID de la base rem select * from v$version where banner like 'Oracle%'; rem select * from PRODUCT_COMPONENT_VERSION rem Variables ORACLE if %1'==' Goto Error1 if %2'==' Goto Error12 if %3'==' Goto Error13 if "%ORACLE_HOME%"=="" Goto Error2 if "%ORACLE_BIN%"=="" Goto Error2 SET ORACLE_SID=%1 set OraUser=%2 set UserPwd=%3 rem recupére les informations de services Call "%LDTOOLS%\Services Oracle\Get_list_srvc_Ora.cmd" rem recupére les HOME Oracle Call "%LDTOOLS%\Get_OraHome.cmd" rem récupére le path du service %IMAGEPATH% Call "%LDTOOLS%\Get_Srvc_Path.cmd" OracleService%Oracle_SID% rem recherche la correspondance du path du Home Oracle call "%LDTOOLS%\Find_OraHOME.cmd" "%IMAGEPATH%" if "%CurrentHome%"=="-1" goto Error7 rem Pointe sur les outils de la version rem Modifie Oracle_home, Oracle_home_name et ORACLE_BIN call "%LDTOOLS%\SetDir.cmd" %CurrentHome% rem SID_STATUS= [ NOTLOGGED, NOTAVAILABLE, STARTED, MOUNTED, OPEN ] SET SID_STATUS= rem Obtient la date du jour. rem renseigne avec la date du jour la variable : DATE call "%LDTOOLS%\Setdate.cmd" rem * Variables de travail * set CIBLE=C:\OraBackup if not exist %cible% goto error3 rem exemple : C:\OraBackup\ora92\TEST\15-11-2000 set CIBLE=%CIBLE%\%ORACLE_HOME_NAME%\%Oracle_SID%\%DATE% rem Nom du script de régénération des fichiers de control set ControlFileName=%CIBLE%\mkCtrlFl.sql rem Nom du fichier contenant tous les noms de fichier de donnée constituant la base Oracle set FileName=%CIBLE%\ALLFILES.TXT rem Path complet du fichier de configuration Oracle PFILE pour l'instance courante set PFileName=%WorkDirectory%\PFileName.TXT rem Path complet du fichier status de l'instance courante set StatusFName=%WorkDirectory%\SID_STATUS.TXT rem Path complet du fichier session active de l'instance courante set CountSession=%WorkDirectory%\CountSessions.TXT rem Directory des fichiers des stockage des archives set ArchDirName=%WorkDirectory%\ArchDirectory.TXT rem nom du fichier conetant le numéro de version de la base set VersionFname=%WorkDirectory%\OraVersion.TXT rem supprime le fichier rem permet de tester en amont , via le test d'existence de fichier, si la création de ce fichier rem a réussi ou non if exist "%FileName%" del /F "%FileName%">nul if exist "%PFileName%" del /F "%PFileName%">nul if exist "%StatusFName%" del /F "%StatusFName%">nul if exist "%ArchDirName%" del /F "%ArchDirName%">nul if exist "%CountSession%" del /F "%CountSession%">nul if exist "%VersionFname%" del /F "%VersionFname%" rem création du répertoire cible ( un par jour ) if not exist "%CIBLE%\%Date%\nul" md "%CIBLE%" rem on utilise un nom de fichier court pour le prg SQLPLUS Call "%LDTOOLS%\GetShortFileName.cmd" "%FileName%" FN2 Call "%LDTOOLS%\GetShortFileName.cmd" "%PFileName%" PFN Call "%LDTOOLS%\GetShortFileName.cmd" "%StatusFName%" ShortFNStatus Call "%LDTOOLS%\GetShortFileName.cmd" "%ControlFileName%" ShortCtrFile Call "%LDTOOLS%\GetShortFileName.cmd" "%ArchDirName%" ShortArchDir Call "%LDTOOLS%\GetShortFileName.cmd" "%CountSession%" ShortCountSession Call "%LDTOOLS%\GetShortFileName.cmd" "%CountSession%" ShortCountSession Call "%LDTOOLS%\GetShortFileName.cmd" "%VersionFname%" ShortVersionFname rem Obtient le status de la base [ OPEN,MOUNTED,...] et renseigne la variable SID_STATUS rem si la base est mounted seul l'admin peut l'interroger sysoper ? call "%LDTOOLS%\Get_Ora_Status.cmd" if not "%SID_STATUS%"=="OPEN" goto error4 rem * ------------------------------------------------------------------* Echo Compte les connections active "%ORACLE_BIN%\sqlplus" /NOLOG @"%LDTOOLS%\SQL\Get_CountSessions.sql" %ShortCountSession% %OraUser% %UserPwd% %ORACLE_SID%>nul rem crée la variable Sessions for /F "tokens=*" %%I in ('Type "%CountSession%"') do set Sessions=%%I rem On déduit la connexion utilisée pour exécuter le script Set /A Sessions-=1 if NOT %Sessions% EQU 0 goto Error8 call "%LDTOOLS%\Get_Ora_version.cmd" %ShortVersionFName% Echo Base oracle version %Major_Database_RN%.%Database_Maintenance_RN%.%Application_Server_RN%.%Component_Specific_RN%.%Platform_Specific_RN% if %Major_Database_RN%'==7' goto Error9 pause Echo Test du mode ARCHIVELOG ... call "%LDTOOLS%\Arch_Status.cmd" %1 %OraUser% %UserPwd% Echo Extraction du nom de repertoire des archives ... "%ORACLE_BIN%\sqlplus" /NOLOG @"%LDTOOLS%\SQL\Get_Archive_Dir.sql" %ShortArchDir% %OraUser% %UserPwd% %ORACLE_SID%>nul Echo Regenere le script de création des controlfiles ... "%ORACLE_BIN%\sqlplus" /NOLOG @"%LDTOOLS%\SQL\MakeCtlF.sql" %ControlFileName% %OraUser% %UserPwd% %ORACLE_SID%>nul Echo Extraction des noms de fichiers de donnée de la base %ORACLE_SID% ... "%ORACLE_BIN%\sqlplus" /NOLOG @"%LDTOOLS%\SQL\Get_Files.sql" %FN2% %OraUser% %UserPwd% %ORACLE_SID%>nul Call "%LDTOOLS%\RemoveSpace.cmd" "%FN2%" if %Major_Database_RN%'==8' goto Version8 if %Major_Database_RN%'==9' goto Version9 Goto Error10 :Version8 Echo Extraction du nom de fichier spfile de la base %SID% "%ORACLE_BIN%\sqlplus" /NOLOG @"%LDTOOLS%\SQL\Get_PFilePathv8.sql" %PFN% %OraUser% %UserPwd% %ORACLE_SID%>nul Goto suite :Version9 Echo Extraction du nom de fichier spfile de la base %SID% "%ORACLE_BIN%\sqlplus" /NOLOG @"%LDTOOLS%\SQL\Get_PFilePathv9.sql" %PFN% %OraUser% %UserPwd% %ORACLE_SID%>nul Goto suite :Suite Call "%LDTOOLS%\RemoveSpace.cmd" "%PFN%" set PFN= rem crée la variable PFILE for /F "tokens=*" %%I in ('Type "%PFileName%"') do echo set PFile=%%I>"%TEMP%\pf.cmd" call "%TEMP%\pf.cmd" if exist "%TEMP%\pf.cmd" del /F "%TEMP%\pf.cmd" >nul rem crée la variable ArchiveDirectory for /F "tokens=*" %%I in ('Type "%ArchDirName%"') do set ArchiveDirectory=%%I Echo * Arret de la base * ... rem 8i & 9i "%ORACLE_BIN%\Oradim" -SHUTDOWN -SID %ORACLE_SID% -USRPWD %UserPwd% -SHUTTYPE inst -SHUTMODE i Echo Copie des fichiers de données dans : Echo %CIBLE% rem copy des fichiers de données for /F "tokens=*" %%I in ('type "%FileName%"') do Xcopy "%%I" "%CIBLE%" /Y if not "%Archive_Status%"=="ARCHIVELOG" goto NoArchive Echo Copie des fichiers d'archive md "%CIBLE%\Archive" Xcopy "%ArchiveDirectory%\*.*" "%CIBLE%\Archive" /Y Echo Suppression des archives backupé Del /F /Q "%ArchiveDirectory%\*.*" :NoArchive rem Addfile est un sous-programme "interne" Call ::Addfile "%PFile%" Call ::Addfile "%ORACLE_HOME%\network\ADMIN\sqlnet.ora" Call ::Addfile "%ORACLE_HOME%\network\ADMIN\listener.ora" Call ::Addfile "%ORACLE_HOME%\network\ADMIN\tnsnames.ora" Call ::Addfile "%ORACLE_HOME%\database\PWD%ORACLE_SID%.ORA" Echo * Redemarrage de la base * ... rem 8i & 9i "%ORACLE_BIN%\Oradim" -STARTUP -SID %ORACLE_SID% -USRPWD %UserPwd% -STARTTYPE inst rem -PFILE %PFile% Echo Fin du script. Goto end rem Sous Routine :AddFile rem Compléte le fichier %FileName% avec les fichiers de configuration ORACLE Echo Copie de : %1 set p123=%1 copy %1 "%CIBLE%">nul rem call "%LDTOOLS%\GetFileName.cmd" %1 FName echo %1>>"%FileName%" echo %p123%>>"%FileName%" set p123= rem set FName= Goto :EOF rem Message d'erreur :Error1 Echo Erreur : Echo %0 SID UserName Password Echo Le nom d'instance n'est pas declaree. pause goto end :Error12 Echo Erreur : Echo %0 SID UserName Password Echo Le nom de compte n'est pas declare. pause goto end :Error13 Echo Erreur : Echo %0 SID UserName Password Echo Le password n'est pas declare. pause goto end :Error2 Echo Erreur : Echo Les variables suivante doivent etre declarees au niveau SYTEM ou USER Echo. ORACLE_HOME Echo. ORACLE_BIN pause goto end :error3 Echo Erreur : Echo le repertoire "%CIBLE%" n'existe pas. pause goto end :error4 Echo Erreur : Echo Attention la base n'est pas ouverte, script stoppe. Echo Status courant : %SID_STATUS% Echo. pause goto end :Error7 Echo Pas de correspondance dans le fichier %OraHomes% Echo pour le path du service d'instance [ %1 ] pause Goto end :Error8 Echo Il existe %Sessions% sessions actives. Echo Le script ne peut s'exécuter. pause Goto end :Error9 Echo La version 7 d'Oracle n'est pas supportee. Echo Aucun test d'effectuer sur cette version. pause Goto end :Error10 Echo La version d'Oracle n'est pas supportee. pause Goto end :end if exist "%PFileName%" del /F "%PFileName%">nul if exist "%StatusFName%" del /F "%StatusFName%">nul if exist "%ArchDirName%" del /F "%ArchDirName%">nul if exist "%CountSession%" del /F "%CountSession%">nul if exist "%VersionFname%" del /F "%VersionFname%">nul rem Supprime les variables inutiles set OraUser= set UserPwd= set StatusFName= set Archive_Status= set ShortArchDir= set ShortCtrFile= set ShortFNStatus= set ShortCountSession= set ShortOracle_Version= set ControlFileName= set ArchDirName= set Oracle_Version= set ArchiveDirectory= set CountSession= set Sessions= set PFileName= set PFile= set FN2= set PFN= Echo Script termine.