【问题标题】:Batch script that delete old Backups and keep just one删除旧备份并仅保留一个的批处理脚本
【发布时间】:2014-04-24 12:11:39
【问题描述】:

我启动了一个脚本--command=STATISTICS --statdata=SAVEPOINTS > C:\Safepoints.txt ,它会生成这样的输出。

Page count for each save point version:
  0: version=0, status=3, ts=2014-03-18 16:24:51.764, page count=68861
  1: version=1, status=3, ts=2014-03-18 17:49:25.622, page count=68861
  2: version=2, status=3, ts=2014-03-19 05:00:10.467, page count=68925
  3: version=3, status=2, ts=2014-03-20 14:05:53.267, page count=2744
  4: version=4, status=3, ts=2014-03-20 15:08:40.607, page count=68859
  5: version=5, status=3, ts=2014-03-21 05:00:10.527, page count=68926

我的想法是,读取 C:\Safepoint.txt 并检查是否存在多个状态=3(完整备份)的文件,而不是保留最新文件,否则启动这样的新命令

--command=DELETE_SAVEPOINTS 0-4

我修改了脚本如下,但它卡在

之前

for 循环后 > %mytempfile%

@echo on

set last=-1

set mytempfile=%TEMP%\%random%.out
%ORACLE%\bin\OracleDatabase.bat --dbtype=ORACLE --database=orca --hostname=test.ora.db --port=5645 --user=sa --password=***** --command=STATISTICS --statdata=SAVEPOINTS > %mytempfile%

for /f "tokens=1 delims=: " %%a in ('type %mytempfile% ^| find "status=3" ') do  set /a last=%%a
for /f "tokens=1 delims=: " %%a in ('type %mytempfile% ^| find "status=3" ') do (
if %last% neq %%a (
 %Oracle%\bin\OracleDatabase.bat --dbtype=ORACLE --database=orca --hostname=test.ora.db --port=5645 --user=sa --password=***** --command=DELETE_SAVEPOINTS %%a
)
) 

del /q %mytempfile%

【问题讨论】:

    标签: oracle shell batch-file scripting backup


    【解决方案1】:

    我不确定了解什么/何时要求删除保存点,但是..

    @echo off
    set "last=-1"
    for /f "tokens=1 delims=: " %%a in ('findstr /l /c:"status=3" safepoint.txt') do set /a "last=%%a-1"
    if %last% geq 0 (
        RunWhatEver --command=DELETE_SAVEPOINTS 0-%last%
    )
    

    它使用status=3 搜索最后一行并检索初始编号。如果大于或等于 0,则找到一行并调用脚本以删除从 0 到上次完整备份之前的保存点的任何内容

    【讨论】:

    • 不幸的是,脚本似乎没有运行RunWhatEver --command=DELETE_SAVEPOINTS 0 - %last% 命令
    • @Ahmetfam,显然runwhatever 应该替换为您的脚本。如果你已经这样做了,结果是什么?如果你在if ... 行之前放置一个echo %last%,它会向控制台回显什么?
    • 请再看一遍我的代码,也许你能明白为什么脚本在for循环之前就死掉了。
    • @Ahmetfam,你的OracleDatabase 是一个批处理文件。如果从一个批处理文件中直接调用另一个批处理文件,则执行将转移到被调用的批处理,并且不会返回给调用者。您需要使用call OracleDatabase.bat .... 在调用方上继续执行。
    • @Ahmetfam,以及,为什么是第二个 for 循环?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多