zoukankan      html  css  js  c++  java
  • Bat脚本学习-5:Oracle自动备份还原脚本

    搜了一下,原来是网上的脚本。。。

    http://www.tomcatapache.cn/arch/backup/30296915548053298606.html

    还是一段段去写注释和理解

    ::进入管理程序
    REM goto直接跳转
    REM %1表示bat的第一个参数,如xx.bat abc,其中abc就是%1
    if "%1"=="" goto init
    
    ::检查exp命令是否可用
    REM 冒号后面的,表示程序跳转点,配合goto用的
    :checkexp
    
    REM %XX%这种都是全局变量
    set resultFile=%temp%\%random%.txt
    
    REM 如果存在就删除,且不提示
    del %resultFile% /q>nul 2>nul
    
    REM 调用exp进行Oracle的备份,语法:exp 用户名/密码@数据库,并把结果写到resultFile
    exp a/a@a%random% file=%temp%\%random%.dmp >nul 2>%resultFile%
    
    REM 如果有提示无此命令,则显示相应错误提示并退出
    if exist %resultFile% (
      type %resultFile%|find "'exp' 不是内部或外部命令">nul
      if !errorlevel!==0 (
        del %resultFile%>nul
        echo exp命令不可用!程序即将退出!
        
        REM ping -n 10表示ping 10次,127.1表示127.0.0.1的缩写。
        REM 此处ping本机又不显示结果,其作用貌似是为了延迟几秒,便于显示文本?
        ping -n 10 127.1 >nul 2>nul
        exit
      )
      del %resultFile%>nul
    )
    
    ::1.数据库备份
    REM title是bat程序的标题栏,echo.表示换行
    title 备份进程
    echo.
    echo.
    echo 一、正在进行备份……
    for %%i in (1,2,3,4,5,6,7,8,9) do (
        set ora[%%i]>nul 2>nul&& (
            set ora_cur=
            
            REM 如果for in后面的是命令,则需要用英文后引号(即`这个符号)将其括起来
            for /f "usebackq delims==. tokens=1-3" %%a in (`set ora[%%i]`) do set ora_cur=%%b
            
            set ora_usr=
            set ora_net=
            for /f "delims=/" %%a in ('echo !ora_cur!') do set ora_usr=%%a
            for /f "delims=@ tokens=2" %%a in ('echo !ora_cur!') do set ora_net=%%a
            
            echo.
            echo.
            echo     %%i.正在备份 !ora_usr!/******@!ora_net!……
            md !bak_dir!!ora_net!__!ora_usr! >nul 2>nul
            
            REM %time: =0%可获取当前时间,格式:时:分:秒:毫秒,均为2位,不足补0
            set ftmr=!time: =0!
            set bak_cur_dir=!bak_dir!!ora_net!__!ora_usr!
            for /f "tokens=*" %%x in ("!bak_cur_dir!") do set bak_cur_dir=%%~fx
            
            REM 取年份:echo %date:~0,4% 
            REM 取月份:echo %date:~5,2% 
            REM 取日期:echo %date:~8,2% 
            REM 取星期:echo %date:~10,6% 
            REM 取小时:echo %time:~0,2% 
            REM 取分钟:echo %time:~3,2% 
            REM 取秒:echo %time:~6,2% 
            REM 取毫秒:echo %time:~9,2%
            
            REM %x:~m,n%  从第m个字符到第n个字符之间的字串,不包含第n个字符 m~n字符
            set bak_cur_fnm=!ora_net!__!ora_usr!__!date:~0,4!!date:~5,2!!date:~8,2!-!ftmr:~0,2!!ftmr:~3,2!
            set bakfile=!bak_cur_dir!!bak_cur_fnm!.dmp
            set logfile=!bak_cur_dir!!bak_cur_fnm!.log
            exp !ora_cur! file="!bakfile!" log="!logfile!"
            
            REM 使用>nul不在屏幕上输出,如果只是为了注释代码,此处echo改为REM比较好
            echo 如果备份成功的话,就进行压缩>nul
            if exist "!bakfile!" (
                REM pushd:保存当前目录以供 POPD 命令使用,然后改到指定的目录
                REM pushd c:就是记录下c盘,当你转去E盘后用popd就可以转回c盘
                pushd !bak_cur_dir!
                
                set zipfile=
                if exist "%ProgramFiles%winrarwinrar.exe" (
                    echo 使用WinRAR进行压缩>nul
                    set zipfile=!bak_cur_fnm!.rar
                    "%programfiles%winrarwinrar" a -r "!zipfile!" "!bak_cur_fnm!.dmp" "!bak_cur_fnm!.log"
                ) else (
                    echo 使用ZIP指令进行压缩>nul
                    set zipfile=!bak_cur_fnm!.zip
                    zip "!zipfile!" "!bak_cur_fnm!.dmp" "!bak_cur_fnm!.log">nul
                )
                if exist "!zipfile!" (
                    REM del 删除  
                    REM /P 删除每一个文件之前提示确认。  
                    REM /F 强制删除只读文件。  
                    REM /S 从所有子目录删除指定文件。  
                    REM /Q 安静模式。删除全局通配符时,不要求确认。  
                    REM /A 根据属性选择要删除的文件
                    del /q "!bakfile!"
                    del /q "!logfile!"
                )
                
                REM 与前面的pushd对应
                popd
            ) else (
                echo 如果不存在备份文件,但有日志文件,则删除日志文件>nul
                if exist "!logfile!" del /q "!logfile!"
            )
        )
    )
  • 相关阅读:
    win8系统下,python 2.7安装xlrd,xlutils和xlwt的方法
    phone number
    string to int
    Linux P2V Azure
    Azure IaaS 知识点小节
    Exchange端口列表
    自签名证书和私有CA签名的证书的区别 创建自签名证书 创建私有CA 证书类型 证书扩展名(转)
    Power BI REST API
    Web App 压力测试
    Azure IaaS限制
  • 原文地址:https://www.cnblogs.com/liuyouying/p/7144061.html
Copyright © 2011-2022 走看看