当前位置:首页 > 开发 > 数据库 > 正文

windows 下 用 dos 备份 oracle 数据库,并删除七天前的备份

发表于: 2015-04-17   作者:征客丶   来源:转载   浏览次数:
摘要: 本文参考了其他 dos 计算日期的指令,参考比较多所以没一一指明,若有相关作者看到需要注明出处,请联系我,我必改正,注明出处[联系方式在博文尾部]; 备份【导出】 @echo off setlocal enabledelayedexpansion ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
本文参考了其他 dos 计算日期的指令,参考比较多所以没一一指明,若有相关作者看到需要注明出处,请联系我,我必改正,注明出处[联系方式在博文尾部];

备份【导出】
@echo off
setlocal enabledelayedexpansion

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
echo.
echo 取当前时间戳;
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: 按所需格式拼接日期
set u_yyyy=%date:~0,4%
set u_mm=%date:~5,2%
set u_dd=%date:~8,2%
set u_date=%u_yyyy%-%u_mm%-%u_dd%

:: 按所需格式拼接日间
set u_hh=%time:~0,2%
set u_MM=%time:~3,2%
set u_ssff=%time:~6,5%
set u_time=%u_hh%.%u_MM%.%u_ssff%

:: 拼接时间戳,并把空格换成0【24 小时制,上午10点前,会出现空格】
set u_timestamp=%u_date%-%u_time%
set u_timestamp=%u_timestamp: =0%
echo %u_timestamp%
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
echo.
echo 计算 days 天前或 days 天后的日期;
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

:: 正数:days 天前的日期;负数:days 天后的日期;
set days=17

rem program 'begin' 开始
:begin
:: 判断操作系统
ver | find /i "5.0" > nul && goto 2k || goto xp

rem program 'xp';xp 系统
:xp
for /f "tokens=1-3 delims=-/. " %%i in ("%date%") do ( 
  set /a yy=%%i, mm=%%j, dd=%%k 
) 
goto nornal

rem program '2k';2k 系统
:2k
for /f "tokens=2-4 delims=-/. " %%i in ("%date%") do ( 
  set /a yy=%%i, mm=%%j, dd=%%k 
)
goto nornal

rem program 'nornal';计算日期
:nornal
:: echo %yy%-%mm%-%dd%;算出%yy%是否是闰年
set /a leap="^!(%yy% %% 4) & ^!(^!(%yy% %% 100)) | ^!(%yy% %% 400)"

:: 计算日期相差的天数
set /a nd=!dd!-!days!

:: echo [nd]=%nd%  计算当月的天数
set /a num=0, mday=0, max=28+leap
set str=31 %max% 31 30 31 30 31 31 30 31 30 31
for %%i in (%str%) do ( 
  set /a num+=1 
  if !num! equ !mm! set /a mday=%%i 
)

::echo yy=%yy% mm=%mm% dd=%dd% nd=%nd% mday=%mday% leap=%leap%; 如果小于等于0则转到xiaoyu块处理
if !nd! leq 0 goto xiaoyu
:: 如果大于当月天数则转到dayu块处理
if !nd! gtr !mday! goto dayu 

set nm=%mm%
goto println

rem program 'dayu' 处理日期相差天数大于当月天数的情况
:dayu
set /a nm=!mm!+1
set /a nd=!nd!-!mday!
if !nm! gtr 12 (
  set /a yy=!yy!+1
  set /a nm-=12
)
set /a leap="^!(%yy% %% 4) & ^!(^!(%yy% %% 100)) | ^!(%yy% %% 400)"
set /a num=0, mday=0, max=28+leap
set str=31 %max% 31 30 31 30 31 31 30 31 30 31
for %%i in (%str%) do ( 
  set /a num+=1 
  if !num! equ !nm! set /a mday=%%i 
)
set mm=%nm%

::echo yy=%yy% mm=%mm% nd=%nd% mday=%mday% leap=%leap%

if !nd! gtr !mday! goto dayu
goto println

rem program 'xiaoyu' 处理日期相差天数小于等于0的情况
:xiaoyu
set /a nm=!mm!-1
if !nm! lss 1 (
  set /a yy=!yy!-1
  set /a nm+=12
)
set /a leap="^!(%yy% %% 4) & ^!(^!(%yy% %% 100)) | ^!(%yy% %% 400)"
set /a num=0, mday=0, max=28+leap
set str=31 %max% 31 30 31 30 31 31 30 31 30 31
for %%i in (%str%) do ( 
  set /a num+=1 
  if !num! equ !nm! set /a mday=%%i 
)
set /a nd=!mday!+!nd!
set mm=%nm%

::echo yy=%yy% mm=%mm% nd=%nd% mday=%mday% leap=%leap%

if !nd! leq 0 goto xiaoyu
goto println

rem program 'println' 输出
:println
set mm=0%nm%
set dd=0%nd%
set mm=%mm:~-2%
set dd=%dd:~-2%

::按所需格式拼接日期
set calc_date=%yy%-%mm%-%dd%
set u_calc_date=%calc_date: =0%
echo %u_calc_date%
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
echo.
echo oracl 按用户导出,备份;
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

:: 导出文件目录
set file_dir=[file_dir]
:: 备份文件目录
set backup_dir=\\[共享文件夹ip]\[backup_dir]

:: 导出文件名【只取计算出的时间戳,按用户导出时,在导出语句中加上用户名做前缀,以免导出多个用户的数据时,文件名重复导致数据文件被覆盖】
set fileName=%u_timestamp%
:: 删除大史文件名【只取计算出的日期,删除时按文件名模糊匹配】
set delete_fileName=%u_calc_date%

:: oracle 导出语句,如果要备份其他用户,加上导出语句就可以,注意文件名前加上用户前缀就可以,其他不需要修改。
exp  [USERNAME]/[USERPASSWORD]@[SERVER_NAME] owner=[USERNAME] file=%file_dir%\[USERNAME]_%fileName%.dmp log=%file_dir%\logs\[USERNAME]_%fileName%.log

:: 复制文件到备份目录,包括日志文件
copy /B %file_dir%\*%fileName%*.dmp       %backup_dir%
copy /B %file_dir%\logs\*%fileName%*.log  %backup_dir%\logs

:: 删除 days 天前的数据文件;【备份目录与导出文件的目录都删除】
del /Q /F %file_dir%\*%delete_fileName%-*
del /Q /F %file_dir%\logs\*%delete_fileName%-*
del /Q /F %backup_dir%\*%delete_fileName%-*
del /Q /F %backup_dir%\logs\*%delete_fileName%-*

echo.
echo 备份完成
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
echo.
pause.



导入:
imp [USER_NAME]/[USER_PASSWORD]@[SERVICE_NAME] fromuser=[SOURCE_USER_NAME]  touser=[TARGET_USER_NAME] file=[文件目录/文件名].dmp



--------------------------------------------------------------------
若有其他凝问或文中有错误,请及时向我指出,
我好及时改正,同时也让我们一起进步。
email : binary_space@126.com
qq     : 1035862795
敲门砖: 代码谱写人生




windows 下 用 dos 备份 oracle 数据库,并删除七天前的备份

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
windows下,oracle的自动备份(导出) 准备工作: 1。编写脚本。 Oracle自动导出脚本(WINDOWS下的,
用到了IMP EXP 分区 回滚段 1.有一个表存放每天的进销存业务 2.另外两张分别存放每天的销售流水 将
说明: MySQL数据库安装目录:C:\Program Files\MySQL\MySQL Server 5.0 MySQL数据库存放目录:C:\P
说明: MySQL数据库安装目录:C:\Program Files\MySQL\MySQL Server 5.0 MySQL数据库存放目录:C:\P
上个月做的报表 记下这个SQL文,以后还要用。 select a.chldate, nvl(a.Num_Assign, 0) tot_dis, --
说明: 我这里要把MySQL数据库存放目录/var/lib/mysql下面的pw85数据库备份到/home/mysql_data里面,
  有时数据没有实时备份恢复那么高的安全性需求,但每天 ,或者定期备份表结构 和数据依旧是很有
经常看到有“高手”动不动就喜欢打开CMD命令提示符窗口,然后输入一堆命令,让人看的眼花缭乱,其实
数据库备份的命令及方法汇总(oracle备份) oracle数据库: 1):命令行备份: 1 将数据库TEST完全
1: 用sys/orcl登陆: 2:创建用户(PLSQL Developer) : create tablespace tianbao datafile 'F:\ap
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号