ORACLE一键冷备份工具


每次做数据库的冷备份,总是要查各种文件的路径,而后从各种路径下拷贝数据。过程繁琐,而且极有可能漏掉什么文件。时间久了,我就想,为何不自己做一个工具,让冷备份变得简单呢?

第一步,将查询各种文件的SQL以及生成拷贝命令的SQL写到一个.sql文件中,命名为sql.sql

点击(此处)折叠或打开

  1. shutdown immediate;
  2. startup mount;
  3. set echo off;
  4. set heading off;
  5. set feedback off;
  6. set pagesize 0;
  7. set linesize 150;
  8. set termout off;
  9. create pfile from spfile;
  10. column mb new_val mb
  11. column case new_val elapse
  12. select mb,case when seconds < 60 then ceil(seconds)||'s' when seconds between 60 and 3600 then round(seconds/60) ||'m' when seconds >3600 then round(seconds/60/60,1)||'h' end case from
  13. (select round(sum(mb)) mb,round(sum(mb))/&3 seconds from (
  14. select bytes/1024/1024 mb from v$datafile union select bytes/1024/1024 mb from v$log union select block_size*file_size_blks/1024/1024 mb from v$controlfile
  15. union select bytes/1024/1024 mb from v$tempfile));
  16. host echo 数据库总大小为: &mb Mb
  17. host echo 预计备份时间为(平均拷贝速度="&3"M): &elapse
  18. spool &2\command.bat;
  19. select command||' '||name||' &1' from (select decode(substr(name,1,1),'/','cp','copy') command from v$datafile where rownum=1) a ,(select name from v$datafile union select member from v$logfile union select name from v$controlfile union select name from v$tempfile) b ;
  20. spool off;
  21. host "echo copy &4\database\init"&5".ora &1" > command2.bat
  22. spool &1\rename2.sql;
  23. select lower('ALTER database rename file '''||name||''' to ''&1\'||substr(name,instr(name,'\',-1)+1)||''';') from (select decode(substr(name,1,1),'/','cp','copy') command from v$datafile where rownum=1) a ,(select name from v$datafile union select member from v$logfile union select name from v$controlfile union select name from v$tempfile) b ;
  24. spoo off;
  25. shutdown immediate;
  26. exit;

第二步,写一个批处理程序,执行第一步中生成的拷贝命令。批处理程序命名为backup.bat

点击(此处)折叠或打开

  1. @echo off
  2. set PWD=%~dp0
  3. echo -----------------------------------------------------------
  4. echo 请输入数据库实例名
  5. set /p ORACLE_SID=实例名:
  6. echo 请输入备份目录
  7. set /p DIR=备份目录:
  8. echo 请输入磁盘平均拷贝速度(用于预估备份时间)
  9. set SPEED=50
  10. set /p SPEED=平均拷贝速度(单位为M,默认为50。直接回车即为50):
  11. if defined ORACLE_HOME (echo 当前环境变量ORACLE_HOME=%ORACLE_HOME%) else (
  12. echo 请输入ORACLE_HOME值:
  13. set /p ORACLE_HOME=ORACLE_HOME=:
  14. )
  19.
  20.  set PATH=%ORACLE_HOME%\bin;%PATH%
  1. sqlplus / as sysdba @%PWD%sql.sql %DIR% %PWD% %SPEED% %ORACLE_HOME% %ORACLE_SID%
  2. find /I "copy " command.bat | find "copy" >> command2.bat
  3. find /I "alter" %DIR%\rename2.sql | find "alter" > %DIR%\rename.sql
  4. echo 当前时间为: %time%
  5. call command2.bat 2>%DIR%\error.log
  6. del /Q command.bat
  7. del /Q command2.bat
  8. del /Q %DIR%\rename2.sql
  9. echo 已成功完成
  10. pause

第三步,双击.bat按照提示输入相关参数,即可开始冷备份,备份之前会预算冷备份的总耗时,并生成调整数据文件路径的SQL脚本(可视情况选择执行)。

使用说明:

双击backup.bat,填写实例名和备份目录,本工具会自动备份需要备份的文件(包括参数文件、控制文件、数据文件、日志文件、临时文件)。

执行完毕后会生成error.log、rename.sql两个文件。error.log是执行过程中的错误日志,rename.sql是用于改变数据文件名称的SQL文件。

注意:
1、backup.bat文件所在的目录不能有空格,因此该批处理文件不能从桌面启动
2、ORACLE_HOME是指ORACLE服务器端的安装目录,一般为路径类似于:
D:\app\administrator\product\11.2.0\dbhome_2

工具下载:
http://pan.baidu.com/s/1geCexsZ


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31340387/viewspace-2119914/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/31340387/viewspace-2119914/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值