1 达梦数据库备份还原简介
数据库备份是DBA日常最重要的工作内容。
DM 数据库的备份还原包括两种类型:物理备份还原和逻辑备份还原。
1.1 概念理解
- 物理备份
物理备份详细官方解释:物理备份还原是对数据库的操作系统物理文件(如数据文件、控制文件和日志文件等)的备份还原。例如使用 RMAN 工具进行的备份还原
物理备份简单理解方法:
大家可以简单理解为备份的数据为你可以在你的实例路径下看到的各种文件。物理物理嘛,就是可以在操作系统里面实际看到的文件撒。
物理备份过程中,不关心数据页的具体内容是什么,也不关心数据页属于哪一张表,只是简单的根据数据库文件系统的描述,来挑选有效的数据页。
- 逻辑备份
逻辑备份详细官方解释:逻辑备份还原是对数据库逻辑组件(如表、视图和存储过程等数据库对象)的备份还原;逻辑导出和逻辑导入数据库对象分为四种级别:数据库级(FULL)、用户级(OWNER)、模式级SCHEMAS)和表级(TABLES)。四种级别独立互斥,不能同时存在。
逻辑备份简单理解方法:简单的理解的话,就是你打开管理工具后,可以从管理工具里面看到的信息。你看,模式这个东西你无法从你的操作系统里面找到对应的模式文件,所以,你简单理解为这个为逻辑层面。
逻辑备份针对的是数据内容,并不关心这些数据物理存储在什么位置。
1.2 各自优点
- 逻辑备份:
—使用灵活,应用开发常用,可以指定不同对象或范围进行备份恢复。
— 支持对远程数据库备份到客户端 - 物理备份
—定时备份作业,减少人工干预,提高数据库的高可用性。
–可以恢复到故障之前的某一个节点
1.3 整理图
2 物理备份还原实战
2.1 开启归档
alter database mount;
alter database add archivelog 'type=local, dest=/dm8/arch,file_size=64,space_limit=0';
alter database archivelog;
alter database open;
2.2 开启damp
备份集备份还原实现策略有两种:DMAP 辅助进程方式和无辅助进程方式。用户可通过 DM.INI 参数 bak_use_ap 来选择(DMRMAN 使用参数 use_ap),bak_use_ap 取值 1、2。默认为 1。
-
DMAP 辅助进程方式
如果选择使用 DMAP 辅助进程,执行备份还原之前就必须启动 DMAP 服务。安装 DM 数据库以后,DMAP 服务会自动启动。 -
无辅助进程方式
不依赖DMAP,由主进程dmserver自身执行备份还原,但不支持第三方备份(指定DEVICE TYPE为TAPE)。 -
启动dmap
./DmAPService start
2.3备份
2.3.1 联机热备
- 备份数据库
backup DATABASE full to FULLBAK01 BACKUPSET '/dm8/backup/FULLBAK2022_09_25'
- 备份表
`backup table "TEST" to "TAB_TEST_EMP_2022_09_25_16_29_23" backupset 'TAB_TEST_EMP_2022_09_25_16_29_23';`
- 备份表空间
backup tablespace "TEST" full to "TS_TEST_FULL_2022_09_25_16_30_20" backupset 'TS_TEST_FULL_2022_09_25_16_30_20';
- 备份归档
backup archivelog all to "ARCH_2022_09_25_16_30_45" backupset 'ARCH_2022_09_25_16_30_45';
2.3.1 联机还原
DM 仅支持表的联机还原,数据库、表空间和归档日志的还原必须通过脱机工具 DMRMAN 执行。
- 表还原,表不需要恢复
RESTORE TABLE TEST FROM BACKUPSET 'TAB_TEST_EMP_2022_09_25_16_29_23';
2.3.1 脱机备份
- 启动DMRMAN:
进入数据库安装目录的 bin 目录下执行:
./dmrman
- 备份数据库
backup database '/dm8/data/DAMENG/dm.ini' to FULLBAK20220925 backupset
'/dm8/backup/FULLBAK20220925';
2.3.1 脱机还原
- 还原数据库
备份数据库:
BACKUP DATABASE BACKUPSET '/home/dm_bak/db_full_bak_for_restore';
还原数据库:
RESTORE DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' FROM
BACKUPSET '/home/dm_bak/db_full_bak_for_restore';
恢复数据库:
RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' FROM BACKUPSET '/home/dm_bak/db_full_bak_for_recover_backupset';
恢复 db_magic
RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' UPDATE DB_MAGIC;
- 表空间还原
备份表空间:
BACKUP TABLESPACE MAIN BACKUPSET '/home/dm_bak/ts_full_bak_for_restore';
执行表空间脱机:
ALTER TABLESPACE TS1 OFFLINE;
还原表空间:
RESTORE DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' TABLESPACE MAIN FROM BACKUPSET '/home/dm_bak/db_full_bak_for_restore';
恢复表空间:
RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' TABLESPACE TS1;
- 归档还原:
备份归档文件:
BACKUP ARCHIVE LOG ALL BACKUPSET '/home/dm_bak/arch_all_for_restore';
还原归档。启动 DMRMAN,设置 OVERWRITE 为 2,如果归档文件已存在,会报错。
指定还原的目标归档日志目录:
RESTORE ARCHIVE LOG FROM BACKUPSET '/home/dm_bak/arch_all_for_restore' TO ARCHIVEDIR'/opt/dmdbms/data/DAMENG_FOR_RESTORE/arch_dest' OVERWRITE 2;
指定还原目标库的 dm.ini 文件路径:
RESTORE ARCHIVE LOG FROM BACKUPSET '/home/dm_bak/arch_all_for_restore' TO DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' OVERWRITE 2;
3 逻辑备份还原实战
3.1 逻辑导出
- 库级导出
./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log FULL=YDIRECTORY=/mnt/data/dexp
- OWNER 方式导出一个或多个用户拥有的所有对象
./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log OWNER=USER01 DIRECTORY=/mnt/data/dexp
- SCHEMAS 方式的导出一个或多个模式下的所有对象
./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log SCHEMAS=USER01DIRECTORY=/mnt/data/dexp
- TABLES 方式导出和导入一个或多个指定的表或表分区
./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log TABLES=table1,table2 DIRECTORY=/mnt/data/dexp
3.1 逻辑导入
- FULL 方式导入整个数据库
./dimp USERID=SYSDBA/SYSDBA FILE=/mnt/data/dexp/db_str.dmp LOG=db_str.log FULL=Y DIRECTORY=/mnt/data/dimp
- OWNER 方式导入一个或多个用户拥有的所有对象
./dimp USERID=SYSDBA/SYSDBA FILE=/mnt/data/dexp/db_str.dmp LOG=db_str.log OWNER=USER01 DIRECTORY=/mnt/data/dim
- SCHEMAS 方式的导入一个或多个模式下的所有对象
./dimp USERID=SYSDBA/SYSDBA FILE=/mnt/data/dexp/db_str.dmp LOG=db_str.log SCHEMAS=USER01 DIRECTORY=/mnt/data/dimp
- TABLES 方式导入一个或多个指定的表或表分区
./dimp USERID=SYSDBA/SYSDBA FILE=/mnt/data/dexp/db_str.dmp LOG=db_str.log TABLES=table1,table2 DIRECTORY=/mnt/data/dimp