2021-04-21 达梦备份恢复学习

 

今天,备份恢复后数据库整个挂了,无法启动,修改魔术数也没用。专门写下来备份恢复相关内容,以之为鉴。

目录

概念

备份之前

备份时

恢复时

通过导出实现备份效果

通过导入实现还原/恢复效果

自动备份/计划备份


概念

脱机备份:先关闭数据库,再进行备份的一种方法

联机备份:在数据库开启时,连接数据库备份的一种方法

归档日志:是 redo 日志的一种备份,结合全量备份文件可以用来恢复完整的数据库

导出:是将数据库内的数据导出成为一个文件的动作,与备份的区别就像 ghost 和 zip 压缩

导入:是将导出的dmp文件导入的操作,其实就是执行 sql

备份之前

首先,无论是联机备份还是脱机备份,都需要设置归档

  • 将数据库设置为 mount 状态
alter database mount;
  • 配置归档日志
alter database add archivelog 'DEST=/dm8/arch, TYPE=local, file_size=64, space_limit=1024';
  • 设置归档模式
alter database archivelog;
  • 设置为开启状态
alter database open;

备份时

随后就可以开始数据库备份了。

【联机备份】

GUI 工具的备份命令就是联机备份,不过为了更了解达梦,这里采用命令行方式进行一次全量备份

backup database full backupset '/dm8/backup';

在已经进行了全量备份后,数据库就可以进行增量备份了

backup database increment backupset '/dm8/backup';

【脱机备份】

脱机备份前应该先停止数据库服务,建议使用系统服务管理器,比如在 centos 下可以用:

systemctl stop DmServiceDMDB.service

然后使用 rman 进行全量备份

backup database '/dm8/data/DMDB/dm.ini';

如果想要进行增量备份,则使用(下面顺便指定了备份集位置)

backup database '/dm8/data/DMDB/dm.ini' increment backupset '/dm8/backup/rman/dmdb_backup_rman_20210422';

恢复时

整库恢复、表空间恢复都需要数据库处于 mount 状态,而且也需要停止数据库服务

alter database mount;
systemctl stop DmServiceDMDB.service
  • 首先检查备份集
check backupset '/dm8/backup/rman/dmdb_backup_rman_20210422';
  • 如果备份集没问题就可以恢复数据库了
restore database '/dm8/data/DMDB/dm.ini' from backupset '/dm8/backup/rman/dmdb_backup_rman_20210422';

如果想要恢复到最新状态,就需要归档文件的支持了

recover database '/dm8/data/DMDB/dm.ini' with archivedir '/dm8/arch';
  • 恢复后,数据库此时不能启动,需要先更新魔术数(我就在这里吃了亏,后来删了整个库重做的,结果浪费了大量时间,把自己坑了)
recover database '/dm8/data/DMDB/dm.ini' update db_magic;
  • 当然,也可以只恢复指定表空间,恢复表空间是不需要更新魔术数的。
restore database '/dm8/data/DMDB/dm.ini' tablespace DMTEST from backupset '/dm8/backup/dmrman/fullbak_0414';

recover database '/dm8/data/DMDB/dm.ini' tablespace DMTEST;

通过导出实现备份效果

使用 dexp 工具

dexp userid=sysdba/Dameng123 full=y file=/dm8/backup/full_20210422.dmp log=/dm8/backup/full_log_20210422.log

通过导入实现还原/恢复效果

使用 dimp 工具

dimp sysdata/Dameng1234@localhost:5238 file=/dm8/backup/full_20210422.dmp log=/dm8/backup/full_log_20210422.log

自动备份/计划备份

最简单的用计划任务进行备份的方式是使用图形界面,但是这里仅记录使用命令行的方式。

  • 首先创建代理环境,使用图形界面也需要创建,但是可以一键完成
SP_INIT_JOB_SYS(1);
  • 接着创建全量备份计划
# 创建备份任务
# SP_CREATE_JOB (
# JOB_NAME VARCHAR(128),
# ENABLED INT,
# ENABLE_EMAIL INT,
# EMAIL_OPTR_NAME VARCHAR(128),
# EMAIL_TYPE INT,
# ENABLED_NETSEND INT,
# NETSEND_OPTR_NAME VARCHAR(128),
# NETSEND_TYPE INT,
# DESCRIBE VARCHAR(8187)
# )
call SP_CREATE_JOB('full_bak',1,0,'',0,0,'',0,'full_bak');

# 修改任务
# SP_ALTER_JOB (
# JOB_NAME VARCHAR(128),
# ENABLED INT,
# ENABLE_EMAIL INT,
# EMAIL_OPTR_NAME VARCHAR(128),
# EMAIL_TYPE INT,
# ENABLED_NETSEND INT,
# NETSEND_OPTR_NAME VARCHAR(128),
# NETSEND_TYPE INT,
# DESCRIBE VARCHAR(8187)
# )
call SP_ALTER_JOB('full_bak', 1, 0,'',0,0,'',0,'full_bak description');

# 删除任务
# SP_DROP_JOB (
# JOB_NAME VARCHAR(128)
# )
call SP_DROP_JOB('full_bak');

# 开始配置任务
# SP_JOB_CONFIG_START (
# JOB_NAME VARCHAR(128)
# )
call SP_JOB_CONFIG_START('full_bak');

# 增加步骤
# SP_ADD_JOB_STEP (
# JOB_NAME VARCHAR(128),
# STEP_NAME VARCHAR(128),
# TYPE INT, // 0.执行sql、1.执行v1的备份还原(不带without log & parallel)、2.重组数据库、3.更新数据库统计信息、4.执行DTS、5.执行基于v1的备份还原(带without log & parallel)、6.执行v2备份还原
# COMMAND VARCHAR(8187),// 0.sql语句、1.[备份模式, 0.全量|1.增量][备份压缩类型, 0.不压缩|1.压缩][base_dir,…,base_dir|bakfile_path]、5.[备份模式][备份压缩类型][备份日志类型, 0.备份|1.不备份][备份并行类型, 0.普通备份|1.并行备份][ 预 留 ][base_dir,…,base_dir|bakfile_path|parallel_file]、6.[备份模式, 0.全量|1.增量|3.归档][备份压缩类型][备份日志类型][备份并行数, 0.普通备份|1-9.并行数][USEPWR][MAXPIECESIZE, 0.默认值|1-9.按128M递增][RESV1][RESV2][base_dir,…,base_dir | bakfile_dir]
# SUCC_ACTION INT, // 0.表示执行下一步、1.表示报告执行成功,并执行下一步。
# FAIL_ACTION INT, // 0.表示执行下一步、2.表示报告执行失败,并结束作业。
# RETRY_ATTEMPTS INT, // 当步骤执行失败后,需要重试的次数。 取值范围 0~100 次
# RETRY_INTERVAL INT, // 每两次步骤执行重试之间的间隔时间。 不能大于 10 秒钟
# OUTPUT_FILE_PATH VARCHAR(256),
# APPEND_FLAG INT //写入文件时从哪里开始追写。 1.末尾、0.开头
)
call SP_ADD_JOB_STEP('full_bak', 'full_bak_step1', 6, '01000000/dm8/backup', 1, 2, 0, 0, NULL, 0);

# 修改步骤
# SP_ALTER_JOB_STEP (
# JOB_NAME VARCHAR(128),
# STEP_NAME VARCHAR(128),
# TYPE INT,
# COMMAND VARCHAR(8187),
# SUCC_ACTION INT,
# FAIL_ACTION INT,
# RETRY_ATTEMPTS INT,
# RETRY_INTERVAL INT,
# OUTPUT_FILE_PATH VARCHAR(256),
# APPEND_FLAG INT
# )
call SP_ALTER_JOB_STEP('full_bak', 'full_bak_step1', 6, '01000000/dm8/backup', 1, 2, 0, 0, NULL, 0);

# 删除步骤
# SP_DROP_JOB_STEP (
# JOB_NAME VARCHAR(128),
# STEP_NAME VARCHAR(128)
# )

# 增加调度计划,必须开始配置后提交配置前才能增删改
# SP_ADD_JOB_SCHEDULE (
# JOB_NAME VARCHAR(128),
# SCHEDULE_NAME VARCHAR(128),
# ENABLE INT,
# TYPE INT, // 0 表示指定作业只执行一次。1 按天的频率来执行。2 按周的频率来执行。3 在一个月的某一天执行。4 在一个月的第一周第几天执行。5 在一个月的第二周的第几天执行。6 在一个月的第三周的第几天执行。7 在一个月的第四周的第几天执行。8 在一个月的最后一周的第几天执行。
# FREQ_INTERVAL INT, // 当 TYPE=0 时,这个值无效,系统不做检查。当 TYPE=1 时,表示每几天执行, 取值范围为 1~100。当 TYPE=2 时,表示的是每几个星期执行, 取值范围没有限制。当 TYPE=3 时,表示每几个月中的某一天执行, 取值范围没有限制。当 TYPE=4 时,表示每几个月的第一周执行, 取值范围没有限制。当 TYPE=5 时,表示每几个月的第二周执行,取值范围没有限制。当 TYPE=6 时,表示每几个月的第三周执行, 取值范围没有限制。当 TYPE=7 时,表示每几个月的第四周执行,取值范围没有限制。当 TYPE=8 时,表示每几个月的最后一周执行, 取值范围没有限制。
# FREQ_SUB_INTERVAL INT, // 当 TYPE=0 或 1 时,这个值无效,系统不做检查。当 TYPE=2 时, 表示的是某一个星期的星期几执行,可以同时选中七天中的任意几天。取值范围 1~127。 具体如何取值,请用户参考如下规则。因为每周有七天, 所以 DM 数据库系统内部用七位二进制来表示选中的日子。 从最低位开始算起, 依次表示周日、周一...周五、周六。选中周几,就将该位置 1,否则 0。例如, 选中周二和周六, 7 位二进制就是 1000100,转化成十进制就是 68,所以 FREQ_SUB_INTERVAL 就取值 68。当 TYPE=3 时,表示将在一个月的第几天执行。取值范围 1~31。当 TYPE 为 4、 5、 6、 7 或 8 时,都表示将在某一周内第几天执行。取值范围 1~7,分别表示从周一到周日
# FREQ_MINUTE_INTERVAL INT, // 表示一天内每隔多少分钟执行一次。 有效值范围 1~1440,单位分钟。
# STARTTIME VARCHAR(128), // 定义作业被调度的起始时间。 必须是有效的时间字符串,不可以为空
# ENDTIME VARCHAR(128), // 定义作业被调度的结束时间。 可以为空。 但如果不为空,指定的必须是有效的时间字符串,同时必须要在 STARTTIME 时间之后。
# DURING_START_DATE VARCHAR(128), // 指定作业被调度的起始日期。 必须是有效的日期字符串,不可以为空。
# DURING_END_DATE VARCHAR(128), // 指定作业被调度的结束日期。 可以为空, DURING_END_DATE 和 ENDTIME 都为空,调度活动会一直持续下去。 但如果不为空,必须是有效的日期字符串,同时必须是在DURING_START_DATE 日期之后。
# DESCRIBE VARCHAR(500)
# )
call SP_ADD_JOB_SCHEDULE('full_bak', 'full_bak_sch1', 1, 2, 1, 1, 0, '01:30:00', NULL, '2021-03-01 18:50:53', NULL, '');

# 修改调度计划使用
# SP_ALTER_JOB_SCHEDULE

# 删除调度计划使用
# SP_DROP_JOB_SCHEDULE

# 提交所配置的任务
# SP_JOB_CONFIG_COMMIT (
# JOB_NAME VARCHAR(128)
# )
call SP_JOB_CONFIG_COMMIT('full_bak');

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值