不完全恢復分為用戶不完全恢復和RMAN不完全恢復。若聯機重做日志文件或者歸檔日志文件有丟失,則只能進行不完全恢復。

一.不完全恢復的分類

1.time recover選項,指定恢復到某個時間點,常用。

2.cancel recover選項,停止在某個日志切換序列號處,通常只在歸檔日志文件受損或丟失的情況下使用,從而無法進一步恢復。

3.change-base recover選項,指定到某個SCN號。

4.在所有情況下都將恢復到恰好在請求的停止點之前的變更向量,比如將不會應用到指定的SCN。

二.執行不完全恢復的步驟

1.關閉和備份數據庫或者某些數據文件;

2.加載數據庫。

3.還原數據文件(必要時還原控制文件);

4.將數據庫恢復到某個時間點;

5.使用重置日志(resetlog)打開數據庫。

三.基於時間的恢復

指定到某個時間點,但是要注意其時間的格式是不允許改變的,無論在SQL*PLUS會話中如何設置它的NLS_DATE_FORMAT ,日期必須是yyyy-mm-dd:hh24:mi:ss。

1.在用戶Dave下創建個表sunny,插入數據,

SQL> create table sunny  (id int,name char(10))  tablespace  app1;

Table created.

SQL> insert into sunny values(0,'baby');

1 row created.

SQL> commit;

Commit complete.

手動發生檢查點,

SQL> alter system checkpoint;

System altered.

這樣數據寫進了數據文件app1_01.dbf。

2.關閉數據庫,對app1_01.dbf數據文件做個備份,插入新的數據

備份數據文件,

[oracle@oracle11g wilson]$ cp   app1_01.dbf     /u01/ubackup/cold

打開數據庫,插入新數據

SQL> insert into sunny values(1,'Jasper');

1 row created.

SQL> commit;

Commit complete.

查看當前時間,

SQL> select to_char(sysdate,'DD-MON-YYYY HH24:MI:SS')  from dual;

TO_CHAR(SYSDATE,'DD-MON-YYYYH

-----------------------------

04-SEP-2013 12:52:34

3.刪除表,再恢復回來,

SQL> drop table sunny;

Table dropped.

關閉數據庫,刪除數據文件,再還原備份的數據文件(這個文件中不含有新的數據),

[oracle@oracle11g wilson]$ rm -f app1_01.dbf

還原數據文件,

[oracle@oracle11g backup]$ cp   /u01/backup/app1_01.dbf  /u01/oradata/wilson/

4.將數據庫置於mount狀態,恢復表

SQL> recover database until time '2013-09-04:12:52:22';

Media recovery complete.

指定時間點,打開數據庫,

SQL> alter database  open resetlogs;

即可。

四.基於cancel的恢復

1.關閉數據庫,備份數據庫,命令如下,

[root@oracle11g wilson]# cp /u01/oradata/wilson/*  /u01/ubackup/cold/

2.打開數據庫,在表Dave.sunny中插入數據,

SQL> insert into sunny values(3,'memory');

1 row created.

SQL> commit;——————數據存於聯機重做日志中

Commit complete.

SQL> alter system checkpoint;——————數據存於數據文件中

System altered.

SQL> alter system  archive log current;——————數據存於歸檔日志中

System altered.

可以看到記錄(3,‘memory’)存於數據文件,聯機重做日志文件和歸檔日志文件中。

3.插入新數據,不放在歸檔日志中

SQL> insert into sunny values(4,'king');

1 row created.

SQL> commit;——————數據存於聯機重做日志中

Commit complete.

SQL> alter system checkpoint;——————數據存於數據文件中

System altered.

4.先備份控制文件

SQL> alter database backup controlfile to trace as '/tmp/wilson.sql';

Database altered.

然后除了歸檔日志文件,把其它文件都刪除了,關閉數據庫,把備份的數據文件還原(沒有控制文件和聯機重做日志文件),

[root@oracle11g wilson]# cp   /u01/ubackup/cold/*.dbf   /u01/oradata/wilson/

5.修改備份的控制文件腳本

如果不用腳本創建,可以復制個二進制的控制文件,復制過去即可;

在腳本中有兩組恢復方法:a.在聯機重做日志正常的情況下,

b.在聯機重做日志不正常的情況下,

a方法在用戶管理的恢復(三)中使用了,請參照:Oracle—用戶管理的完全恢復(三)

這里使用b方法,打開腳本修改一下,

STARTUP NOMOUNT

CREATE CONTROLFILE REUSE DATABASE "WILSON" RESETLOGS  ARCHIVELOG

MAXLOGFILES 16

MAXLOGMEMBERS 3

MAXDATAFILES 100

MAXINSTANCES 8

MAXLOGHISTORY 292

LOGFILE

GROUP 1 '/u01/oradata/wilson/redo01.log'  SIZE 50M BLOCKSIZE 512,

GROUP 2 '/u01/oradata/wilson/redo02.log'  SIZE 50M BLOCKSIZE 512,

GROUP 3 '/u01/oradata/wilson/redo03.log'  SIZE 50M BLOCKSIZE 512

DATAFILE

'/u01/oradata/wilson/system01.dbf',

'/u01/oradata/wilson/sysaux01.dbf',

'/u01/oradata/wilson/undotbs01.dbf',

'/u01/oradata/wilson/users01.dbf',

'/u01/oradata/wilson/example01.dbf',

'/u01/oradata/wilson/app1_01.dbf',

'/u01/oradata/wilson/smallundo1.dbf'

CHARACTER SET AL32UTF8

;

注意上面語句之間能有空格行,

中間略..........

下面語句是腳本中的,也刪除了,可以手工執行,

RECOVER DATABASE USING BACKUP CONTROLFILE

ALTER DATABASE OPEN RESETLOGS;

ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/oradata/wilson/temp01.dbf'

SIZE 30408704  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;

ALTER TABLESPACE MYTEMP ADD TEMPFILE '/u01/oradata/wilson/mytemp01.dbf'

SIZE 104857600  REUSE AUTOEXTEND OFF;

執行腳本,

SQL> @/tmp/wilson.sql

執行下面語句,因為聯機重做日志丟失,所以恢復到某個日志切換序列號處,

SQL> recover database using backup controlfile until  cancel;

提示,輸入cancel

打開數據庫,

SQL> alter database open resetlogs;

然后執行恢復臨時表空間,

ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/oradata/wilson/temp01.dbf'

SIZE 30408704  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;

ALTER TABLESPACE MYTEMP ADD TEMPFILE '/u01/oradata/wilson/mytemp01.dbf'

SIZE 104857600  REUSE AUTOEXTEND OFF;

是腳本中的語句。

為什么刪除腳本最后的四條語句?   因為沒有了聯機重做日志文件,所以腳本中RECOVER DATABASE USING BACKUP CONTROLFILE命令會出錯,必須要使用until cancel進行人工干預。

6.查看表Dave.sunny

SQL> select * from sunny;

ID NAME

---------- ----------

3 memory

0 baby

1 Jasper

可以看到沒有了記錄(4,’king’),這是因為記錄(3,’memory’)被存放到了歸檔日志文件中,而記錄4沒有,所以只能是不完全的恢復。

五.基於系統更改號的恢復

找到需要指定恢復的SCN號,然后使用命令recover database until change號即可;

方法和上面說明的差不多。

六.RMAN的不完全恢復

它和用戶管理的不完全恢復差不多,只是是使用RMAN來進行的,下面來舉個例子來說明一下,

1.在Dave用戶下,創建表和插入數據,

SQL> create table test (id int,name char(10));

Table created.

SQL> insert  into test values(0,'heihei');

1 row created.

SQL> commit;

寫到數據文件中

SQL> alter system  checkpoint;

System altered.

2.RMAN連接上數據庫,備份數據文件

RMAN> backup   database  format    '/u01/backup/rman_hot_%U';

3.記錄時間和刪除表

SQL> select to_char(sysdate,'YYYY-MM-DD:HH24:MI:SS') from dual;

TO_CHAR(SYSDATE,'YY

-------------------

2013-09-06:00:53:43

SQL> drop  table test;

Table dropped.

現在怎么恢復表? 在10g版本引用了閃回技術,可以使不完全恢復更方便。

4.在這里數據庫進入mount狀態,RMAN連接數據執行腳本

RMAN> run{

2> allocate channel c1 type disk;

3> allocate channel c2 type disk;

4> allocate channel c3 type disk;

5> set until time  “2013-09-06:00:53:43';

6> restore  database;

7> recover  database;

8> alter database open resetlogs;}

即可。

RMAN的不完全恢復還可以指定日志文件的sequence號,命令如下,

Set  until sequence 120  thread 1;

oracle不完全恢复类型,Oracle——不完全恢復相关推荐

  1. oracle 创建nchar类型,Oracle NChar类型

    本篇文章帮大家学习Oracle NChar类型,包含了Oracle NChar类型使用方法.操作技巧.实例演示和注意事项,有一定的学习价值,大家可以用来参考. 在本教程中,您将了解Oracle NCH ...

  2. oracle 函数参数类型,ORACLE 11g中的表值函数? (参数化视图)

    搜索热词 过去我已经看过关于这个问题的讨论,比如 here.但是我想知道如果某个地方沿线,或许10g或11g(我们正在使用11g),ORACLE已经对"参数化视图"提供了更好的支持 ...

  3. oracle 怎么创建类型,ORACLE—002:Create之创建类型

    --积累工作中用到的SQL ORACLE中也是有类型的,可作为存储过程,函数等的输入输入出. 下面看下创建. 用法 CREATE OR REPLACE TYPE 类型名称 AS OBJECT ( 字段 ...

  4. oracle使用text类型,oracle数据库中text类型用什么类型表示

    oracle对于大文本数据用clob类型. 但对于这个类型处理起来还是比较麻烦,varchar2长度为4000bytes,如果varchar2能满足需求的话,建议使用varchar2. 扩展资料: O ...

  5. oracle数据库 number类型,oracle 数据库 NUMBER类型细讲

    1>.NUMBER类型细讲: Oracle number datatype 语法:NUMBER[(precision [, scale])] 简称:precision --> p scal ...

  6. Oracle 队列锁类型 Oracle Enqueue Lock Type Reference including 11g new locks

    内部视图x$ksqst记录了以enqueue type分类的队列管理统计信息(Enqueue management statistics by type),ksqstwat列反映了等待次数,而ksqs ...

  7. oracle的hints类型,Oracle Hints详解

    在向大家详细介绍Oracle Hints之前,首先让大家了解下Oracle Hints是什么,然后全面介绍Oracle Hints,希望对大家有用.基于代价的优化器是很聪明的,在绝大多数情况下它会选择 ...

  8. oracle的hints类型,oracle中的sql语句优化附件_HINTS

    j介绍了hints的用法 运用HINT提高SQL语句的执行效率 1. 使用HINTS的目的 hints是oracle提供的一种机制,用来告诉优化器按照我们的告诉它的方式生成执行计划.我们可以用hint ...

  9. oracle 强制转类型,Oracle 数据类型转换

    -- Start Oracle 为每种数据类型都提供了相应的函数,一般情况下它们之间的相互转换是非常简单的,Oracle 提供的函数有: CAST 将一种类型转成另一种类型 TO_DATE 将字符串转 ...

  10. oracle的string类型,oracle 数据类型之‘字符串’

    所谓可变长度:是指当输入的字段值小于该字段的限制长度时,直接将字段值的内容存储到数据块中,而不会补上空白,这样可以节省数据块空间. 1. CHAR类型 CHAR(size [BYTE | CHAR]) ...

最新文章

  1. 项目用的几种机型参数调查
  2. 随手记录自动化常用的一些事情
  3. 企业微服务:搭建环境
  4. iOS - LocalCache 本地数据缓存
  5. java js webservice_java Web技术探路:js Ajax调用WebService
  6. Dojo学习笔记(8. dojo.event dojo.event.topic dojo.event.browser)
  7. Python学习之Python安装
  8. [转载]企业网站建设必知必会
  9. C++判断进程id是否存在
  10. C++之指针探究(二):一级指针和一维数组
  11. Linux学习总结(81)—— Linux 权限详解
  12. 如何有逻辑的,简单清晰的回应问题
  13. make条件判断ifeq,ifneq,ifdef,ifndef
  14. CentOS 6.5忘记root密码,怎么办?
  15. 管理工作时间的软件有哪些?
  16. TCP报文-选项字段
  17. android小米卸载app,MIUI系统软件卸载工具
  18. grunt html模块化管理插件,grunt模块化配置
  19. ESXI安装OpenWRT LEDE软路由部署指南(附镜像下载)
  20. 0x03数据类型和变量

热门文章

  1. 关于未来交通,这些大咖在未来论坛上的讨论火花四溅
  2. 转四种常见的post请求
  3. linux内核之字符设备驱动图解
  4. spark集成hbase与hive数据转换与代码练习
  5. cocos2dx打飞机项目笔记一:项目结构介绍
  6. flex 学习笔记 tree的各个子级的颜色
  7. 社区奖品之金士顿1G U盘
  8. HTML语言剖析(二)HTML标记一览
  9. 栈溢出脚本_CTF必备技能丨Linux Pwn入门教程——栈溢出基础
  10. Abp 为Swagger接口页添加详细注释