每次做数据库的冷备份,总是要查各种文件的路径,而后从各种路径下拷贝数据。过程繁琐,而且极有可能漏掉什么文件。时间久了,我就想,为何不自己做一个工具,让冷备份变得简单呢?
第一步,将查询各种文件的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%
-
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博客 ” ,链接:https://blog.itpub.net/31340387/viewspace-2119914/
,如需转载,请注明出处,否则将追究法律责任。