达梦8联机拷贝数据库备份和还原

本文详细介绍了达梦数据库的完整备份与恢复流程,包括调用系统过程SP_BACKUP_COPY_BEGIN和SP_BACKUP_COPY_END的注意事项,以及拷贝数据库文件、修改配置文件、利用归档日志恢复等关键步骤,确保数据安全与一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

条件:

1. 调用SP_BACKUP_COPY_BEGIN前需设置当前连接AUTO_COMMIT为FALSE,关闭
事务自动提交。
2. SP_BACKUP_COPY_BEGIN和SP_BACKUP_COPY_END必须在同一连接中执行。
3. 每次调用SP_BACKUP_COPY_END前必须先调用SP_BACKUP_COPY_BEGIN,否则
将报错。
4. 调用SP_BACKUP_COPY_BEGIN和SP_BACKUP_COPY_END之间不能执行CREATE
TABLESPACE操作。
 

拷贝数据库三个步骤:

1.拷贝开始前,记录系统各节点BEGIN_LSN/BEGIN_SEQ信息,以确定恢复阶段日志重做的起点。
开 始 拷 贝 前 , 调 用 系 统 过 程 SP_BACKUP_COPY_BEGIN 记 录 当 前 系 统
BEGIN_LSN/BEGIN_SEQ信息。

SQL> SP_BACKUP_COPY_BEGIN();

 2) 开始拷贝数据库,使用常规方式拷贝数据库文件到新的目录。
拷贝数据库文件到备份目录,拷贝数据库文件时,必须包含配置文件( dm.ini)、 控制文件(dm.ctl)、 秘钥文件(dm_service.prikey)、 联机日志文件(DAMENG01.log和DAMENG02.log)以及数据文件(*.DBF)。

3.拷 贝 结 束 后 , 调 用 系 统 过 程 SP_BACKUP_COPY_END , 记 录 系 统 各 节 点
END_LSN/END_SEQ信息,以在恢复结束后校验数据完整性。该过程同时生成一个仅包含
meta文件的空备份集,并将记录的信息填充到该文件。
SP_BACKUP_COPY_END(path varchar)中path参数指定备份集绝对路径,当参数
为相对路径时,将在默认备份目录下生成该备份集。

SQL> SP_BACKUP_COPY_END('/dbdata/copy_bak');

4.还原数据库操作

4.1.dm.ini文件的路径修改 端口修改5237

 4.2将dm.ctl文件转为文本文件dmctl.txt

[dmdba@dbtest copy_db]$ dmctlcvt TYPE=1 SRC=/dbdata/copy_db/dm.ctl DEST=/dbdata/copy_db/dmctl.txt
DMCTLCVT V8
convert ctl to txt success!

4.3修改dmctl.txt中的路径参数。将原始路径修改为拷贝副本所在的路径。

 4.4将修改完成后的dmctl.txt转为二进制文件dm.ctl,并替换原始dm.ctl文件。

 [dmdba@dbtest copy_db]$ dmctlcvt TYPE=2 SRC=/dbdata/copy_db/dmctl.txt DEST=/dbdata/copy_db/dm.ctl
DMCTLCVT V8
convert txt to ctl success!

5.还原操作

5.1启动DMRAMN

 5.2利用源库的归档日志将副本恢复到最新状态

5.3恢复成功后更新副本DB_MAGIC
 

6.启动数据库

 7.登录验证

 

 达梦技术社区:https://eco.dameng.com 

### 达梦数据库备份工具及其使用 达梦数据库提供了多种备份方式,主要包括逻辑备份还原以及物理备份还原。以下是关于这些备份方法的具体介绍: #### 1. **逻辑备份还原** 逻辑备份主要通过 `DMSQL` 命令行工具实现,支持全库、用户级、模式级表级别的备份。 - **全库备份** 可以使用以下命令完成整个数据库的导出: ```bash exp DMUSER/DMPASSWD FILE=full_backup.dmb FULL=Y ``` - **用户级别备份** 如果只需要备份特定用户的对象,则可以指定用户名: ```bash exp DMUSER/DMPASSWD FILE=user_backup.dmb OWNER=(username) ``` - **导入到当前账户或其他账户** 对于已有的备份文件,可以通过 `imp` 工具将其导入至目标账户: ```bash imp DMUSER/DMPASSWD FILE=user_backup.dmb IGNORE=N ``` 若希望将数据导入另一个账户,则需额外设置映射关系[^3]。 #### 2. **联机备份还原** 联机备份允许在不关闭数据库的情况下进行备份操作,分为以下几个层次: - **数据库级别联机备份** 调用存储过程来启动完整的在线备份流程: ```sql CALL SYSPROC.SNAPSHOT_DATABASE('backup_path', 'FULL'); ``` - **表空间级别联机备份** 针对单个或多个表空间执行增量备份: ```sql ALTER TABLESPACE tablespace_name BEGIN BACKUP; -- 将表空间的数据文件复制到安全位置 ALTER TABLESPACE tablespace_name END BACKUP; ``` - **表级别联机备份** 利用外部工具提取单独表格的内容并保存为独立文件。 #### 3. **脱机备份还原** 当数据库处于关闭状态时可实施离线备份策略。此方法简单高效但会暂时中断服务访问。 - 关闭实例前确认其运行状况: ```sql SELECT STATUS$, MODE$ FROM V$INSTANCE; ``` 如果发现状态异常(如提示未同步日志),则应先行修复问题后再继续操作[^4]。 - 实施冷备方案只需拷贝所有相关目录下的文件即可,包括但不限于控制文件、数据文件及归档日志等组件。 --- ### 注意事项 在实际部署过程中需要注意一些常见陷阱,比如忘记启用归档功能可能导致无法正常恢复等问题。因此建议定期测试所建立的安全副本能否成功加载回原系统环境中去验证有效性。 ```python import os def check_db_status(): """模拟检查数据库健康度""" status_query = "SELECT STATUS$, MODE$ FROM V$INSTANCE;" result = execute_sql(status_query) # 假设这是某个函数用于执行SQL语句 return result['STATUS$'], result['MODE$'] current_status, current_mode = check_db_status() if current_status != "OPEN": raise Exception(f"Database is not open! Current Status: {current_status}") elif current_mode not in ["NORMAL", "PRIMARY"]: print("Warning: Database mode may affect backup strategy.") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值