比较简单windows系统不用RMAN的oracle数据库热备脚本

来源:互联网 发布:一千零一夜淘宝视频 编辑:程序博客网 时间:2024/06/01 09:00
现在的ORACLE一般都采用RMAN进行备份,不过在8及以前一般都是DBA自己写的一些备份脚本。
这是一个比较简单的windows系统不用RMAN的oracle数据库热备脚本。仅供参考学习用。
本代码包括以下两个文件。
主文件backup.bat,用来执行备份的批处理文件,配置好参数,直接运行即可。
rem 作者:叶正盛(MKing),2008-06-25rem 设置ORACLE_SIDset ORACLE_SID=testdbrem 设置备份目录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.sqlrem 执行备份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.sqldeclare  --读取数据表空间  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;
原创粉丝点击