闪回表-DM8:达梦数据库闪回

2023-12-19 05:28

本文主要是介绍闪回表-DM8:达梦数据库闪回,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

DM8:达梦数据库闪回表

  • 环境介绍
  • 1 开启闪回功能
  • 2 创建测试示例
    • 2.1 闪回表到指定时间点
    • 2.2 闪回表到指定的LSN

环境介绍

  • 当系统 INI 参数 ENABLE_FLASHBACK 置为 1 时,闪回功能开启,可以使用闪回表或进行闪回查询。DM MPP 环境暂不支持闪回功能。

  • 闪回表

  • 闪回表是在数据库联机时,通过只回退对指定表及其相关对象所做的更改,将表里的数据回退到历史的某个时间点,而不需要执行传统的时间点恢复操作。比如回退到用户误删除数据之前的时间点,从而将误删除的数据恢复回来,在这个操作过程中,数据库仍然可用而且不需要额外的空间。

  • 闪回表利用的是 UNDO 表空间里所记录的数据被改变前的值。因此,如果因保留时间超过了初始化参数 UNDO_RETENTION 所指定的值,从而导致闪回表时所需要的 UNDO 数据被其他事务覆盖的话,那么就不能将表中数据恢复到指定的时间了。与介质恢复相比,闪回表在易用性、可用性和还原时间方面有明显的优势。

  • 使用说明

1. 使用闪回功能需要打开 dm.ini 中的 ENABLE_FLASHBACK 参数;
2. 当前闪回表功能支持:批量闪回多个表、触发器的禁用与启用、DMDPC 环境(除使用 LOCAL 登录外)、DMDSC 环境;
3. 当前闪回表功能不支持在 DM MPP 环境下使用;
4. 闪回表利用的是 UNDO 表空间里记录的数据被改变前的值,只能闪回到UNDO_RETENTION 指定值范围内的时间点;
5. 用户必须具有 FLASHBACK ANY TABLE 系统权限或 FLASHBACK 对象权限;
6. 闪回表语句是作为单个事务处理来执行。同时闪回多个表时,必须成功闪回所有表,否则会回退整个事务。闪回作为 DDL 语句,开启自动提交时,闪回成功后会自动提交;
7. 必须对要执行闪回操作的表启动行移动(分区表具有MOVEMENT功能的不能关闭,否则闪回可能会报错);
8. 不会闪回受影响对象的统计信息;
9. 闪回会保留所有现有的索引;
10. 闪回中会正常检查约束条件,如果在闪回执行期间违反了任何约束条件,则会回滚闪回操作;
11. 闪回不能跨越修改了表结构的 DDL。比如,在闪回数据之前,做过删除一个字段的操作,那么是无法闪回的;
12. 不能对系统表、临时表、HUGE 表、内部辅助表、动态表等执行闪回表操作;
13. DMDPC 环境下由于各节点 SCN/LSN 不同,只支持闪回到时间点 TIMESTAMP;
14. 限制重复闪回。闪回作为 DDL,对于同一个表,不允许再次闪回到上一次闪回之前的 LSN/TIMESTAMP。
  • 版本支持起始于 2023年第二季度版本 dm8.1-3-26

1 开启闪回功能

ALTER SYSTEM SET 'ENABLE_FLASHBACK'=1;

2 创建测试示例

2.1 闪回表到指定时间点

--开启闪回功能
ALTER SYSTEM SET 'ENABLE_FLASHBACK'=1;
--创建测试表
DROP TABLE T;
CREATE TABLE T(C1 INT);
INSERT INTO T SELECT LEVEL CONNECT BY LEVEL < 4;
COMMIT;
SELECT * FROM T;
-- 记录修改前时间
SELECT SYSDATE();
--2023-12-15 17:28:32--删除新增数据
DELETE FROM T WHERE C1=3;
INSERT INTO T VALUES(4);
COMMIT;
SELECT * FROM T;
--记录修改后的时间点
SELECT SYSDATE();
--2023-12-15 17:28:51--DMDPC 只支持 TO TIMESTAMP
--闪回表到指定时间点(受混滚段保留时间限制)
FLASHBACK TABLE T TO TIMESTAMP '2023-12-15 17:28:32';

2.2 闪回表到指定的LSN

--开启闪回功能
ALTER SYSTEM SET 'ENABLE_FLASHBACK'=1;
--创建测试表
DROP TABLE T;
CREATE TABLE T(C1 INT);
INSERT INTO T SELECT LEVEL CONNECT BY LEVEL < 4;
COMMIT;
SELECT * FROM T;
-- 记录 LSN
SELECT CUR_LSN FROM V$RLOG;
--8619883--删除新增数据
DELETE FROM T WHERE C1=3;
INSERT INTO T VALUES(4);
COMMIT;
SELECT * FROM T;
-- 记录 LSN
SELECT CUR_LSN FROM V$RLOG;
--8620363--闪回表到指定LSN(受混滚段保留时间限制)
FLASHBACK TABLE T TO LSN 8619883;
SELECT * FROM T;

这篇关于闪回表-DM8:达梦数据库闪回的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/511021

相关文章

Python调用Orator ORM进行数据库操作

《Python调用OratorORM进行数据库操作》OratorORM是一个功能丰富且灵活的PythonORM库,旨在简化数据库操作,它支持多种数据库并提供了简洁且直观的API,下面我们就... 目录Orator ORM 主要特点安装使用示例总结Orator ORM 是一个功能丰富且灵活的 python O

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

使用Navicat工具比对两个数据库所有表结构的差异案例详解

《使用Navicat工具比对两个数据库所有表结构的差异案例详解》:本文主要介绍如何使用Navicat工具对比两个数据库test_old和test_new,并生成相应的DDLSQL语句,以便将te... 目录概要案例一、如图两个数据库test_old和test_new进行比较:二、开始比较总结概要公司存在多

MySQL数据库函数之JSON_EXTRACT示例代码

《MySQL数据库函数之JSON_EXTRACT示例代码》:本文主要介绍MySQL数据库函数之JSON_EXTRACT的相关资料,JSON_EXTRACT()函数用于从JSON文档中提取值,支持对... 目录前言基本语法路径表达式示例示例 1: 提取简单值示例 2: 提取嵌套值示例 3: 提取数组中的值注意

查询SQL Server数据库服务器IP地址的多种有效方法

《查询SQLServer数据库服务器IP地址的多种有效方法》作为数据库管理员或开发人员,了解如何查询SQLServer数据库服务器的IP地址是一项重要技能,本文将介绍几种简单而有效的方法,帮助你轻松... 目录使用T-SQL查询方法1:使用系统函数方法2:使用系统视图使用SQL Server Configu

SQL Server数据库迁移到MySQL的完整指南

《SQLServer数据库迁移到MySQL的完整指南》在企业应用开发中,数据库迁移是一个常见的需求,随着业务的发展,企业可能会从SQLServer转向MySQL,原因可能是成本、性能、跨平台兼容性等... 目录一、迁移前的准备工作1.1 确定迁移范围1.2 评估兼容性1.3 备份数据二、迁移工具的选择2.1

Python中连接不同数据库的方法总结

《Python中连接不同数据库的方法总结》在数据驱动的现代应用开发中,Python凭借其丰富的库和强大的生态系统,成为连接各种数据库的理想编程语言,下面我们就来看看如何使用Python实现连接常用的几... 目录一、连接mysql数据库二、连接PostgreSQL数据库三、连接SQLite数据库四、连接Mo

Oracle数据库如何切换登录用户(system和sys)

《Oracle数据库如何切换登录用户(system和sys)》文章介绍了如何使用SQL*Plus工具登录Oracle数据库的system用户,包括打开登录入口、输入用户名和口令、以及切换到sys用户的... 目录打开登录入口登录system用户总结打开登录入口win+R打开运行对话框,输php入:sqlp

数据库使用之union、union all、各种join的用法区别解析

《数据库使用之union、unionall、各种join的用法区别解析》:本文主要介绍SQL中的Union和UnionAll的区别,包括去重与否以及使用时的注意事项,还详细解释了Join关键字,... 目录一、Union 和Union All1、区别:2、注意点:3、具体举例二、Join关键字的区别&php

查询Oracle数据库表是否被锁的实现方式

《查询Oracle数据库表是否被锁的实现方式》本文介绍了查询Oracle数据库表是否被锁的方法,包括查询锁表的会话、人员信息,根据object_id查询表名,以及根据会话ID查询和停止本地进程,同时,... 目录查询oracle数据库表是否被锁1、查询锁表的会话、人员等信息2、根据 object_id查询被