RMAN作为Oracle强大的备份恢复工具,可以协助我们恢复数据库到指定时间点,这便是Oracle不完全恢复的一种体现,通过这种方法可以找回我们曾经丢失的数据。这里以找回误TRUNCATE表数据为例给大家演示一下RMAN的不完全恢复功能。

1.调整数据库为归档模式

[oracle@hear ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Thu Jul 25 09:28:42 2019

Copyright (c) 1982, 2013, Oracle. All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/arch
Oldest online log sequence 4
Next log sequence to archive 6
Current log sequence 6
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.

Total System Global Area 2137886720 bytes
Fixed Size 2254952 bytes
Variable Size 1744832408 bytes
Database Buffers 385875968 bytes
Redo Buffers 4923392 bytes
Database mounted.
SQL> alter database archivelog;

Database altered.

SQL> alter database open;

Database altered.

2.使用RMAN对数据库进行备份

备份数据库

[oracle@hear ~]$ rman target /

Recovery Manager: Release 11.2.0.4.0 - Production on Thu Jul 25 09:50:48 2019

Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.

connected to target database: HEARDB (DBID=3039837723)

RMAN> backup database;

查看备份信息:

RMAN> list backup;

List of Backup Sets
===================

BS Key Type LV Size Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
20 Full 1.12G DISK 00:01:35 19-JUN-19
BP Key: 20 Status: AVAILABLE Compressed: NO Tag: TAG20190619T233050
Piece Name: /home/oracle/backup/system_0ru4hc1a_1_1
List of Datafiles in backup set 20
File LV Type Ckp SCN Ckp Time Name
---- -- ---- ---------- --------- ----
1 Full 1393463 19-JUN-19 /home/oracle/app/oradata/heardb/system01.dbf
2 Full 1393463 19-JUN-19 /home/oracle/app/oradata/heardb/sysaux01.dbf
3 Full 1393463 19-JUN-19 /home/oracle/app/oradata/heardb/undotbs01.dbf
4 Full 1393463 19-JUN-19 /home/oracle/app/oradata/heardb/users01.dbf
5 Full 1393463 19-JUN-19 /home/oracle/app/oradata/heardb/example01.dbf

3.模拟数据库故障——表的误r_user

SQL> select count(*) from caodeng.r_user;

COUNT(*)
----------
5

SQL> alter session set nls_date_format='yyyy-mm-dd';

Session altered.

SQL> select sysdate from dual;

SYSDATE
----------
2019-07-25

SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';

Session altered.

SQL> select sysdate from dual;

SYSDATE
-------------------
2019-07-25 09:36:12

删除表

SQL> truncate table caodeng.r_user;

Table truncated.

SQL> select count(*) from caodeng.r_user;

COUNT(*)
----------
0

4.使用RMAN恢复到故障发生之前的时间点

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.

Total System Global Area 2137886720 bytes
Fixed Size 2254952 bytes
Variable Size 1744832408 bytes
Database Buffers 385875968 bytes
Redo Buffers 4923392 bytes
Database mounted.

2)使用RMAN脚本恢复数据库到指定时间点
(1)恢复脚本如下:

run {
allocate channel c1 type disk;
allocate channel c2 type disk;
sql 'alter session set nls_date_format="yyyy-mm-dd hh24:mi:ss"';
set until time = '2019-07-25 09:36:12';
restore database;
recover database;
alter database open resetlogs;}

记录恢复过程:

RMAN> run {
allocate channel c1 type disk;
allocate channel c2 type disk;
sql 'alter session set nls_date_format="yyyy-mm-dd hh24:mi:ss"';
set until time = '2019-07-25 09:36:12';
restore database;
recover database;
alter database open resetlogs;}2> 3> 4> 5> 6> 7> 8>

using target database control file instead of recovery catalog
allocated channel: c1
channel c1: SID=1135 device type=DISK

allocated channel: c2
channel c2: SID=2267 device type=DISK

sql statement: alter session set nls_date_format="yyyy-mm-dd hh24:mi:ss"

executing command: SET until clause

Starting restore at 25-JUL-19

channel c1: starting datafile backup set restore
channel c1: specifying datafile(s) to restore from backup set
channel c1: restoring datafile 00001 to /home/oracle/app/oradata/heardb/system01.dbf
channel c1: restoring datafile 00002 to /home/oracle/app/oradata/heardb/sysaux01.dbf
channel c1: restoring datafile 00003 to /home/oracle/app/oradata/heardb/undotbs01.dbf
channel c1: restoring datafile 00004 to /home/oracle/app/oradata/heardb/users01.dbf
channel c1: restoring datafile 00005 to /home/oracle/app/oradata/heardb/example01.dbf
channel c1: reading from backup piece /home/oracle/backups/db_20190725_30u7h90d
channel c1: piece handle=/home/oracle/backups/db_20190725_30u7h90d tag=TAG20190725T082757
channel c1: restored backup piece 1
channel c1: restore complete, elapsed time: 00:01:36
Finished restore at 25-JUL-19

Starting recover at 25-JUL-19

starting media recovery
media recovery complete, elapsed time: 00:00:03

Finished recover at 25-JUL-19

database opened
released channel: c1
released channel: c2

5.验证恢复成果

[oracle@hear ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Thu Jul 25 09:44:29 2019

Copyright (c) 1982, 2013, Oracle. All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> select count(*(^H
2
SQL> select count(*) from caodeng.r_user;

COUNT(*)
----------
5

SQL>

这样删除的r_user表的数据丢失的已经被完全成功恢复

【RMAN】使用RMAN备份将数据库不完全恢复到指定时间点的更多相关文章

  1. Python备份MySQL数据库【转】

    #!/usr/bin/env python # coding: utf- import os import time ''' defined variable ''' databases=['hch' ...

  2. Linux shell实现每天定时备份mysql数据库

    每天定时备份mysql数据库任务,删除指定天数前的数据,保留指定天的数据: 需求: 1,每天4点备份mysql数据: 2,为节省空间,删除超过3个月的所有备份数据: 3,删除超过7天的备份数据,保留3 ...

  3. Oracle备份恢复之rman备份oracle数据库

    备份需求和rman备份 oracle数据库的备份相关问答: 1)备份时数据库处于何种状态? 备份时数据库处于OPEN状态,这样数据库可以正常工作. 2)备份的数据备份在什么地方? 备份在本地磁盘. 3 ...

  4. ORACLE RMAN备份及还原 RMAN能够进行增量备份:数据库,表空间,数据文件

    ORACLE RMAN备份及还原   RMAN能够进行增量备份:数据库.表空间.数据文件 仅仅有使用过的block能够被备份成backup set 表空间与数据文件相应关系:dba_data_file ...

  5. 使用rman中的duplicate复制数据库

    目标库和复制库环境: OS: Linux Red Hat AS 4 DB Version: 10.2.0.1   1.目标库和复制库信息 Rman 中的目标库(target database)指的是被 ...

  6. 如何通过rman的增量备份恢复dataguard中standby端的数据

    很多正在使用dataguard的客户,都会遇到一个棘手的问题: 在备份端与主库同步的过程中由于网络原因或磁盘问题导致一个或多个归档日志丢失,进而dataguard同步无法继续.很多客户都选择了重新全库 ...

  7. RMAN中建立Catalog 用数据库的例子

    RMAN中可以备份metadata到control文件,也可以备份metadata到数据库中,此数据库称为catalog database. 本文参考网上文章,建立一个例子: 使用机器: 机器1:ta ...

  8. 【转】RMAN删除过期备份或非过期备份

    (一)删除备份--DELETE命令用于删除RMAN备份记录及相应的物理文件.当使用RMAN执行备份操作时,会在RMAN资料库(RMAN Repository)中生成RMAN备份记录,默认情况下RMAN ...

  9. 从Oracle9i RMAN全库备份迁移到 Oracle10g

    1. 创建以下目录: mkdir -pv $ORACLE_BASE/admin/$ORACLE_SID/{{a,b,c,dp,u}dump,pfile} mkdir -pv $ORACLE_BASE/ ...

随机推荐

  1. AI数学基础之:P、NP、NPC问题

    目录 简介 P问题 NP问题 NP问题的例子 有些NP问题很难解决 NPC问题 NP-hard P和NP问题 简介 我们在做组合优化的时候需要去解决各种问题,根据问题的复杂度不同可以分为P.NP.NP ...

  2. kubernetes addons之node-problem-detector

    node-problem-detector简介 node-problem-detector的作用是收集k8s集群管理中节点问题,并将其报告给apiserver.它是在每个节点上运行的守护程序.node ...

  3. hdu1686 最大匹配次数 KMP

    题意:      给你两个串,问你串a在串b中出现了多少次. 思路:       直接匹配,KMP时匹配到匹配串的最后一个的时候不用跳出,直接匹配就行了,最后一个'/0'不会和目标串匹配,所以经过ne ...

  4. android so加载

    本文分析so加载的步骤,其实在之前dalvik浅析二中也有提及,但那重点关注的是jni.android中so库的加载,代码如下: loadLibrary("nanosleep"); ...

  5. LA2678最短子序列

    题意:       给你一个正整数序列,问你在里面找到一个最短的子序列,要求子序列的和大于等于k,输出序列长度. 思路:       这个序列的每个数字都是正整数,那么就比较好想了,我们可以直接枚举终 ...

  6. hdu5033 最大仰望角

    题意:       给你n个楼房排成一条直线,楼房可以看成是宽度为1的线段,然后给你m组询问,每组询问给你一个坐标,输出在当前坐标仰望天空的可视角度. 思路:       n比较大,O(n*m)肯定跪 ...

  7. POJ1376简单广搜

    题意:       给你一个n*m的矩阵,然后给你机器人的起点和终点,还有起点的方向,然后每次机器人有两种操作,左右旋转90度,或者是朝着原来的方向走1,2或者3步,机器人再走的过程中不能碰到格子,也 ...

  8. POJ1087DFS+匈牙利或者DINIC

    题意:      有n个插孔,m个电器,q种转换器(转换器可以无限用),然后问你最多有多少个电器能充电. 思路:       比较简单,就是在建图的时候要考虑下,我用了两种方法做的,一个是最大流,这个 ...

  9. Windows PE变形练手1-用PE自己的机器码修改自己的逻辑

    PE变形练手1-用PE自己的机器码修改自己的逻辑 就是找一个PE文件,用自己的部分代码部分覆盖或者而修改自己另一个代码部分的补丁姿势(现实中使用很少,极少数破解可以用到.这次例子目的是了解PE). 第 ...

  10. 每天一道面试题LeetCode 26--删除排序数组中的重复项(python实现)

    题目1:给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成. ...