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

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

一、Oracle冷备份

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

步骤

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

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

冷备份操作

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

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)查看实例和数据库的相关信息

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)查看数据文件及状态信息

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)查看数据文件

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)查看临时文件

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

6)查看日志文件

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)查看控制文件

SQL> select name from v$controlfile;
 
    NAME
    ------------------------------------------------------------
    /u01/app/oracle/oradata/orcl/control01.ctl
    /u01/app/oracle/oradata/orcl/control02.ctl

8)创建备份目录

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

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

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

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

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

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(执行过程及其中的数据库启动在此略过)

SQL> @/tmp/tmpbak.sql;

启动后查看备份的文件

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数据库的日志模式,一定要确保是归档模式!

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)临时表空间的数据文件、日志文件不需要备份,如果设置为 备份模式,会收到报错。

查看临时表空间

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

3)  Oracle热备份脚本

基于数据库热备的脚本

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;

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

SQL> start /tmp/tmphotbak.sql;  

基于表空间热备的脚本

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;

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

SQL> start /tmp/tmphotbak.sql;

4)备份的相关视图

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)要热备份,数据库必须处于归档模式。冷备份,数据库可以处于归档模式也可以处于非归档模式

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏猿人谷

Oracle RAC基本维护指令

所有实例和服务的状态 $ srvctl status database -d orcl Instance orcl1 is running on node l...

2177
来自专栏Linyb极客之路

MySQL数据库“十宗罪”(十大经典错误案例)

Too many connections(连接数过多,导致连接不上数据库,业务无法正常进行)

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

Oracle 12cR2中的ADG会话保留特性

Oracle 12cR2中有一个不错的特性,那就是Active Data Guard会话保留,原本的叫法是Preserving Active Data Guar...

2925
来自专栏乐沙弥的世界

Oracle 热备份

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

961
来自专栏乐沙弥的世界

使用dbms_backup_restore包修改dbname及dbid

      修改dbname以及dbid通常在使用RMAN还原到异机之后需要更改dbname以及dbid的情形。对于这个修改我们可以借助于命令行下的nid工具来...

612
来自专栏三杯水

使用ELK分析腾讯云CLB日志

最近在使用腾讯云,想对访问日志进行收集与分析,发现CLB(负责均衡)日志只能保存到COS上面,而且是每个CLB没小时压发送个gz压缩包到COS。

2153
来自专栏电光石火

AliSQL编译安装

若安装MySQL则 rm /etc/my.cnf卸载,否则忽略 卸载已安装的mysql

27110
来自专栏乐沙弥的世界

RMAN catalog 的创建和使用

在存储恢复目录的数据库创建表空间用于存储恢复目录schema及恢复目录数据(本文使用已经创建好的数据库catadb来存储恢复目录)

892
来自专栏数据和云

你不可不看的 Oracle RAC 日常基本维护命令

$ srvctl status instance -d orcl -i orcl2

1204
来自专栏乐沙弥的世界

Oracle AWR管理与维护

  AWR是Automatic Workload Repository的简称,中文叫着自动工作量资料档案库。对于AWR的管理,主要是针对快照和基线的管理而言。比...

990

扫码关注云+社区

领取腾讯云代金券