达梦数据库的备份与还原

 参考:https://vip.kingdee.com/article/472067099301673728?lang=zh-CN&productLineId=29&isKnowledge=2

功能简介

DM 数据库的备份还原包括两种类型:物理备份还原和逻辑备份还原。物理备份还原是对数据库的操作系统物理文件(如数据文件、控制文件和日志文件等)的备份还原。例如使用 RMAN 工具进行的备份还原。物理备份还原请参考《DM8 备份与还原》。逻辑备份还原是对数据库逻辑组件(如表、视图和存储过程等数据库对象)的备份还原。例如使用 dexp 和 dimp 进行的备份还原.

逻辑导出(dexp)和逻辑导入(dimp)是 DM 数据库的两个命令行工具,分别用来实现对 DM 数据库的逻辑备份和逻辑还原。逻辑备份和逻辑还原都是在联机方式下完成,联机方式是指数据库服务器正常运行过程中进行的备份和还原 dexp 和 dimp 是 DM 数据库自带的工具,只要安装了 DM 数据库,就可以在安装目录 /dmdbms/bin 中找到。

逻辑导出和逻辑导入数据库对象分为四种级别:数据库级、用户级、模式级和表级。四种级别独立互斥,不能同时存在。四种级别所提供的功能:

数据库级(FULL):导出或导入整个数据库中的所有对象。
用户级(OWNER):导出或导入一个或多个用户所拥有的所有对象。
模式级(SCHEMAS):导出或导入一个或多个模式下的所有对象。
表级(TABLES):导出或导入一个或多个指定的表或表分区。
逻辑导出dexp

dexp 工具可以对本地或者远程数据库进行数据库级、用户级、模式级和表级的逻辑备份。备份的内容非常灵活,可以选择是否备份索引、数据行和权限,是否忽略各种约束(外键约束、非空约束、唯一约束等),在备份前还可以选择生成日志文件,记录备份的过程以供查看。

 

 使用dexp根据,根据"模式"备份

实际备份命令:dexp SYSDBA/JX_SYSDBA2024:15236 DIRECTORY=/home/dmdba/dmdbms FILE=NCMLC.dmp SCHEMAS=NC_MLC LOG=NC.LOG

使用dimp工具,还原数据库

还原示例

3.2.1 整个库还原

还原命令:

dimp userid=username/password file=备份目录 log=备份日志目录 full=y

 

#dimp SYSDBA/\"Cosmic@2023\"@10.10.21.56:5236 FILE=/kingdee/dm8/data/cosmic/dump_files/dimp_cosmic_fi_full.dmp LOG=/kingdee/dm8/data/cosmic/dump_files/logs/dimpdp_cosmic_fi_full.log full=y TABLE_EXISTS_ACTION=skip

 

3.2.2 还原schemas

还原命令:

dimp userid=username/password file=备份目录 log=备份日志目录 remap_schema=源schema名称:目标schema名称(多个可用英文逗号分隔)

 

#dimp cosmic_sys/COSMIC_SYS@10.10.21.56:5236 FILE=/kingdee/dm8/data/dump_files/dimp_cosmic_fi.dmp LOG=/kingdee/dm8/data/cosmic/dump_files/logs/dimp_cosmic_fi.log remap_schema=COSMIC_FI:COSMIC_SYS

 

3.2.3 还原表

还原命令:

dimp userid=username/password file=备份目录 log=备份日志目录 tables=要还原的表名(多个可用英文逗号分隔)

 

#dimp cosmic_fi/COSMIC_FI@10.10.21.56:5236 FILE=/kingdee/dm8/data/cosmic/dump_files/dimp_cosmic_fi_t.dmp LOG=/kingdee/dm8/data/cosmic/dump_files/logs/dimp_cosmic_fi_t.log tables=cosmic_fi.t1,cosmic_fi.t2 TABLE_EXISTS_ACTION=skip

实际还原命令:

dimp USERID=SYSDBA/JX_SYSDBA2024:15236 DIRECTORY=/home/dmdba/dmdbms FILE=/home/dmdba/dmdbms/NCMLC.dmp REMAP_SCHEMA=NC_MLC:UTEST log=dimp.log

 定时执行备份任务的shell脚本,在dmdba用户下配置crontab,记得配置环境变量和共享库

#!/bin/bash
export LD_LIBRARY_PATH=/home/dmdba/dmdbms/bin:$LD_LIBRARY_PATH
export PATH=$PATH:/usr/bin:/bin # 获取当前日期 CURRENT_DATE
=$(date +%Y%m%d) # 设置数据库连接参数 DB_USER="SYSDBA" DB_PASS="JX_SYSDBA2024" DB_HOST="15236" DIRECTORY="/home/dmdba/dmdbms/backup"

  PATH="/home/dmdba/dmdbms/bin"

LOG_DIR="/home/dmdba/dmdbms/backup/logs"
# 设置需要备份的模式(Schema)
SCHEMAS=("NC_MLC" "RPT" "NCL2_SC") # 修改为你实际需要备份的模式

# 确保目录存在
if [ ! -d "$DIRECTORY" ]; then
          echo "目录 $DIRECTORY 不存在。请检查路径。"
            exit 1
fi

# 循环备份每个模式
for SCHEMA in "${SCHEMAS[@]}"; do
FILE="BACKUP_${SCHEMA}_${CURRENT_DATE}.dmp"
LOG="${LOG_DIR}/BACKLOG_${SCHEMA}_${CURRENT_DATE}.log"            
echo "开始备份模式 ${SCHEMA} ..."
# 执行备份操作
$PATH/dexp ${DB_USER}/${DB_PASS}:${DB_HOST} DIRECTORY=${DIRECTORY} FILE=${FILE} SCHEMAS=${SCHEMA} LOG=${LOG}                
# 检查备份命令的退出状态
if [ $? -eq 0 ]; then
        echo "模式 ${SCHEMA} 备份成功,备份文件:${FILE},日志文件:${LOG}。"

     # 删除当天之前的旧备份文件
     /usr/bin/find "$DIRECTORY" -type f -name "BACKUP_${SCHEMA}_*.dmp" ! -name "$FILE" -exec /bin/rm -f {} \;
      # 删除当天之前的旧日志文件
     /usr/bin/find "$LOG_DIR" -type f -name "BACKLOG_${SCHEMA}_*.log" ! -name "$(/usr/bin/basename $LOG)" -exec /bin/rm -f {} \; 2>> /tmp/backup_errors.log

fi
done

 

posted @ 2024-08-30 15:31  一只竹节虫  阅读(844)  评论(0编辑  收藏  举报