引言
之所以要写windos bat定时脚本,是因为oracle ogg方案中extract莫名的进程夯住,本人才疏,解决不掉。也不能去买oracle的服务
所以,解决办法是定时的检测进程是否ok,如果进程夯住,就重启extract。
由于oracle使用的系统都是windows service,所以自然是使用bat,并没有使用power shell
开始
extract进程莫名夯住,手动解决办法是执行kill extract,并且start extract, brreset
那么,我们就基于手动解决问题的思路,去实现自动定时去检测进程,基本的操作步骤如下:
- 源数据库中新增一条数据
- 等待一段时间,查询目标库中是否数据新增
- 如果数据新增了,那么表示extract进程是ok,只删除源库中新增的数据
- 如果数据没有新增,表示extract进程夯住了,那么需要执行下一步
- kill extract进程
- start extract进程
- 启动成功后,删除源端新增的数据
脚本的实现
@echo off
set today=%date:~0,4%-%date:~5,2%-%date:~8,2%
echo [%date%][%time%]:insert test_data in t_user>>%today%_log.txt
D:\app\Administrator\product\11.2.0\dbhome_2\BIN\sqlplus.exe <oracle_user>/<oracle_password>@<oracle_instance> @insert.sql
timeout /t 40 /nobreak > null
D:\app\Administrator\product\11.2.0\dbhome_2\BIN\sqlplus.exe <oracle_user>/<oracle_password>@<oracle_instance> @select.sql > result.txt
set /p result=<result.txt
for /F %%i in (result.txt) do (
if "%%i"=="extatest" (
echo [%date%][%time%]:ogg is ok, will delete test_data.>>%today%_log.txt
D:\app\Administrator\product\11.2.0\dbhome_2\BIN\sqlplus.exe <oracle_user>/<oracle_password>@<oracle_instance> @delete.sql
echo [%date%][%time%]:delete test_data sucessed.>>%today%_log.txt
exit
)
)
echo [%date%][%time%]:will kill ogg extract process.>>%today%_log.txt
echo obey D:\script\ogg\kill.txt | D:\app\Administrator\product\12.1.2\oggcore_1\ggsci
echo [%date%][%time%]:kill ogg extract process sucessed.>>%today%_log.txt
echo [%date%][%time%]:will start ogg extract process.>>%today%_log.txt
echo obey D:\script\ogg\start.txt | D:\app\Administrator\product\12.1.2\oggcore_1\ggsci
echo [%date%][%time%]:start ogg extract process sucessed.>>%today%_log.txt
echo [%date%][%time%]:will delete ogg test_data.>>%today%_log.txt
D:\app\Administrator\product\11.2.0\dbhome_2\BIN\sqlplus.exe <oracle_user>/<oracle_password>@<oracle_instance> @delete.sql
echo [%date%][%time%]:delete ogg test_data.>>%today%_log.txt
exit
其中需要注意*.sql文件表示操作oracle的语句
定时任务
使用windows的定时任务工具去设置