专栏首页散尽浮华Oracle数据库冷备份与热备份操作梳理

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 条评论
登录 后参与评论

相关文章

  • 全量备份/增量备份/差异备份说明

    作为一名运维工程师,在日常工作中会时常对各类重要数据进行备份,为了方便管理,运用何种备份方案是至关重要的。 今天在此简单说明下Linux运维中的备份种类:全量备...

    洗尽了浮华
  • Mysql备份系列(1)--备份方案总结性梳理

    mysql数据库备份有多么重要已不需过多赘述了,废话不多说!以下总结了mysql数据库的几种备份方案: 一、binlog二进制日志通常作为备份的重要资源,所以再...

    洗尽了浮华
  • Centos中动态扩容lvm逻辑卷的操作记录

    LVM概念: -------------------------------------------------------------------------...

    洗尽了浮华
  • Web 反爬虫实践与反爬虫破解

    前不久公司的产品信息被竞品给爬了,之前竞品内没有这些信息,是我们独有的。后来发现突然就有了,而且和我们的产品信息一致,后来我们也找到了一些证据,证明是被爬了。

    zz_jesse
  • Oracle12C创建用户和表空间

    create temporary tablespace test_temp tempfile 'D:ORACLEHOMEORADATAORCLDATAFILE...

    流浪的猫666
  • Fastjson解析嵌套Map例子

    我是攻城师
  • 你真的会玩SQL吗?透视转换的艺术

    你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接、外连接 你真的会玩SQL吗?三范式、数据完整性 你真...

    欢醉
  • SQL Server中网络协议的比较与选择

    若要连接到 SQL Server 数据库引擎,必须启用网络协议。MicrosoftSQL Server 可同时通过多种协议处理请求。客户端用单个协议连接到 SQ...

    阳光岛主
  • AI新威胁:神经网络后门攻击

    人工智能是如今备受关注的领域,随着人工智能技术的快速发展,基于深度学习模型的应用已经进入了我们的生活。伴随着神经网络的发展和应用的普及,深度学习模型的安全问题也...

    绿盟科技研究通讯
  • Hive复杂数据类型的使用

    ZHANGHAO

扫码关注云+社区

领取腾讯云代金券