DM8备份恢复实战

  • 归档配置

1.1 概述

DM 数据库可以运行在归档模式或非归档模式下。如果是归档模式,联机日志文件中的

内容保存到硬盘中,形成归档日志文件;如果是非归档模式,则不会形成归档日志。 

查询 v$dm_arch_ini、v$arch_status 等动态视图可以获取归档配置以及归档状态

等相关信息。 

联机备份数据库必须要配置归档,脱机备份数据库可以配置也可以不配置。正常退出的数据库会调用检查点刷盘,此时归档是完整的。故障推出的数据库必须配置归档。

备份表空间属于联机备份,必须配置归档。

备份表虽然是联机完全备份,但不需要配置归档。因为表在还原之后不需要再进行恢复

操作,用不到归档日志。

备份归档日志必须配置归档。

1.2 联机配置归档

1.2.1 开启归档

alter database mount;

alter database add archivelog 'dest=/dmarch ,TYPE=local,FILE_SIZE=1024,SPACE_LIMIT=102400';

alter database archivelog;

alter database open;

1.2.2 关闭归档

alter database mount;  

alter database noarchivelog;

alter database open;

1.3 手动配置归档

1.3.1 本地归档

(1)配置dmarch.ini

[ARCHIVE_LOCAL1]

ARCH_TYPE = LOCAL

ARCH_DEST = d:\dm_arch\arch

ARCH_FILE_SIZE = 1024

ARCH_SPACE_LIMIT = 2048

ARCH_HANG_FLAG = 1

  1. 修改dm.ini文件中参数ARCH_INI=1并保存。
  2. 启动数据库

1.3.2 远程归档

DSC集群两节点为例

DSC0 实例的 dmarch.ini 配置:

ARCH_LOCAL_SHARE = 1

[ARCHIVE_LOCAL1]

ARCH_TYPE = LOCAL

ARCH_DEST = +DMDATA/dameng/arch_dsc0

ARCH_FILE_SIZE = 128

ARCH_SPACE_LIMIT = 0

ARCH_HANG_FLAG = 1

[ARCH_REMOTE1]

ARCH_TYPE = REMOTE

ARCH_DEST = DSC1

ARCH_INCOMING_PATH =+DMDATA/dameng/arch_dsc1

ARCH_FILE_SIZE = 128

ARCH_SPACE_LIMIT = 0

DSC1 实例的 dmarch.ini 配置:

ARCH_LOCAL_SHARE = 1

[ARCHIVE_LOCAL1]

ARCH_TYPE = LOCAL

ARCH_DEST =+DMDATA/dameng/arch_dsc1

ARCH_FILE_SIZE = 128

ARCH_SPACE_LIMIT = 0

ARCH_HANG_FLAG = 1

[ARCH_REMOTE1]

ARCH_TYPE = REMOTE

ARCH_DEST = DSC0

ARCH_INCOMING_PATH =+DMDATA/dameng/arch_dsc0

ARCH_FILE_SIZE = 128

ARCH_SPACE_LIMIT = 0

二.数据库备份

2.1 语法结构

BACKUP DATABASE [<备份类型>][<指定备份集子句>] [TO <备份名>] [BACKUPSET '<备份集路径>']

[DEVICE TYPE <介质类型> [PARMS '<介质参数>']]

[BACKUPINFO '<备份描述>'] [MAXPIECESIZE <备份片限制大小>]

[LIMIT |]

[IDENTIFIED BY <密码>|"<密码>" [WITH ENCRYPTION ][ENCRYPT WITH <加密算法>]]

[COMPRESSED [LEVEL <压缩级别>]] [WITHOUT LOG][WITHOUT MIRROR]

[TRACE FILE ''] [TRACE LEVEL ]

[TASK THREAD <线程数>][PARALLEL [<并行数>] [READ SIZE <拆分块大小>]];

·备份类型,省缺为FULL

完全备份FULL:全备份生成的备份集包含了指定库(或者表空间)的全部有效数据页在完全备份中又可以具体指定为 DDL_CLONE(只拷贝元数据,不拷贝数据,仅在数据库备份中支持) 或 SHADOW(只备份SYSTEM.DBF及日志相关信息,用于还原成影子库)

增量备份INCREMENT

2.2 实操

2.2.1在 DIsql 工具中使用 BACKUP 语句可以备份整个数据库

只有在归档模式下才能操作联机备份数据库

语句执行完后会在默认的备份路径下生成名为“db_bak_01”的备份集目录。默认的备

份路径为 dm.ini 中 BAK_PATH 配置的路径,若未配置 BAK_PATH,则默认使用

SYSTEM_PATH 下的 bak 目录-/dmdata/DMDB/bak/

2.2.2 DDL_CLONE与SHADOW

DM8备份恢复实战_第1张图片

DM8备份恢复实战_第2张图片

2.2.3 指定备份集路径为“/dmbak/db_bak_1_01”

BACKUP DATABASE BACKUPSET '/dmbak/db_bak_1_01/';

BACKUP DATABASE BACKUPSET '/dmbak/db_bak/';

2.2.4创建备份集,备份名设置为“WEEKLY_FULL_BAK”

BACKUP DATABASE TO WEEKLY_FULL_BAK BACKUPSET '/dmbak/db_bak_1_02/';

DM8备份恢复实战_第3张图片

2.2.5 创建备份为备份集添加描述信息为“完全备份”。

BACKUP DATABASE BACKUPSET '/dmbak/db_bak_1_03/' BACKUPINFO '完全备份';

2.2.6 限制备份片大小为300MB

BACKUP DATABASE BACKUPSET '/dmbak/db_bak_1_04/' MAXPIECESIZE 300;

2.2.7 备份压缩,压缩级别为5

BACKUP DATABASE BACKUPSET '/dmbak/db_bak_1_5/' COMPRESSED LEVEL 5;

2.2.8 并行压缩,行数为8

BACKUP DATABASE BACKUPSET '/dmbak/db_bak_1_06/' PARALLEL 8;

DM8备份恢复实战_第4张图片

2.2.9 增量备份

BACKUP DATABASE INCREMENT WITH BACKUPDIR '/dmbak' BACKUPSET '/dmbak/db_increment_bak_01';

-WITH BACKUPDIR:指定基备份目录

-CUMULATIVE:创建累积增量备份(基备份必须是完全备份集),与之对应的是差异增量备份(基备份可以是完全备份集,也可以是增量备份集),若不指定则省缺为差异增量备份。

三.DSC环境使用说明

1) 保证故障节点的[CKPT_LSN,FILE_LSN]之间日志修改的数据页已写入磁盘。只有所有活动节点的 CKPT_LSN 大于等于故障节点的 FILE_LSN 才允许备份操作。

2) 主库备份时,只有所有活动节点 CKPT_LSN 推进到 MAX[APPLY_LSN]之后,才允许备份操作。 

3) 备库备份时,需要触发检查点将所有活动节点 CKPT_LSN 推进到 MAX[APPLY_LSN]之后,才能启动备份操作。 

四.表空间备份

4.1 语法结构

BACKUP TABLESPACE <表空间名> [FULL | INCREMENT ] [<指定备份集子

句>] [TO <备份名>] [BACKUPSET '<备份集路径>'][DEVICE TYPE <介质类型> [PARMS '<介质参数>']]

[BACKUPINFO '<备份描述>'] [MAXPIECESIZE <备份片限制大小>]

[LIMIT |]

[IDENTIFIED BY <密码>|"<密码>" [WITH ENCRYPTION][ENCRYPT WITH <加密算法>]]

[COMPRESSED [LEVEL <压缩级别>]][WITHOUT LOG][WITHOUT MIRROR]

[TRACE FILE ''] [TRACE LEVEL ]

[TASK THREAD <线程数>][PARALLEL [<并行数>][READ SIZE <拆分块大小>]];

4.2 实操

4.2.1 增量备份指定基备份集路径

BACKUP TABLESPACE MAIN BACKUPSET 'ts_full_bak_01';

BACKUP TABLESPACE MAIN INCREMENT BACKUPSET 'ts_increment_bak_01';

BACKUP TABLESPACE MAIN INCREMENT BASE ON BACKUPSET'ts_full_bak_01' BACKUPSET 'ts_increment_bak_02';

上述示例中,增量备份 ts_increment_bak_02 若不指定备份集 ts_full_bak_01 作

为基备份,那么默认会使用最近一次的备份集 ts_increment_bak_01 作为基备份。

DM8备份恢复实战_第5张图片

4.2.2 完全备份

BACKUP TABLESPACE MAIN FULL BACKUPSET '/dmbak/ts_full_bak_01';

  • 表备份

5.1 语法结构

BACKUP TABLE <表名> [TO <备份名>] [BACKUPSET '<备份集路径>']

[DEVICE TYPE <介质类型> [PARMS '<介质参数>']] [BACKUPINFO '<备份描述>'] [MAXPIECESIZE <备份

片限制大小>] [LIMIT |]

[IDENTIFIED BY <密码>|"<密码>" [WITH ENCRYPTION ][ENCRYPT WITH <加密算法>]]

[COMPRESSED [LEVEL <压缩级别>]]

[TRACE FILE ''] [TRACE LEVEL ];

5.2 实操

5.2.1 简单表备份

CREATE TABLE TAB_01(C1 INT);

BACKUP TABLE TAB_01 BACKUPSET '/dmbak/tab_bak_01';

  • 归档备份

6.1 语法结构

BACKUP [ALL | [FROM LSN ]| [UNTIL LSN ]|

[LSN BETWEEN AND ] | [FROM TIME '

[TIME BETWEEN'

[TO <备份名>][<备份集子句>];

<备份集子句>::=BACKUPSET ['<备份集路径>'][DEVICE TYPE <介质类型> [PARMS '<介质参数>']]

[BACKUPINFO '<备份描述>'] [MAXPIECESIZE <备份片限制大小>]

[LIMIT |]

[IDENTIFIED BY <密码>|"<密码>" [WITH ENCRYPTION ][ENCRYPT WITH <加密算法>]]

[COMPRESSED [LEVEL <压缩级别>]] [WITHOUT LOG]

[TRACE FILE ''] [TRACE LEVEL ]

[TASK THREAD <线程数>][PARALLEL [<并行数>][READ SIZE <拆分块大小>]]

6.2 部分参数解析

ALL:备份所有的归档。若不指定,则默认为 ALL。

FROM LSN:指定备份的起始 LSN。

UNTIL LSN:指定备份的截止 LSN。

FROM TIME:指定备份的开始的时间点。

UNTIL TIME:指定备份的截止的时间点。

BETWEEN ... AND ...:指定备份的区间。指定区间后,只会备份指定区间内的归档文件。

DEVICE TYPE:指存储备份集的介质类型。

LIMIT:指定备份时最大的读写文件速度,单位为 MB/S,默认为 0,表示无速度限制。

6.3 实操

6.3.1 通过 LSN BETWEEN ... AND ...来指定起始和截至 LSN。

select ARCH_LSN, CLSN, PATH from V$ARCH_FILE;

DM8备份恢复实战_第6张图片

存在多个归档文件时,可以选择多个归档文件组成的LSN区间进行备份。

BACKUP ARCHIVELOG LSN BETWEEN 40743 AND 43064 BACKUPSET'/dmbak/arch_bak_time_40743-43064';

  • 管理备份(disql)

7.1 备份管理相关动态视图

l V$BACKUPSET:显示备份集基本信息。

l V$BACKUPSET_DBINFO:显示备份集的数据库相关信息。

l V$BACKUPSET_DBF:显示备份集中数据文件的相关信息。

l V$BACKUPSET_ARCH:显示备份集的归档信息。

l V$BACKUPSET_BKP:显示备份集的备份片信息。

l V$BACKUPSET_SEARCH_DIRS:显示备份集搜索目录。

l V$BACKUPSET_TABLE:显示表备份集中备份表信息。

l V$BACKUPSET_SUBS:显示并行备份中生成的子备份集信息。

l V$BACKUP_MONITOR:显示当前备份任务实时监控信息。

l V$BACKUP_HISTORY:显示最近 100 条备份监控信息。

l V$BACKUP_FILES:显示当前备份任务待备份数据文件列表。 

7.2 备份管理相关系统过程与函数

SF_BAKSET_BACKUP_DIR_ADD:添加备份目录。

SF_BAKSET_BACKUP_DIR_REMOVE:删除内存中指定的备份目录。

SF_BAKSET_BACKUP_DIR_REMOVE_ALL:删除内存中全部的备份目录。

SF_BAKSET_CHECK:对备份集进行校验。

SF_BAKSET_REMOVE:删除指定设备类型和指定备份集目录的备份集。

SF_BAKSET_REMOVE_BATCH:批量删除满足指定条件的所有备份集。

SF_BAKSET_REMOVE_BATCH_S:批量安全删除满足指定条件的所有库级备份集。

SP_DB_BAKSET_REMOVE_BATCH:批量删除指定时间之前的数据库备份集。

SP_TS_BAKSET_REMOVE_BATCH:批量删除指定表空间对象及指定时间之前的表空间备份集。

SP_TAB_BAKSET_REMOVE_BATCH:批量删除指定表对象及指定时间之前的表备份集。

SP_ARCH_BAKSET_REMOVE_BATCH:批量删除指定条件的归档备份集

7.3 实操

7.3.1 备份集搜索目录

SELECT * FROM V$BACKUPSET_SEARCH_DIRS

7.3.2 备份集校验

BACKUP DATABASE FULL BACKUPSET '/dmbak/db_bak_for_check';

SELECT SF_BAKSET_CHECK('DISK','/dmbak/db_bak_for_check');

DM8备份恢复实战_第7张图片

  • 数据还原

联机还原仅支持到表级,数据库、表空间、归档日志的还原必须脱机通过DMRMAN进行。

8.1 表还原

8.1.1 语法结构

RESTORE TABLE [<表名>] [STRUCT] [KEEP TRXID]

FROM BACKUPSET'<备份集路径>' [DEVICE TYPE <介质类型> [PARMS '<介质参数>']]

[IDENTIFIED BY <密码>|"<密码>" [ENCRYPT WITH <加密算法>]]

[TRACE FILE ''] [TRACE LEVEL ];

8.1.2 参数解析

STRUCT:执行表结构还原,若未指定,则认为是表中数据还原;

TRACE FILE:指定生成的 TRACE 文件。

8.1.3 实操

不包含索引的简单备份还原

CREATE TABLE TAB_01(C1 INT);

BACKUP TABLE TAB_01 BACKUPSET '/dmbak/tab_bak_01';

SELECT SF_BAKSET_CHECK('DISK','/dmbak/tab_bak_01');

RESTORE TABLE TAB_01 FROM BACKUPSET '/dmbak/tab_bak_01';

DM8备份恢复实战_第8张图片

包含索引的表备份恢复

CREATE INDEX I_TAB_FOR_RES_02 ON TAB_FOR_RES_02(C1);

BACKUP TABLE TAB_FOR_RES_02 BACKUPSET '/dmbak/tab_bak_for_res_02';

SELECT SF_BAKSET_CHECK('DISK','/dmbak/tab_bak_for_res_02');

INSERT INTO TAB_FOR_RES_02 VALUES(1);

COMMIT;

SELECT * FROM TAB_FOR_RES_02;

RESTORE TABLE TAB_FOR_RES_02 STRUCT FROM BACKUPSET '/dmbak/tab_bak_for_res_02';

RESTORE TABLE TAB_FOR_RES_02 FROM BACKUPSET '/dmbak/tab_bak_for_res_02';

指定还原时不重建索引

RESTORE TABLE TAB_FOR_RES WITHOUT INDEX FROM BACKUPSET '/dmbak/tab_bak_for_res_01';

指定还原时不重建约束

RESTORE TABLE TAB_FOR_RES WITHOUT CONSTRAINT FROM BACKUPSET '/home/dm_bak/tab_bak_for_res_01';

  • DMRMAN脱机备份还原

9.1 概述

·源库:待备份的数据库。

·目标库:待还原的数据库。

DMRMAN可以在不开启归档的情况下就实现备份还原,但是硬性条件是CTL_PATH所指向的实例也就是目标库必须处于停机状态。

9.2 启停

·启动

bin/dmrman

·退出

RMAN> exit

9.3 设置参数执行命令

./dmrman CTLFILE=/home/dm_cmd/cmd_rman.txt

./dmrman CTLSTMT="BACKUP DATABASE'/opt/dmdbms/data/DAMENG/dm.ini';"

9.4 环境配置

9.4.1语法结构

CONFIGURE |

CONFIGURE CLEAR |

CONFIGURE DEFAULT

·部分参数

BACKUPDIR:指定默认搜集备份的目录。

ARCHIVEDIR:默认搜集归档的目录。

查看当前配置

RMAN>CONFIGURE

恢复某个配置项为默认

RMAN> CONFIGURE DEFAULT DEVICE CLEAR;

恢复所有配置项为默认

RMAN> CONFIGURE CLEAR;

配置存储介质类型为TAPE

RMAN> CONFIGURE DEFAULT DEVICE TYPE TAPE PARMS 'command';

配置追踪日志文件

RMAN> CONFIGURE DEFAULT TRACE FILE '/home/trace.log ' TRACE LEVEL 2;

配置备份集搜索目录

RMAN> CONFIGURE DEFAULT BACKUPDIR;

RMAN> CONFIGURE DEFAULT BACKUPDIR '/dmbak';

插入和删除在BACKUPDIR后配置ADD/DELETE即可

9.5 备份数据

9.5.1 备份数据库

·全量备份

RMAN> BACKUP DATABASE 'E:\dmdbms\data\DMDB\dm.ini' FULL BACKUPSET 'E:\dmbak\db_full_bak_01';

·增量备份

RMAN> BACKUP DATABASE 'E:\dmdbms\data\DMDB\dm.ini' INCREMENT WITH BACKUPDIR 'E:\dmbak\' BACKUPSET 'E:\dmbak\db_increment_bak_02';

DM8备份恢复实战_第9张图片

9.6 备份归档

·创建归档备份

RMAN> BACKUP ARCHIVE LOG ALL DATABASE 'E:\dmdbms\data\DMDB\dm.ini' BACKUPSET 'E:\dmbak\arch_all_bak_01';

·创建设置条件的归档备份

RMAN> BACKUP ARCHIVE LOG LSN BETWEEN 50000 AND 120000 DATABASE 'E:\dmdbms\data\DMDB\dm.ini' BACKUPSET 'E:\dmbak\arch_lsn_bak_02';

9.7 管理备份集

9.7.1 备份集查看

SHOW BACKUPSET 'E:\dmbak\db_full_bak_01';

分为DB INFO  META INFO  EP INFO  FILE INFO  等信息

DM8备份恢复实战_第10张图片

9.7.2 批量查看备份集

SHOW BACKUPSETS WITH BACKUPDIR 'E:\dmbak\';

9.7.3 查看指定数据库备份集的所有信息

SHOW BACKUPSET 'E:\dmbak\db_full_bak_01';

SHOW BACKUPSETS WITH BACKUPDIR 'E:\dmbak\' USE DB_MAGIC 1491135681;

9.7.4 显示备份集部分信息,如META INFO

show backupset 'E:\dmbak\db_full_bak_01' info meta

9.7.5 备份集检验

Check backupset 'E:\dmbak\db_full_bak_01'

9.7.6 备份集删除

Remove backupset 'E:\dmbak\db_full_bak_01'

REMOVE ... BACKUPSET每次只能删除一个备份集。若 删除备份集已经被引用为其他备份集的基备份且未指定 CASCADE,则报错。 

Remove backupsets withBACKUPDIR 'E:\dmbak\' [until time '2019-6-1 00:00:00';]

批量删除备份集

9.7.7 备份集导出

导出磁带/dev/nst0上所有备份集的meta文件到目录E:\dmbak 中

LOAD BACKUPSETS FROM DEVICE TYPE TAPE TO BACKUPDIR 'E:\dmbakr';

9.7.8 备份集映射文件导出

导出备份集原始路径

DUMP BACKUPSET 'E:\dmbak\db_full_bak_01' DEVICE TYPE DISK MAPPED FILE 'E:\dmbak\db_bak_mapped.txt';

9.8 数据库还原

9.8.1 恢复一致性

通过 RESTORE 命令还原后的数据库不可用,需进一步执行 RECOVER 命令,将数据库 恢复到备份结束时的状态

RESTORE DATABASE 'E:\dmdbms\data\DMDB\dm.ini' FROM BACKUPSET 'E:\dmbak\db_full_bak_01';

REUSE DMINI 参数会将备份集中的dm.ini中除了路径参数之外的其他参数都同步到当前dm.ini中

RESTORE DATABASE 'E:\dmdbms\data\DMDB\dm.ini' REUSE DMINI FROM BACKUPSET 'E:\dmbak\db_full_bak_01';

9.8.2 数据库恢复

·从备份集恢复

在进行RESTORE之后再通过RECOVER将数据库恢复

RECOVER DATABASE 'E:\dmdbms\data\DMDB\dm.ini' FROM BACKUPSET 'E:\dmbak\db_full_bak_01';

·从归档恢复(正常退出)

1) 启动 DIsql 联机备份数据库,以及备份从检查点开始的本地归档日志;

BACKUP ARCHIVELOG FROM LSN 90000 BACKUPSET'E:\dmbak\arch_bak_lsn_90175';

//查看动态视图 V$RLOG 中的 CKPT_LSN 列,可以得出当前检查点 LSN

BACKUP DATABASE BACKUPSET 'E:\dm_bak\db_full_bak_for_recover_arch';

  1. 准备目标库
  1. 启动 RMAN,校验备份;

RMAN>CHECK BACKUPSET 'E:\dmbak\db_full_bak_for_recover_arch';

  1. 还原数据库

RMAN>RESTORE DATABASE 'E:\dmdbms\data\DMDB\dm.ini' FROM BACKUPSET 'E:\dmbak\db_full_bak_for_recover_arch';

5)查看备份集数据信息获取DB_MAGIC(若还原后,立即执行恢复,可以不用获取源库 DB_MAGIC)

RMAN>SHOW BACKUPSET 'E:\dmbak\db_full_bak_for_recover_arch' INFO DB;

6)利用归档恢复数据库。由步骤 5 显示的备份集信息可知,源库的 DB_MAGIC 值为 1491135681;

RMAN>RECOVER DATABASE 'E:\dmdbms\data\DMDB\dm.ini' FROM BACKUPSET 'E:\dmbak\db_full_bak_for_recover_arch';[use db_magic 1491135681]

7)若执行后归档恢复过程中,出现归档不足的错误,则利用归档校验工具 dmrachk

./dmrachk arch_path=E:\dmarch

归档缺失范围是[86273,86440]

DMRMAN 查看归档备份的范围

show backupset 'E:\dmbak\arch_bak_lsn_90175' INFO META;

arch start lsn:        90100

arch end lsn:         90296

归档范围由这两个参数确定,之前缺失的范围不在归档备份中,所以归档日志出现问题,需要根据最新状态做备份与归档。

·从归档恢复(异常退出)

  1. 进行归档修复

RMAN>REPAIR ARCHIVELOG DATABASE 'E:\dmdbms\data\DMDB\dm.ini';

2)使用备份集以及归档将目标库恢复

RMAN>RESTORE DATABASE 'E:\dmdbms\data\DMDB\dm.ini' FROM BACKUPSET 'E:\dmbak\db_full_bak_01';

RMAN>RECOVER DATABASE 'E:\dmdbms\data\DMDB\dm.ini' WITH ARCHIVEDIR 'E:\dmarch\';

9.8.3 更新db_magic

更新数据库的 DB_MAGIC,并将数据库调整为可正常工作状态

RECOVER DATABASE 'E:\dmdbms\data\DMDB\dm.ini' WITH ARCHIVEDIR 'E:\dmarch\';

9.9 高级场景

9.9.1 指定映射文件还原(mappedlife)

1) 启动 DMRMAN,脱机备份数据库;

RMAN>BACKUP DATABASE 'E:\dmdbms\data\DMDB\dm.ini' BACKUPSET 'E:\dmbak\db_bak_for_map_01';

2) 生成映射文件

RMAN>DUMP BACKUPSET 'E:\dmbak\db_bak_for_map_01' DATABASE 'E:\dmdbms\data\DMDB\dm.ini' MAPPED FILE'E:\dmbak\map_file_01.txt';

3) 指定映射文件还原。还原前可选择对备份文件进行校验。

RMAN> RESTORE DATABASE 'E:\dmdbms\data\DMDB\dm.ini' FROM BACKUPSET 'E:\dmbak\db_bak_for_map_01' MAPPED FILE 'E:\dmbak\map_file_01.txt';

9.9.2 使用增量备份集还原

利用增量备份集还原来修复主备集群。主要内容包括: 

l 指定 INCREMENT FROM LSN 语法项生成增量备份集

l 利用增量备份集修复备库,包括还原、恢复和更新步骤

1) 获取待同步数据的起始 LSN。

SQL> SELECT N_EP, APPLY_LSN_ARR FROM V$RAPPLY_LSN_INFO;

  1. 生成增量备份集。LSN 值小于等于步骤(1)查询的 APPLY_LSN,该增量备份集

包含了备库缺失的所有数据。

SQL> BACKUP DATABASE INCREMENT FROM LSN 90794 BACKUPSET 'E:\dmdbms\bak_inc_lsn';

DSC环境下LSN要小于等于所有节点的APLLY_LSN;

  1. 将备份集传输到备机

RMAN>RESTORE DATABASE 'E:\dmdbms\data\DMDB\dm.ini' FROM BACKUPSET 'E:\dmdbms\bak_inc_lsn';

RMAN>RECOVER DATABASE 'E:\dmdbms\data\DMDB\dm.ini' FROM BACKUPSET 'E:\dmdbms\bak_inc_lsn';

RMAN>RECOVER DATABASE 'E:\dmdbms\data\DMDB\dm.ini' update db_magic

9.9.3 恢复数据库到指定时间点/LSN

用户在下午 5 点做了一个误操作,删除了某些重要数据;我们可以指定恢复时间点到下午 4:59 分,恢复被误删除的数据。

1) 准备数据;

CREATE TABLE TAB_FOR_RECOVER_01(C1 INT);

INSERT INTO TAB_FOR_RECOVER_01 VALUES(1);

COMMIT;

2) 备份数据库;

BACKUP DATABASE BACKUPSET 'E:\dmbak\db_full_bak_for_time_lsn';

3) 正确操作数据库,产生一些归档;

CREATE TABLE TAB_FOR_RECOVER_02(C1 INT);

INSERT INTO TAB_FOR_RECOVER_02 VALUES(1);

COMMIT;

使用 SELECT SYSDATE 命令查询此时的时间为:21-11月-23 05.47.07. 下午。

使用 SELECT FILE_LSN FROM V$RLOG 命令查询此时的 LSN 为:91089。

4) 误操作数据库。此步骤误删除了表 TAB_FOR_RECOVER_01 中数据;

DELETE FROM TAB_FOR_RECOVER_01;

COMMIT;

操作步骤同步骤 3),此时的时间和 LSN 分别为:21-11月-23 05.47.56. 下午、91096。

5) 还原数据库。步骤 4)为误操作,因此我们需要将数据库恢复到步骤 3)的状态。

首先需要关闭数据库实例,然后利用 DMRMAN 工具还原数据库:

RMAN>RESTORE DATABASE 'E:\dmdbms\data\DMDB\dm.ini' FROM BACKUPSET 'E:\dmbak\db_full_bak_for_time_lsn';

6) 恢复数据库到指定时间点/LSN。还原后数据库的数据与备份时一致,如果要恢复

数据库至步骤 3)的状态可以指定 UNTIL TIME 或 UNTIL LSN 参数重做部分归档。

使用 RECOVER DATABASE...UNTIL TIME 命令恢复到指定的时间:

RMAN>RECOVER DATABASE 'E:\dmdbms\data\DMDB\dm.ini' WITH ARCHIVEDIR'E:\dmarch\' UNTIL TIME'2023-11-21 17:47:07';

或者使用 RECOVER DATABASE...UNTIL TIME 命令恢复到指定的 LSN:

RMAN> RECOVER DATABASE 'E:\dmdbms\data\DMDB\dm.ini' WITH ARCHIVEDIR'E:\dmarch\' UNTIL LSN 91089;

9.9.4主备环境下指定 DB_MAGIC 收集归档

 主备架构下缺失归档的节点可以从保存有完整归档的节点恢复。

1) 搭建主备环境并备份任意节点;

RMAN>BACKUP DATABASE 'E:\dmdbms\data\DMDB\dm.ini' BACKUPSET 'E:\dmbak\db_full_bak';

2) 启动主备,登录主节点插入部分数据后退出,然后删除该节点下所有归档日志;

3) 指定备份集还原到主节点;

RMAN>RESTORE DATABASE 'E:\dmdbms\data\DMDB\dm.ini' FROM BACKUPSET '/home/dm_bak/db_full_bak';

4) 指定 DB_MAGIC,使用备库归档进行恢复。由于该节点下所有归档已被删除,无

法恢复到最新状态,此时需要借助备库存在的归档。

RMAN> RECOVER DATABASE 'E:\dmdbms\data\DMDB\dm.ini' WITH ARCHIVEDIR 'E:\dmarch' USE DB_MAGIC 1447060264;

9.9.5 DMDSC环境下的数据库恢复

1) 搭建 DMDSC 环境,每个节点都需要配置双向的远程归档。

2) 启动 DIsql,联机备份数据库。备份其中任意一个节点即可备份整个 DMDSC 环境;

BACKUP DATABASE BACKUPSET 'E:\dmbak\db_full_bak_for_dsc';

3) 还原数据库。还原数据库之前可选择对备份文件进行校验。需要注意的是,待还原的目标库可以是单机库,也可以是 DMDSC 库,且节点个数允许不同;

RMAN> RESTORE DATABASE 'E:\dmdbms\data\DMDB\dm.ini' FROM BACKUPSET 'E:\dmbak\db_full_bak_for_dsc';

4) 恢复数据库。DMDSC 库恢复要求各节点归档完整性由用户保证,即各节点的本地归档都能够访问到,若本地存在 REMOTE 归档,则可以使用 REMOTE 归档代替远程节点的本地归档;

RMAN> RECOVER DATABASE 'E:\dmdbms\data\DMDB\dm.ini' WITH ARCHIVEDIR'+DMDATA/dameng/arch_dsc0','+DMDATA/dameng/arch_dsc1';

5) 数据库更新。

RMAN> RECOVER DATABASE 'E:\dmdbms\data\DMDB\dm.ini' UPDATE DB_MAGIC;

9.9.6 多次故障侯使用不同数据库归档恢复--暂未成功

在实际应用中可能会遇到以下还原场景:

1) 创建一个数据库 D1;

2) 操作数据库并执行数据库备份 B1;

3) 继续操作数据库的过程中数据库故障,此时生成的归档为 A1;

4) 利用备份 B1 和归档 A1 将数据库 D1 恢复到目标库 D2,此时数据库 D2 为 D1 故障

前的状态;

5) 启动数据库 D2,操作数据库过程中数据库第二次故障,此时生成的归档为 A2。

归档 A1、A2 属于不同的数据库,使用备份 B1 和归档 A1、A2 是否可以恢复数据库到第

二次故障发生前的状态呢?答案是肯定的。下面将举例详细说明如何使用不同数据库的归档

恢复数据库到最新状态。具体步骤如下:

  1. 创建源库 D1,即待备份的数据库,然后启动数据库并配置归档。
  2. 操作数据库的同时备份数据库,备份集为 B1。此处以向表中循环插入数据为例来操作数据库; 

DROP TABLE TAB_FOR_RECOVER;

CREATE TABLE TAB_FOR_RECOVER(C1 INT);

BEGIN

FOR I IN 1..1000000 LOOP

INSERT INTO TAB_FOR_RECOVER VALUES(I);

COMMIT;

END LOOP;

END;

/

//插入数据的同时,另外一个会话备份数据库

BACKUP DATABASE FULL TO B1 BACKUPSET 'E:\dmbak\B1' DEVICE TYPE DISK BACKUPINFO

'DAMENG FULL BACKUP ONLINE' MAXPIECESIZE 2048;

3) 继续向数据库插入数据一段时间后关掉数据库实例,模拟数据库故障。从备份后到数据库故障这段时间生成的归档称为 A1;

4) 创建目标库 D2,即待还原的库,并配置归档(参考 3.1.2 归档配置),归档目录与

数据库 D1 相同

./dminit path=E:\dmdbms\data db_name=DAMENG_FOR_RES

5) 启动DMRMAN工具,利用备份集B1和归档A1恢复数据库D2到D1故障前的状态;DM8

RMAN> RESTORE DATABASE 'E:\dmdbms\data\DAMENG_FOR_RES\dm.ini' FROM BACKUPSET 'E:\dmbak\B1';

RMAN> RECOVER DATABASE 'E:\dmdbms\data\DAMENG_FOR_RES\dm.ini' WITH ARCHIVEDIR 'E:\dmarch\';

RMAN> RECOVER DATABASE 'E:\dmdbms\data\DAMENG_FOR_RES\dm.ini' UPDATE DB_MAGIC;

DM8备份恢复实战_第11张图片

启动目标库 D2,向数据库中继续插入数据:

dmserver E:\dmdbms\data\DAMENG_FOR_RES\dm.ini 

alter database mount;

alter database add archivelog 'dest=E:\dmarch ,TYPE=local,FILE_SIZE=1024,SPACE_LIMIT=102400';

alter database archivelog;

alter database open;

BEGIN

FOR I IN 1..1000000 LOOP

INSERT INTO TAB_FOR_RECOVER VALUES(I);

COMMIT;

END LOOP;

END;

/

6) 插入数据一段时间后,关掉数据库实例,模拟数据库第二次故障。数据库 D2 启动

到第二次故障之间产生的归档为 A2;

7) 恢复目标库 D2 到第一次故障前的状态。恢复一次,目标库的 DB_MAGIC 都会改变,因此归档 A1、A2 的 DB_MAGIC 不同,属于不同的数据库。第一次恢复只能先重做归档 A1,即恢复到第一次故障前的状态;

RMAN> RESTORE DATABASE 'E:\dmdbms\data\DAMENG_FOR_RES\dm.ini' FROM BACKUPSET 'E:\dmbak\B1';

RMAN> RECOVER DATABASE 'E:\dmdbms\data\DAMENG_FOR_RES\dm.ini' WITH ARCHIVEDIR 'E:\dmarch';

8) 查看归档 A2 的 DB_MAGIC;

./dmrachk arch_fil=E:\dmarch\ARCHIVE_LOCAL1_0x54144C11_EP0_2023-11-23_10-31-18.log

1043682857--B1--70000+

253427476--A1--303385

1410616337-A2--303319

9)利用归档 A2 恢复数据库至第二次故障前的状态。从归档恢复时,默认使用目标库的 DB_MAGIC,此时目标库 DB_MAGIC 值被替换为 B1 备份集源库 DB_MAGIC,与归档A2 DB_MAGIC 值不一致, 无法利 用该部 分归档 恢复到 最新状态 。此时 可指定 USE DB_MAGIC 参数,指定 DB_MAGIC 值为待恢复归档的 DB_MAIGC 值即可;

RMAN> RECOVER DATABASE 'E:\dmdbms\data\DAMENG_FOR_RES\dm.ini' WITH ARCHIVEDIR 'E:\dmarch\' USE DB_MAGIC 1410616337;

10) 更新数据库。

RMAN> RECOVER DATABASE 'E:\dmdbms\data\DAMENG_FOR_RES\dm.ini' UPDATE DB_MAGIC;

9.9.7 增量合并

·周期性执行完全备份和增量备份 

1) 在周日执行完全备份。

SQL> BACKUP DATABASE BACKUPSET 'E:\dmbak\DB_FULL_BAK';

2) 使用完全备份集还原出新的库。

RMAN> RESTORE DATABASE to 'E:\dmdbms\data\db_for_merge' FROM BACKUPSET 'E:\dmbak\DB_FULL_BAK'

3) 一周的其他时间里每天生成增量备份集。

SQL> BACKUP DATABASE INCREMENT BACKUPSET 'E:\dmbak\DB_INCR_BAK';

·分批合并增量备份集数据到目标库

定期合并增量备份集数据到目标库。

RMAN> MERGE DATABASE 'E:\dmdbms\data\db_for_merge\dm.ini' FROM BACKUPSET

'E:\dmbak\DB_INCR_BAK'

1) 源库故障后,重演最后一个时间窗口内的归档日志以将目标库恢复到最新状态。

RMAN>RECOVER DATABASE 'E:\dmdbms\data\db_for_merge\dm.ini' WITH ARCHIVEDIR 'E:\dmarch'

2) 重演所有日志后,更新数据库魔数标识恢复操作完成。

RMAN> RECOVER DATABASE 'E:\dmdbms\data\db_for_merge\dm.ini' UPDATE DB_MAGIC

3) 正常启动新的库,恢复数据库服务。

9.10 表空间还原

9.10.1 表空间还原

使用 RESTORE 命令完成表空间的脱机还原,还原的备份集可以是联机或脱机生成的备份集,也可以是联机生成的表空间备份集 。

注意事项:

1. 表空间还原不能是 TEMP 表空间,指定文件还原也不能为 TEMP 表空间中文件。

2. 表空间还原要求还原目标库与备份库为同一个库。

3. 还原目标库不能为已经执行过 RESTORE 但未执行过 RECOVER 的库

4. 不管是 DSC 环境,还是单机环境,若异常退出,需手动指定各节点归档修复后,使用各节点完整的归档日志执行还原恢复;否则,将可能无法恢复到最新状态。

5. 若目标库中 SYSTEM 表空间故障,则必须优先还原 SYSTEM 表空间。

6. DMDSC环境进行表空间还原时,所有实例节点必须退出,并且只在一个节点执行还原即可还原所有节点。

·实操:

1) 联机备份表空间,保证数据库运行在归档模式及 OPEN 状态;

BACKUP TABLESPACE MAIN BACKUPSET 'E:\dmbak\ts_full_bak_for_restore';

2) 校验备份,校验待还原备份集的合法性。校验备份有两种方式,联机和脱机,此处使用脱机校验;

RMAN> CHECK BACKUPSET 'E:\dmbak\ts_full_bak_for_restore';

3) 还原表空间。需要注意,表空间还原的目标库只能是备份集产生的源库,否则将报错。启动 DMRMAN,输入以下命令:

RMAN> RESTORE DATABASE 'E:\dmdbms\data\DMDB\dm.ini' TABLESPACE MAIN FROM BACKUPSET 'E:\dmbak\ts_full_bak_for_restore';

9.10.2 表空间恢复

表空间恢复通过重做 REDO 日志,以将数据更新到一致状态。表空间恢复过程中不允许异常中断。

·实操:

1) 联机备份表空间,保证数据库运行在归档模式及 OPEN 状态;

BACKUP TABLESPACE MAIN BACKUPSET 'E:\dmbak\ts_full_bak_for_recover'; 

2) 校验备份,校验待还原备份集的合法性,此处使用脱机校验;

RMAN> CHECK BACKUPSET 'E:\dmbak\ts_full_bak_for_recover';

3) 还原表空间。启动 DMRMAN,输入以下命令:

RMAN> RESTORE DATABASE 'E:\dmdbms\data\DMDB\dm.ini' TABLESPACE MAIN FROM BACKUPSET 'E:\dmbak\ts_full_bak_for_recover';

4) 恢复表空间。启动 DMRMAN,输入以下命令:

RMAN> RECOVER DATABASE 'E:\dmdbms\data\DMDB\dm.ini' TABLESPACE MAIN;

9.10.3 还原表空间中指定的数据文件

1) 创建待备份的表空间 TS_FOR_RES_01,并在库目录下创建 3 个数据文件;

CREATE TABLESPACE TS_FOR_RES_01 DATAFILE 'ts_for_res_01_01.dbf' SIZE 128;

ALTER TABLESPACE TS_FOR_RES_01 ADD DATAFILE 'ts_for_res_01_02.dbf' SIZE 128;

ALTER TABLESPACE TS_FOR_RES_01 ADD DATAFILE 'ts_for_res_01_03.dbf' SIZE 128;

2) 备份表空间;

BACKUP TABLESPACE TS_FOR_RES_01 BACKUPSET 'E:\dmbak\ts_bak_for_dbf';

3) 查询数据文件的文件编号或路径。还原指定的数据文件需知道数据文件对应的文件

编号或路径,相关信息可通过查询动态视图 V$DATAFILE 获取;

SELECT ID, PATH FROM V$DATAFILE;

DM8备份恢复实战_第12张图片

4) 校验备份。此步骤为可选;

RMAN> CHECK BACKUPSET 'E:\dmbak\ts_bak_for_dbf';

5) 通 过 文 件 编 号 还 原 表 空 间 TS_FOR_RES_01 中 的 数 据 文 件 ts_for_res

_01_02.dbf 和 ts_for_res_01_03.dbf;

RMAN> RESTORE DATABASE 'E:\dmdbms\data\DMDB\dm.ini' TABLESPACE TS_FOR_RES_01 DATAFILE 1, 2 FROM BACKUPSET 'E:\dmbak\ts_bak_for_dbf';

6) 如果不想使用文件编号还原,使用指定数据文件路径还原数据文件的语句如下:

RMAN> RESTORE DATABASE 'E:\dmdbms\data\DMDB\dm.ini' TABLESPACE TS_FOR_RES_01 DATAFILE 'E:\dmdbms\data\DMDB\ts_for_res_01_02.dbf', 'E:\dmdbms\data\DMDB\ts_for_res_01_03.dbf' FROM BACKUPSET 'E:\dmbak\ts_bak_for_dbf';

9.10.4 指定映射文件还原

1) 备份 MAIN 表空间;

BACKUP TABLESPACE MAIN BACKUPSET 'E:\dmbak\ts_bak_for_map';

2) 创建映射文件;

RMAN>DUMP BACKUPSET 'E:\dmbak\ts_bak_for_map' MAPPED FILE 'E:\dmbak\map_file.txt';

3) 还原 MAIN 表空间。

RMAN>RESTORE DATABASE 'E:\dmdbms\data\DMDB\dm.ini' TABLESPACE MAIN FROM BACKUPSET 'E:\dmbak\ts_bak_for_map' MAPPED FILE 'E:\dmbak\map_file.txt';

9.10.5 指定归档目录恢复

1) 备份用户表空间 MAIN;

BACKUP TABLESPACE MAIN BACKUPSET 'E:\dmbak\ts_bak_for_arch';

2) 校验备份。此步骤可选;

RMAN> CHECK BACKUPSET 'E:\dmbak\ts_bak_for_arch';

3) 还原用户表空间 MAIN;

RMAN> RESTORE DATABASE 'E:\dmdbms\data\DMDB\dm.ini' TABLESPACE MAIN FROM BACKUPSET 'E:\dmbak\ts_bak_for_arch';

4) 恢复用户表空间 MAIN 。 假 设 归 档 日 志 分 布 在 /home/dm_arch1 和

/home/dm_arch2 两个目录下。

RMAN> RECOVER DATABASE 'E:\dmdbms\data\DMDB\dm.ini' TABLESPACE MAIN WITH ARCHIVEDIR 'E:\dm_arch1', 'E:\dm_arch2';

9.10.6 主备环境下指定DB_MAGIC收集归档

1) 搭建主备环境并登录任意节点进行备份;

BACKUP TABLESPACE MAIN BACKUPSET 'E:\dmbak\ts_bak_for_arch';

2) 登录主节点插入部分数据后退出,然后删除该节点下所有归档日志

3) 从备份集还原表空间 LIBRARY到主节点;

RMAN> RESTORE DATABASE 'E:\dmdbms\data\DMDB\dm.ini' TABLESPACE LIBRARY FROM BACKUPSET 'E:\dmbak\ts_bak_for_arch';

4) 指定 DB_MAGIC,使用备库归档进行恢复。由于主节点下所有归档已被删除,无

法恢复到最新状态,此时需要借助备库存在的归档进行恢复。

RMAN> RECOVER DATABASE 'E:\dmdbms\data\DMDB\dm.ini' TABLESPACE MAIN WITH ARCHIVEDIR '/home/dm_arch2' USE DB_MAGIC 18446520;

9.10.7 归档还原

1. 联机备份归档,保证数据库运行在归档模式及 OPEN 状态;

BACKUP ARCHIVE LOG ALL BACKUPSET 'E:\dmbak\arch_all_for_restore';

2. 校验备份,校验待还原备份集的合法性。校验备份有两种方式,联机和脱机,此处

使用脱机校验;

RMAN> CHECK BACKUPSET 'E:\dmbak\arch_all_for_restore';

3. 还原归档。启动 DMRMAN,设置 OVERWRITE 为 2,如果归档文件已存在,会报错。 指定还原的目标归档日志目录:

RMAN> RESTORE ARCHIVE LOG FROM BACKUPSET 'E:\dmbak\arch_all_for_restore' TO ARCHIVEDIR'E:\dmdbms\data\DAMENG_FOR_RESTORE\arch_dest' OVERWRITE 2;

指定还原目标库的 dm.ini 文件路径:

RMAN> RESTORE ARCHIVE LOG FROM BACKUPSET 'E:\dmbak\arch_all_for_restore' TO DATABASE 'E:\dmdbms\data\DMDB\dm.ini' OVERWRITE 2;

9.10.8 归档修复

RMAN> REPAIR ARCHIVELOG DATABASE 'E:\dmdbms\data\DMDB\dm.ini';

  • 图形化客户端工具备份还原

10.1 数据备份

DM8备份恢复实战_第13张图片

10.2 数据还原

备份和表空间备份不支持联机还原,只有表备份支持联机还原。表还原过程中表空间

中其他的表还可以正常操作。

DM8备份恢复实战_第14张图片

  • 使用CONSOLE工具进行脱机备份

社区地址:https://eco.dameng.com

你可能感兴趣的:(数据库,oracle,sql)