zoukankan      html  css  js  c++  java
  • Oracle数据库定时自动备份批处理代码(Windows)(转)

    第一部分,逻辑备份

    • 下面是:AutoBackup_Logic.bat --逻辑备份的主文件,直接在计划任务中调用就可以了。

    @echo off

    rem
    rem 需要配置的参数说明:
    rem BAT_HOME:即本批处理所在的目录;
    rem DUMP_DIR:即要备份到的数据文件目录,存在与数据字典表:dba_directories 中。
    rem

    set BAT_HOME=E:\BAT
    set DUMP_DIR=E:\Temp\DBBackup
    set BKFILE=%Date:~0,4%%Date:~5,2%%Date:~8,2%
    set HHMMSS=%time:~0,2%%time:~3,2%%time:~6,2%

    call %BAT_HOME%\LogicBackup.bat %DUMP_DIR% >%BAT_HOME%\LogicBackup_%BKFILE%%HHMMSS%.log

    echo Completed!

    • 下面是:LogicBackup.bat

    @echo off

    rem call LogicBackup.bat %DUMP_DIR%
    rem ==========================================================================================
    rem     本批处理实现支持expdp数据泵的Oracle数据库版本的数据库逻辑备份,流程为:导出数据到
    rem dump_dir 数据库目录下,然后把dmp文件以rar格式放入当天备份日期命名的目录下,便于以后按
    rem 照日期恢复。
    rem
    rem 需要配置的参数说明:
    rem BAT_HOME:即本批处理所在的目录;
    rem BKDIR:是调用本批处理时传进来的参数 dump_dir,即要备份到的数据文件目录。
    rem
    rem Author: Sanlavo
    rem Time: 2007-06-07
    rem ==========================================================================================
    rem


    echo 备份开始...
    echo 当前的时间是: %DATE% %time%

    set BAT_HOME=E:\BAT
    set BKDIR=%1
    set BKFILE=%Date:~0,4%%Date:~5,2%%Date:~8,2%
    set HHMMSS=%time:~0,2%%time:~3,2%%time:~6,2%

    expdp system/sys parfile=%BAT_HOME%\ScriptsLib\parfiletest.sql

    if not exist %BKDIR%\%BKFILE%_LOGIC (
    md %BKDIR%\%BKFILE%_LOGIC
    ) else (
    echo 目录 %BKDIR%\%BKFILE%_LOGIC 已经存在
    )

    echo 开始压缩文件...
    rar a %BKDIR%\%BKFILE%_LOGIC\%BKFILE%%HHMMSS%_LOGIC_FULL.rar %BKDIR%\*.dmp
    echo 压缩文件 %BKFILE%%HHMMSS%_LOGIC_FULL.rar 完成

    echo 开始移动文件...
    move %BKDIR%\*.dmp %BKDIR%\%BKFILE%_LOGIC\
    move %BKDIR%\*.log %BKDIR%\%BKFILE%_LOGIC\
    echo 移动文件完成

    echo 开始删除dmp文件...
    del /f /s /q %BKDIR%\%BKFILE%_LOGIC\*.dmp
    echo 删除dmp文件完成

    net send %userdomain% "数据库逻辑备份已于:%DATE% %time% 完成!"

    echo .
    echo 备份已于:%DATE% %time% 完成!
    echo .

    rem 移动批处理的日志文件到备份目录下面
    xcopy %BAT_HOME%\LogicBackup_%BKFILE%*.log %BKDIR%\%BKFILE%_LOGIC\
    echo Successfully Completed!

    • 下面是expdp的parfile参数的文件(parfiletest.sql)内容:

    directory=dump_dir
    dumpfile=DBBackup_Logic_%U.dmp
    logfile=DBBackup_Logic.log
    filesize=80M
    full=y
    job_name=EXP_DB_FULL

    到此,逻辑备份批处理完成,可以用命令来定时执行,例如:

    c:\>at 06:06 /every:S E:\BAT\AutoBackup_Logic.bat

    这样,逻辑备份将会在每周星期六凌晨六点六分执行。

    第二部分,冷备份:

    • 下面是:AutoBackup.bat --主文件

    @echo off

    set BAT_HOME=E:\BAT
    set DUMP_DIR=E:\Temp\DBBackup

    call ColdBackup.bat orcl %DUMP_DIR% >%BAT_HOME%\ColdBackup_%DATE:~0,10%.log

    pause

    • 下面是备份流程文件:ColdBackup.bat

    @echo off
    rem E:\BAT>ColdBackup.bat orcl E:\Temp\DBBackup
    rem
    rem==============================================
    rem 要备份的文件列表有:参数文件、控制文件、数据文件、重做日志文件
    rem
    rem 参数文件有:
    rem %ORACLE_HOME%\database\spfile<sid>.ora
    rem %ORACLE_HOME%\database\PWD<sid>.ora
    rem %ORACLE_HOME%\database\pfile<sid>.ora
    rem
    rem 控制文件:可以通过查询数据字典视图v$control 确认控制文件的位置和清单
    rem select status,name from v$controlfile;
    rem
    rem 数据文件:可以通过查询数据字典视图 dba_data_files 确定数据文件的位置和清单
    rem select status,file_name from dba_data_files;
    rem
    rem 重做日志文件:查询数据字典v$logfile可以确认联机重做日志文件的位置和清单
    rem select group#,status,member from v$logfile;
    rem Author: Sanlavo
    rem Time: 11:35 2007-5-31
    rem==============================================
    rem

    rem 请在这里配置好本批处理程序所放的路径BAT_HOME以及ORACLE_HOME:
    set ORACLE_HOME=D:\oracle\product\10.2.0\db_1
    set BAT_HOME=E:\BAT
    set BKFILE=%Date:~0,4%%Date:~5,2%%Date:~8,2%
    set HHMMSS=%time:~0,2%%time:~3,2%%time:~6,2%

    rem 数据库脱机
    call %BAT_HOME%\ShutdownDB.bat %1

    rem %1 为数据库<SID> %2为备份文件路径

    rem 创建备份目录
    if exist %2\%BKFILE%_DBBackup (
    echo %2\%BKFILE%_DBBackup 已经存在
    ) else (
    mkdir %2\%BKFILE%_DBBackup
    echo %2\%BKFILE%_DBBackup 已经创建
    )

    rem copy备份文件到备份目录中
    rem call xcopyfiles.bat %1 %2

    rem begin ==============================================
    echo 数据库 %1 冷备份开始...

    rem 备份 dbs 目录下参数文件
    xcopy %ORACLE_HOME%\dbs\*.* %2\%BKFILE%_DBBackup\dbs /S /I /C /Y /F

    rem 备份 %ORACLE_HOME%\database 目录下参数文件
    xcopy %ORACLE_HOME%\database\*.* %2\%BKFILE%_DBBackup\database /S /I /C /Y /EXCLUDE:ScriptsLib\databaseExclude.lst /F

    rem 备份数据库控制文件、数据文件、重做日志文件
    rem 创建数据库<SID>命名的文件夹,存放相关文件
    if not exist %2\%BKFILE%_DBBackup\%1 (
    md %2\%BKFILE%_DBBackup\%1
    )
    rem 从filepath.txt中读取文件路径信息并copy到目标路径
    for /f %%i in (%BAT_HOME%\ScriptsLib\filepath.txt)  do (
    xcopy %%i %2\%BKFILE%_DBBackup\%1 /S /I /C /Y /F
    )

    echo 数据库 %1 冷备份完成!
    rem end ==============================================

    echo 启动数据库
    rem 上面的操作过程中以及修改了环境路径,所以掉不到该批处理文件
    %BAT_HOME:~0,2%
    cd %BAT_HOME%
    call %BAT_HOME%\StartupDB.bat %1

    :Operation

    :End

    rem if exist *.dmp (
    rem move *.dmp %BKFILE%_DBBackup & goto End1
    rem echo Move dump file successfull
    rem )else (
    rem echo 不存在数据库备份文件 & goto End1
    rem )

    rem End
    rem :: 把日期目录下的文件移动到当前目录
    rem :: move %BKFILE%_DBBackup\*.bat

    rem :End1
    rem echo *
    rem echo Operation Successfully
    rem echo *

    pause

    • 上文中的:databaseExclude.lst 内容如下:

    .log
    .exe

    即,排除日志文件和exe文件,其他的全部备份。

    • 上文中的:filepath.txt

    内容是经过数据字典查询后得到的比如控制文件、数据文件、日志文件等的路径列表,例如:

    D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL01.CTL
    D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL02.CTL
    D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL03.CTL
    D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
    D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
    D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
    D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
    D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF
    D:\SDEDB.DBF
    E:\SDEDB\SDE_DATA01.DBF
    E:\SDEDB\SDE_INDEX01.DBF
    D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\WJ01.DBF
    D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01.LOG
    D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG
    D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03.LOG

    ...

    在冷备份中涉及到数据库的关闭和启动,这里不在罗索了。关于冷备份的执行,也可以模仿逻辑备份部分,在计划任务中调用。

    (完)

  • 相关阅读:
    ODI Scenario 场景
    数据库权限管理
    Oracle KEEP 分析函数
    Oracle数据仓库套件
    复杂透视表的SQL生成方法
    DW/BI领域的自动化调度方案
    用户画像
    PCP
    理赔系统报表及表模型
    maltab 关于输入输出以及自定义函数的问题
  • 原文地址:https://www.cnblogs.com/wangbin/p/1435308.html
Copyright © 2011-2022 走看看