一、 什么是热备份
热备份也叫联机备份,它是指数据库处于open状态下,对数据库的数据文件、控制文件、参数文件、密码文件等进行一系列备份操作(其中数据文件是必须备份的)。
它要求数据库处在归档模式下。
在热备时,是可以进行DML操作的
二、 热备的过程
冻结块头-->控制SCN在备份时不发生变化,并产生检查点,发生在置于备份状态的时候
进行物理拷贝
解冻块头-->让SCN可以变化(当对SCN解冻后,系统会自动更新SCN至最新的状态)
三、 需要注意的问题
由于数据文件处于备份状态时重做日志后台进程要将这些文件的所有的变化数据块写到重做日志文件中,这对重做日志缓冲区和重做日志文件的压力都增大了,所以需要注意几下加点:
- 重做日志缓冲区和重做日志文件适当增大
- 在联机备份时,每次只备份一个表空间
- 在DML最少的时候做备份
四、 几种不同的热备方式
1、 基于表空间的热备
--查询表空间的名字和状态
SQL> select file_id,tablespace_name,status from dba_data_files;
FILE_ID TABLESPACE_NAME STATUS
---------- ------------------------------ ---------
4 USERS AVAILABLE
3 UNDOTBS1 AVAILABLE
2 SYSAUX AVAILABLE
1 SYSTEM AVAILABLE
5 COSTCTL_TBS AVAILABLE
6 DEV_DATA AVAILABLE
7 PDMS_DATA AVAILABLE
已选择7行。
--开始备份,将会
SQL> alter tablespace PDMS_DATA begin backup;
表空间已更改。
--拷贝数据文件到指定的备份磁盘上
SQL> host cp /opt/oracle/app/oradata/pdms/PDMS_DATA.dbf /u03/backup/hotbak
--查看所有数据文件的备份状态
SQL> select * from v$backup;
FILE# STATUS CHANGE# TIME
---------- ------------------ ---------- --------------
1 NOT ACTIVE 0
2 NOT ACTIVE 0
3 NOT ACTIVE 0
4 NOT ACTIVE 0
5 NOT ACTIVE 0
6 NOT ACTIVE 0
7 ACTIVE 12657642 15-12月-16
--将表空间重新设置为非备份状态
SQL> alter tablespace PDMS_DATA end backup;
表空间已更改。
--查看备份状态
SQL> select * from v$backup;
FILE# STATUS CHANGE# TIME
---------- ------------------ ---------- --------------
1 NOT ACTIVE 0
2 NOT ACTIVE 0
3 NOT ACTIVE 0
4 NOT ACTIVE 0
5 NOT ACTIVE 0
6 NOT ACTIVE 0
7 NOT ACTIVE 12657642 15-12月-16
已选择7行。
2. 基于数据库的热备
alter database begin backup;
拷贝所有的datafile到备份目录
alter database end backup;
3. 控制文件的热备
alter database backup controlfile to '' [reuse]; --控制文件的完整备份
alter database backup controlfile to trace as '' --用于创建控制文件的语句,丢失了部分信息,可以直接查看
SQL> alter database backup controlfile to '/u03/backup/hotbak/control01.ctl';
数据库已更改。
SQL> alter database backup controlfile to trace as '/u03/backup/hotbak/control02.ctl';
数据库已更改。
查control02.ctl
View Code
4. 参数文件的热备
create pfile from spfile ;
create pfile = '' from spfile;
SQL> create pfile = '/u03/backup/hotbak/initdbsrv1.ora' from spfile;
文件已创建。
5. 临时表空间的数据文件、日志文件不需要备份
五、热备脚本
基于表空间的热备(推荐使用这种方式)
vim hotbak.sql
set feedback off
set heading off
set verify off
set trimspool off
set pagesize 0
set linesize 200
define dir = '/u03/backup/hotbak'
define script = '/tmp/hotbak_tb.sql'
ho rm &script
ho rm &dir/*
spool &script
select 'alter tablespace '|| tablespace_name ||' begin backup ;' ||
chr(10)||'ho cp ' || file_name || ' &dir ' ||
chr(10)||'alter tablespace '|| tablespace_name || ' end backup;'
from dba_data_files order by tablespace_name;
spool off
start &script
alter database backup controlfile to '&dir/controlbak.ctl';
create pfile = '&dir/initdbsrv1.ora' from spfile;
其中char(10)表示换行,红色部分需要自行修改
SQL> start hotbak.sql; --执行该脚本即可对数据库基于表空间进行热备
基于数据库(数据文件)的热备
vim hotbak.sql
set feedback off
set heading off
set verify off
set trimspool off
set pagesize 0
set linesize 200
define dir = '/u03/backup/hotbak'
define script = '/tmp/hotbak_tb.sql'
ho rm &script
ho rm &dir/*
spool &script
select 'alter tablespace '|| tablespace_name ||' begin backup ;' ||
chr(10)||'ho cp ' || file_name || ' &dir ' ||
chr(10)||'alter tablespace '|| tablespace_name || ' end backup;'
from dba_data_files order by tablespace_name;
spool off
start &script
alter database backup controlfile to '&dir/controlbak.ctl';
create pfile = '&dir/initdbsrv1.ora' from spfile;