Oracle 热备份

--=======================

-- Oracle 热备份

--=======================

Oracle 热备份是指数据库处于open状态下,对数据库的数据文件、控制文件、参数文件、密码文件等进行一系列备份操作。

热备是基于用户管理备份恢复的一种方式,也是除了RMAN备份之外较为常用的一种备份方式。

一、热备的过程

冻结块头-->控制SCN在备份时不发生变化

进行物理拷贝

解冻块头-->让SCN可以变化(当对SCN解冻后,系统会自动更新SCN至最新的状态)

二、基于数据库的热备

alter database begin backup;

拷贝所有的datafile到备份目录

alter database end backup;

三、基于表空间的热备

alter tablespace tablespace_name begin backup;

拷贝tablespace_name表空间的数据文件到备份目录

alter tablespace tablespace_name end backup;

alter tablespace tablespace_name begin backup时完成的任务

检查点事件发生,检查点通知DBWn将该表空间上所有的脏数据被写入到磁盘

在数据文件头部冻结当前检查点事件发生时的SCN号

所有发生变化数据块的完整镜像(修改前后)被写入到redo log中

允许该表空间内数据的正常读写

建议使用基于表空间的热备,这样将尽可能的减少对系统性能的影响

四、控制文件的热备

alter database backup controlfile to '<dir>' [reuse]; --控制文件的完整备份

alter database backup controlfile to trace as '<dir>' --用于创建控制文件的语句,丢失了部分信息

控制文件发生变化情况

alter database [add |drop] logfile

alter database [add |drop] logfile member

alter database [add |drop] logfile group

alter database [archivelog |noarchivelog]

alter database rename file

create tablespace

alter tablespace [add | rename] datafile

alter tablespace [read write | read only]

drop tablespace

更多关于控制文件请参考:Oracle 控制文件

五、参数文件的热备

create pfile from spfile ;

create pfile = '<dir>' from spfile;

更多关于参数文件请参考:Oracle 参数文件

六、临时表空间的数据文件、日志文件不需要备份

--查看临时表空间

SQL> select tablespace_name from dba_temp_files;

TABLESPACE_NAME

------------------------------

TEMP

--查看临时表空间的数据文件

SQL> select name from v$tempfile;

NAME

------------------------------------------------------

/u01/app/oracle/oradata/orcl/temp01.dbf

--将临时表空间置为备份模式,收到了错误的提示

SQL> alter tablespace temp begin backup;

alter tablespace temp begin backup

*

ERROR at line 1:

ORA-03217: invalid option for alter of TEMPORARY TABLESPACE

--将临时表空间置为备份模式,收到了错误的提示

SQL> alter temporary tablespace temp begin backup;

alter temporary tablespace temp begin backup

*

ERROR at line 1:

ORA-00940: invalid ALTER command

七、热备脚本

1.基于数据库热备的脚本

SQL> ho cat /tmp/tmphotbak.sql;

set feedback off

set heading off

set verify off

set trimspool off

set pagesize 0

set linesize 200

define dir = '/u01/app/oracle/hotbak'

define script = '/tmp/hotbak.sql'

spool &script

select 'ho cp ' ||name|| ' &dir' from v$datafile;

spool off

alter database begin backup;

start &script

alter database end backup;

alter database backup controlfile to '&dir/controlbak.ctl';

create pfile = '&dir/initorcl.ora' from spfile;

SQL> start /tmp/tmphotbak.sql; --执行该脚本即可对数据库进行热备

2.基于表空间热备的脚本

SQL> ho cat /tmp/tmphotbak_tb.sql

set feedback off

set heading off

set verify off

set trimspool off

set pagesize 0

set linesize 200

define dir = '/u01/app/oracle/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/initorcl.ora' from spfile;

SQL> start /tmp/tmphotbak.sql; --执行该脚本即可对数据库基于表空间进行热备

八、备份的相关视图

v$backup

SQL> desc v$backup;

Name Null? Type

----------------------------------------- -------- ---------------------

FILE# NUMBER

STATUS VARCHAR2(18)

CHANGE# NUMBER --记录备份时的SCN号

TIME DATE

SQL> select * from v$backup; --状态为NOT ACTIVE ,此时没有任何数据处于备份状态

FILE# STATUS CHANGE# TIME

---------- ------------------ ---------- ---------

1 NOT ACTIVE 1006747 16-AUG-10

2 NOT ACTIVE 1006793 16-AUG-10

3 NOT ACTIVE 1006729 16-AUG-10

4 NOT ACTIVE 1006807 16-AUG-10

5 NOT ACTIVE 1006717 16-AUG-10

SQL> alter tablespace users begin backup; --对表空间users进行热备

Tablespace altered.

SQL> select * from v$backup; --对应的file# 为的处于ACTIVE状态

FILE# STATUS CHANGE# TIME

---------- ------------------ ---------- ---------

1 NOT ACTIVE 1006747 16-AUG-10

2 NOT ACTIVE 1006793 16-AUG-10

3 NOT ACTIVE 1006729 16-AUG-10

4 ACTIVE 1006852 16-AUG-10

5 NOT ACTIVE 1006717 16-AUG-10

--备份时发生断电或意外故障的恢复

--假定users表空间目前置于begin bakup模式,系统断电

SQL> alter tablespace users begin backup;

Tablespace altered.

--在另一个会话中强制关闭数据库

SQL> shutdown abort;

ORACLE instance shut down.

--启动后收到错误提示

SQL> startup

ORACLE instance started.

Total System Global Area 469762048 bytes

Fixed Size 1220048 bytes

Variable Size 92275248 bytes

Database Buffers 373293056 bytes

Redo Buffers 2973696 bytes

Database mounted.

ORA-01113: file 4 needs media recovery

ORA-01110: data file 4: '/u01/app/oracle/oradata/orcl/users01.dbf'

--查看备份视图,文件此时处于活动状态

SQL> select * from v$backup;

FILE# STATUS CHANGE# TIME

---------- ------------------ ---------- ---------

1 NOT ACTIVE 1006958 16-AUG-10

2 NOT ACTIVE 1006983 16-AUG-10

3 NOT ACTIVE 1006943 16-AUG-10

4 ACTIVE 1007072 16-AUG-10

5 NOT ACTIVE 1006931 16-AUG-10

--使用end backup来终止备份

SQL> alter database datafile 4 end backup; --此处也可以使用recover datafile 4来完成恢复

Database altered.

SQL> alter database open;

Database altered.

SQL> select * from dual;

D

-

X

有关Oracle的冷备份,请参考:Oracle 冷备份

九、更多参考

Oracle 冷备份

SPFILE错误导致数据库无法启动

Oracle 用户、对象权限、系统权限

Oracle 角色、配置文件

Oracle 联机重做日志文件(ONLINE LOG FILE)

Oracle 控制文件(CONTROLFILE)

Oracle 表空间与数据文件

Oracle 归档日志

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏更流畅、简洁的软件开发方式

检查两个数据库里的表名、字段是否一致的一种方法

不知道大家有没有遇到过这种情况。 程序已经给客户安装上了,并且客户已经录入了一些信息,然后程序还需要作比较大的变动(修改功能、增加模块等),数据库就不可避免要...

2598
来自专栏杨建荣的学习笔记

系统级alias vs Oracle ADR功能(r5笔记第35天)

Oracle在11g中推出的新特性ADR,即Automatic Diagnostic Repository 个人理解这个工具就是能够高效的把一些日志文件轻松管理...

3628
来自专栏数据和云

Oracle数据库的初始化与跟踪学习方法

编辑说明:《Oracle性能优化与诊断案例精选》出版以来,收到很多读者的来信和评论,我们会通过连载的形式将书中内容公布出来,希望书中内容能够帮助到更多的读者朋友...

3849
来自专栏乐沙弥的世界

Oracle 12c手工建库(非CDB及CDB创建)

对于Oracle数据库的创建,Oracle除了支持dbca(GUI界面),同时也支持手工方式创建数据库,即使用CREATE DATABASE语句创建数据库。使用...

1451
来自专栏杨建荣的学习笔记

通过ORA错误反思sql语句规范(r4笔记第41天)

今天快下班的时候,有个开发的同事问我一个问题,说他在客户端执行一条sql语句,里面包含子查询,如果单独执行子查询,会报"invalid identifier"...

2473
来自专栏乐沙弥的世界

MySQL read_log_event(): 'Found invalid event in binary log'

    MySQL以简单易用著称,在同一个服务器上可以安装N个不同的版本,方便测试,迁移等等。此外,对于大多数Linux系统,集成了mysql,缺省会被安装。因...

832
来自专栏猛牛哥的博客

CentOS系统安装ffmpeg的步骤

2644
来自专栏散尽浮华

mysql下批量清空某个库下的所有表(库不要删除,保留空库)

总所周知,mysql下要想删除某个库下的某张表,只需要切换到该库下,执行语句"drop table tablename"即可删除!但若是该库下有成百上千张表,要...

1324
来自专栏乐沙弥的世界

只读表空间的备份与恢复

--====================== --  只读表空间的备份与恢复 --====================== 一、只读表空间的特性...

882
来自专栏散尽浮华

Oracle数据库冷备份与热备份操作梳理

Oracle数据库的备份方式有冷备份和热备份两种,针对这两种备份的实施过程记录如下: 一、Oracle冷备份 概念 数据库在关闭状态下完成所有物理系统文件拷贝的...

4418

扫码关注云+社区

领取腾讯云代金券