现在的ORACLE一般都采用RMAN进行备份,不过在8及以前一般都是DBA自己写的一些备份脚本。
这是一个比较简单的windows系统不用RMAN的oracle数据库热备脚本。仅供参考学习用。
本代码包括以下两个文件。
主文件backup.bat,用来执行备份的批处理文件,配置好参数,直接运行即可。
rem 作者:叶正盛(MKing),2008-06-25
rem 设置ORACLE_SID
set ORACLE_SID=testdb
rem 设置备份目录
set backup_dest_path=H:/oracle/oradata/testdbbackup/
rem 设置归档日志目录
set archive_dest_path=H:/oracle/oradata/testdb/archive/
rem 创建备份的SQLPLUS脚本到mybackup.sql文件
sqlplus /nolog @createscript.sql
rem 执行备份
sqlplus /nolog @mybackup.sql %backup_dest_path% %archive_dest_path%
生成备份脚本文件createscript.sql
connect / as SYSDBA
--关闭屏幕输出
set term off;
--关闭输出列头信息
set heading off;
--设置行长度
set linesize 500;
--关闭输出统计行数信息
set feedback off;
--关闭变量扫描
SET SCAN off;
--打开输出
SET SERVEROUTPUT ON SIZE 100000;
spool off
--将生成的脚本输出到mybackup.sql文件
spool mybackup.sql
declare
--读取数据表空间
cursor cur_tbs is
select distinct b.*
from v$datafile a, v$tablespace b
where a.TS# = b.TS#;
--读取表空间数据文件
cursor cur_datafile(iTS integer) is
select * from v$datafile a where a.TS# = iTS;
--读取控制文件
cursor cur_controlfile is
select * from v$controlfile;
--读取重做日志文件
cursor cur_redofile is
select * from v$logfile;
begin
--输出连接数据库命令
dbms_output.put_line('connect / as SYSDBA;');
for rec_tbs in cur_tbs loop
--输出开始备份表空间命令
dbms_output.put_line('alter tablespace ' || rec_tbs.name ||' begin backup;');
for rec_datafile in cur_datafile(rec_tbs.ts#) loop
--输出操作系统复制数据文件命令
dbms_output.put_line('host copy /Y "'||rec_datafile.name||'" "&1";');
end loop;
--输出结束备份表空间命令
dbms_output.put_line('alter tablespace ' || rec_tbs.name || ' end backup;');
end loop;
for rec_controlfile in cur_controlfile loop
--输出操作系统复制控制文件命令
dbms_output.put_line('host copy /Y "'||rec_controlfile.name||'" "&1";');
end loop;
--输出切换日志命令
dbms_output.put_line('alter system archive log current;');
--输出备份归档日志文件命令
dbms_output.put_line('host move /Y "&2*.*" "&1";');
for rec_redofile in cur_redofile loop
--输出备份重做日志文件命令
dbms_output.put_line('host copy /Y "'||rec_redofile.member||'" "&1";');
end loop;
--输出退出sqlplus命令
dbms_output.put_line('exit;');
end;
/
spool off
exit;