关于oracle:Oracle数据库备份和恢复

7次阅读

共计 5768 个字符,预计需要花费 15 分钟才能阅读完成。

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

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

<!–more–>

介质复原

当产生以下状况时,实例复原有效,须要进行介质复原:

  • 数据文件失落,损坏。
  • 在线日志文件 (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;

数据库已更改。

记得帮我点赞哦!

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

朝思暮想,必有回响,小伙伴们帮我点个赞吧,非常感谢。

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

听我说,提高多,程序人生一把梭

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

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

自己所有文章、答复都与版权保护平台有单干,著作权归职场亮哥所有,未经受权,转载必究!

正文完
 0