现在的ORACLE一般都采用RMAN进行备份,不过在8及以前一般都是DBA自己写的一些备份脚本。
这是一个比较简单的windows系统不用RMAN的oracle数据库热备脚本。仅供参考学习用。
 
本代码包括以下两个文件。
 
主文件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 
  1 connect / as SYSDBA  
2
3 --关闭屏幕输出
4
5 set term off;
6
7 --关闭输出列头信息
8
9 set heading off;
10
11 --设置行长度
12
13 set linesize 500;
14
15 --关闭输出统计行数信息
16
17 set feedback off;
18
19 --关闭变量扫描
20
21 SET SCAN off;
22
23 --打开输出
24
25 SET SERVEROUTPUT ON SIZE 100000;
26
27 spool off
28
29 --将生成的脚本输出到mybackup.sql文件
30
31 spool mybackup.sql
32
33 declare
34
35 --读取数据表空间
36
37 cursor cur_tbs is
38
39 select distinct b.*
40
41 from v$datafile a, v$tablespace b
42
43 where a.TS# = b.TS#;
44
45 --读取表空间数据文件
46
47 cursor cur_datafile(iTS integer) is
48
49 select * from v$datafile a where a.TS# = iTS;
50
51 --读取控制文件
52
53 cursor cur_controlfile is
54
55 select * from v$controlfile;
56
57 --读取重做日志文件
58
59 cursor cur_redofile is
60
61 select * from v$logfile;
62
63 begin
64
65 --输出连接数据库命令
66
67 dbms_output.put_line('connect / as SYSDBA;');
68
69 for rec_tbs in cur_tbs loop
70
71 --输出开始备份表空间命令
72
73 dbms_output.put_line('alter tablespace ' || rec_tbs.name ||' begin backup;');
74
75 for rec_datafile in cur_datafile(rec_tbs.ts#) loop
76
77 --输出操作系统复制数据文件命令
78
79 dbms_output.put_line('host copy /Y "'||rec_datafile.name||'" "&1";');
80
81 end loop;
82
83 --输出结束备份表空间命令
84
85 dbms_output.put_line('alter tablespace ' || rec_tbs.name || ' end backup;');
86
87 end loop;
88
89 for rec_controlfile in cur_controlfile loop
90
91 --输出操作系统复制控制文件命令
92
93 dbms_output.put_line('host copy /Y "'||rec_controlfile.name||'" "&1";');
94
95 end loop;
96
97 --输出切换日志命令
98
99 dbms_output.put_line('alter system archive log current;');
100
101 --输出备份归档日志文件命令
102
103 dbms_output.put_line('host move /Y "&2*.*" "&1";');
104
105 for rec_redofile in cur_redofile loop
106
107 --输出备份重做日志文件命令
108
109 dbms_output.put_line('host copy /Y "'||rec_redofile.member||'" "&1";');
110
111 end loop;
112
113 --输出退出sqlplus命令
114
115 dbms_output.put_line('exit;');
116
117 end;
118
119 /
120
121 spool off
122
123 exit;


posted on 2011-11-21 13:24  IT高级民工  阅读(1465)  评论(0编辑  收藏  举报