备份与还原是DBA必备的技能之一,为防止数据的误操作、误删除等突发情况,所以备份还原至关重要,一下从几方面共同学习一下达梦数据库的备份与还原基础知识。
达梦数据库的备份还原方式:物理备份还原和逻辑备份还原
物理备份:
冷备:(dmap服务打开的状态下,数据库是关闭的)
热备:(dmap服务必定是打开的,数据库是打开的,数据库要开归档)
物理备份还原是对数据库的操做系统物理文件(如数据文件、控制文件和日志文件等)的备份还原。
逻辑备份:
导出:dexp / 导入:dimp
与备份类似,还原分为逻辑还原和物理还原:
联机还原和脱机还原
联机还原指数据库处于运行状态时,通过SQL语句执行还原操作。表还原可以在联机状态下执行。
脱机还原指数据库处于关闭状态时执行的还原操作,脱机还原通过DMRMAN工具进行。库备份、表空间备份和归档备份,可以执行脱机还原。(脱机还原操作的目标库必须处于关闭状态。)
数据还原和归档日志还原
数据还原可以分为库还原、表空间还原和表还原。库还原和表空间必须脱机执行;表还原操作只能联机执行。表还原从表备份集读取数据,重新恢复目标表数据,还会在目标表上重建索引、约束。归档日志还原则将归档日志备份集中的归档日志内容,重新生成到指定目录中。
完全还原和增量还原
完全还原是指直接利用完全备份集进行数据还原操作。增量还原指通过增量备份集进行数据还原操作。但是考虑到增量备份集的基础一定是一个完全备份集,因此增量还原过程中隐含了一个完全还原操作。如果增量备份集的基备份集被删除了,那么单独使用这个增量备份集是无法进行还原操作的。
备份还原实现策略有两种:dmap辅助进程方式和无辅助进程方式。
1、归档配置
通过 dm.ini 和 dmarch.ini 可以配置本地归档。dmarch.ini
生效的前提是 dm.ini
中的参数 ARCH_INI
置为 1。dmarch.ini
可以进行本地归档和远程归档的设置,DM 备份与还原过程中使用的日志均为本地归档日志。
①、修改数据库为 Mount 状态
SQL>alter DATABASE MOUNT;
②、配置本地归档
SQL>ALTER DATABASE ADD ARCHIVELOG 'DEST = /dm8/dmdata/arch, TYPE = local,FILE_SIZE = 1024, SPACE_LIMIT = 2048';
③、开启归档模式
SQL>ALTER DATABASE ARCHIVELOG;
④、修改数据库为 Open 状态
SQL>ALTER DATABASE OPEN;
⑤、查看开启状态
SQL>select name,status$,ARCH_MODE from v$database;
1、备份整个库
SQL> BACKUP DATABASE FULL BACKUPSET '/opt/dmdbms/BAK/db_full_bak_01';
2、指定备份集路径为 /home/dm_bak/db_bak_3_01,执行以下命令:
SQL> BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_3_01';
3、创建备份集,备份名设置为 WEEKLY_FULL_BAK,执行以下命令:
SQL> BACKUP DATABASE TO WEEKLY_FULL_BAK BACKUPSET '/home/dm_bak/db_bak_3_02';
4、创建备份为备份集添加描述信息为完全备份,执行以下命令:
SQL> BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_3_04' BACKUPINFO '完全备份';
5、创建备份限制备份片大小为 300 MB,执行以下命令:
SQL> BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_3_05' MAXPIECESIZE 300;
6、执行备份压缩,压缩级别设置为 5,执行以下命令:
SQL> BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_3_06' COMPRESSED LEVEL 5;
7、创建并行备份,指定并行数为 8,执行以下命令:
SQL> BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_3_07' PARALLEL 8;
8、基于 /home/dm_bak 全量备份的增量备份,执行以下命令:
SQL> BACKUP DATABASE INCREMENT WITH BACKUPDIR '/home/dm_bak' BACKUPSET '/home/dm_bak/db_increment_bak_02';
注意
当备份数据超过限制大小时,会生成新的备份文件,新的备份文件名是初始文件名后加文件编号。
系统处于归档模式下时,才允许进行表空间备份。
Mount 状态下,不允许进行表空间备份。
MPP 环境不允许进行表空间备份。
9、完全备份单个表空间,执行以下命令:
SQL> BACKUP TABLESPACE MAIN FULL BACKUPSET '/home/dm_bak/ts_full_bak_01';
10、增量备份指定备份目录,以备份 MAIN 表空间为例,指定 BASE_ON 参数执行增量备份,执行以下命令:
SQL> BACKUP TABLESPACE MAIN INCREMENT WITH BACKUPDIR '/home/dm_bak'BACKUPSET '/home/dm_bak/ts_increment_bak_02';
注意:
11、以备份 test表为例,执行以下命令:
SQL> BACKUP TABLE TEST BACKUPSET '/home/dm_bak/tab_bak_01';
12、添加备份目录。若添加目录已经存在或者为库默认备份路径,则认为已经存在,不添加,但也不报错。执行以下命令:
SQL> INT SF_BAKSET_BACKUP_DIR_ADD(device_type varchar,backup_dir varchar(256));
13、删除备份目录。若删除目录为库默认备份路径,不进行删除,认为删除失败。若指定目录存在于记录的合法目录中,则删除;不存在或者为空则跳过,正常返回。执行以下命令:
SQL>INT SF_BAKSET_BACKUP_DIR_REMOVE (device_type varchar,backup_dir varchar(256));
14、清理全部备份目录,默认备份目录除外,执行以下命令:
SQL>INT SF_BAKSET_BACKUP_DIR_REMOVE_ALL ();
脱机备份rman:
15、全库备份,在 DMRMAN 下执行以下命令:
dramn> BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' FULL BACKUPSET '/home/dm_bak/db_full_bak_01';
16、增量备份,在 DMRMAN 下执行以下命令:
dramn> BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' INCREMENT WITH BACKUPDIR '/home/dm_bak' BACKUPSET '/home/dm_bak/db_increment_bak_02';
注意:
17、校验特定的备份集,在 DMRMAN 下执行以下命令:
BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' FULL BACKUPSET '/home/dm_bak/db_full_bak_01';
CHECK BACKUPSET '/home/dm_bak/db_full_bak_01';
18、删除特定备份集,每次只能删除一个备份集,在 DMRMAN 下执行以下命令:
BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' BACKUPSET '/home/dm_bak/db_bak_for_remove_01';
REMOVE BACKUPSET '/home/dm_bak/db_bak_for_remove_01';
19、备份集在数据库默认备份目录,默认目录在 dm.ini 参数 BAK_PATH,执行以下命令:
BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' BACKUPSET'db_bak_for_remove_01';
REMOVE BACKUPSET 'db_bak_for_remove_01' DATABASE '/opt/dmdbms/data/DAMENG/dm.ini';
20、备份集为其他备份集的基备份且备份集都在数据库默认备份目录下,执行以下命令:
BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' BACKUPSET'db_bak_for_remove_01';
BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' INCREMENT BACKUPSET'db_bak_for_remove_01_incr';
REMOVE BACKUPSET 'db_bak_for_remove_01_incr' DATABASE'/opt/dmdbms/data/DAMENG/dm.ini' CASCADE;
21、批量删除所有备份,执行以下命令:
BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini'BACKUPSET'/home/dm_bak/db_bak_for_remove_02';
REMOVE BACKUPSETS WITH BACKUPDIR '/home/dm_bak';
逻辑备份:
1、FULL 方式导出数据库的所有对象。
dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log FULL=YDIRECTORY=/mnt/data/dexp
2、OWNER 方式导出一个或多个用户拥有的所有对象。
dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log OWNER=USER01 DIRECTORY=/mnt/data/dexp
3、SCHEMAS 方式的导出一个或多个模式下的所有对象。
dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log SCHEMAS=USER01DIRECTORY=/mnt/data/dexp
4、TABLES 方式导出和导入一个或多个指定的表或表分区。导出所有数据行、约束、索引等信息。和 TABLES 导出有关的参数还有 QUERY、EXCLUDE 和 INCLUDE,都是用来设置过滤条件的。
dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log TABLES=table1,table2 DIRECTORY=/mnt/data/dexp
DM 仅支持表的联机还原,数据库、表空间和归档日志的还原必须通过脱机工具 DMRMAN 执行。
逻辑还原
1、还原表结构,执行以下命令:
SQL>restore table struct from backupset '/home/dm_bak/tab_bak_for_res_01';
2、还原表数据,执行以下命令:
SQL>RESTORE TABLE FROM BACKUPSET '/home/dm_bak/tab_bak_for_res_01';
3、还原表数据,但不重建索引,执行以下命令:
SQL>RESTORE TABLE WITHOUT INDEX FROM BACKUPSET '/home/dm_bak/tab_bak_for_res_01';
4、还原表数据,但不还原约束,执行以下命令:
SQL>RESTORE WITHOUT CONSTRAINT FROM BACKUPSET '/home/dm_bak/tab_bak_for_res_01';
脱机还原rman
进入数据库安装目录的 bin 目录下,例如 Linux 下的目录为 /opt/dmdbms/bin,执行以下命令:./dmrman
1、联机备份数据库,保证数据库运行在归档模式及 Open 状态。执行以下命令:
BACKUP DATABASE BACKUPSET '/home/dm_bak/db_full_bak_for_restore';
2、准备目标库。还原目标库可以是已经存在的数据库,也可使用 dminit 工具初始2、化一个新库。执行以下命令:
./dminit path=/opt/dmdbms/data db_name=DAMENG_FOR_RESTORE
3、启动 RMAN,校验备份,校验待还原备份集的合法性。校验备份有两种方式,联机和脱机,此处使用脱机校验。执行以下命令:
CHECK BACKUPSET '/home/dm_bak/db_full_bak_for_restore';
4、还原数据库。启动 DMRMAN,执行以下命令:
RESTORE DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' FROM BACKUPSET '/home/dm_bak/db_full_bak_for_restore';
5、恢复数据库。启动 DMRMAN,执行以下命令:
RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' FROM BACKUPSET '/home/dm_bak/db_full_bak_for_recover_backupset';
6、恢复 db_magic,执行以下命令:
RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' UPDATE DB_MAGIC;
注意:
可通过调整 dm.ini 中的和检查点和 REDO 日志相关参数,降低检查点频率,增大 REDO 日志包大小来提升还原性能。
表空间还原
使用 RESTORE 命令完成表空间的脱机还原,还原的备份集可以是联机或脱机生成的库备份集,也可以是联机生成的表空间备份集。脱机表空间还原仅涉及表空间数据文件的重建与数据页的拷贝。不需要事先置目标表空间为 OFFLINE 状态。表空间还原后,表空间状态被置为 RES_OFFLINE,并设置数据标记 FIL_TS_RECV_STATE_RESTORED,表示经过还原但数据不完整。
1、创建表空间,执行以下命令:
CREATE TABLESPACE TS1 DATAFILE 'TS1.DBF' SIZE 128;
2、创建表,指定表的存储空间为 TS1,执行以下命令:
CREATE TABLE RCT_BFHF_BKJ (C1 INT) STORAGE(ON TS1);
INSERT INTO RCT_BFHF_BKJ VALUES(1);
Commit;
3、联机备份数据库,保证数据库运行在归档模式及 OPEN 状态。执行以下命令:
BACKUP TABLESPACE MAIN BACKUPSET '/home/dm_bak/ts_full_bak_for_restore';
4、校验备份,校验待还原备份集的合法性(此步骤可选),执行以下命令:
CHECK BACKUPSET '/home/dm_bak/ts_full_bak_for_restore';
5、将表空间脱机,执行以下命令:
ALTER TABLESPACE TS1 OFFLINE;
6、还原表空间。需要注意,表空间还原的目标库只能是备份集产生的源库,否则将报错。
RESTORE DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' TABLESPACE MAIN FROM BACKUPSET '/home/dm_bak/db_full_bak_for_restore';
7、恢复表空间。启动 DMRMAN,执行以下命令:
RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' TABLESPACE TS1;
到此文章结束,请耐心阅读~
更多达梦技术资讯,请访问达梦技术社区:
达梦数据库 - 新一代大型通用关系型数据库 | 达梦云适配中心
https://eco.dameng.com/