美文网首页
Oracle数据库备份和恢复

Oracle数据库备份和恢复

作者: 职场亮哥 | 来源:发表于2020-09-08 12:40 被阅读0次

    commit --lgwr

    • 事务相关的操作,保证事务的安全

    checkpoint --dbwr

    • 数据相关的操作,保证数据的安全

    实例的恢复 crash recovery

    什么时候发生oracle实例恢复

    • shutdown abort
    • 数据库异常down掉(机器死机,掉电)

    从Redo的什么位置开始恢复?

    在某一点,在这一点之前的所有数据,Oracle都已经成功的写入到了磁盘上。

    实例恢复是一个自动的过程,不需要人工干预

    实例恢复发生在那个阶段?

    –sql>startup nomount(读取spfle) ,没有实例恢复。

    –sql>alter database mount (读取控制文件),没有实例恢复。

    –sql>alter database open (检查控制文件,数据文件头),发生实例恢复。

    • 如果直接startup命令,会经过启动装载打开三个步骤。
    SQL> shutdown abort;
    ORACLE 例程已经关闭。
    SQL> startup;
    ORACLE 例程已经启动。
    
    Total System Global Area 3307048960 bytes
    Fixed Size                  2180264 bytes
    Variable Size            1828719448 bytes
    Database Buffers         1459617792 bytes
    Redo Buffers               16531456 bytes
    数据库装载完毕。
    数据库已经打开。
    SQL> shutdown abort;
    ORACLE 例程已经关闭。
    SQL> startup nomount;
    ORACLE 例程已经启动。
    
    Total System Global Area 3307048960 bytes
    Fixed Size                  2180264 bytes
    Variable Size            1828719448 bytes
    Database Buffers         1459617792 bytes
    Redo Buffers               16531456 bytes
    SQL> alter database mount;
    
    数据库已更改。
    
    SQL> alter database open;
    
    数据库已更改。
    

    oracle在打开数据库时(alter database open),会检查每个文件头上的信息(SCN),并同控制文件中相应的信息(SCN)比较,如果不一致就进行实例恢复。

    实例恢复的过程

    • 前滚rolling forward

    读取状态为current和active状态的日志(redo log),将发生crash时,没有来得及写磁盘的数据块,使用redo信息来恢复。

    • 打开数据库alter database open
    • 回滚rolling back

    将没有提交的事务进行回滚

    介质恢复

    当发生以下情况时,实例恢复无效,需要进行介质恢复:

    • 数据文件丢失,损坏。
    • 在线日志文件(onlineredo)丢失,损坏。
    • 数据文件太旧(比如从一个备份集中恢复过来的文件。)
    • 文件太新(比如,其它所有的文件都是从备份中恢复过来的)

    数据损坏时基本都要进行介质恢复

    Oracle的备份方式

    Rman(物理备份)--Recovery Manager

    备份和还原数据库文件、归档日志和控制文件。它也可以用来执行完全或不完全的数据库恢复。

    Rman比较慢,相同情况下一般使用Dataguard

    Rman是是oracle数据库自带的一个备份工具,用Rman备份的步骤如下:

    C:\Users\clg>sqlplus / as sysdba
    
    SQL*Plus: Release 11.2.0.1.0 Production on 星期二 3月 8 17:33:37 2016
    
    Copyright (c) 1982, 2010, Oracle.  All rights reserved.
    
    
    连接到:
    Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
    With the Partitioning, OLAP, Data Mining and Real Application Testing options
    
    SQL> alter database open;
    
    数据库已更改。
    
    SQL> quit;
    从 Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
    With the Partitioning, OLAP, Data Mining and Real Application Testing options 断
    开
    
    C:\Users\clg>rman target /
    
    恢复管理器: Release 11.2.0.1.0 - Production on 星期二 3月 8 17:34:10 2016
    
    Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.
    
    连接到目标数据库: ORCL (DBID=1433387646)
    
    RMAN> backup database;
    
    启动 backup 于 08-3月 -16
    使用目标数据库控制文件替代恢复目录
    分配的通道: ORA_DISK_1
    通道 ORA_DISK_1: SID=134 设备类型=DISK
    通道 ORA_DISK_1: 正在启动全部数据文件备份集
    通道 ORA_DISK_1: 正在指定备份集内的数据文件
    输入数据文件: 文件号=00001 名称=D:\APP\CLG\ORADATA\ORCL\SYSTEM01.DBF
    输入数据文件: 文件号=00002 名称=D:\APP\CLG\ORADATA\ORCL\SYSAUX01.DBF
    输入数据文件: 文件号=00003 名称=D:\APP\CLG\ORADATA\ORCL\UNDOTBS01.DBF
    输入数据文件: 文件号=00005 名称=D:\APP\CLG\ORADATA\ORCL\EXAMPLE01.DBF
    输入数据文件: 文件号=00004 名称=D:\APP\CLG\ORADATA\ORCL\USERS01.DBF
    通道 ORA_DISK_1: 正在启动段 1 于 08-3月 -16
    通道 ORA_DISK_1: 已完成段 1 于 08-3月 -16
    段句柄=D:\APP\CLG\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2016_03_08\O1_MF_NNNDF_TAG2
    0160308T173510_CFX76H7L_.BKP 标记=TAG20160308T173510 注释=NONE
    通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:35
    通道 ORA_DISK_1: 正在启动全部数据文件备份集
    通道 ORA_DISK_1: 正在指定备份集内的数据文件
    备份集内包括当前控制文件
    备份集内包括当前的 SPFILE
    通道 ORA_DISK_1: 正在启动段 1 于 08-3月 -16
    通道 ORA_DISK_1: 已完成段 1 于 08-3月 -16
    段句柄=D:\APP\CLG\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2016_03_08\O1_MF_NCSNF_TAG2
    0160308T173510_CFX77M5Q_.BKP 标记=TAG20160308T173510 注释=NONE
    通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:01
    完成 backup 于 08-3月 -16
    

    如果这是备份表空间,可以用一下语句实现

    SQL> select tablespace_name from dba_tablespaces;
    
    TABLESPACE_NAME
    ------------------------------
    SYSTEM
    SYSAUX
    UNDOTBS1
    TEMP
    USERS
    EXAMPLE
    
    已选择6行。
    SQL> quit;
    C:\Users\clg>rman target /
    RMAN>
    
    RMAN> backup tablespace users;
    

    这样就可以备份制定的表空间。

    exp,expdp(逻辑备份)

    –用户,数据库对象(表,分区...)

    只读表空间+传递表空间

    OLAP(Online Analytical Process)数据库的一种备份方案

    Dataguard--重点

    最简单的备份方案

    • 备份自动
    • 故障恢复时间非常短

    缺点和限制

    • 需要数据库归档(OLAP类型的数据库不适宜归档)
    • 对于海量数据不合适

    Oracle的闪回技术--flashback

    数据库的闪回

    默认数据库的闪回是关闭的。

    可以用以下命令查询看是否是开启的

    select flashback_on from v$database;
    

    可以用以下命令开启,建议开启flashback

    alter database flashback on;
    

    基于SCN的闪回

    一般不太容易知道SCN,不易获得SCN

    基于时间的闪回

    数据库闪回到具体时间

    表的闪回

    system用户删除的table不进recyclebin,普通用户删除的table会进入recyclebin。具体如下:

    SQL> show user;
    USER 为 "SYS"
    SQL> create table t1(id int);
    
    表已创建。
    
    SQL> drop table t1;
    
    表已删除。
    
    SQL> show recyclebin;
    SQL> SELECT * FROM RECYCLEBIN;
    
    未选定行
    
    /*可见回收站中并没有t1表*/
    
    SQL> conn liuyifei/a4852396
    已连接。
    SQL> create table t1(id int);
    
    表已创建。
    
    SQL> drop table t1;
    
    表已删除。
    
    SQL> show recyclebin;
    ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
    ---------------- ------------------------------ ------------ -------------------
    
    T1               BIN$EqiCMfIYSHGQW4KrIX0Alg==$0 TABLE        2016-03-08:19:20:23
    
    SQL> flashback table t1 to before drop;
    
    闪回完成。
    
    SQL> desc t1;
     名称                                      是否为空? 类型
     ----------------------------------------- -------- ----------------------------
    
     ID                                                 NUMBER(38)
    

    彻底删除表,不进入回收站的办法

    SQL> drop table t1 purge;
    

    关于回收站的资料如下:

    http://www.jb51.net/article/34733.htm

    DML操作的闪回

    事务的闪回

    版本的闪回

    上面三种闪回后面在进行补充

    以下是关于归档模式和非归档模式的知识:

    归档模式转换为非归档模式:

    查看数据库是否是归档模式:两种方式

    SQL> select name,log_mode from v$database;
    
    NAME      LOG_MODE
    --------- ------------
    ORCL      NOARCHIVELOG
    
    SQL> archive log list;
    数据库日志模式             非存档模式
    自动存档             禁用
    存档终点            USE_DB_RECOVERY_FILE_DEST
    最早的联机日志序列     28
    当前日志序列           30
    

    非归档模式转换为归档模式:

    SQL>SHUTDOWN NORMAL/IMMEDIATE;   先down下数据  
    SQL>START MOUNT;                                启动数据库实例到mount状态,但不要打开  
    SQL>ALTER DATABASE ARCHIVELOG;      设置数据库为归档日志模式  
    SQL>ALTER DATABASE OPEN;                  打开数据库  
    SQL>archive log list;                  确认数据库现在处于归档日志模式  
    

    一般设置数据库为归档日志模式时会出现如下错误:

    ORA-00265: 要求实例恢复, 无法设置 ARCHIVELOG 模式

    这是我们可以按照如下步骤解决:

    SQL> alter database archivelog;
    alter database archivelog
    *
    第 1 行出现错误:
    ORA-00265: 要求实例恢复, 无法设置 ARCHIVELOG 模式
    
    
    SQL> shutdown immediate;
    ORA-01109: 数据库未打开
    
    
    已经卸载数据库。
    ORACLE 例程已经关闭。
    SQL> startup restrict;
    ORACLE 例程已经启动。
    
    Total System Global Area 3307048960 bytes
    Fixed Size                  2180264 bytes
    Variable Size            1828719448 bytes
    Database Buffers         1459617792 bytes
    Redo Buffers               16531456 bytes
    数据库装载完毕。
    数据库已经打开。
    SQL> shutdown immediate;
    数据库已经关闭。
    已经卸载数据库。
    ORACLE 例程已经关闭。
    SQL> startup mount;
    ORACLE 例程已经启动。
    
    Total System Global Area 3307048960 bytes
    Fixed Size                  2180264 bytes
    Variable Size            1828719448 bytes
    Database Buffers         1459617792 bytes
    Redo Buffers               16531456 bytes
    数据库装载完毕。
    SQL> archive log list;
    数据库日志模式             非存档模式
    自动存档             禁用
    存档终点            USE_DB_RECOVERY_FILE_DEST
    最早的联机日志序列     30
    当前日志序列           32
    SQL> alter database archivelog;
    
    数据库已更改。
    
    SQL> archive log list;
    数据库日志模式            存档模式
    自动存档             启用
    存档终点            USE_DB_RECOVERY_FILE_DEST
    最早的联机日志序列     30
    下一个存档日志序列   32
    当前日志序列           32
    SQL> alter database open;
    
    数据库已更改。
    

    记得帮我点赞哦!

    精心整理了计算机各个方向的从入门、进阶、实战的视频课程和电子书,按照目录合理分类,总能找到你需要的学习资料,还在等什么?快去关注下载吧!!!

    resource-introduce

    念念不忘,必有回响,小伙伴们帮我点个赞吧,非常感谢。

    我是职场亮哥,YY高级软件工程师、四年工作经验,拒绝咸鱼争当龙头的斜杠程序员。

    听我说,进步多,程序人生一把梭

    如果有幸能帮到你,请帮我点个【赞】,给个关注,如果能顺带评论给个鼓励,将不胜感激。

    职场亮哥文章列表:更多文章

    本人所有文章、回答都与版权保护平台有合作,著作权归职场亮哥所有,未经授权,转载必究!

    相关文章

      网友评论

          本文标题:Oracle数据库备份和恢复

          本文链接:https://www.haomeiwen.com/subject/cxbdektx.html