前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据库备份和恢复

数据库备份和恢复

作者头像
职场亮哥
发布2020-10-10 10:41:02
2K0
发布2020-10-10 10:41:02
举报
文章被收录于专栏:职场亮哥职场亮哥

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命令,会经过启动装载打开三个步骤。
代码语言:javascript
复制
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备份的步骤如下:

代码语言:javascript
复制
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

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

代码语言:javascript
复制
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

数据库的闪回

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

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

代码语言:javascript
复制
select flashback_on from v$database;

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

代码语言:javascript
复制
alter database flashback on;

基于SCN的闪回

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

基于时间的闪回

数据库闪回到具体时间

表的闪回

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

代码语言:javascript
复制
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)

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

代码语言:javascript
复制
SQL> drop table t1 purge;

关于回收站的资料如下:

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

DML操作的闪回
事务的闪回
版本的闪回

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

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

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

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

代码语言:javascript
复制
SQL> select name,log_mode from v$database;

NAME      LOG_MODE
--------- ------------
ORCL      NOARCHIVELOG

SQL> archive log list;
数据库日志模式             非存档模式
自动存档             禁用
存档终点            USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列     28
当前日志序列           30

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

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

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

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

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

代码语言:javascript
复制
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;

数据库已更改。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-03-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 实例的恢复 crash recovery
  • 介质恢复
  • Oracle的备份方式
    • Rman(物理备份)–Recovery Manager
      • exp,expdp(逻辑备份)
        • 只读表空间+传递表空间
          • Dataguard–重点
            • Oracle的闪回技术–flashback
              • 数据库的闪回
              • 表的闪回
              • DML操作的闪回
              • 事务的闪回
              • 版本的闪回
          相关产品与服务
          数据库
          云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档