zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

达梦数据库备份策略

数据库备份 策略 达梦
2023-09-11 14:20:37 时间

让我们进入今天的学习吧!
💪Keep  trying💪

在这里插入图片描述

一、达梦数据库备份策略

达梦数据库的备份分为物理备份和逻辑备份,物理备份又分为联机备份(继续生产,不停服务)和脱机备份,需要注意的是,物理备份必须要开启归档模式。

1.1 开启归档模式

1.1.1 联机配置本地归档

修改数据库为 mount 状态

ALTER DATABASE MOUNT;

配置本地归档

ALTER DATABASE ADD ARCHIVELOG 'TYPE = local, DEST = /dm/data/DMDB/bak/dm_arch/arch, FILE_SIZE = 1024, SPACE_LIMIT = 10240';
# 参数依次为:
# 本地归档,本地redo日志路径,单个redo日志大小(M),redo日志最大所占空间(超过后删除以前的)

开启归档模式

ALTER DATABASE ARCHIVELOG;

修改数据库为 open 状态

ALTER DATABASE OPEN;

1.1.2 脱机配置本地归档

关闭数据库

systemctl stop DmServiceDMSERVER.service

在 dm.ini 文件所在的路径创建 dmarch.ini 文件,内容如下

[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dm/data/DMDB/bak/dm_arch/arch
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 10240

# 注意此文件的归属关系为 dmdba:dinstall, 如果不是请手动更改

编辑 dm.ini 文件,设置参数 ARCH_INI=1

启动数据库实例,此时数据库已经处于归档模式

systemctl start DmServiceDMSERVER.service

1.2 启动DMAP服务

备份集备份还原实现策略有两种:DMAP 辅助进程方式和无辅助进程方式。用户可通过 dm.ini 文件的参数 BAK_USE_AP 来选择(DMRMAN 使用参数 USE_AP),BAK_USE_AP 取值 1、2。默认为 1。DMAP 辅助进程方式 大幅提升了备份还原的效率,特别是加密、压缩的处理效率。

1.2.1 启动DMAP

systemctl start DmAPService.service
ss -ntulp | grep -i dmap  # 查看验证
# 验证是否使用的ap方式备份
select * from SYS."V$PARAMETER" t where t.name ='BAK_USE_AP';

1.3 物理备份

1.3.1 联机备份

备份数据库之前,为避免出现错误,将整个存放数据的目录全部改一下归属

chown -R dmdba:dinstall /dm

(1) 数据库备份

备份全库

BACKUP DATABASE FULL TO db_full_bak BACKUPSET '/dm/data/DMDB/bak/db_full_bak_01/db_full_bak';
# TO db_full_bak 可以用 TO 指定备份集的文件的名字,如果不指定,则备份集文件的名字和它所在的目录同名
# 下面的所有例子我都不指定 TO

增量备份

# 基于 /dm/data/DMDB/bak/db_full_bak_01/db_full_bak 全量备份的增量备份
BACKUP DATABASE INCREMENT WITH BACKUPDIR '/dm/data/DMDB/bak/db_full_bak_01/db_full_bak' BACKUPSET '/dm/data/DMDB/bak/db_full_bak_01/db_increment_bak_01';

特别注意:增量备份的目录一定要和全量备份放在同一个目录下,否则在增量恢复的时候会报错。如果没有放在一个目录,那么在增量恢复时,就必须利用 WITH BACKUPDIR 指定基备份集目录所在的上级目录,比如基备份的路劲为:/a/b/full_bak/备份.bak,那么需要指定的基备份目录就是 WITH BACKUPDIR /a/b/

如下目录结构所示

tree db_full_bak_01
db_full_bak_01                   # 全量备份上级目录
├── db_full_bak                  # 此次全量备份的文件所在目录
│   ├── db_full_bak_1.bak        
│   ├── db_full_bak.bak
│   └── db_full_bak.meta
├── db_increment_bak_01          # 基于此次全量备份的第一次增备
│   ├── db_increment_bak_01_1.bak
│   ├── db_increment_bak_01.bak
│   └── db_increment_bak_01.meta
├── db_increment_bak_02          # 第二次增备
│   ├── db_increment_bak_02_1.bak
│   ├── db_increment_bak_02.bak
│   └── db_increment_bak_02.meta
└── db_increment_bak_03          # 第三次增备
    ├── db_increment_bak_03_1.bak
    ├── db_increment_bak_03.bak
    └── db_increment_bak_03.meta
# 恢复时只需要恢复第三次增量备份即可,系统会自动寻找所有的增备和全备,就可以全部恢复

(2) 表空间备份

系统处于归档模式下时,才允许进行表空间备份;Mount 状态下,不允许进行表空间备份

完全备份单个表空间

注意:表空间备份只能在本服务器进行还原

BACKUP TABLESPACE MAIN FULL BACKUPSET '/home/dm_bak/ts_full_bak_01';

增量备份表空间
以备份 MAIN 表空间为例

BACKUP TABLESPACE MAIN INCREMENT WITH BACKUPDIR '/home/dm_bak' BACKUPSET '/home/dm_bak/ts_increment_bak_02';
# WITH BACKUPDIR:基备份集搜索目录

(3) 表备份

表备份均为联机完全备份,不需要配置归档日志,没有增量备份
以备份 TAB_01 为例

BACKUP TABLE TAB_01 BACKUPSET '/home/dm_bak/tab_bak_01';

(4) 备份归档

BACKUP ARCHIVE LOG ALL to ARCHBAK BACKUPSET '/dm8/backup/full/ARCHBAK';
# 对于归档的备份,只需要执行还原操作即可,不需要恢复和更新数据库魔数

1.3.2 脱机备份

(1) 启动DMRMAN

DMRMAN (DM RECOVERY MANEGER) 是 DM 的脱机备份还原管理工具,由它来统一负责库级脱机备份、脱机还原、脱机恢复等相关操作

启动 DMRMAN
进入数据库安装目录的 bin 目录下面

./dmrman

退出 DMRMAN

exit

(2) 备份数据库

全库备份

在 DMRMAN 下执行以下命令

BACKUP  DATABASE  '/opt/dmdbms/data/DAMENG/dm.ini'  FULL BACKUPSET '/home/dm_bak/db_full_bak_01';

增量备份

增量备份时,期间必须有所改变,否则报错

BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' INCREMENT WITH BACKUPDIR '/home/dm_bak' BACKUPSET '/home/dm_bak/db_increment_bak_02';

1.4 物理备份还原

1.4.1 联机还原

DM 仅仅支持表的联机还原,数据库、表空间和归档日志的还原必须通过脱机工具 DMRMAN 执行。执行表还原,数据库必须处于 OPEN 状态,MOUNT 和 SUSPEND 状态下不允许执行表还原。表还原不需要配置归档,因为表还原是联机完全备份还原,所以不需要借助本地归档日志进行恢复。

假设备份的表的数据目录是:/home/dm_bak/tab_bak_for_res_01

还原表结构

RESTORE TABLE STRUCT FROM BACKUPSET '/home/dm_bak/tab_bak_for_res_01';

还原表数据

RESTORE TABLE  FROM BACKUPSET '/home/dm_bak/tab_bak_for_res_01';

1.4.2 脱机还原

应使用与 DM 的数据库版本配套的 DMRMAN 工具进行操作

对于库级的备份还原恢复需要在数据库关闭状态下

目标库的还原仅支持脱机还原,可通过 DMRMAN 和 CONSOLE 工具实现

严格按照下面六个步骤来

使用全量备份集恢复

(1) 关闭数据库服务

systemctl stop DmServiceDMSERVER.service

(2) 启动 DMRMAN

./dmrman
RMAN> 

(3) 脱机校验备份

RMAN> CHECK BACKUPSET '/dm/data/DMDB/bak/db_full_bak/db_full_bak_01';

(4) 还原数据库

如果是用全备文件,这里直接使用全备文件恢复即可

如果要做增量恢复,直接恢复最后一次增量备份即可,但要保证增备和全备在同一个目录下

# 全库级别还原
RMAN> RESTORE DATABASE '/dm8/data/DAMENG/dm.ini' FROM BACKUPSET '/dm8/backup/FULL_BACK/';

# 表空间级还原
RMAN> RESTORE DATABASE '/dm/data/DMDB/dm.ini' TABLESPACE WISENSE FROM BACKUPSET 'db_full_bak_01';

(5) 恢复数据库

可以用全库备份集恢复某个表空间,也可以用表空间备份集恢复表空间

# 全库级别恢复
## 指定归档恢复
RMAN> RECOVER DATABASE '/dm8/data/DAMENG/dm.ini' WITH ARCHIVEDIR '/dm8/arch/';
# 这里的arch下面就是日志文件
## 指定备份集恢复
RMAN> RECOVER DATABASE '/dm/data/DMDB/dm.ini' FROM BACKUPSET '/dm/data/DMDB/bak/db_full_bak/db_full_bak_01';

# 表空间级恢复
# 表空间恢复自动使用归档恢复到最新状态
RMAN> RECOVER DATABASE '/dm8/data/DMDB/dm.ini' TABLESPACE WISENSE;

# 注意:WITH ARCHIVEDIR '/dm/date/DMDB/arch' 是根据归档恢复,可以恢复到最新,而指定备份集只能恢复到备份之前,一般生产不用这种方式

(6) 恢复 db_magic

# 只有全库级别的恢复才需要更新魔数,表空间级的不需要
RMAN> RECOVER DATABASE '/dm8/data/DAMENG/dm.ini' UPDATE DB_MAGIC;

注意:库级备份集恢复一次后,就不能继续利用这个全量备份集继续做增量备份了,必须立刻重新做一个全量备份,再对新的全量备份做增量备份。如果是基于表空间的备份集,恢复一次后这个备份集就不能再在本机进行恢复了,因为更新了数据魔数

使用增量备份集恢复

如果增量备份集和所依赖的全量备份在同一个目录,那么还原与恢复的命令和上面全量备份集恢复的命令是一样的,但如果不在同一个目录,就需要用 WITH BACKUPDIR指定一下全量备份集目录所在的父目录。如下所示

# 全库级别增量备份还原
RMAN> RESTORE DATABASE '/dm/data/DMDB/dm.ini' FROM BACKUPSET '/dm/data/DMDB/bak/db_full_bak_01/db_increment_bak_01' WITH BACKUPDIR '/dm/data/DMDB/bak/db_full_bak_01';
# 全量备份集在 /dm/data/DMDB/bak/db_full_bak_01 下面,此目录是存放全量备份和对应增量备份的父目录

# 恢复
RMAN> RECOVER DATABASE '/dm/data/DMDB/dm.ini' FROM BACKUPSET '/dm/data/DMDB/bak/db_full_bak_01/db_increment_bak_01' WITH BACKUPDIR '/dm/data/DMDB/bak/db_full_bak_01';

# 恢复魔数
RMAN> RECOVER DATABASE '/dm/data/DMDB/dm.ini' UPDATE DB_MAGIC;

1.4.3 系统备份路径

默认情况下,系统只会查找默认路径下的备份集

# 查找默认路径
select * from SYS."V$PARAMETER" t where t.name ='BAK_PATH';
# 查找备份集
select * from SYS."V$BACKUPSET";
# 添加查找路径
SF_BAKSET_BACKUP_DIR_ADD('DISK','/dm8/backup/full/');

1.5 dexp 逻辑备份

1.5.1 dexp 工具

dexp 工具可以对本地或者远程数据库进行数据库级、用户级、模式级和表级的逻辑备份。备份的内容非常灵活,可以选择是否备份索引、数据行和权限,是否忽略各种约束(外键约束、非空约束、唯一约束等),在备份前还可以选择生成日志文件,记录备份的过程以供查看。

总共有四种导出数据级别

注意:下面的存储目录必须提前创建,命令时不会创建目录的

1) FULL

FULL 方式导出数据库的所有对象

导出的数据文件 db_str.dmp 和 日志文件 db_str.log 存放在 目录 /dm/dexp 下

./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log FULL=Y DIRECTORY=/dm/dexp

2) OWNER

OWNER 方式导出一个或多个用户拥有的所有对象

例如,设置 OWNER=USER01,导出用户 USER01 所拥有的对象全部导出

./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log OWNER=USER01 DIRECTORY=/dm/dexp

3) SCHEMAS

SCHEMAS 方式的导出一个或多个模式下的所有对象

例如,设置 SCHEMAS=USER01,导出模式 USER01 模式下的所有对象

./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log SCHEMAS=USER01 DIRECTORY=/dm/dexp

4) TABLES

TABLES 方式导出和导入一个或多个指定的表或表分区。导出所有数据行、约束、索引等信息

例如,设置 TABLES=table1,table2,导出 table1,table2 两张表的所有数据和信息

./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log TABLES=table1,table2 DIRECTORY=/dm/dexp

1.6 逻辑备份还原

1.6.1 dimp 工具

dimp 逻辑导入工具利用 dexp 工具生成的备份文件对本地或远程的数据库进行联机逻辑还原。dimp 导入是 dexp
导出的相反过程。还原的方式可以灵活选择,如是否忽略对象存在而导致的创建错误、是否导入约束、是否导入索引、导入时是否需要编译、是否生成日志等

总共有四种导入级别

1) FULL

FULL 方式导入整个数据库

例如,设置 FULL=Y,导入整个数据库,导入的数据库文件在 /dm/dexp下面,即将生成的日志文件放在 /dm/dimp

./dimp USERID=SYSDBA/SYSDBA FILE=/dm/dexp/db_str.dmp LOG=db_str.log FULL=Y DIRECTORY=/dm/dimp

2) OWNER

OWNER 方式导入一个或多个用户拥有的所有对象

例如,设置 OWNER=USER01,导入用户 USER01 所拥有的对象全部导出。导入的数据库文件在 /dm/dexp,即将生成的日志文件放在 /dm/dimp

./dimp USERID=SYSDBA/SYSDBA FILE=/dm/dexp/db_str.dmp LOG=db_str.log OWNER=USER01 DIRECTORY=/dm/dimp

3) SCHEMAS

SCHEMAS 方式的导入一个或多个模式下的所有对象。

例如,设置 SCHEMAS=USER01,导入模式 USER01 模式下的所有对象。导入的数据库文件在 /dm/dexp,即将生成的日志文件放在 /dm/dimp

./dimp USERID=SYSDBA/SYSDBA FILE=/dm/dexp/db_str.dmp LOG=db_str.log SCHEMAS=USER01 DIRECTORY=/dm/dimp

4) TABLES

TABLES 方式导入一个或多个指定的表或表分区。导入所有数据行、约束、索引等信息。

例如,设置 TABLES=table1,table2,导入 table1,table2 两张表的所有数据和信息。导入的数据库文件在 /dm/dexp,即将生成的日志文件放在 /dm/dimp

./dimp USERID=SYSDBA/SYSDBA FILE=/dm/dexp/db_str.dmp LOG=db_str.log TABLES=table1,table2 DIRECTORY=/dm/dimp

         👆回到顶部👆

在这里插入图片描述