现在的ORACLE一般都采用RMAN进行备份,不过在8及以前一般都是DBA自己写的一些备份脚本。
这是一个比较简单的windows系统不用RMAN的oracle数据库冷备脚本。仅供参考学习用。
本代码包括以下两个文件。
主文件backup.bat,用来执行备份的批处理文件,配置好参数,直接运行即可。
rem 作者:叶正盛(MKing),2008-06-27
rem 设置ORACLE_SID
set ORACLE_SID=testdb
rem 设置备份目录
set backup_dest_path=H:/oracle/oradata/testdbbackup/
rem 创建备份的SQLPLUS脚本到mybackup.sql文件
sqlplus /nolog @createscript.sql
rem 执行数据库备份
sqlplus /nolog @mybackup.sql %backup_dest_path%
生成备份脚本文件createscript.sql
connect / as SYSDBA
--关闭屏幕输出
set term off;
--关闭输出列头信息
set heading off;
--设置行长度
set linesize 100;
--关闭输出统计行数信息
set feedback off;
--关闭变量扫描
SET SCAN off;
--关闭变量定义
SET DEFINE off;
--打开输出
SET SERVEROUTPUT ON SIZE 100000;
spool off
--将生成的脚本输出到mybackup.sql文件
spool mybackup.sql
declare
--读取数据文件
cursor cur_datafile is
select * from v$datafile;
--读取临时文件
cursor cur_tempfile is
select * from v$tempfile;
--读取控制文件
cursor cur_controlfile is
select * from v$controlfile;
--读取重做日志文件
cursor cur_redofile is
select * from v$logfile;
begin
--输出连接数据库命令
dbms_output.put_line('connect / as SYSDBA;');
--输出备份spfile文件命令
dbms_output.put_line('create pfile=''&1/pfile.ora'' from spfile;');
--输出关闭数据库命令
dbms_output.put_line('shutdown immediate;');
for rec_datafile in cur_datafile loop
--输出操作系统复制数据文件命令
dbms_output.put_line('host copy /Y "'||rec_datafile.name||'" "&1";');
end loop;
for rec_tempfile in cur_tempfile loop
--输出操作系统复制临时文件命令
dbms_output.put_line('host copy /Y "'||rec_tempfile.name||'" "&1";');
end loop;
for rec_controlfile in cur_controlfile loop
--输出操作系统复制控制文件命令
dbms_output.put_line('host copy /Y "'||rec_controlfile.name||'" "&1";');
end loop;
for rec_redofile in cur_redofile loop
--输出备份重做日志文件命令
dbms_output.put_line('host copy /Y "'||rec_redofile.member||'" "&1";');
end loop;
--输出启动数据库命令
dbms_output.put_line('startup;');
--输出退出sqlplus命令
dbms_output.put_line('exit;');
end;
/
spool off
exit;