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

简介:


Oracle数据库的备份方式有冷备份和热备份两种,针对这两种备份的实施过程记录如下:

一、Oracle冷备份

概念
数据库在关闭状态下完成所有物理系统文件拷贝的过程,也称脱机备份。
适合于非归档模式(即noarchivelog模式,SCN保持一致)下,数据库处于一致性状态。
冷备份,数据库可以处于归档模式也可以处于非归档模式,最好是处于非归档模式。

步骤

  • 首先在运行的库中得到数据库运行的所有的物理文件位置,然后在计划内关闭数据库(shutdown)
  • 再执行拷贝物理文家到备份路径或备份设备
  • 备份完成后立即启动数据库让其提供正常的服务

冷备份脚本的写法
首先应该在相关视图里查出数据库的数据文件,日志文件,控制文件,临时文件所在的位置
注意:不要直接在oradata下进行cp就行了,因为生产库里各个文件通常分布在不同的磁盘,不同的地方,所以在去视图里获得真实路径

冷备份操作

1)查看Oracle数据库的日志模式,如果是归档模式,将需要将数据库设置为noarchivelog模式(非归档模式),从而进行冷备份。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
SQL> archive log list 
Database log mode              No Archive Mode 
Automatic archival             Enabled                      //Enabled 表示为归档模式
Archive destination             /u01/admin/denver/archdest 
Oldest online log sequence     1 
Current log sequence           1
 
SQL> startup  mount 
ORACLE instance started. 
Total System Global Area  422670336 bytes 
Fixed Size                  1336960 bytes 
Variable Size             314575232 bytes 
Database Buffers          100663296 bytes 
Redo Buffers                6094848 bytes 
Database mounted. 
 
SQL>  alter database noarchivelog 
Database altered. 
 
SQL> archive log list 
Database log mode              No Archive Mode 
Automatic archival             Disabled                    //Disabled 表示为非归档模式
Archive destination             /u01/admin/denver/archdest 
Oldest online log sequence     1 
Current log sequence           1 
 
SQL> alter database  open
Database altered.

2)查看实例和数据库的相关信息

1
2
3
4
5
6
7
8
9
10
11
SQL>  select  instance_name,version,status,archiver,database_status from  v $instance;
  
     INSTANCE_NAME    VERSION           STATUS       ARCHIVE DATABASE_STATUS
     ---------------- ----------------- ------------ ------- -----------------
     orcl             10.2.0.1.0        OPEN         STOPPED ACTIVE
  
SQL>  select  dbid,name,log_mode from  v $database;
  
     DBID NAME      LOG_MODE
     ---------- --------- ------------
     1242732291 ORCL      NOARCHIVELOG

3)查看数据文件及状态信息

1
2
3
4
5
6
7
8
9
10
11
SQL>  select  file_name,tablespace_name,status,online_status from dba_data_files;
  
     FILE_NAME                                               TABLESPACE STATUS    ONLINE_
     ------------------------------------------------------- ---------- --------- -------
     /u01/app/oracle/oradata/orcl/undotbs01 .dbf              UNDOTBS1   AVAILABLE ONLINE
     /u01/app/oracle/oradata/orcl/system01 .dbf               SYSTEM     AVAILABLE SYSTEM
     /u01/app/oracle/oradata/orcl/sysaux01 .dbf               SYSAUX     AVAILABLE ONLINE
     /u01/app/oracle/oradata/orcl/users01 .dbf                USERS      AVAILABLE ONLINE
     /u01/app/oracle/oradata/orcl/example01 .dbf              EXAMPLE    AVAILABLE ONLINE
     /u01/app/oracle/oradata/orcl/tbs1_1 .dbf                 TBS1       AVAILABLE ONLINE
     /u01/app/oracle/oradata/orcl/tbs1_2 .dbf                 TBS1       AVAILABLE ONLINE

4)查看数据文件

1
2
3
4
5
6
7
8
9
10
11
SQL>  select  name from  v $datafile;
  
     NAME
     --------------------------------------------------------------------------------
     /u01/app/oracle/oradata/orcl/system01 .dbf
     /u01/app/oracle/oradata/orcl/undotbs01 .dbf
     /u01/app/oracle/oradata/orcl/sysaux01 .dbf
     /u01/app/oracle/oradata/orcl/users01 .dbf
     /u01/app/oracle/oradata/orcl/example01 .dbf
     /u01/app/oracle/oradata/orcl/tbs1_1 .dbf
     /u01/app/oracle/oradata/orcl/tbs1_2 .dbf

5)查看临时文件

1
2
3
4
5
SQL>  select  name from  v $tempfile;
  
     NAME
     --------------------------------------------------------------------------------
     /u01/app/oracle/oradata/orcl/temp01 .dbf

6)查看日志文件

1
2
3
4
5
6
7
8
9
10
SQL>  select  member from  v $logfile;
  
     MEMBER
     ------------------------------------------------------------
     /u01/app/oracle/oradata/orcl/redo2a .rdo
     /u01/app/oracle/oradata/orcl/redo2b .rdo
     /u01/app/oracle/oradata/orcl/redo1a .rdo
     /u01/app/oracle/oradata/orcl/redo3a .rdo
     /u01/app/oracle/oradata/orcl/redo3b .rdo
     /u01/app/oracle/oradata/orcl/redo1b .rdo

7)查看控制文件

1
2
3
4
5
6
SQL>  select  name from  v $controlfile;
  
     NAME
     ------------------------------------------------------------
     /u01/app/oracle/oradata/orcl/control01 .ctl
     /u01/app/oracle/oradata/orcl/control02 .ctl

8)创建备份目录

1
SQL> ho  mkdir  /u01/app/oracle/coolbak

9)使用连接符生成复制文件命令

1
2
3
4
5
6
SQL>  select  'ho cp '  || name ||  ' /u01/app/oracle/coolbak'  from  v $controlfile;
  
     'HOCP' ||NAME|| '/U01/APP/ORACLE/COOLBAK'
     ----------------------------------------------------------------------------------
     ho  cp  /u01/app/oracle/oradata/orcl/control01 .ctl  /u01/app/oracle/coolbak
     ho  cp  /u01/app/oracle/oradata/orcl/control02 .ctl  /u01/app/oracle/coolbak

将上面的输入保存为tmpbak.sql

1
2
SQL> save  /tmp/tmpbak .sql;  
Created  file  /tmp/tmpbak .sql

10)编辑tmpbak.sql,将下面的内容输入到tmpbak.sql

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
SQL> ho vim  /tmp/tmpbak .sql  
     set  feedback off
     set  heading off
     set  verify off
     set  trimspool off
     set  pagesize 0
     set  linesize 200
     define  dir  '/u01/app/oracle/coolbak'
     define script =  '/tmp/coolbak.sql'
     spool &script
     select  'ho cp '  || name ||  ' &dir'  from  v $controlfile
     union all
     select  'ho cp '  || name ||  ' &dir'  from  v $datafile
     union all
     select  'ho cp '  || member ||  ' &dir'   from  v $logfile
     union all
     select  'ho cp '  || name ||  ' &dir'  from  v $tempfile
     /
     create pfile =  '&dir/initorcl.ora'  from spfile;
     ho  cp  /u01/app/oracle/10g/dbs/orapworcl  & dir
     spool off
     shutdown  immediate
     start &script
     ho  rm  &script
     startup

执行tmpbak.sql(执行过程及其中的数据库启动在此略过)

1
SQL> @ /tmp/tmpbak .sql;

启动后查看备份的文件

1
2
3
4
5
SQL> ho  ls  /u01/app/oracle/coolbak
control01.ctl  orapworcl   redo2b.rdo    system01.dbf   users01.dbf
control02.ctl  redo1a.rdo  redo3a.rdo    tbs1_1.dbf
example01.dbf  redo1b.rdo  redo3b.rdo    tbs1_2.dbf
initorcl.ora   redo2a.rdo  sysaux01.dbf  undotbs01.dbf

冷备份总结

优点

  • 冷备模式下概念易于理解,即将需要备份的文件复制到安全的位置
  • 操作比较简单,不需要太多的干预
  • 容易恢复到某个时间点上(只需将文件再拷贝回去)
  • 能与归档方法相结合,作数据库“最新状态”的恢复。

缺点

  • 备份时,数据库必须处于一致性关闭状态
  • 只能提供到某一时间点的恢复
  • 备份时速度比较慢,尤其是数据量大性能影响比较大
  • 不能实现基于表和用户级别的数据恢复

二、Oracle冷备份

概念
Oracle 热备份是指数据库处于open状态下,对数据库的数据文件、控制文件、参数文件、密码文件等进行一系列备份操作。
热备份是基于用户管理备份恢复的一种方式,也是除了RMAN备份之外较为常用的一种备份方式。
热备份时,Oracle数据库必须处于归档模式(即archivelog模式,SCN不一致)下。

热备的过程

  • 冻结块头:控制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;

参数文件的热备
create pfile from spfile ;
create pfile = '<dir>' from spfile;

热备份操作

1)查看Oracle数据库的日志模式,一定要确保是归档模式!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
SQL> archive log list
Database log mode              No Archive Mode
Automatic archival             Disabled                    //Disabled 表示为非归档模式
Archive destination             /u01/admin/denver/archdest
Oldest online log sequence     1
Current log sequence           1
 
现在需要设置为归档模式
SQL>  shutdown  immediate
Database cloesd.
Database dismounted.
ORACLE instance shut down.
 
SQL> startup  mount
ORACLE instance started.
Total System Global Area  422670336 bytes
Fixed Size                  1336960 bytes
Variable Size             314575232 bytes
Database Buffers          100663296 bytes
Redo Buffers                6094848 bytes
Database mounted.
  
SQL>  alter database archivelog
Database altered.
 
SQL> archive log list
Database log mode              No Archive Mode
Automatic archival             Enabled                      //Enabled 表示为归档模式
Archive destination             /u01/admin/denver/archdest
Oldest online log sequence     1
Current log sequence           1
 
SQL> alter database  open ;
Database altered.

2)临时表空间的数据文件、日志文件不需要备份,如果设置为 备份模式,会收到报错。

查看临时表空间

1
2
3
4
5
SQL>  select  tablespace_name from dba_temp_files;
  
TABLESPACE_NAME
------------------------------
TEMP

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

1
2
3
4
5
SQL>  select  name from  v $tempfile;
  
NAME
------------------------------------------------------
/u01/app/oracle/oradata/orcl/temp01 .dbf

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

1
2
3
4
5
SQL> alter tablespace temp begin backup;
alter tablespace temp begin backup
*
ERROR at line 1:
ORA-03217: invalid option  for  alter of TEMPORARY TABLESPACE

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

1
2
3
4
5
SQL> alter temporary tablespace temp begin backup;
alter temporary tablespace temp begin backup
*
ERROR at line 1:
ORA-00940: invalid ALTER  command

3)  Oracle热备份脚本

基于数据库热备的脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SQL> ho vim  /tmp/tmphotbak .sql;       // 将下面的内容输入到 /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;

执行该脚本即可对数据库进行热备

1
SQL> start  /tmp/tmphotbak .sql; 

基于表空间热备的脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
SQL> ho vim  /tmp/tmphotbak_tb .sql             // 将下面的内容输入到 /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_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;

执行该脚本即可对数据库基于表空间进行热备

1
SQL> start  /tmp/tmphotbak .sql;

4)备份的相关视图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
SQL> desc  v $backup;
Name                                      Null?    Type
----------------------------------------- -------- ---------------------
FILE #                                              NUMBER
STATUS                                             VARCHAR2(18)
CHANGE #                                            NUMBER                        //记录备份时的SCN号
TIME                                               DATE
  
状态为NOT ACTIVE ,此时没有任何数据处于备份状态
SQL>  select  * from  v $backup;  
  
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
  
对表空间 users 进行热备
SQL> alter tablespace  users  begin backup; 
Tablespace altered.
  
对应的 file # 为的处于ACTIVE状态
SQL>  select  * from  v $backup;  
  
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非归档模式与归档模式备份-----------------------------------
1)不一致性备份(archivelog归档模式)
因为备份操作不可能瞬时完成,而数据文件时刻都在写,SCN时刻都在变,备份完第n个数据文件时,第n+1个数据文件的SCN有可能已经与之前的都不同了。
不一致性的备份在恢复后必须借助归档日志文件和联机重做日志,将数据库修复到一致性的状态才能打开。因此,创建不一致性备份除了备份数据库启动时必须的数据文件和控制文件之外,还需要备份归档日志文件。

2)一致性备份(noarchivelog非归档模式)
备份的数据文件和控制文件拥有相同的SCN,即一致性备份。只有数据库以shutdown immediate方式关闭。并且数据库未被置于打开状态时创建的备份才是一致性备份。

3)热备份一定是不一致性备份,即归档模式的备份
利用要创建的热备份做恢复时,有可能需要应用归档日志或联机重做日志,才能将数据库修复到一个一致性状态,因此要创建有效的热备份,要求数据库必须处于归档模式。
数据库是否处于归档模式不影响一致性备份的创建,但是对于非归档数据库而言,只有一致性备份才算是有效备份。
只有归档模式下创建的不一致性备份才能被视为有效备份,非归档模式下创建的不一致备份极有可能无法恢复,或者恢复后丢失部分数据。

4)要热备份,数据库必须处于归档模式。冷备份,数据库可以处于归档模式也可以处于非归档模式

***************当你发现自己的才华撑不起野心时,就请安静下来学习吧***************

本文转自散尽浮华博客园博客,原文链接:http://www.cnblogs.com/kevingrace/p/7699469.html,如需转载请自行联系原作者
相关文章
|
3月前
|
Oracle 关系型数据库 Linux
【赵渝强老师】Oracle数据库配置助手:DBCA
Oracle数据库配置助手(DBCA)是用于创建和配置Oracle数据库的工具,支持图形界面和静默执行模式。本文介绍了使用DBCA在Linux环境下创建数据库的完整步骤,包括选择数据库操作类型、配置存储与网络选项、设置管理密码等,并提供了界面截图与视频讲解,帮助用户快速掌握数据库创建流程。
386 93
|
2月前
|
Oracle 关系型数据库 Linux
【赵渝强老师】使用NetManager创建Oracle数据库的监听器
Oracle NetManager是数据库网络配置工具,用于创建监听器、配置服务命名与网络连接,支持多数据库共享监听,确保客户端与服务器通信顺畅。
224 0
|
3月前
|
SQL Oracle 关系型数据库
Oracle数据库创建表空间和索引的SQL语法示例
以上SQL语法提供了一种标准方式去组织Oracle数据库内部结构,并且通过合理使用可以显著改善查询速度及整体性能。需要注意,在实际应用过程当中应该根据具体业务需求、系统资源状况以及预期目标去合理规划并调整参数设置以达到最佳效果。
332 8
|
5月前
|
Oracle 关系型数据库 数据库
数据库数据恢复—服务器异常断电导致Oracle数据库报错的数据恢复案例
Oracle数据库故障: 某公司一台服务器上部署Oracle数据库。服务器意外断电导致数据库报错,报错内容为“system01.dbf需要更多的恢复来保持一致性”。该Oracle数据库没有备份,仅有一些断断续续的归档日志。 Oracle数据库恢复流程: 1、检测数据库故障情况; 2、尝试挂起并修复数据库; 3、解析数据库文件; 4、导出并验证恢复的数据库文件。
|
3月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
162 3
|
3月前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。
|
3月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
798 152
|
4月前
|
存储 运维 关系型数据库
从MySQL到云数据库,数据库迁移真的有必要吗?
本文探讨了企业在业务增长背景下,是否应从 MySQL 迁移至云数据库的决策问题。分析了 MySQL 的优势与瓶颈,对比了云数据库在存储计算分离、自动化运维、多负载支持等方面的优势,并提出判断迁移必要性的五个关键问题及实施路径,帮助企业理性决策并落地迁移方案。
|
3月前
|
关系型数据库 MySQL 分布式数据库
阿里云PolarDB云原生数据库收费价格:MySQL和PostgreSQL详细介绍
阿里云PolarDB兼容MySQL、PostgreSQL及Oracle语法,支持集中式与分布式架构。标准版2核4G年费1116元起,企业版最高性能达4核16G,支持HTAP与多级高可用,广泛应用于金融、政务、互联网等领域,TCO成本降低50%。
|
3月前
|
关系型数据库 分布式数据库 数据库
阿里云数据库收费价格:MySQL、PostgreSQL、SQL Server和MariaDB引擎费用整理
阿里云数据库提供多种类型,包括关系型与NoSQL,主流如PolarDB、RDS MySQL/PostgreSQL、Redis等。价格低至21元/月起,支持按需付费与优惠套餐,适用于各类应用场景。

热门文章

最新文章

推荐镜像

更多