REM ###########################################################################
REM # Windows Purge table SYS.AUD$
REM # Author: Amos Geng
REM # Date: 05/29/2015
REM # Functionality: -> Expdp the table SYS.AUD$ for backup purpose
REM #                -> Zip the expdp dump file
REM #                -> Check if any errors were detected in the expdp log
REM #                -> Truncate the table SYS.AUD$
REM #                -> Delete the zip dump file by retention
REM # Parameters Configuration:
REM #                -> DUMP directory
REM #                -> Main function: env file location
REM #                -> dump location 
REM #                -> LOG_LOCATION: MiCORE ENV File
REM ###########################################################################

@echo on

goto main

:set_variable
call C:\micore\scripts\micore_env.bat
set script_name=backup_purge_sysaud.bat 
set script_ver=1.0
set filedatetime=%DATE:~10,4%_%DATE:~4,2%_%DATE:~7,2%_%TIME:~0,2%%TIME:~3,2%%TIME:~6,2%
set filedatetime=%filedatetime: =%
set dump_location=C:\Users\ageng\Documents
set mail_file=%LOG_LOCATION%\mail_backup_purge_sysaud_%filedatetime%.log
set logerr=error
set error_expdp=0

echo ======================================================= > %LOG_LOCATION%\backup_purge_sysaud_%filedatetime%.log
echo * MiCORE SYS.AUD$ Table Clean Up Script                 >> %LOG_LOCATION%\backup_purge_sysaud_%filedatetime%.log
echo * Date/Time: %filedatetime%                             >> %LOG_LOCATION%\backup_purge_sysaud_%filedatetime%.log
echo ======================================================= >> %LOG_LOCATION%\backup_purge_sysaud_%filedatetime%.log
echo.>> %LOG_LOCATION%\backup_purge_sysaud_%filedatetime%.log
goto:EOF


:func_expdp_zip_table
set oracle_sid=%~1
echo %DATE:~10,4%_%DATE:~4,2%_%DATE:~7,2%_%TIME:~0,2%%TIME:~3,2%%TIME:~6,2% Exporting and Zipping the database %~1 SYS.AUD$ table... >> %LOG_LOCATION%\backup_purge_sysaud_%filedatetime%.log
exp "'/ as sysdba'" file=%dump_location%\sysaud_%~1_%filedatetime%.dmp tables=sys.aud$ log=%dump_location%\sysaud_%~1_%filedatetime%.log
type %dump_location%\sysaud_%~1_%filedatetime%.log >> %LOG_LOCATION%\backup_purge_sysaud_%filedatetime%.log

for /f "delims=" %%i in ('findstr /n "successfully without warnings" %dump_location%\sysaud_%~1_%filedatetime%.log') do set logerr=noerror
::findstr /m "successfully without warnings" %dump_location%\sysaud_%~1_%filedatetime%.log

::if %errorlevel% == 0 (
if %logerr% == noerror (
	echo. >> %LOG_LOCATION%\backup_purge_sysaud_%filedatetime%.log
	echo %DATE:~10,4%_%DATE:~4,2%_%DATE:~7,2%_%TIME:~0,2%%TIME:~3,2%%TIME:~6,2% Zipping the dump file %dump_location%\sysaud_%~1_%filedatetime%.dmp... >> %LOG_LOCATION%\backup_purge_sysaud_%filedatetime%.log
	zip -9 -m -o %dump_location%\sysaud_%~1_%filedatetime%.dmp.zip %dump_location%\sysaud_%~1_%filedatetime%.dmp >> %LOG_LOCATION%\backup_purge_sysaud_%filedatetime%.log
	echo. >> %LOG_LOCATION%\backup_purge_sysaud_%filedatetime%.log
	echo %DATE:~10,4%_%DATE:~4,2%_%DATE:~7,2%_%TIME:~0,2%%TIME:~3,2%%TIME:~6,2% Exported and Zipped the database set %~1 SYS.AUD$ table successfully. >> %LOG_LOCATION%\backup_purge_sysaud_%filedatetime%.log
	echo. >> %LOG_LOCATION%\backup_purge_sysaud_%filedatetime%.log
	echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >> %LOG_LOCATION%\backup_purge_sysaud_%filedatetime%.log
	echo. >> %LOG_LOCATION%\backup_purge_sysaud_%filedatetime%.log
) else (
	set /a error_expdp+=1
	echo.>> %LOG_LOCATION%\backup_purge_sysaud_%filedatetime%.log
	echo %DATE:~10,4%_%DATE:~4,2%_%DATE:~7,2%_%TIME:~0,2%%TIME:~3,2%%TIME:~6,2% Errors were detected during the export for database %~1, the dump file did not got zipped. >> %LOG_LOCATION%\backup_purge_sysaud_%filedatetime%.log
	echo. >> %LOG_LOCATION%\backup_purge_sysaud_%filedatetime%.log
	echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >> %LOG_LOCATION%\backup_purge_sysaud_%filedatetime%.log
	echo. >> %LOG_LOCATION%\backup_purge_sysaud_%filedatetime%.log
)
goto:EOF


:func_truncate_sysaud
set oracle_sid=%~1
echo. >> %LOG_LOCATION%\backup_purge_sysaud_%filedatetime%.log
echo %DATE:~10,4%_%DATE:~4,2%_%DATE:~7,2%_%TIME:~0,2%%TIME:~3,2%%TIME:~6,2% Truncating database %~1 SYS.AUD$ table... >> %LOG_LOCATION%\backup_purge_sysaud_%filedatetime%.log
sqlplus -s / as sysdba @%SCRIPT_LOCATION%\sysaud_trucate.sql >> %LOG_LOCATION%\backup_purge_sysaud_%%i_%filedatetime%.log
echo %DATE:~10,4%_%DATE:~4,2%_%DATE:~7,2%_%TIME:~0,2%%TIME:~3,2%%TIME:~6,2% Truncation completed. >> %LOG_LOCATION%\backup_purge_sysaud_%filedatetime%.log
echo. >> %LOG_LOCATION%\backup_purge_sysaud_%filedatetime%.log
goto:EOF


:main
REM call C:\micore\scripts\micore_env.bat
call :set_variable

for %%i in (%USER_INSTANCES%) do (
	call :func_expdp_zip_table %%i
)

if %error_expdp% == 0 (
	for %%f in (%USER_INSTANCES%) do (
		REM echo %DATE:~10,4%_%DATE:~4,2%_%DATE:~7,2%_%TIME:~0,2%%TIME:~3,2%%TIME:~6,2% Truncating database %%f sys.aud$ table... >> %LOG_LOCATION%\backup_purge_sysaud_%filedatetime%.log
		call :func_truncate_sysaud %%f
	)
	
	echo to: %PROACTIVE_EMAIL%, email_01@emeralit.com, email_02@emeralit.com > %mail_file%
	echo from: notifications@emeralit.net >> %mail_file%
	echo subject: Proactive - emeralit - %computername% : SYS.AUD$ cleanning up successfully. >> %mail_file%
	echo.>>%mail_file%
	type %LOG_LOCATION%\backup_purge_sysaud_%filedatetime%.log >> %mail_file%
	echo This email was sent by MiCORE monitoring script %script_name% version %script_ver% >>%mail_file%
	Msmtp -t < %mail_file%
) else (
	echo to: %PROACTIVE_EMAIL%, email_01@emeralit.com, email_02@emeralit.com > %mail_file%
	echo from: notifications@emeralit.net >> %mail_file%
	echo subject: Proactive - emeralit - %computername% : Errors were detected during SYS.AUD$ cleanning up, dump file was not zipped and table was not truncated. >> %mail_file%
	echo.>>%mail_file%
	type %LOG_LOCATION%\backup_purge_sysaud_%filedatetime%.log >> %mail_file%
	echo This email was sent by MiCORE monitoring script %script_name% version %script_ver% >>%mail_file%
	Msmtp -t < %mail_file%	
)

forfiles /p "%dump_location%" /m *.zip /d -60 /c "CMD /C del @FILE"
forfiles /p "%dump_location%" /m *.log /d -60 /c "CMD /C del @FILE"
goto:EOF