文章目录
- 一、达梦数据库备份策略
- 1.1 开启归档模式
- 1.1.1 联机配置本地归档
- 1.1.2 脱机配置本地归档
- 1.2 启动DMAP服务
- 1.2.1 启动DMAP
- 1.3 物理备份
- 1.3.1 联机备份
- (1) 数据库备份
- (2) 表空间备份
- (3) 表备份
- (4) 备份归档
- 1.3.2 脱机备份
- (1) 启动DMRMAN
- (2) 备份数据库
- 1.4 物理备份还原
- 1.4.1 联机还原
- 1.4.2 脱机还原
- (1) 关闭数据库服务
- (2) 启动 DMRMAN
- (3) 脱机校验备份
- (4) 还原数据库
- (5) 恢复数据库
- (6) 恢复 db_magic
- 1.4.3 系统备份路径
- 1.5 dexp 逻辑备份
- 1.5.1 dexp 工具
- 1) FULL
- 2) OWNER
- 3) SCHEMAS
- 4) TABLES
- 1.6 逻辑备份还原
- 1.6.1 dimp 工具
- 1) FULL
- 2) OWNER
- 3) SCHEMAS
- 4) TABLES
一、达梦数据库备份策略
达梦数据库的备份分为物理备份和逻辑备份,物理备份又分为联机备份(继续生产,不停服务)和脱机备份,需要注意的是,物理备份必须要开启归档模式。
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
👆回到顶部👆