注册
分享一些关于备份恢复的学习心得
培训园地/ 文章详情 /

分享一些关于备份恢复的学习心得

Sean 2025/09/22 60 0 0

众所周知,数据库最重要的就是备份。
学习达梦有一段时间了,现分享一些关于备份恢复的学习心得。

1) 关于归档
-- 检查数据库是否为归档模式,检查归档相关参数配置
SQL> select arch_mode from v$database;

SQL> select arch_name, arch_type, arch_dest, arch_file_size from v$dm_arch_ini;

-- 开启归档模式
SQL> alter database mount;
SQL> alter database archivelog;
SQL> alter database add archivelog 'dest=/data/dmdata/TEST/archivelog,type=local,file_size=1024,space_limit=0';
SQL> alter database open;

-- 手动配置归档参数文件
vi dmarch.ini

#DaMeng Database Archive Configuration file
#this is comments

ARCH_WAIT_APPLY = 0

[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /data/dmdata/TEST/archivelog
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 0
ARCH_FLUSH_BUF_SIZE = 2
ARCH_HANG_FLAG = 1

-- 手动触发归档
SQL> alter system archive log current;

-- 归档相关视图
SQL> select * from v$dm_arch_ini;

SQL> select * from v$arch_file;

-- 使用数据库命令删除归档日志
SQL> select sf_archivelog_delete_before_time(sysdate-5);

SQL> select sf_archivelog_delete_before_lsn(71206);

-- 数据库异常关闭后,手动归档联机日志
$ dmrman
RMAN> repair archivelog database '/data/dmdata/TEST/dm.ini';

2) 关于备份
-- 修改备份路径,重启实例后生效
SQL> alter system set 'BAK_PATH'='/data/dmdata/backup' spfile;

-- 查询备份信息。
SQL> select * from v$backupset;

-- 使用disql命令备份数据库,由于设置了BAK_PATH参数,将自动命名备份文件
SQL> backup database full backupset compressed level 1 parallel 2;
SQL> backup database increment compressed level 1 parallel 2;
SQL> backup archivelog all not backed up 1 times compressed level 1 parallel 2;

-- 手动设置备份路径和其他参数
SQL> BACKUP DATABASE TO FULL_BAK_20250610 BACKUPSET '/data/backup/db_full_20250610' MAXPIECESIZE 1024 COMPRESSED LEVEL 5 PARALLEL 4 BACKUPINFO '完全备份-20250610';

-- 初始化作业系统,以创建自动备份任务
SQL> call SP_INIT_JOB_SYS(1);

-- 创建备份job
-- 详细备注了参数列表
SQL> CALL SP_CREATE_JOB(
'BACKUP_DATABASE_FULL_JOB', -- JOB_NAME
1, -- ENABLED
0, -- ENABLE_EMAIL
'', -- EMAIL_OPTR_NAME
0, -- EMAIL_TYPE
0, -- ENABLED_NETSEND
'', -- NETSEND_OPTR_NAME
0, -- NETSEND_TYPE
'backup database full 1 week interval' -- DESCRIBE
);

-- 配置备份job
SQL> CALL SP_JOB_CONFIG_START('BACKUP_DATABASE_FULL_JOB');

SQL> CALL SP_ADD_JOB_STEP(
'BACKUP_DATABASE_FULL_JOB', -- JOB_NAME
'BACKUP_DATABASE_FULL_STEP1', -- STEP_NAME
0, -- TYPE
'backup database full backupset compressed level 1 parallel 2;', --COMMAND
0, -- SUCC_ACTION
0, -- FAIL_ACTION
0, -- RETRY_ATTEMPTS
0, -- RETRY_INTERVAL
NULL, -- OUTPUT_FILE_PATH
0 -- APPEND_FLAG
);

SQL> CALL SP_ADD_JOB_SCHEDULE(
'BACKUP_DATABASE_FULL_JOB', -- JOB_NAME
'BACKUP_DATABASE_FULL_SCHEDULE', -- SCHEDULE_NAME
1, -- ENABLED
2, -- TYPE, week interval
1, -- FREQ_INTERVAL, 1 week interval
32, -- FREQ_SUB_INTERVAL, 32 is Friday, 64 is Saturday
0, -- FREQ_MINUTE_INTERVAL
'20:00:00', -- STARTTIME
NULL, -- ENDTIME
'2025-01-01 00:00:00', -- DURING_START_DATE
NULL, -- DURING_END_DATE
'backup database full 1 week interval' -- DESCRIBE
);

-- DSC并行服务器环境下,可以设置备份job默认运行的实例
SQL> CALL SP_JOB_SET_EP_SEQNO(
'BACKUP_DATABASE_FULL_JOB', -- JOB_NAME
0 -- DSC_SEQNO
);

SQL> CALL SP_JOB_CONFIG_COMMIT('BACKUP_DATABASE_FULL_JOB');

-- 查询备份job
SQL> SELECT * FROM SYSJOB.SYSJOBS;

-- 手动执行job,参数为数据字典SYSJOB中的job ID,如果是DSC环境,需要在job设置的实例上运行
SQL> CALL SP_DBMS_JOB_RUN(1749623290);

-- 清除备份job日志
SQL> CALL SP_JOB_CLEAR_HISTORIES(
'BACKUP_DATABASE_FULL_JOB' -- JOB_NAME
);

-- 删除备份job
SQL> CALL SP_DROP_JOB(
'BACKUP_DATABASE_FULL_JOB' -- JOB_NAME
);

3) 关于恢复
-- dmrman日志
view $DM_HOME/log/dm_dmrman_*.log

-- 使用dmrman数据库恢复步骤
dmrman

-- 停库状态下可以用dmrman进行脱机冷备份
RMAN> backup database '/data/dmdata/TEST/dm.ini';

-- 全备份还原,参数文件未丢失
RMAN> restore database '/data/dmdata/TEST/dm.ini' from backupset '/data/dmdata/backup/DB_TEST_FULL_20241227_153212_263133';

-- 全备份还原,参数文件丢失
RMAN> restore database to '/data/dmdata/TEST' overwrite from backupset '/data/dmdata/backup/DB_TEST_FULL_20241227_153212_263133';

-- 使用增量备份
RMAN> restore database '/data/dmdata/TEST/dm.ini' from backupset '/data/dmdata/backup/DB_TEST_INCREMENT_20241227_153222_662733';

-- 归档还原恢复
RMAN> restore archive log from backupset '/data/dmdata/backup/ARCH_FULL_20241227_153228_294745' to database '/data/dmdata/TEST/dm.ini';
RMAN> recover database '/data/dmdata/TEST/dm.ini' with archivedir '/data/dmdata/TEST/archivelog';

-- 更新db_magic
RMAN> recover database '/data/dmdata/TEST/dm.ini' update db_magic;

-- 启动数据库实例
sudo systemctl start DmServiceTEST.service

4) 总结
达梦的控制文件没有记录备份文件信息,不能自动寻找合适的备份集进行恢复。
因此恢复数据库的时候,需要手动指定参数文件,备份和归档的位置。
希望达梦在新的版本中可以改进备份和恢复的用户体验。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服