在之前的博客我们了解了DMRM 和SQL备份中删除备份集的方法,如下:
DM7 达梦数据库 物理备份还原之 备份管理 操作手册
https://www.cndba.cn/dave/article/3600
DM7 达梦数据库 物理备份还原之 联机备份(SQL备份) 使用手册
https://www.cndba.cn/dave/article/3595
本篇我们把备份集删除的内容,集中整理成一篇博客。
1 DMRMAN 中删除备份集
1.1 删除特定的备份集
REMOVE BACKUPSET命令可删除特定备份集,每次只能删除一个备份集。若删除备份集已经被引用为其他备份集的基备份且未指定 CASCADE,则报错。
示例:
[dave@www.cndba.cn bin]$ ./dmrman
dmrman V7.6.0.95-Build(2018.09.13-97108)ENT
RMAN> backup database '/dm7/dmdbms/data/cndba/dm.ini' backupset '/dm7/dmbak/db_bak_for_remove_01';
RMAN> remove backupset '/dm7/dmbak/db_bak_for_remove_01';
remove backupset '/dm7/dmbak/db_bak_for_remove_01';
CMD END.CODE:[0]
remove backupset successfully.
time used: 10.166(ms)
RMAN>
删除成功,操作系统上也会对应的删除。
默认备份路径由BAK_PATH 参数控制:
[dave@www.cndba.cn cndba]$ cat dm.ini|grep BAK_PATH
CTL_BAK_PATH = /dm7/dmdbms/data/cndba/ctl_bak #dm.ctl backup path
BAK_PATH = /dm7/dmdbms/data/cndba/bak #backup file path
[dave@www.cndba.cn cndba]$
如果备份集为其他备份集的基备份且备份集都在数据库默认备份目录下还可使用以下方式删除备份集:
RMAN> backup database '/dm7/dmdbms/data/cndba/dm.ini' backupset '/dm7/dmbak/db_bak_for_remove_01';
--增量备份之前,启动数据库,进行一些事物操作,以便成功生成增量备份,在关闭数据库
RMAN>backup database '/dm7/dmdbms/data/cndba/dm.ini' increment with backupdir '/dm7/dmbak/db_bak_for_remove_01' backupset 'db_bak_for_remove_01_incr';
……
DBF BACKUP MAIN......
BACKUPSET [/dm7/dmdbms/data/cndba/bak/db_bak_for_remove_01_incr] END, CODE [0]......
META GENERATING......
total 7 packages processed...
total 7 packages processed!
CMD END.CODE:[0]
backup successfully!
time used: 7009.414(ms)
RMAN>
RMAN> remove backupset 'db_bak_for_remove_01_incr' database '/dm7/dmdbms/data/cndba/dm.ini' cascade;
remove backupset 'db_bak_for_remove_01_incr' database '/dm7/dmdbms/data/cndba/dm.ini' cascade;
CMD END.CODE:[0]
remove backupset successfully.
time used: 16.044(ms)
RMAN>
因为我们这里的基备份不是默认的备份目录,所以只删除了增备。
1.2 批量删除所有备份集
REMOVE BACKUPSETS命令可批量删除备份集。
RMAN>backup database '/dm7/dmdbms/data/cndba/dm.ini' backupset '/dm7/dmbak/db_bak_for_remove_02';
RMAN> remove backupsets with backupdir '/dm7/dmbak/db_bak_for_remove_02';
remove backupsets with backupdir '/dm/dm_bak';
CMD END.CODE:[-10000],DESC:[Fail in mml(-10000)]
CMD END.CODE:[0]
remove backupset successfully.
time used: 1058.835(ms)
RMAN>
1.3 批量删除指定时间之前的备份集
REMOVE BACKUPSETS…UNTIL TIME 命令可以批量删除指定时间的备份集。
RMAN>backup database '/dm7/dmdbms/data/cndba/dm.ini' backupset '/dm7/dmbak/db_bak_for_remove_01';
RMAN> remove backupsets with backupdir '/dm7/dmbak' until time '2019-12-16 00:00:00';
remove backupsets with backupdir '/dm7/dmbak' until time '2019-12-16 00:00:00';
CMD END.CODE:[-10000],DESC:[备份恢复时MML层出错(-10000)]
CMD END.CODE:[0]
remove backupset successfully.
time used: 1012.829(ms)
RMAN>
2 SQL备份中使用函数删除备份集
在达梦数据库中可以通过如下函数或者存储过程来检查和删除备份集:
- SF_BAKSET_CHECK
- SF_BAKSET_REMOVE
- SF_BAKSET_REMOVE_BATCH
- SP_DB_BAKSET_REMOVE_BATCH
- SP_TS_BAKSET_REMOVE_BATCH
- SP_TAB_BAKSET_REMOVE_BATCH
- SP_ARCH_BAKSET_REMOVE_BATCH
2.1 SF_BAKSET_CHECK :对备份集进行校验
[dave@www.cndba.cn dmbak]$ disql SYSDBA/SYSDBA@DAVE
服务器[192.168.10.2:6236]:处于普通打开状态
登录使用时间: 4.049(毫秒)
disql V7.6.0.95-Build(2018.09.13-97108)ENT
Connected to: DM 7.1.6.95
SQL> backup database full backupset '/dm7/dmbak/db_bak_for_remove_01';
操作已执行
已用时间: 00:00:01.178. 执行号:3.
SQL> select sf_bakset_check('DISK','/dm7/dmbak/db_bak_for_remove_01');
行号 SF_BAKSET_CHECK('DISK','/dm7/dmbak/db_bak_for_remove_01')
---------- ---------------------------------------------------------
1 1
已用时间: 10.361(毫秒). 执行号:4.
SQL>
2.2 SF_BAKSET_REMOVE 函数
删除指定设备类型和指定备份集目录的备份集。一次只检查一个合法.meta 文件,然后删除对应备份集。
语法:SF_BAKSET_REMOVE ( device_type varchar,backsetpath varchar(256),option integer)
参数说明:
device_type:设备类型,disk 或 tape。
backsetpath:待删除的备份集目录。
Option:删除备份集选项,0 默认删除,1 级联删除。
举例说明:
SQL>backup database full backupset '/dm7/dmbak/db_bak_for_remove_02';
SQL>backup database increment backupset '/dm7/dmbak/db_bak_for_remove_02_incr';
SQL>select sf_bakset_remove('DISK','/dm7/dmbak/db_bak_for_remove_02');
SQL>select sf_bakset_remove('DISK','/dm7/dmbak/db_bak_for_remove_02_incr',1);
2.3 SF_BAKSET_REMOVE_BATCH 函数
批量删除满足指定条件的所有备份集。
语法:SF_BAKSET_REMOVE_BATCH ( device_type varchar,end_time datetime,range int,obj_name varchar(257))
参数说明:
device_type:设备类型,disk 或 tape。指定 NULL,则忽略存储设备的区分。
end_time:删除备份集生成的结束时间,仅删除 end_time 之前的备份集,必须指定。
range:指定删除备份的级别。1 代表库级,2 代表表空间级,3 代表表级,4 代表归档备份。若指定 NULL,则忽略备份集备份级别的区分。
obj_name:待删除备份集中备份对象的名称,仅表空间级和表级有效。若为表级备份删除,则需指定完整的表名(模式.表名),否则,将认为删除会话当前模式下的表备份。若指定为 NULL,则忽略备份集中备份对象名称区分。
SQL> backup database full backupset '/dm7/dmbak/db_bak_for_remove_02';
操作已执行
已用时间: 00:00:01.228. 执行号:11.
SQL> backup tablespace main full backupset '/dm7/dmbak/ts_bak_for_remove';
操作已执行
已用时间: 00:00:01.057. 执行号:12.
SQL>
SQL> select sf_bakset_remove_batch ('DISK', now()-1, 2, NULL);
行号 SF_BAKSET_REMOVE_BATCH('DISK',NOW()-1,2,NULL)
---------- ---------------------------------------------
1 1
已用时间: 11.714(毫秒). 执行号:15.
SQL>
SQL> select sf_bakset_remove_batch ('DISK', now(),NULL,NULL);
行号 SF_BAKSET_REMOVE_BATCH('DISK',NOW(),NULL,NULL)
---------- ----------------------------------------------
1 1
已用时间: 8.861(毫秒). 执行号:16.
SQL>
2.4 SP_DB_BAKSET_REMOVE_BATCH 存储过程
批量删除指定时间之前的数据库备份集。使用该方法前,需要先使用SF_BAKSET_BACKUP_DIR_ADD 添加将要删除的备份集目录,否则只删除默认备份路径下的备份集。
语法:SP_DB_BAKSET_REMOVE_BATCH ( device_type varchar,end_time datetime)
参数说明:
device_type:设备类型,disk 或 tape。指定 NULL,则忽略存储设备的区分。
end_time:删除备份集生成的结束时间,仅删除 end_time 之前的备份集,必须指定。
SQL> backup database full backupset '/dm7/dmbak/db_bak_for_remove_03';
操作已执行
已用时间: 00:00:01.319. 执行号:20.
SQL> select sf_bakset_backup_dir_add('DISK','/dm7/dmbak');
行号 SF_BAKSET_BACKUP_DIR_ADD('DISK','/dm7/dmbak')
---------- ---------------------------------------------
1 1
已用时间: 0.703(毫秒). 执行号:21.
SQL> sp_db_bakset_remove_batch ('DISK', now());
DMSQL 过程已成功完成
已用时间: 23.375(毫秒). 执行号:22.
SQL> sp_db_bakset_remove_batch ('DISK', now()-15);
2.5 SP_TS_BAKSET_REMOVE_BATCH 存储过程
批量删除指定表空间对象及指定时间之前的表空间备份集。使用该方法前,需要先使用SF_BAKSET_BACKUP_DIR_ADD 添加将要删除的备份集目录,否则只删除默认备份路径下的备份集。
语法:SP_TS_BAKSET_REMOVE_BATCH (device_type varchar,end_time datetime, ts_name varchar(128))
参数说明:
device_type:设备类型,disk 或 tape。指定 NULL,则忽略存储设备的区分。
end_time:删除备份集生成的结束时间,仅删除 end_time 之前的备份集,必须指定。
ts_name:表空间名,若未指定,则认为删除所有满足条件的表空间备份集。
SQL> backup tablespace main full backupset '/dm7/dmbak/ts_bak_for_remove';
操作已执行
已用时间: 00:00:01.057. 执行号:12.
SQL>
SQL> select sf_bakset_backup_dir_add('DISK','/dm7/dmbak');
行号 SF_BAKSET_BACKUP_DIR_ADD('DISK','/dm7/dmbak')
---------- ---------------------------------------------
1 1
已用时间: 0.612(毫秒). 执行号:297.
SQL> call sp_ts_bakset_remove_batch('DISK',NOW(),'MAIN');
DMSQL 过程已成功完成
已用时间: 8.481(毫秒). 执行号:298.
SQL>
2.6 SP_TAB_BAKSET_REMOVE_BATCH 存储过程
批量删除指定表对象及指定时间之前的表备份集。使用该方法前,需要先使用SF_BAKSET_BACKUP_DIR_ADD 添加将要删除的备份集目录,否则只删除默认备份路径下的备份集。
语法:SP_TAB_BAKSET_REMOVE_BATCH (device_type varchar,end_time datetime,sch_name varchar(128),tab_name varchar(128))
device_type:设备类型,disk 或 tape。指定 NULL,则忽略存储设备的区分。
end_time:删除备份集生成的结束时间,仅删除 end_time 之前的备份集,必须指定。
sch_name:表所属的模式名。
tab_name:表名,只要模式名和表名有一个指定,就认为需要匹配目标;若均指定为NULL,则认为删除满足条件的所有表备份。
SQL> create table cndba(c1 int);
操作已执行
已用时间: 21.178(毫秒). 执行号:299.
SQL> backup table cndba backupset '/dm7/dmbak/tab_bak_for_batch_del';
操作已执行
已用时间: 00:00:01.398. 执行号:300.
SQL> select sf_bakset_backup_dir_add('DISK','/dm7/dmbak');
行号 SF_BAKSET_BACKUP_DIR_ADD('DISK','/dm7/dmbak')
---------- ---------------------------------------------
1 1
已用时间: 0.416(毫秒). 执行号:301.
SQL> call sp_tab_bakset_remove_batch('DISK',NOW(),'SYSDBA','CNDBA');
DMSQL 过程已成功完成
已用时间: 8.570(毫秒). 执行号:302.
SQL>
2.7 SP_ARCH_BAKSET_REMOVE_BATCH 存储过程
批量删除指定时间之前的归档备份集。使用该方法前,需要先使用SF_BAKSET_BACKUP_DIR_ADD 添加将要删除的备份集目录,否则只删除默认备份路径下的备份集。
语法:SP_ARCH_BAKSET_REMOVE_BATCH ( device_type varchar,end_time datetime)
参数说明:
device_type:设备类型,disk 或 tape。指定 NULL,则忽略存储设备的区分。
end_time:删除备份集生成的结束时间,仅删除 end_time 之前的备份集,必须指定。
SQL> backup archivelog backupset '/dm7/dmbak/arch_bak_for_batch_del';
操作已执行
已用时间: 00:00:01.154. 执行号:303.
SQL> select sf_bakset_backup_dir_add('DISK','/dm7/dmbak');
行号 SF_BAKSET_BACKUP_DIR_ADD('DISK','/dm7/dmbak')
---------- ---------------------------------------------
1 1
已用时间: 0.265(毫秒). 执行号:304.
SQL> call sp_arch_bakset_remove_batch('DISK', NOW());
DMSQL 过程已成功完成
已用时间: 9.803(毫秒). 执行号:305.
SQL>
版权声明:本文为博主原创文章,未经博主允许不得转载。



