每次做数据库的冷备份,总是要查各种文件的路径,而后从各种路径下拷贝数据。过程繁琐,而且极有可能漏掉什么文件。时间久了,我就想,为何不自己做一个工具,让冷备份变得简单呢?
第一步,将查询各种文件的SQL以及生成拷贝命令的SQL写到一个.sql文件中,命名为sql.sql
点击(此处)折叠或打开
- shutdown immediate;
- startup mount;
- set echo off;
- set heading off;
- set feedback off;
- set pagesize 0;
- set linesize 150;
- set termout off;
- create pfile from spfile;
- column mb new_val mb
- column case new_val elapse
- 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
- (select round(sum(mb)) mb,round(sum(mb))/&3 seconds from (
- 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
- union select bytes/1024/1024 mb from v$tempfile));
- host echo 数据库总大小为: &mb Mb
- host echo 预计备份时间为(平均拷贝速度="&3"M): &elapse
- spool &2\command.bat;
- 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 ;
- spool off;
- host "echo copy &4\database\init"&5".ora &1" > command2.bat
- spool &1\rename2.sql;
- 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 ;
- spoo off;
- shutdown immediate;
- exit;
第二步,写一个批处理程序,执行第一步中生成的拷贝命令。批处理程序命名为backup.bat
点击(此处)折叠或打开
- @echo off
- set PWD=%~dp0
- echo -----------------------------------------------------------
- echo 请输入数据库实例名
- set /p ORACLE_SID=实例名:
- echo 请输入备份目录
- set /p DIR=备份目录:
- echo 请输入磁盘平均拷贝速度(用于预估备份时间)
- set SPEED=50
- set /p SPEED=平均拷贝速度(单位为M,默认为50。直接回车即为50):
- if defined ORACLE_HOME (echo 当前环境变量ORACLE_HOME=%ORACLE_HOME%) else (
- echo 请输入ORACLE_HOME值:
- set /p ORACLE_HOME=ORACLE_HOME=:
- )
19.
20. set PATH=%ORACLE_HOME%\bin;%PATH%
20. set PATH=%ORACLE_HOME%\bin;%PATH%
- sqlplus / as sysdba @%PWD%sql.sql %DIR% %PWD% %SPEED% %ORACLE_HOME% %ORACLE_SID%
- find /I "copy " command.bat | find "copy" >> command2.bat
- find /I "alter" %DIR%\rename2.sql | find "alter" > %DIR%\rename.sql
- echo 当前时间为: %time%
- call command2.bat 2>%DIR%\error.log
- del /Q command.bat
- del /Q command2.bat
- del /Q %DIR%\rename2.sql
- echo 已成功完成
- 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/