第一部分 概述

备份与恢复概念

  • 数据库在使用时遇到各种故障,需要利用备份进行恢复,解决故障造成的影响
  • 备份就是把数据库复制到转储设备的过程
  • 恢复就是发生故障后,利用已备份的数据文件或控制文件,重新建立一个完整的数据库

    故障类型

    image-20201228101553286.png

    备份分类

    image-20201228101734667.png

    恢复分类

    image-20201228101756906.png

    第二部分 使用RMAN工具

    概念

  • RMAN(Recovery Manager),即恢复管理器

    • 是 DBA 的一个重要工具,用于备份、还原和恢复 Oracle 数据库
    • 完成对目标数据库的控制文件、数据文件及归档日志文件以及SPFILE的联机备份
    • 能够实现对数据库的完全或不完全的恢复操作

      备份的对象是数据库的硬盘文件 一般在数据库重大故障或硬盘文件损坏时的修复手段 备份的速度慢

RMAN组件

image-20201228102028403.png

RMAN-恢复目录

  • 恢复目录用于存放RMAN元数据,它是存放RMAN元数据的一个可选设置

image-20201228103529876.png

创建恢复目录

1、创建表空间
CREATE TABLESPACE rmants DATAFILE 'c:\rmants.dbf' SIZE 20M;
2、创建用户并授权

  1. CREATE USER rman IDENTIFIED BY rmanpwd DEFAULT TABLESPACE rmants;
  2. GRANT connect,resource,RECOVERY_CATALOG_OWNER TO rman;

说明:RECOVERY_CATALOG_OWNER 是恢复目录所有者

3、创建恢复目录
1) 命令提示符中 连接恢复目录:
C:\users\administrator>rman catalog rman/rmanpwd

说明:rman是用户名,rmanpwd是密码

2) 创建恢复目录:
RMAN>CREATE CATALOG;
3)退出
RMAN>exit;

注册目标数据库到恢复目录

1)连接到目标数据库(即要备份的数据库)
C:\Users\Administrator>rman target sys/12345_coM

sys/12345_coM是目标数据库的用户名和密码

2)连接到恢复目录数据库
RMAN> connect catalog rman/rmanpwd;

rman/rmanpwd是 恢复目录数据库的用户名和密码

3)注册数据库

RMAN>register database;

RMAN-通道

  • 当使用RMAN在存储设备(磁盘或磁带)上执行备份、转储等操作时,RMAN需要在存储设备和目标数据库之建立连接,该连接被称为通道
  • 如果不配置通道则使用默认通道

image-20201228103717137.png

自动通道配置

  1. --指定自动通道并行个数。
  2. CONFIGURE DEVICE TYPE sbt/disk PARALLELISM n;
  3. --指定自动通道的默认设备
  4. CONFIGURE DEFAULT DEVICE TYPE TO sbt/disk;

sbt/disk 磁带/磁盘 n :设置自动通道的个数

示例:指定RMAN可以打开5个磁盘通道

  1. RMAN>CONFIGURE DEVICE TYPE disk PARALLELISM 5;
  2. RMAN>CONFIGURE DEFAULT DEVICE TYPE TO disk;

手动通道配置

  1. RUN{
  2. ALLOCATE CHANNEL 通道名称 DEVICE TYPE 设备类型;
  3. ……}

示例:指定3个磁盘通道

  1. RMAN>RUN
  2. {
  3. ALLOCATE CHANNEL ch1 DEVICE TYPE disk;
  4. ALLOCATE CHANNEL ch2 DEVICE TYPE disk;
  5. ALLOCATE CHANNEL ch3 DEVICE TYPE disk;
  6. }

显示通道配置参数

RMAN>SHOW ALL;

RMAN-备份集与备份片

image-20201228104526944.png

RMAN-Format字符串替代变量说明

%c:备份片的拷贝数(从1开始编号);
%d:数据库名称;
%D:位于该月中的天数 (DD);
%M:位于该年中的月份 (MM);
%F:一个基于DBID 唯一的名称,这个格式的形式为c-IIIIIIIIII-YYYYMMDD-QQ,其中IIIIIIIIII 为该数据库的DBID,YYYYMMDD 为日期,QQ 是一个1-256 的序列;
%n:数据库名称,并且会在右侧用x字符进行填充,使其保持长度为8;
%u:是一个由备份集编号和建立时间压缩后组成的8字符名称。利用%u可以为每个备份集生成一个唯一的名称;
%p:该备份集中备份片的编号,从1 开始编号;
%U:是%u%p%c的简写形式,利用它可以为每一个备份片生成一个唯一名称,这是最常用的命名方式;
%s:备份集的号;
%t:备份集时间戳;
%T:年月日格式(YYYYMMDD);

注:如果在BACKUP命令中没有指定FORMAT选项,则RMAN默认使用%U为备份片段命名

RMAN-备份命令

BACKUP命令

  • 用于备份数据库文件,可以将多个文件、表空间、整个数据库以备份集形式备份到磁盘或磁带上

image-20201228104921532.png

在归档方式下备份数据库步骤:

  • 在SQLPlus环境下
    • 以SYSDBA身份登录
    • 查看数据库归档方式
    • 如果处于非归档方式,则将数据库处于归档方式下
    • 打开数据库
  • 在RMAN环境下

    • 连接目标数据库和恢复目录数据库
    • 备份数据库和归档日志

      RMAN-恢复命令

  • 使用RMAN备份的数据库页只能使用RMAN提供的恢复命令进行恢复。

  • RMAN恢复数据库用到了两个命令:

    • RESTORE 命令:从备份中还原数据库文件
    • RECOVER 命令:通过应用归档日志文件中记录的更改来恢复已还原文件

      恢复数据库步骤:

  • 保证数据库在MOUNT模式下启动: startup mount

  • 在RMAN环境下
    • 连接目标数据库:rman target sys/123
    • 执行RESTORE命令:restore database;
    • 执行RECOVE命令:recover database;
    • 在打开数据库:alter database open resetlogs;

      resetlogs 重置重做日志

1.备份和恢复整个数据库

  1. //自动分配通道,FORMAT默认使用%U,备份集存储在数据库快闪恢复区内
  2. //备份文件包括数据文件、控制文件、重做日志文件和参数文件
  3. RMAN>backup database;
  4. //如果还要包含归档日志文件,则要加上plus archivelog关键字,delete input的意思是在备份完成后,删除archivelog文件
  5. RMAN>backup database plus archivelog delete input;
  6. //自动备份通道,通过FORMAT指定具体的路径和格式
  7. RMAN>backup database format 'd:/rmacback/%U';
  8. //手动分配通道,备份数据库
  9. RMAN>run{
  10. ALLOCATE CHANNEL ch1 DEVICE TYPE disk;
  11. backup database format 'd:/rmacback/%U';
  12. release channel ch1;
  13. }
  14. //全库备份的恢复,数据库要在mount状态下执行
  15. C:\Users\Administrator>sqlplus sys/12345_coM as sysdba
  16. RMAN>startup mount
  17. RMAN>restore database;
  18. RMAN>recover database;
  19. RMAN>alter database open resetlogs;

2.备份和恢复表空间

  1. //表空间备份
  2. RMAN>backup tablespace users;
  3. //多个表空间备份
  4. RMAN>backup filesperset=3 tablespace users,system,sysaux;
  5. //在run命令中备份表空间
  6. RMAN>run
  7. {
  8. ALLOCATE CHANNEL ch1 DEVICE TYPE disk;
  9. backup format 'd:/rmacback/%U' (tablespace users,system,sysaux);
  10. release channel ch1;
  11. }
  12. //表空间的恢复
  13. //如果只丢失了特定的表空间的数据文件,那么可以选择只恢复这个表空间,而不是恢复整个数据库,表空间恢复可以在不关闭数据库的情况下进行,只需要将需要恢复的表空间offline
  14. RMAN>run
  15. {
  16. sql 'alter tablespace users offline immediate';
  17. restore tablespace users;
  18. recover tablespace users;
  19. sql 'alter tablespace users online';
  20. }

3.数据文件的备份和恢复

  1. //数据文件恢复与表空间恢复类似,假设数据文件为4的文件丢失,文件名是'd:/app/user01.dbf',那么恢复的时候可以指定文件号,也可以指定文件名
  2. RMAN>backup datafile 4;
  3. RMAN>backup datafile 'd:/app/user01.dbf';
  4. //恢复命令
  5. RMAN>run
  6. {
  7. ALLOCATE CHANNEL ch1 DEVICE TYPE disk;
  8. sql 'alter tablespace users offline immediate';
  9. restore datafile 4; -- 或者restore datafile 'd:/app/user01.dbf';
  10. recover datafile 4;
  11. sql 'alter tablespace users online';
  12. release channel ch1;
  13. }

完整案例

使用rman对数据库进行热备份。
备份完成后,关闭数据库再删除文C:\app\Administrator\oradata\orcl\USERS01.DBF。发现数据库无法启动。使用备份进行恢复,发现数据库可以正常打开,说明恢复正常

1.启用归档日志。

  1. SQL> shutdown immediate;
  2. SQL> startup mount;
  3. SQL> archive log list; 查看是否启用了归档日志
  4. SQL> alter database archivelog; 启用归档日志
  5. SQL> alter database open; 打开数据库

2.创建恢复目录数据库并注册目标数据库到恢复目录

2.1.在恢复目录数据库中 创建表空间
SQL> create tablespace rmants datafile 'c:\backup\rmants.dbf' size 500m;

大小为500M,名称为rmants的表空间 注意:backup需事先手工创建,rmants.dbf会自动创建

2.2.创建用户,用户名rman,密码rman,rmants是上一步建立的表空间
SQL> create user rman identified by rman default tablespace rmants;
授权(rman是用户名):
SQL> grant connect,resource,recovery_catalog_owner to rman;
退出:
SQL>exit;
2.3.rman连接到恢复目录数据库(rman/rman是用户名/密码)
C:\Users\Administrator>rman catalog rman/rman
建立恢复目录
RMAN> create catalog ;
退出:
RMAN>exit;
2.4.连接到目标数据库(即要备份的数据库,sys/123是用户名/密码)
C:\Users\Administrator>rman target sys/123

sys可以换成目标数据库的其他用户

连接到恢复目录数据库(rman/rman是用户名/密码)
RMAN> connect catalog rman/rman;
注册数据库
RMAN> register database;

3.配置通道

指定设备的类型是磁盘(disk),通道的个数是5个
RMAN> configure device type disk parallelism 5;

4.开始备份

  1. RMAN> backup database format 'c:\backup\%U';
  2. RMAN> exit;

format指定了文件名,backup 目录需要提前建立, 如果没有指定文件名,默认备份到快闪恢复区(C:\app\Administrator\flash_recovery_area)

5.关闭数据库并删除文件

  1. C:\Users\Administrator>sqlplus sys/123 as sysdba
  2. SQL> shutdown immediate;

把C:\app\Administrator\oradata\orcl\USERS01.DBF删除到回收站

6.启动数据库并恢复文件

  1. SQL> startup mount;
  2. SQL> exit;
  3. C:\Users\Administrator>rman target sys/123;
  4. RMAN> restore database;
  5. RMAN> recover database;
  6. RMAN> alter database open;
  7. RMAN> exit;

如果数据库启动成功表示恢复成功

RMAN> restore database;

简单rman案例

没有启动归档
1.连接目标数据库
C:\Users\Administrator>rman target system/123

system换成其他用户也可以完成此案例

2.关闭数据库
RMAN> shutdown immediate;
3.进入mount状态
RMAN> startup mount;
4.备份
RMAN> backup database;
5.删除一个dbf文件
6.恢复

  1. RMAN> restore database;
  2. RMAN> recover database;
  3. RMAN> alter database open;

第三部分 数据泵

概述

  • 导出即数据库的逻辑备份,实质是读取一个数据库记录集,并将这个记录集写入一个扩展名位dmp的文件。这些记录的导出与其物理位置无关。
  • 导入即数据库的逻辑恢复,实质是读取被导出的二进制转储文件并将其恢复到数据库

    备份的是数据。在多个数据库之间或多个用户之间互相交换数据时使用 可以在数据库不停机的状态下进行备份

四种模式

image-20201228110049750.png

案例

使用数据泵技术对scott用户的部分表进行备份,
然后删除该表,再次恢复进行验证

  1. --解锁语法
  2. alter user 用户名 account unlock ;
  3. -- 解锁示例
  4. alter user scott account unlock ; --解锁scott账户
  5. -- 设置密码语法
  6. alter user 用户名 identified by 密码;
  7. -- 设置密码示例
  8. alter user scott identified by 123;

scott自带四个表:
dept :部门表
emp:员工表
bonus:工资表
salgrade:工资等级表

1.创建一个操作目录

sys登录
c:\users\administrator>sqlplus sys/123_com as sysdba
首先创建一个磁盘目录c:\opt\backup
创建一个名为dump_dir的对象(名字是随便起的),类型是directory,该对象和c:\opt\backup关联起来

  1. -- 语法:
  2. create directory 目录名 as '路径';
  3. -- 示例:
  4. SQL> create directory dump_dir as 'c:\opt\backup';

2.对scott用户授权

授权scott可以读、写dump_dir,dump_dir是一个随意称呼的名字
SQL> grant read,write on directory dump_dir to scott;
退出登录
SQL>exit;

3.进行备份

以scott的账号连接数据库,备份emp表和dept表,生成备份文件scotttab.dmp,放到

  1. -- 语法:
  2. expdp 用户名/密码 directory=目录名 dumpfile=文件名.dmp tables=表1,表2...
  3. -- 示例:
  4. c:\users\administrator>expdp scott/123 directory=dump_dir dumpfile=scotttab.dmp tables=dept,emp

重要:在cmd中执行命令,命令最后不可以使用分号

4.删除emp表

  1. c:\users\administrator> sqlplus scott/123
  2. SQL> drop table emp;

注意:不要删除dept表,因为它有外键

5.进行恢复并测试

以scott的账号连接数据库,恢复emp,备份文件名为scotttab.dmp,放在c:\opt\backup目录中

  1. -- 语法
  2. impdp 用户名/密码 directory=目录名 dumpfile=文件名.dmp tables=表名
  3. -- 示例
  4. C:\Users\Administrator>impdp scott/123 directory=dump_dir dumpfile=scotttab.dmp tables=emp

以scott身份执行此命令,看到14条记录表示恢复成功
SQL> select count(*) from emp;

扩展

导出导入命令

  1. -- 导出用户system下的表emp,dep
  2. C:\users\administrator>expdp system/123 directory=dump_dir dumpfile=daochu.dmp tables=emp,dep
  3. -- 导入用户system下的表
  4. C:\users\administrator>impdp system/123 directory=dump_dir dumpfile=daochu.dmp tables=emp,dep table_exists_action=replace
  5. 注意:table_exists_action=replace 命令为检测到表存在,则替换表,skip跳过,append追加,replace替换
  6. -- 将导出的SCOTT 用户下的dept和emp表导入user1用户下
  7. C:\users\administrator>impdp system/123 directory=dump_dir dumpfile=daochu.dmp tables=scott.emp,scott.dept REMAP_SCHEMA=SCOTT:USER1
  8. -- 导出用户Scott
  9. C:\users\administrator>expdp system/123 directory=dump_dir dumpfile=Scott.dmp schemas=Scott
  10. -- 导入用户Scott
  11. C:\users\administrator>impdp system/123 directory=dump_dir dumpfile=scott.dmp schemas=Scott
  12. -- 将SCOTT中所有对象导入user1中
  13. C:\users\administrator>impdp system/123 directory=dump_dir dumpfile=scott.dmp schemas=Scott
  14. REMAP_SCHEMA=SCOTT:USER1
  15. -- 导出表空间
  16. C:\users\administrator>expdp system/123 directory=dump_dir dumpfile=tablespace.dmp tablespaces=user01
  17. --导入表空间
  18. C:\users\administrator>impdp system/123 directory=dump_dir dumpfile=tablespace.dmp tablespaces=user01
  19. 注意:前提要有user01这个表空间
  20. -- 导出数据库
  21. C:\users\administrator>expdp system/123 directory=dump_dir dumpfile=full.dmp full=y
  22. -- 导入数据库
  23. C:\users\administrator>impdp system/123 directory=dump_dir dumpfile=full.dmp full=y

expdp help=y 用来查询参数的相关说明

闪回

一、Oracle闪回概述

闪回级别 闪回场景 闪回技术 对象依赖 影响数据
数据库 表截断、逻辑错误、其他多表意外事件 闪回DATABASE 闪回日志、undo 是
DROP 删除表 闪回DROP 回收站(recyclebin) 是
表 更新、删除、插入记录 闪回TABLE 还原数据,undo 是
查询 当前数据和历史数据对比 闪回QUERY 还原数据,undo 否
版本查询 比较行版本 闪回Version Query 还原数据,undo 否
事务查询 比较 闪回Transaction Query 还原数据,undo 否
归档 DDL、DML 闪回Archive 归档日志 是

二、Oracle闪回使用详解

1、闪回开启

(1)开启闪回必要条件
a.开启归档日志

  1. SQL> archive log list;
  2. Database log mode Archive Mode
  3. Automatic archival Enabled
  4. Archive destination /home/U01/app/oracle/oradata/testdb/arch
  5. Oldest online log sequence 844
  6. Next log sequence to archive 846
  7. Current log sequence 846
  8. ##如未开启,在mount状态执行alter database archivelog;

b.设置合理的闪回区
db_recovery_file_dest:指定闪回恢复区的位置
db_recovery_file_dest_size:指定闪回恢复区的可用空间大小
db_flashback_retention_target:指定数据库可以回退的时间,单位为分钟,默认1440分钟(1天),实际取决于闪回区大小
(2)检查是否开启闪回

  1. SQL> select flashback_on from v$database;
  2. FLASHBACK_ON
  3. ------------------
  4. NO

(3)开启闪回
a.开启归档
mount状态:alter database archivelog;
b.设置闪回区

  1. SQL> alter system set db_recovery_file_dest='/home/U01/app/oracle/fast_recovery_area' scope=both;
  2. SQL> alter system set db_recovery_file_dest_size=60G scope=both;
  3. SQL> alter system set db_flashback_retention_target=4320 scope=both;

c.开启flashback (10g在mount开启)
SQL> alter database flashback on;
(4)确定闪回开启

  1. SQL> select flashback_on from v$database;
  2. FLASHBACK_ON
  3. ------------------
  4. YES

(5)关闭闪回
SQL> alter database flashback off;

2、闪回使用

(1)闪回查询

闪回查询主要是根据Undo表空间数据进行多版本查询,针对v$和x$动态性能视图无效,但对DBA、ALL、USER_是有效的
a.闪回查询
允许用户查询过去某个时间点的数据,用以重构由于意外删除或更改的数据,数据不会变化

  1. SQL> select * from scott.dept;
  2. DEPTNO DNAME LOC
  3. ---------- -------------- -------------
  4. ACCOUNTING NEW YORK
  5. RESEARCH DALLAS
  6. SALES CHICAGO
  7. OPERATIONS BOSTON
  8. SQL> delete from scott.dept where deptno=40;
  9. row deleted.
  10. SQL> commit;
  11. Commit complete.
  12. SQL> select * from scott.dept as of timestamp sysdate-10/1440;
  13. DEPTNO DNAME LOC
  14. ---------- -------------- -------------
  15. ACCOUNTING NEW YORK
  16. RESEARCH DALLAS
  17. SALES CHICAGO
  18. OPERATIONS BOSTON
  19. SQL> select * from scott.dept as of timestamp to_timestamp('2017-12-14 16:20:00','yyyy-mm-dd hh24:mi:ss');
  20. DEPTNO DNAME LOC
  21. ---------- -------------- -------------
  22. ACCOUNTING NEW YORK
  23. RESEARCH DALLAS
  24. SALES CHICAGO
  25. OPERATIONS BOSTON
  26. SQL> select * from scott.dept as of scn 16801523;
  27. DEPTNO DNAME LOC
  28. ---------- -------------- -------------
  29. ACCOUNTING NEW YORK
  30. RESEARCH DALLAS
  31. SALES CHICAGO
  32. OPERATIONS BOSTON

b.闪回版本查询
用于查询行级数据库随时间变化的方法
c.闪回事务查询
用于提供查看事务级别数据库变化的方法

(2)闪回表(update/insert/delete)

闪回表就是对表的数据做回退,回退到之前的某个时间点,其利用的是undo的历史数据,与undo_retention设置有关,默认是14400分钟(1天)
同样,sys用户表空间不支持闪回表,要想表闪回,需要允许表启动行迁移(row movement)
闪回表示例:

  1. SQL> flashback table scott.dept to timestamp to_timestamp('2017-12-14 16:20:00','yyyy-mm-dd hh24:mi:ss');
  2. flashback table scott.dept to timestamp to_timestamp('2017-12-14 16:20:00','yyyy-mm-dd hh24:mi:ss')
  3. ERROR at line 1:
  4. ORA-08189: cannot flashback the table because row movement is not enabled
  5. SQL> select row_movement from dba_tables where table_name='DEPT' and owner='SCOTT';
  6. ROW_MOVE
  7. --------
  8. DISABLED
  9. SQL> alter table scott.dept enable row movement;
  10. Table altered.
  11. SQL> flashback table scott.dept to timestamp to_timestamp('2017-12-14 16:20:00','yyyy-mm-dd hh24:mi:ss');
  12. Flashback complete.
  13. SQL> select * from scott.dept;
  14. DEPTNO DNAME LOC
  15. ---------- -------------- -------------
  16. ACCOUNTING NEW YORK
  17. RESEARCH DALLAS
  18. SALES CHICAGO
  19. OPERATIONS BOSTON
  20. SQL> alter table scott.dept disable row movement;
  21. Table altered.

(3)闪回DROP(drop table)

当一个表被drop掉,表会被放入recyclebin回收站,可通过回收站做表的闪回。表上的索引、约束等同样会被恢复
不支持sys/system用户表空间对象,可通过alter system set recyclebin=off;关闭回收站功能
闪回DROP示例:
注意:哪个用户删除的表,用哪个用户闪回

  1. SQL> select * from t ;
  2. ID NAME
  3. ---------- ---------------------------------------
  4. 2
  5. 4
  6. SQL> drop table t;
  7. Table dropped.
  8. SQL> show recyclebin;
  9. ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
  10. ---------------- ------------------------------ ------------ -------------------
  11. T BIN$YEh2QcvZdJLgUxyAgQpnVQ==$0 TABLE 2017-12-14:15:02:06
  12. SQL> flashback table t to before drop;
  13. Flashback complete.
  14. SQL> select * from t;
  15. ID NAME
  16. ---------- -------------------------------------
  17. 2
  18. 4

备注:即使不开始flashback,只要开启了recyclebin,那么就可以闪回DROP表

但如果连续覆盖,就需要指定恢复的表名,如果已经存在表,则需要恢复重命名

  1. SQL> show recyclebin;
  2. ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
  3. ---------------- ------------------------------ ------------ -------------------
  4. T BIN$YEh2QcvddJLgUxyAgQpnVQ==$0 TABLE 2017-12-14:15:07:54
  5. T BIN$YEh2QcvcdJLgUxyAgQpnVQ==$0 TABLE 2017-12-14:15:07:27
  6. SQL> flashback table "BIN$YEh2QcvcdJLgUxyAgQpnVQ==$0" to before drop ;
  7. Flashback complete.
  8. SQL> show recyclebin;
  9. ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
  10. ---------------- ------------------------------ ------------ -------------------
  11. T BIN$YEh2QcvddJLgUxyAgQpnVQ==$0 TABLE 2017-12-14:15:07:54
  12. SQL> flashback table t to before drop rename to tt;
  13. Flashback complete.

(4)闪回数据库(truncate/多表数据变更)

数据库闪回必须在mounted状态下进行,基于快照的可以再open下进行闪回库
闪回数据库主要是将数据库还原值过去的某个时间点或SCN,用于数据库出现逻辑错误时,需要open database resetlogs
a.全库闪回
数据库闪回示例

  1. SQL> select * from scott.EMP;
  2. EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
  3. ---------- ---------- --------- ---------- ------------------- ---------- ---------- ----------
  4. SMITH CLERK 7902 1980-12-17 00:00:00 800 20
  5. ALLEN SALESMAN 7698 1981-02-20 00:00:00 1600 300 30
  6. WARD SALESMAN 7698 1981-02-22 00:00:00 1250 500 30
  7. JONES MANAGER 7839 1981-04-02 00:00:00 2975 20
  8. MARTIN SALESMAN 7698 1981-09-28 00:00:00 1250 1400 30
  9. BLAKE MANAGER 7839 1981-05-01 00:00:00 2850 30
  10. CLARK MANAGER 7839 1981-06-09 00:00:00 2450 10
  11. SCOTT ANALYST 7566 1987-04-19 00:00:00 3000 20
  12. KING PRESIDENT 1981-11-17 00:00:00 5000 10
  13. TURNER SALESMAN 7698 1981-09-08 00:00:00 1500 0 30
  14. ADAMS CLERK 7788 1987-05-23 00:00:00 1100 20
  15. JAMES CLERK 7698 1981-12-03 00:00:00 950 30
  16. FORD ANALYST 7566 1981-12-03 00:00:00 3000 20
  17. MILLER CLERK 7782 1982-01-23 00:00:00 1300 10
  18. rows selected.
  19. SQL> truncate table scott.EMP;
  20. Table truncated.
  21. SQL> shutdown immediate;
  22. Database closed.
  23. Database dismounted.
  24. ORACLE instance shut down.
  25. SQL> startup mount;
  26. ORACLE instance started.
  27. Total System Global Area 9.4067E+10 bytes
  28. Fixed Size 2263936 bytes
  29. Variable Size 9395242112 bytes
  30. Database Buffers 8.4557E+10 bytes
  31. Redo Buffers 112766976 bytes
  32. Database mounted.
  33. SQL> flashback database to timestamp to_timestamp('2017-12-14 14:12:46','yyyy-mm-dd HH24:MI:SS');
  34. Flashback complete.
  35. SQL> alter database open resetlogs;
  36. Database altered.
  37. SQL> select * from scott.emp;
  38. EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
  39. ---------- ---------- --------- ---------- ------------------- ---------- ---------- ----------
  40. SMITH CLERK 7902 1980-12-17 00:00:00 800 20
  41. ALLEN SALESMAN 7698 1981-02-20 00:00:00 1600 300 30
  42. WARD SALESMAN 7698 1981-02-22 00:00:00 1250 500 30
  43. JONES MANAGER 7839 1981-04-02 00:00:00 2975 20
  44. MARTIN SALESMAN 7698 1981-09-28 00:00:00 1250 1400 30
  45. BLAKE MANAGER 7839 1981-05-01 00:00:00 2850 30
  46. CLARK MANAGER 7839 1981-06-09 00:00:00 2450 10
  47. SCOTT ANALYST 7566 1987-04-19 00:00:00 3000 20
  48. KING PRESIDENT 1981-11-17 00:00:00 5000 10
  49. TURNER SALESMAN 7698 1981-09-08 00:00:00 1500 0 30
  50. ADAMS CLERK 7788 1987-05-23 00:00:00 1100 20
  51. JAMES CLERK 7698 1981-12-03 00:00:00 950 30
  52. FORD ANALYST 7566 1981-12-03 00:00:00 3000 20
  53. MILLER CLERK 7782 1982-01-23 00:00:00 1300 10
  54. rows selected.

b.快照闪回
针对主库和备库都可以创建闪回快照点,然后恢复到指定的快照点,但主库一旦恢复到快照点,备库的同步则需要重新同步

  1. SQL> select * from scott.dept;
  2. DEPTNO DNAME LOC ADDR
  3. ---------- -------------- ------------- ------------------------------
  4. ACCOUNTING NEW YORK
  5. RESEARCH DALLAS
  6. SALES CHICAGO
  7. SQL> create restore point before_201712151111 guarantee flashback database;
  8. Restore point created.
  9. SQL> create table scott.t as select * from scott.dept;
  10. Table created.
  11. SQL> truncate table scott.t;
  12. Table truncated.
  13. SQL> shutdown immediate;
  14. Database closed.
  15. Database dismounted.
  16. ORACLE instance shut down.
  17. SQL> startup mount;
  18. ORACLE instance started.
  19. Total System Global Area 9.4067E+10 bytes
  20. Fixed Size 2263936 bytes
  21. Variable Size 9663677568 bytes
  22. Database Buffers 8.4289E+10 bytes
  23. Redo Buffers 112766976 bytes
  24. Database mounted.
  25. SQL> flashback database to restore point before_201712151111;
  26. Flashback complete.
  27. SQL> alter database open resetlogs;
  28. Database altered.
  29. 此时主库scott.t已不存在:
  30. SQL> select * from scott.t;
  31. select * from scott.t
  32. *
  33. ERROR at line 1:
  34. ORA-00942: table or view does not exist
  35. 此时从库的scott.依旧存在,主备同步终止
  36. 解决方案:在主库创建快照时间点,从库自动停止应用日志,等主库闪回后,重新应用日志即可。
  37. 如果已经做了上述操作,从库可以选择重建
  38. ALTER DATABASE REGISTER LOGFILE '/xx/xx/archive.dbf';

c.闪回snapshot standby
此功能在11GR2非常实用,可自动创建闪回点、开启闪回日志,可完成线上数据测试后,然后做数据库闪回恢复主备关系

  1. select scn, STORAGE_SIZE ,to_char(time,'yyyy-mm-dd hh24:mi:ss') time,NAME from v$restore_point;
  2. select database_role,open_mode,db_unique_name,flashback_on from v$database;
  3. SQL> set line 200;
  4. SQL> set pagesize 2000;
  5. SQL> select database_role,open_mode,db_unique_name,flashback_on from v$database;
  6. DATABASE_ROLE OPEN_MODE DB_UNIQUE_NAME FLASHBACK_ON
  7. ---------------- -------------------- ------------------------------ ------------------
  8. PHYSICAL STANDBY READ ONLY testdbms NO
  9. SQL> ALTER DATABASE CONVERT TO SNAPSHOT STANDBY;
  10. Database altered.
  11. SQL> select database_role,open_mode,db_unique_name,flashback_on from v$database;
  12. DATABASE_ROLE OPEN_MODE DB_UNIQUE_NAME FLASHBACK_ON
  13. ---------------- -------------------- ------------------------------ ------------------
  14. SNAPSHOT STANDBY MOUNTED testdbms RESTORE POINT ONLY
  15. SQL> alter database open;
  16. Database altered.
  17. SQL> select open_mode from v$database;
  18. OPEN_MODE
  19. --------------------
  20. READ WRITE
  21. 此时备库操作:
  22. SQL> select * from scott.emp;
  23. EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
  24. ---------- ---------- --------- ---------- ------------------- ---------- ---------- ----------
  25. SMITH CLERK 7902 1980-12-17 00:00:00 800 20
  26. ALLEN SALESMAN 7698 1981-02-20 00:00:00 1600 300 30
  27. WARD SALESMAN 7698 1981-02-22 00:00:00 1250 500 30
  28. JONES MANAGER 7839 1981-04-02 00:00:00 2975 20
  29. MARTIN SALESMAN 7698 1981-09-28 00:00:00 1250 1400 30
  30. BLAKE MANAGER 7839 1981-05-01 00:00:00 2850 30
  31. CLARK MANAGER 7839 1981-06-09 00:00:00 2450 10
  32. SCOTT ANALYST 7566 1987-04-19 00:00:00 3000 20
  33. KING PRESIDENT 1981-11-17 00:00:00 5000 10
  34. TURNER SALESMAN 7698 1981-09-08 00:00:00 1500 0 30
  35. ADAMS CLERK 7788 1987-05-23 00:00:00 1100 20
  36. JAMES CLERK 7698 1981-12-03 00:00:00 950 30
  37. FORD ANALYST 7566 1981-12-03 00:00:00 3000 20
  38. MILLER CLERK 7782 1982-01-23 00:00:00 1300 10
  39. rows selected.
  40. SQL> truncate table scott.emp;
  41. Table truncated.
  42. 主库操作:
  43. SQL> create table scott.t as select * from scott.dept;
  44. Table created.
  45. SQL> select * from scott.t;
  46. DEPTNO DNAME LOC ADDR
  47. ---------- -------------- ------------- ------------------------------
  48. ACCOUNTING NEW YORK
  49. RESEARCH DALLAS
  50. SALES CHICAGO
  51. 备库恢复到物理standby
  52. SQL> shutdown immediate;
  53. Database closed.
  54. Database dismounted.
  55. ORACLE instance shut down.
  56. SQL> startup mount;
  57. ORACLE instance started.
  58. Total System Global Area 9.4067E+10 bytes
  59. Fixed Size 2263936 bytes
  60. Variable Size 9663677568 bytes
  61. Database Buffers 8.4289E+10 bytes
  62. Redo Buffers 112766976 bytes
  63. Database mounted.
  64. SQL> ALTER DATABASE CONVERT TO PHYSICAL STANDBY;
  65. Database altered.
  66. SQL> shutdown immediate;
  67. ORA-01507: database not mounted
  68. ORACLE instance shut down.
  69. SQL> startup ;
  70. ORACLE instance started.
  71. Total System Global Area 9.4067E+10 bytes
  72. Fixed Size 2263936 bytes
  73. Variable Size 9663677568 bytes
  74. Database Buffers 8.4289E+10 bytes
  75. Redo Buffers 112766976 bytes
  76. Database mounted.
  77. Database opened.
  78. ##此时备库的数据已经恢复到转变snapshot standby时间点
  79. SQL> select database_role,open_mode,db_unique_name,flashback_on from v$database;
  80. DATABASE_ROLE OPEN_MODE DB_UNIQUE_NAME FLASHBACK_ON
  81. ---------------- -------------------- ------------------------------ ------------------
  82. PHYSICAL STANDBY READ ONLY testdbms NO
  83. SQL> select * from scott.emp;
  84. EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
  85. ---------- ---------- --------- ---------- ------------------- ---------- ---------- ----------
  86. SMITH CLERK 7902 1980-12-17 00:00:00 800 20
  87. ALLEN SALESMAN 7698 1981-02-20 00:00:00 1600 300 30
  88. WARD SALESMAN 7698 1981-02-22 00:00:00 1250 500 30
  89. JONES MANAGER 7839 1981-04-02 00:00:00 2975 20
  90. MARTIN SALESMAN 7698 1981-09-28 00:00:00 1250 1400 30
  91. BLAKE MANAGER 7839 1981-05-01 00:00:00 2850 30
  92. CLARK MANAGER 7839 1981-06-09 00:00:00 2450 10
  93. SCOTT ANALYST 7566 1987-04-19 00:00:00 3000 20
  94. KING PRESIDENT 1981-11-17 00:00:00 5000 10
  95. TURNER SALESMAN 7698 1981-09-08 00:00:00 1500 0 30
  96. ADAMS CLERK 7788 1987-05-23 00:00:00 1100 20
  97. JAMES CLERK 7698 1981-12-03 00:00:00 950 30
  98. FORD ANALYST 7566 1981-12-03 00:00:00 3000 20
  99. MILLER CLERK 7782 1982-01-23 00:00:00 1300 10
  100. rows selected.
  101. SQL> alter database recover managed standby database using current logfile disconnect;
  102. Database altered.
  103. SQL> select * from scott.t;
  104. DEPTNO DNAME LOC ADDR
  105. ---------- -------------- ------------- ------------------------------
  106. ACCOUNTING NEW YORK
  107. RESEARCH DALLAS
  108. SALES CHICAGO
  109. SQL> select database_role,open_mode,db_unique_name,flashback_on from v$database;
  110. DATABASE_ROLE OPEN_MODE DB_UNIQUE_NAME FLASHBACK_ON
  111. ---------------- -------------------- ------------------------------ ------------------
  112. PHYSICAL STANDBY READ ONLY WITH APPLY testdbms NO

(5)闪回归档(增加、修改、重命名、删除表的列、truncate表、修改表的约束、以及修改分区表的分区规范)
3、闪回注意事项
(1)数据库闪回需要在mounted下进行,并且open时需要使用resetlogs
(2)闪回DROP只能用于非系统表空间和本地管理的表空间,外键约束无法恢复,对方覆盖、重命名需注意
(3)表DROP,对应的物化视图会被彻底删除,物化视图不会存放在recyclebin里
(4)闪回表,如果在做过dml,然后进行了表结构修改、truncate等DDL操作,新增/删除结构无法做闪回
(5)闪回归档,必须在assm管理tablespace和undo auto管理下进行
(6)注意闪回区管理,防止磁盘爆满,闪回区空间不足等
(7)主库做库的闪回,会影响备库,需要重新同步
(8)snapshot standby 不支持最高保护模式

三、备注

1、相关数据字典
V$FLASHBACK_DATABASE_LOG ##查看数据库可闪回的时间点/SCN等信息 V$flashback_database_stat ##查看闪回日志空间记录信息
2、常用查询语句
(1)查看数据库状态

  1. SQL> select NAME,OPEN_MODE ,DATABASE_ROLE,CURRENT_SCN,FLASHBACK_ON from v$database;
  2. NAME OPEN_MODE DATABASE_ROLE CURRENT_SCN FLASHBACK_ON
  3. ------------- -------------------- ---------------- ----------- ------------------
  4. TESTDB READ WRITE PRIMARY 16812246 YES

(2)获取当前数据库的系统时间和SCN

  1. SQL> select to_char(systimestamp,'yyyy-mm-dd HH24:MI:SS') as sysdt , dbms_flashback.get_system_change_number scn from dual;
  2. SYSDT SCN
  3. ------------------- ----------
  4. 2017-12-14 14:28:33 16813234

(3)查看数据库可恢复的时间点

  1. SQL> select * from V$FLASHBACK_DATABASE_LOG;
  2. OLDEST_FLASHBACK_SCN OLDEST_FLASHBACK_TI RETENTION_TARGET FLASHBACK_SIZE ESTIMATED_FLASHBACK_SIZE
  3. -------------------- ------------------- ---------------- -------------- ------------------------
  4. 16801523 2017-12-14 11:35:05 4320 104857600 244113408

(4)查看闪回日志空间情况

  1. SQL> select * from V$flashback_database_stat;
  2. BEGIN_TIME END_TIME FLASHBACK_DATA DB_DATA REDO_DATA ESTIMATED_FLASHBACK_SIZE
  3. ------------------- ------------------- -------------- ---------- ---------- ------------------------
  4. 2017-12-14 14:34:53 2017-12-14 14:56:43 1703936 9977856 1487872 0

(5)SCN和timestamp装换关系查询
select scn,to_char(time_dp,'yyyy-mm-dd hh24:mi:ss')from sys.smon_scn_time;
(6)查看闪回restore_point
select scn, STORAGE_SIZE ,to_char(time,'yyyy-mm-dd hh24:mi:ss') time,NAME from v$restore_point;
(7)闪回语句
a.闪回数据库
FLASHBACK DATABASE TO TIMESTAMP to_timestamp('2017-12-14 14:28:33','yyyy-mm-dd HH24:MI:SS');;``flashback database to scn 16813234;
b.闪回DROP
其中table_name可以是删除表名称,也可以是别名
flashback table table_name to before drop;``flashback table table_name to before drop rename to table_name_new;
c.闪回表
flashback table table_name to scn scn_number;``flashback table table_name to timestamp to_timestamp('2017-12-14 14:28:33','yyyy-mm-dd hh24:mi:ss');
d.闪回查询
select * from table_name as of timestamp to_timestamp('2017-12-14 14:28:33','yyyy-mm-dd hh24:mi:ss');``select * from scott.dept as of scn 16801523;
e.闪回快照
create restore point before_201712151111 guarantee flashback database; flashback database to restore point before_201712151111;

三种恢复技术的区别

  • rman备份还原:用在数据库的大面积故障恢复,数据库打不开,恢复
  • 数据泵(导入导出)备份还原:用在小范围的恢复,恢复某个表的数据
  • 闪回功能:用于恢复数据,恢复速度快,实时留存旧数据(在硬盘上划分一个分区当做闪回区,类似回收站)

    总结

    1.Oracle数据库恢复分类有哪些?【重要】

  • 实例恢复:当Oracle 实例出现失败后,Oracle 自动进行的恢复

  • 介质恢复:

    • 完全恢复:将数据库恢复到数据库失败时的状态
    • 不完全恢复:恢复到数据库失败前的某一时刻的状态

      2.备份策略分类有哪些?

  • 完全备份,增量备份,差异备份