0
点赞
收藏
分享

微信扫一扫

达梦数据库物理备份

343d85639154 2022-03-11 阅读 67
dbalinux

文章目录

物理备份

  • 参考学习文章

官方文档
关于增备比较好的文章
对应官方文档的网络文章
dmrman物理脱机备份文章

联机备份

两种方式启动归档

  • 联机归档配置
  • 手动归档配置

注意
联机备份时,关闭已配置的本地归档之后再重新打开,会造成归档文件中部分日志缺失,
备份时检查归档文件连续性时将会报错。存在该类操作时,用户若要避免该错误,
备份前需要调用 checkpo int(100) 主动刷新检查点。

数据库备份

  • 执行全备
SQL> backup database full backupset '/dmdata/dmbak/db_full_bak_01';
executed successfully
used time: 00:00:04.132. Execute id is 501.
  • 指定备份集路径
SQL> backup database backupset '/dmdata/dmbak/db_bak_3_01';
  • 指定备份集名称
SQL> backup database to WEEKLY_FULL_BAK backupset '/dmdata/dmbak/db_bak_3_02';
  • 指定备份集描述
SQL> backup database backupset '/dmdata/dmbak/db_bak_3_04' backupinfo 'full_backup';
  • 指定备份片大小为300M
SQL> backup database backupset '/dmdata/dmbak/db_bak_3_05' maxpiecesize 300;
  • 指定压缩级别为5
SQL> backup database backupset '/dmdata/dmbak/db_bak_3_06' compressed level 5;
  • 指定并行数为8
SQL> backup database backupset '/dmdata/dmbak/db_bak_3_07' parallel 8;
  • 基于/dmdata/dmbak目录下的备份集做增量备份
SQL> backup database increment with backupdir '/dmdata/dmbak' backupset '/dmdata/dmbak/db_increment_bak_02';

表空间备份

注意

  1. 当备份数据超过限制大小时,会生成新的备份文件,新的备份文件名是初始文件名后加文件编号。
  2. 系统处于归档模式下时,才允许进行表空间备份。
  3. Mount 状态下,不允许进行表空间备份。
  4. MPP 环境不允许进行表空间备份。
  • 完全备份main表空间
SQL> backup tablespace main full backupset '/dmdata/dmbak/ts_main_bak_01';
  • 基于/dmdata/dmbak目录下的备份集做main表空间的增量备份(缺省是差异增量备份,可以基于多种备份集)
SQL> backup tablespace main increment with backupdir '/dmdata/dmbak' backupset '/dmdata/dmbak/ts_main_increment_bak_02';
  1. 若要创建累积增量备份,还需要指定 CUMULATIVE 参数,否则缺省为差异增量备份。
  2. 若基备份不在默认备份目录,WITH BACKUPDIR 参数必须指定,用于搜索基备份集。
  • 只能基于全备的累积增量备份
SQL> backup tablespace main increment cumulative with backupdir '/dmdata/dmbak' backupset '/dmdata/dmbak/ts_main_increment_cumulative_bak_04';

表备份

注意

  1. 表备份均为联机完全备份
  2. 不需配置归档日志
  3. 没有增量备份
  • 创建表与数据备用
SQL> create table tab_01 (id int not null,name varchar not null);
SQL> insert into tab_01 values(1,'pdm');
  • 备份tab_01表
SQL> backup table tab_01 backupset '/dmdata/dmbak/tab_bak_01';
  • 查看默认备份路径
select para_value,para_type from v$dm_ini t where para_name = 'BAK_PATH';

备份目录管理

sf_bakset_backup_dir_add

  • 增加目录
SQL> select sf_bakset_backup_dir_add('disk','/dmdata/dmbak');
SQL> select * from v$backupset_search_dirs;
LINEID DIR
---------- ----------------
1 /dmdata/dmbak
2 /dmdata/dmdb/bak

sf_bakset_backup_dir_remove

  • 删除目录
SQL> select sf_bakset_backup_dir_remove('disk','/dmdata/dmbak');
SQL> select * from v$backupset_search_dirs;
LINEID DIR
---------- ----------------
1 /dmdata/dmdb/bak

sf_bakset_backup_dir_remove_all

  • 删除所有目录,除默认目录以外
SQL> select * from v$backupset_search_dirs;
LINEID DIR
---------- ----------------
1 /dmdata/dmbak/a
2 /dmdata/dmbak/b
3 /dmdata/dmdb/bak

SQL> select sf_bakset_backup_dir_remove_all();
LINEID SF_BAKSET_BACKUP_DIR_REMOVE_ALL()
---------- ---------------------------------
1 1

SQL> select * from v$backupset_search_dirs;
LINEID DIR
---------- ----------------
1 /dmdata/dmdb/bak

备份集校验与删除

sf_bakset_check

  • 检查备份集,路径指定到备份文件
SQL> backup database full to db_full_bak_2_12_01 backupset '/dmdata/dmbak/db_full_bak_2_12_01';
SQL> select sf_bakset_check('disk','/dmdata/dmbak/db_full_bak_2_12_01');
LINEID SF_BAKSET_CHECK('disk','/dmdata/dmbak/db_full_bak_2_12_01')
---------- -----------------------------------------------------------
1 1
SQL> select * from v$backupset_search_dirs;
SQL> select * from v$backupset;

sf_bakset_remove

  • 删除指定设备类型和指定备份集目录的备份集
--第三个参数默认是0,1代表联级删除
--需要添加目录,v$backupset才能查到备份集的信息
SQL> select * from v$backupset_search_dirs;
1 /dmdata/dmbak
--添加了上级目录就不再需要单个备份集添加目录
SQL> backup database full to db_rac_bak_for_remove backupset '/dmdata/dmbak/db_rac_bak_for_remove';
SQL> backup database increment base on backupset '/dmdata/dmbak/db_rac_bak_for_remove' backupset '/dmdata/dmbak/db_rac_bak_for_remove_incr';
SQL> select sf_bakset_backup_dir_add('disk','/dmdata/dmbak/db_rac_bak_for_remove');
SQL> select sf_bakset_backup_dir_add('disk','/dmdata/dmbak/db_rac_bak_for_remove_incr');
SQL> select * from v$backupset;
SQL> select sf_bakset_remove('disk','/dmdata/dmbak/db_rac_bak_for_remove');
[-8202]:Be the base backupset of /dmdata/dmbak/db_rac_bak_for_remove_incr,cannot be removed.
SQL> select sf_bakset_remove('disk','/dmdata/dmbak/db_rac_bak_for_remove',1);
SQL> select * from v$backupset;

sf_bakset_remove_batch

  • 批量删除满足指定条件的所有备份集
  1. end_time:删除备份集生成的结束时间,仅删除 end_time 之前的备份集,必须指定。
  2. range:指定删除备份的级别。1 代表库级,2 代表表空间级,3 代表表级,4 代表归档备份。若指定 NULL,则忽略备份集备份级别的区分。
  3. obj_name:待删除备份集中备份对象的名称,仅表空间级和表级有效。若为表级备份删除,则需指定完整的表名(模式.表名),否则,将认为删除会话当前模式下的表备份。若指定为 NULL,则忽略备份集中备份对象名称区分。
SQL> backup database full to db_rac_full_bak_for_remove backupset '/dmdata/dmbak/db_rac_full_bak_for_remove';
SQL> backup tablespace main full to tab_main_full_bak_for_remove backupset '/dmdata/dmbak/tab_main_full_bak_for_remove';
--确认能查到备份目录、备份集
SQL> select * from v$backupset_search_dirs;
SQL> select * from v$backupset;
SQL> select sf_bakset_remove_batch('disk',now(),null,null);
SQL> select * from v$backupset;

sp_db_bakset_remove_batch

  • 批量删除指定时间之前的数据库备份集
  1. 需要先使用 SF_BAKSET_BACKUP_DIR_ADD 添加将要删除的备份集目录,否则只删除默认备份路径下的备份集
SQL> backup database full to db_rac_full_bak_for_del backupset '/dmdata/dmbak/db_rac_full_bak_for_del';
SQL> select * from v$backupset_search_dirs;
SQL> select * from v$backupset;
SQL> call sp_db_bakset_remove_batch('disk',now());

sp_ts_bakset_remove_batch

  • 批量删除指定表空间对象及指定时间之前的表空间备份集
  1. 第三个参数表空间名必须大写
SQL> backup tablespace main full to tab_main_bak_full_for_del backupset '/dmdata/dmbak/tab_main_bak_full_for_del';
SQL> select * from v$backupset;
SQL> call sp_ts_bakset_remove_batch('disk',now(),'main');
DMSQL executed successfully
SQL> select * from v$backupset;
--虽然执行成功,但查询结果还是存在tab_main_bak_full_for_del 备份集
SQL> call sp_ts_bakset_remove_batch('disk',now(),'MAIN');
SQL> select * from v$backupset;
--备份集已经被删除,说明表空间名称要大写

sp_tab_bakset_remove_batch

  • 批量删除指定表对象及指定时间之前的表备份集
  1. sch_name:表所属的模式名。
  2. tab_name:表名,只要模式名和表名有一个指定,就认为需要匹配目标;若均指定为 NULL,则认为删除满足条件的所有表备份。
  • 操作完成后一定要检查结果是否执行成功
  • 双引号内的参数是区分大小写的
--创建测试表
SQL> create table tab_for_del_batch(c1 int);
SQL> insert into tab_for_del_batch values (1);
SQL> commit;
SQL> select * from tab_for_del_batch;
--创建备份,删除备份,查看备份集
SQL> backup table tab_for_del_batch to tab_bak_for_del_batch backupset '/dmdata/dmbak/tab_bak_for_del_batch';
SQL> select * from v$backupset;
SQL> sp_tab_bakset_remove_batch('disk',now(),'SYSDBA','TAB_FOR_DEL_BATCH');

sp_arch_bakset_remove_batch

  • 批量删除指定时间之前的归档备份集
SQL> backup archivelog to arch_bak_for_del_batch backupset '/dmdata/dmbak/arch_bak_for_del_batch';
SQL> select * from v$backupset_search_dirs;
SQL> select * from v$backupset;
SQL> sp_arch_bakset_remove_batch('disk',now());

脱机备份

启动DMRMAN

[dmdba@dmoasys bin]$ pwd 
/home/dmdba/dmdbms/bin
[dmdba@dmoasys bin]$ ./dmrman
dmrman V8
RMAN> exit
time used: 1.469(ms)

备份数据库

  • 需要将数据库置为shutdown 状态才可以执行

  • 做全备

RMAN> backup database '/dmdata/dmdb/dm.ini' full backupset '/dmdata/dmbak/db_full_bak_01';
backup database '/dmdata/dmdb/dm.ini' full backupset '/dmdata/dmbak/db_full_bak_01';
file dm.key not found, use default license!
[-137]:DM server is running or exist other process which is operating the same database
SQL> shutdown immediate;
RMAN> BACKUP DATABASE '/dmdata/dmdb/dm.ini' FULL BACKUPSET '/dmdata/dmbak/db_full_bak_01';
BACKUP DATABASE '/dmdata/dmdb/dm.ini' FULL BACKUPSET '/dmdata/dmbak/db_full_bak_01';
Database mode = 0, oguid = 0
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
begin redo pwr log collect, last ckpt lsn: 51771 ...
redo pwr log collect finished
EP[0]'s cur_lsn[55923], file_lsn[55923]
Processing backupset /dmdata/dmbak/db_full_bak_01
[Percent:100.00%][Speed:0.00M/s][Cost:00:00:00][Remaining:00:00:00]
backup successfully!
time used: 00:00:01.725
  • 做增备,必须是全备后数据有改动才可以做增备
RMAN> backup database '/dmdata/dmdb/dm.ini' increment with backupdir '/dmdata/dmbak' backupset '/dmdata/dmbak/db_increment_bak_02';
redo pwr log collect finished
EP[0]'s cur_lsn[55923], file_lsn[55923]
[-8084]:BEGIN_LSN is less than END_LSN of base backupset
SQL> insert into tab_for_del_batch values (2);
RMAN> check backupset '
/dmdata/dmbak/db_full_bak_01';
EP[0]'
s cur_lsn[58609], file_lsn[58609]
Processing backupset /dmdata/dmbak/db_increment_bak_02
[Percent:100.00%][Speed:0.00M/s][Cost:00:00:00][Remaining:00:00:00]
backup successfully!
time used: 00:00:01.181

注意

  1. 增量备份指基于指定的库的某个备份(完全备份或者增量备份),备份自该备份以来所有发生修改了的数据页。脱机增量备份要求两次备份之间数据库必须有操作,否则备份会报错。
  2. WITH BACKUPDIR 参数用于搜索基备份集。
  3. INCREMENT 参数表示执行的备份为增量备份,增量备份该参数不可省略。
  • 校验特定的备份集
RMAN> check backupset '/dmdata/dmbak/db_full_bak_01';
check backupset '/dmdata/dmbak/db_full_bak_01';
[Percent:100.00%][Speed:0.00M/s][Cost:00:00:00][Remaining:00:00:00]
check backupset successfully.
time used: 98.260(ms)

备份集删除

  • 删除特定备份集,每次只能删除一个备份集
RMAN> backup database '/dmdata/dmdb/dm.ini' backupset '/dmdata/dmbak/db_bak_for_remove_01';
RMAN> remove backupset '/dmdata/dmbak/db_bak_for_remove_01';
  • 备份集在数据库默认备份目录,默认目录在 dm.ini 参数 BAK_PATH
  • 可以使用如下方式删除
RMAN> backup database '/dmdata/dmdb/dm.ini' backupset 'db_bak_for_remove_01';
RMAN> remove backupset 'db_bak_for_remove_01' database '/dmdata/dmdb/dm.ini';
  • 备份集为其他备份集的基备份且备份集都在数据库默认备份目录下
  • 联级删除
backup database '/dmdata/dmdb/dm.ini' backupset 'db_bak_for_remove_01';
backup database '/dmdata/dmdb/dm.ini' increment backupset 'db_bak_for_remove_01_incr';
remove backupset 'db_bak_for_remove_01_incr' database '/dmdata/dmdb/dm.ini' cascade;
  • 批量删除所有备份
backup database '/dmdata/dmdb/dm.ini' backupset '/dmdata/dmbak/db_bak_for_remove_02';
remove backupsets with backupdir '/dmdata/dmbak';

24小时免费服务热线:400 991 6599
达梦技术社区:https://eco.dameng.com

举报

相关推荐

0 条评论