简单的oracle备份恢复批处理文件 -- 转

建议一: 

利用任务计划、批处理文件和ORACLE的EXP导出功能,可以根据日期自动生成ORACLE备份文件,大大方便了ORACLE数据备份。: 
1、建立批处理文件backup.bat\. 
exp system/manager file=d:\backup\oracle\oracle%date:~0,10%.dmp owner=system log=d:\backup\oracle\oracle%date:~0,10%.log 
将生成oracle2006-01-09.dmp文件 
exp system/manager file=d:\backup\oracle\oracle%date:~11,3%.dmp owner=system log=d:\backup\oracle\oracle%date:~11,3%.log 
将生成oracle星期一.dmp文件,则每周循环保留一个备份文件,共7个备份文件循环 
2、添加一个任务计划 
利用任务计划向导,根据备份策略设置自动执行任务的时间频率(例如每天零时),执行d:\oracle\backup.bat 
3、以后每天将在目录中生成形如“oracle2005-08-31.dmp和oracle2005-08-31.log”的备份和日志文件。 
说明: 
1、%date%的值在不同的系统、语言版本下可能是不一样的,控制面板里面区域选项的设定也会改变%date%的值。请先在命令行中测试 echo %date% 的返回值。%date:~4,10% 是返回日期函数,~后的第一个参数是要截取的起始位置(从0开始),第二个参数是要截取的长度,如没有则是截取到最后,参数可酌情修改。 

C:\>echo %date:~-3% 
星期三 
这里面的负数代表倒数,也就取最后3个字符 
C:\>echo %date:~-3,-1% 
星期 
这里的-1是不输出最后1个字符-2当然是2个类推
 
2、如需要准确的时间做为文件名,请用%time%函数,参数同上。 


rem CODE BY t0nsha 
rem 关于提取date,time输出结果的一个批处理 
rem “:”(冒号)和“~”波浪号必不可少! 
rem “~”后的数字:为正数表示舍弃输出结果的前几位;直接跟负数表示取到输出结果的后第几位。 
rem “,”后的数字:为正数表示取到输出结果的前第几位;为负数表示舍弃输出结果的后几位。 
rem %date:~begin,length%echo %date% 
echo %date:~4% 
::下行表示舍弃前0位,取到第10位(即取输出结果的前10位) 
echo %date:~0,10% 
echo %date:~4,-5% 
pause 
echo %time% 
echo %time:~-3% 
echo %time:~2,-3% 
pause 
echo %date:~4% %time:~0,-3% 
pause 


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/larntin2002/archive/2009/08/14/4446611.aspx 
建议二: 

@echo off 
set filename=e:\data_bak\%date:~8,2%日 
exp userid=user/pass@esdata file=%filename%.dmp owner=user INDEXES=y grants=y constraints=y compress=y log=%filename%.log 
rar a %filename%.rar %filename%.* 
del %filename%.dmp 
del %filename%.log 
放计划任务里面定时执行, 
文件名以日期的day部分来命名 
备份后调用rar进行压缩 
这样可以保存一个月的历史数据 
注意:需要把program files/winrar目录下的rar.exe拷贝到系统system32目录下 
如果是以星期命名,则需要将set filename=e:\data_bak\%date:~8,2%日修改为 
set filename=e:\data_bak\%date:~0,3% 

建议三: 

以下为ORACLE 自动备份批处理文件内容,请配合任务计划实现 

@ECHO OFF 
SET BACKPATH=d:\ 
ECHO 准备备份数据库 
REM 7天一个循环 
IF EXIST %BACKPATH%\ONE GOTO ONE 
IF EXIST %BACKPATH%\TWO GOTO TWO 
IF EXIST %BACKPATH%\THREE GOTO THREE 
IF EXIST %BACKPATH%\FOUR GOTO FOUR 
IF EXIST %BACKPATH%\FIVE GOTO FIVE 
IF EXIST %BACKPATH%\SIX GOTO SIX 
IF EXIST %BACKPATH%\SEVEN GOTO SEVEN 
ECHO E > %BACKPATH%\ONE 

:ONE 
SET BACKPATH_FULL=%BACKPATH%\ONE 
REN %BACKPATH%\ONE TWO 
GOTO BACK 
:TWO 
SET BACKPATH_FULL=%BACKPATH%\TWO 
REN %BACKPATH%\TWO THREE 
GOTO BACK 
:THREE 
SET BACKPATH_FULL=%BACKPATH%\THREE 
REN %BACKPATH%\THREE FOUR 
GOTO BACK 
:FOUR 
SET BACKPATH_FULL=%BACKPATH%\FOUR 
REN %BACKPATH%\FOUR FIVE 
GOTO BACK 
:FIVE 
SET BACKPATH_FULL=%BACKPATH%\FIVE 
REN %BACKPATH%\FIVE SIX 
GOTO BACK 
:SIX 
SET BACKPATH_FULL=%BACKPATH%\SIX 
REN %BACKPATH%\SIX SEVEN 
GOTO BACK 
:SEVEN 
SET BACKPATH_FULL=%BACKPATH%\SEVEN 
REN %BACKPATH%\SEVEN ONE 
GOTO BACK 
:BACK 
EXP TESTUSER/TEST FILE=%BACKPATH_FULL%.DMP 
SET BACKPATH= 
SET BACKPATH_FULL= 
EXIT 

建议四: 

RMAN TARGET=RMAN/RMAN@ORCL < C:\RMAN.TXT 

建议五: 

在文本里编辑cmd命令。然后保存成bat文件。在windows中定义任务计划,就 
可以自动执行了。 
例: 

   编辑文本文件 
   del c:\exp\*.dmp 
   exp userid=cw/cw@db file='c:\exp\*.dmp' tables=(student) 
保存成bat文件 

建议六: 

写个简单的批处理文件备份恢复: 
备份: 
@echo off                        不显示命令行 

echo 开始备份表.....                       打印信息                
D:                                                                      DOS切换到D: 盘 
cd oracle\ora92\bin                          切换到cd oracle\ora92\bin目录 
exp 用户名/密码@数据库 file=d:\config_bak.dmp tables=(table1,table2)      备份表一表二到d:\config_bak.dmp 
echo 备份完毕! 

恢复: 
@echo off            

echo 开始恢复表.....                      
D: 
cd oracle\ora92\bin 
imp 用户名/密码@数据库 file=d:\config_bak.dmp tables=(table1,table2) ignore=y   
sqlplus /nolog @oraStartup.sql>>oraStartup.log 调用sql文件 
pause                                                                 执行完sql文件以后暂停,看信息 
echo 恢复完毕! 

编写oraStartup.sql 
conn 用户名/密码@数据库 as sysdba 
select * from table1; 
quit; 

       


执行环境:可以在SQLPLUS.EXE或者DOS(命令行)中执行, 
DOS中可以执行时由于 在oracle 8i 中 安装目录\ora81\BIN被设置为全局路径, 
该目录下有EXP.EXE与IMP.EXE文件被用来执行导入导出。 
oracle用java编写,我想SQLPLUS.EXE、EXP.EXE、IMP.EXE这俩个文件是被包装后的类文件。 
SQLPLUS.EXE调用EXP.EXE、IMP.EXE他们所包裹的类,完成导入导出功能。 

  下面介绍的是导入导出的实例,向导入导出看实例基本上就可以完成,因为导入导出很简单。 
数据导出: 
1 将数据库TEST完全导出,用户名system 密码manager 导出到D:\daochu.dmp中 
exp system/manager@TEST file=d:\daochu.dmp full=y 
2 将数据库中system用户与sys用户的表导出 
exp system/manager@TEST file=d:\daochu.dmp owner=(system,sys) 
3 将数据库中的表table1 、table2导出 
exp system/manager@TEST file=d:\daochu.dmp tables=(table1,table2) 
4 将数据库中的表table1中的字段filed1以"00"打头的数据导出 
exp system/manager@TEST file=d:\daochu.dmp tables=(table1) query=\" where filed1 like '00%'\" 

上面是常用的导出,对于压缩我不太在意,用winzip把dmp文件可以很好的压缩。 
不过在上面命令后面 加上 compress=y 就可以了 

  数据的导入 
1 将D:\daochu.dmp 中的数据导入 TEST数据库中。 
imp system/manager@TEST file=d:\daochu.dmp 
上面可能有点问题,因为有的表已经存在,然后它就报错,对该表就不进行导入。 
在后面加上 ignore=y 就可以了。 
2 将d:\daochu.dmp中的表table1 导入 
imp system/manager@TEST file=d:\daochu.dmp tables=(table1) 

 导入 
基本上上面的导入导出够用了。不少情况我是将表彻底删除,然后导入。 



原文地址:http://www.cnblogs.com/huhu456/archive/2009/05/09/1453443.html 

http://hi.baidu.com/tylzyoudi/blog/item/bdd80a13c3399f856438db72.html

猜你喜欢

转载自hunaifei2008.iteye.com/blog/1754550