windows 下 用 dos 备份 oracle 数据库,并删除七天前的备份
程序员文章站
2022-03-11 14:18:49
...
本文参考了其他 dos 计算日期的指令,参考比较多所以没一一指明,若有相关作者看到需要注明出处,请联系我,我必改正,注明出处[联系方式在博文尾部];
备份【导出】
导入:
imp [USER_NAME]/[USER_PASSWORD]@[SERVICE_NAME] fromuser=[SOURCE_USER_NAME] touser=[TARGET_USER_NAME] file=[文件目录/文件名].dmp
--------------------------------------------------------------------
若有其他凝问或文中有错误,请及时向我指出,
我好及时改正,同时也让我们一起进步。
email : binary_space@126.com
qq : 1035862795
敲门砖: 代码谱写人生
备份【导出】
@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
敲门砖: 代码谱写人生
推荐阅读
-
Linux下通过脚本自动备份Oracle数据库并删除指定天数前的备份
-
Windows下通过FTP自动备份数据到服务器并删除指定天数前的备份
-
linux定时备份MySQL数据库并删除七天前的备份文件 (2014
-
Linux下自动备份Oracle数据库并删除指定天数前的备份
-
linux下备份MySQL数据库并删除7天前的备份数据_MySQL
-
Linux下通过脚本自动备份Oracle数据库并删除指定天数前的备份
-
Linux下自动备份Oracle数据库并删除指定天数前的备份
-
linux定时备份MySQL数据库并删除七天前的备份文件 (2014
-
Windows下通过FTP自动备份数据到服务器并删除指定天数前的备份
-
linux下备份MySQL数据库并删除7天前的备份数据_MySQL