冷备脚本:
脚本放在/u01/scripts/coldscr/mikecold.sql
在数据库运行时可以运行此脚本来冷备。
set feedback off
set heading off
set verify off
set trimspool off
set echo off
set time off
set timing off
set pagesize 0
set linesize 200
define dir='/backup/cold/mike';
define diroutmike='/u01/scripts/coldscr/mikecoldout.sql';
spool &diroutmike
select '!cp '||name||' &dir' from v$datafile order by file#;
select '!cp '||name||' &dir' from v$controlfile;
spool off;
shutdown immediate;
@&diroutmike
startup;
热备脚本:
脚本放在/u01/scripts/hotscr/mikehot.sql
在数据库运行时可以运行此脚本来热备。
set feedback off
set pagesize 0
set heading off
set verify off
set linesize 100
set trimspool on
set echo off
set time off
set timing off
undefine mikedir
undefine mikescp
define mikedir='/backup/hot'
define mikescp='/u01/scripts/hotscr/mikehotout.sql'
declare
cursor cur_tablespace is select tablespace_name from dba_tablespaces where status <> 'READ ONLY' a
nd contents not like '%TEMP%';
cursor cur_datafile(tn varchar2) is select file_name from dba_data_files where tablespace_name=tn;
begin
for ct in cur_tablespace loop
dbms_output.put_line('alter tablespace '||ct.tablespace_name||' begin backup;');
for cd in cur_datafile(ct.tablespace_name) loop
dbms_output.put_line('! cp '||cd.file_name||' &mikedir');
end loop;
dbms_output.put_line('alter tablespace '||ct.tablespace_name||' end backup;');
end loop;
end;
/
window版本
本代码包括以下两个文件。
主文件backup.bat,用来执行备份的批处理文件,配置好参数,直接运行即可。
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;