DM达梦数据库安全、审计功能学习记录
文章目录
- DM达梦数据库安全、审计功能学习记录
-
- 一、数据库安全管理概述
- 二、用户标识与鉴别
-
- [2.1 三权分立](#2.1 三权分立)
- [2.2 身份认证](#2.2 身份认证)
- [2.3 自主访问控制](#2.3 自主访问控制)
- [2.4 强制访问控制](#2.4 强制访问控制)
- [2.5 审计](#2.5 审计)
- [2.6 通信加密](#2.6 通信加密)
- [2.7 存储加密](#2.7 存储加密)
- [2.8 资源限制](#2.8 资源限制)
- [2.9 客体重用](#2.9 客体重用)
- 三、给dm_svc.conf配置文件使用密文配置
- 四、闪回
- 五、延迟备库
大家想学习达梦数据库或者解决报错问题,可以去 达梦数据库社区( https://eco.dameng.com)
一、数据库安全管理概述
数据库安全管理是指采取各种安全措施对数据库及其相关文件和数据进行保护。
数据库系统中一般采用用户标识与鉴别、存取控制以及密码存储等技术进行安全控制。
数据安全指以保护措施确保数据的完整性、保密性、可用性、可控性和可审查性。
DM 作为安全数据库,提供了包括用户标识与鉴别、自主与强制访问控制、通信与存储加密、审计等丰富的安全功能,且各安全功能都可进行配置,满足各类型用户在安全管理方面不同层次的需求。
数据库等保测试主要测试:身份认证、访问控制、加密传输、审计等。
| 安全功能 | 简介 |
|---|---|
| 用户标识与鉴别 | 可以通过登录帐户区别各用户,并通过口令方式防止用户被冒充 |
| 自主访问控制 | 通过权限管理,使用户只能访问自己权限内的数据对象 |
| 强制访问控制 | 通过安全标记,使用户只能访问与自己安全级别相符的数据对象 |
| 审计 | 审计人员可以查看所有用户的操作记录,为明确事故责任提供证据支持 |
| 通信、存储加密 | 用户可以自主的将数据以密文的形式存储在数据库中。也可以对在网络上传输的数据进行加密 |
| 加密引擎 | 用户可以用自定义的加密算法来加密自己的核心数据 |
| 资源限制 | 可以对网络资源和磁盘资源进行配额设置,防止恶意资源抢占 |
| 客体重用 | 实现了内存与磁盘空间的释放清理,防止信息数据的泄露 |
**普通版数据库:**具备身份鉴别、访问控制、审计、通信与存储加密、加密引擎、资源管控等安全能力
**安全版数据库:**额外新增四权分立、强制访问控制,适配高安全使用场景
二、用户标识与鉴别
2.1 三权分立
使用三权分立安全机制时,管理用户分为数据库管理员、数据库安全员和数据库审计员三种类型。
在安装过程中,DM 数据库会预设数据库管理员账号 SYSDBA、数据库安全员账号 SYSSSO、数据库审计员账号 SYSAUDITOR。
在 DM 数据库中有一个特殊的预定义用户"SYS",此用户仅用于保存系统内部对象,并非数据库管理员,也无法进行登录。
职责
-
DBA 数据库管理员:负责数据库软硬件环境评估、服务安装升级、库结构设计、性能运维优化,同时统筹数据备份与故障恢复,全权掌管数据库日常运行维护工作。
-
SSO 数据库安全员:负责制定安全策略,配置安全标记并绑定用户与数据对象,启用强制访问控制,约束 DBA 权限。该角色无法操作业务数据与建表等常规操作,仅管控安全权限,杜绝越权访问数据。
-
AUDITOR 数据库审计员:配置审计规则,全程记录数据库各类操作。例如防范 DBA 私自篡改员工薪资数据,可通过审计日志追溯违规行为,核查异常操作、排查安全问题。
四权分立
使用四权分立安全机制时,管理用户分为数据库管理员、数据库安全员、数据库审计员和数据库对象操作员四种类型。
数据库管理员账号 SYSDBA、数据库安全员账号 SYSSSO、数据库审计员账号 SYSAUDITOR,数据库对象操作员 SYSDBO。
三权分立时数据库管理员既可进行系统管理和维护工作,也可对数据内容进行增删查改操作。
**四权分立时数据库管理员只能进行系统管理和维护工作,不能对数据内容进行增删查改操作。**数据库操作员可进行增删改查操作,但不能管理和维护系统。
2.2 身份认证
数据库本身的口令人认证
本机认证
本机验证需要将 DM 配置文件 dm.ini 的 ENABLE_LOCAL_OSAUTH 参数设置为 1,表示支持本机验证。该参数为静态参数,数据库管理员可以使用系统过程 SP_SET_PARA_VALUE 进行修改,但修改后需要重新启动 DM 服务器才能生效
本机验证需要首先将操作系统用户加入到操作系统的 dmdba|dmsso|dmauditor 用户组,分别对应数据库的 SYSDBA|SYSSSO|SYSAUDITOR 用户。也可以将操作系统用户加入到操作系统的 dmusers 用户组。
例 2 操作系统用户 dameng_dba 以数据库管理员 SYSDBA 身份登录数据库。
数据库首先修改 INI 参数。
sql
SQL> SP_SET_PARA_VALUE(2,'ENABLE_LOCAL_OSAUTH',1);
SQL> COMMIT;
重新启动数据库服务器,使 INI 参数生效。
在操作系统中创建 dmdba 用户组,并将 dameng_dba 添加到 dmdba 用户组。
sql
[dameng@test163 ~]$ sudo groupadd dmdba
[dameng@test163 ~]$ sudo usermod -G dmdba dameng_dba
disql.exe /@localhost:5236 as sysdba
# 实操
[dameng@test163 ~]$ sudo groupadd dmdba
[root@node2 ~]# sudo usermod -G dmdba dmdba
[dmdba@node2 ~]$ disql / as sysdba
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 6.521(ms)
disql V8
SQL>
2.3 自主访问控制
通俗的讲,就是创建一个数据库对象,拥有者可以把这个对象的访问权限赋予给其他用户。
自主访问控制(Discretionary Access Control,DAC)是这样一种访问控制方式:由数据库对象的拥有者自主决定是否将自己拥有的对象的部分或全部访问权限授予其他用户。也就是说,在自主访问控制下,用户可以按照自己的意愿,有选择地与其他用户共享他拥有的数据库对象
每个角色所赋予的权限建议查看 :自主访问控制 | 达梦技术文档
2.4 强制访问控制
可以实现在一张表里,两个用户都可以访问table1表,但是着两个用户看到的记录不是一样的。这种情况一般都在应用端做控制,很少在数据库中直接操作这些对象。
强制访问控制(Mandatory Access Control, MAC)是根据客体的敏感标记和主体的访问标记对客体访问实行限制的一种方法。在强制访问控制中,系统给主体和客体都分配一个特殊的安全标记,主体的安全标记反映了该主体可信的程度,客体的安全标记则与其包含信息的敏感度一致,且主体不能改变他自己及任何其它客体的安全标记,主体是否可以对客体执行特定的操作取决于主体和客体的安全标记之间的支配关系。
2.5 审计
审计机制是 DM 数据库管理系统安全管理的重要组成部分之一。DM 数据库除了提供数据安全保护措施外,还提供对日常事件的事后审计监督。
DM 具有一个灵活的审计子系统,可以通过它来记录系统级事件、个别用户的行为以及对数据库对象的访问。
审计开关
审计开关必须由具有数据库审计员权限的管理员进行设置。过程执行完后会立即生效,param 有三种取值:
- 0:关闭审计
- 1:打开普通审计
- 2:打开普通审计和实时审计
缺省值为 0。
sql
SP_SET_ENABLE_AUDIT (1);
sql
[dmdba@node2 ~]$ disql SYSAUDITOR/'"Linux123!@#"'@127.0.0.1:5236
服务器[127.0.0.1:5236]:处于普通打开状态
登录使用时间 : 4.130(ms)
disql V8
SQL> SP_SET_ENABLE_AUDIT (1);
DMSQL 过程已成功完成
已用时间: 4.073(毫秒). 执行号:1801.
SQL>
DM 提供审计设置 系统过程来实现这种设置,被审计的对象可以是某类操作,也可以是某些用户在数据库中的全部行踪。只有预先设置的操作和用户才能被 DM 系统自动进行审计。
| 审计级别 | 说明 |
|---|---|
| 系统级 | 系统的启动、关闭、部分系统事件以及一些系统过程和函数的调用,此级别的审计无法也无需由用户进行设置,只要审计开关打开就会自动生成对应审计记录 |
| 语句级 | 导致影响特定类型数据库对象的特殊 SQL 或语句组的审计。如 AUDIT TABLE 将审计 CREATE TABLE、ALTER TABLE 和 DROP TABLE 等语句 |
| 对象级 | 审计作用在特殊对象上的语句。如 test 表上的 INSERT 语句 |
审计设置存放于 DM 字典表 SYSAUDIT 中,进行一次审计设置就在 SYSAUDIT 中增加一条对应的记录,取消审计则删除 SYSAUDIT 中相应的记录。
审计刷盘由参数 AUDIT_FLUSH_LEVEL 管控,分三种模式
- 0:语句级,单条语句执行完毕即刷盘
- 1:事务级,整个事务结束后统一刷盘
- 2:延迟刷盘,8MB 缓存存满再写入磁盘
审计说明
- 语句级审计不针对特定的对象,只针对用户;
- 对象级审计针对指定的用户与指定的对象进行审计;
- 在设置审计时,审计选项不区分包含关系,都可以设置;
- 在设置审计时,审计时机不区分包含关系,都可以进行设置;
- 如果用户执行的一条语句与设置的若干审计项都匹配,只会在审计文件中生成一条审计记录。
语句级审计
语句级审计的动作是全局的,不对应具体的数据库对象。
| 审计选项 | 审计的数据库操作 | 说明 |
|---|---|---|
| ALL | 所有的语句级审计选项 | 所有可审计操作 |
| INSERT TABLE | INSERT INTO TABLE | 表上的插入操作 |
|---|---|---|
| UPDATE TABLE | UPDATE TABLE | 表上的修改操作 |
| DELETE TABLE | DELETE FROM TABLE | 表上的删除操作 |
| SELECT TABLE | SELECT FROM TABLE | 表上的查询操作 |
sql
SP_NOAUDIT_STMT(
TYPE VARCHAR(30),
USERNAME VARCHAR (128),
WHENEVER VARCHAR (20)
)
参数说明:
TYPE 语句级审计选项,即上表中的第一列
USERNAME 用户名,NULL 表示不限制
WHENEVER 审计时机,可选的取值为:
- ALL:所有的
- SUCCESSFUL:操作成功时
- FAIL:操作失败时
对用户 USER2 进行的表的修改和删除进行审计,不管失败和成功。
sql
SP_AUDIT_STMT('UPDATE TABLE', 'USER2', 'ALL');
SP_AUDIT_STMT('DELETE TABLE', 'USER2', 'ALL');
SP_AUDIT_STMT('SELECT TABLE', 'SYSDBA', 'ALL');
对象级审计
对象级审计发生在具体的对象上,需要指定模式名以及对象名。
| 审计选项(SYSAUDITRECORDS 表中 operation 字段对应的内容) | TABLE | VIEW | COL | PROCEDURE FUNCTION | TRIGGER |
|---|---|---|---|---|---|
| INSERT | √ | √ | √ | ||
| UPDATE | √ | √ | √ | ||
| DELETE | √ | √ | √ | ||
| SELECT | √ | √ | √ | ||
| EXECUTE | √ |
审计文件管理
DM 审计信息存储在审计文件中。审计文件默认存放在数据库的 SYSTEM_PATH 指定的路径(即数据库所在路径)下的 audit 目录中。
用户也可在 dm.ini 文件中添加参数 AUD_PATH 来指定审计文件的存放路径
bash
#file location of dm.ctl
CTL_PATH = D:\dmdbms\data\DAMENG\dm.ctl #ctl file path
CTL_BAK_PATH =D:\dmdbms\data\DAMENG\ctl_bak #dm.ctl backup path
CTL_BAK_NUM = 10 #backup number of dm.ctl, allowed to keep one more backup file besides specified number.
SYSTEM_PATH = D:\dmdbms\data\DAMENG #system path
CONFIG_PATH = D:\dmdbms\data\DAMENG #config path
TEMP_PATH = D:\dmdbms\data\DAMENG #temporary file path
BAK_PATH = D:\dmdbms\data\DAMENG\bak #backup file path
AUD_PATH =D:\dmdbms\data\DAMENG\aud
DM 的审计文件总存储空间大小由 INI 参数 AUDIT_SPACE_LIMIT 进行限制0 表示不限制,缺省为 0。AUDIT_SPACE_LIMIT 为静态参数,需要重启数据库。
单个审计文件的大小可以通过 DM 的 INI 参数 AUDIT_MAX_FILE_SIZE 指定。缺省值为 100M,DBA 用户可通过系统过程 SP_SET_PARA_VALUE 对其进行动态修改。
参数AUDIT_KEEP_DAYS来指定审计文件最小保留天数,该参数取值范围为 0~3660 天,即使达到审计文件总存储空间大小限制(即 AUDIT_SPACE_LIMIT 设置的值)也不会删除在指定保留天数内的审计文件。
AUDIT_FILE_FULL_MODE 缺省值为 3,先尝试删老审计文件,再创建审计文件,若空间仍不足则不再审计,系统会定时检测是否有空余空间,如果有则恢复审计
sql
-- 查看具体的审计记录
select count(*) from V$AUDITRECORDS;
-- 审计记录存储相关的信息
select count(*) from V$AUDIT_SPACE;
审计实时侵害检测
总结起来,可以定义用户的操作行为判定为是对该系统造成了侵害,根据侵害等级做出响应、告警、终止行为、封锁账号等。
例 1 创建一个审计实时侵害检测规则 DANGEROUS_SESSION,该规则检测每个星期一 8:00 至 9:00 的所有非本地 SYSDBA 的登录动作。
sql
SP_SET_ENABLE_AUDIT (2);
SP_CREATE_AUDIT_RULE ('DANGEROUS_SESSION','CONNECT', 'SYSDBA', 'NULL', 'NULL', 'ALL', '"127.0.0.1"','MON "8:00:00" TO MON "9:00:00"',0, 0);
审计分析工具 Analyzer
审计用户登录 Analyzer 后可看到工具主界面如图 5.1 所示。

2.6 通信加密
基于传输层的 SSL (Secure Sockets Layer安全套接层)协议加密
SSL 仅加密:仅对通信数据进行 SSL 加密。客户端和服务器需要配置 SSL 环境,但不需要加载证书。
SSL 仅认证:仅对通信双方进行 SSL 证书验证。客户端和服务器需要配置 SSL 环境,双方都需要加载 CA 证书和自己的证书,并验证对端证书的有效性。
SSL 认证加密:对通信双方进行 SSL 证书验证并对通信数据进行加密。客户端和服务器需要配置 SSL 环境,双方都需要加载 CA 证书和自己的证书,并验证对端证书的有效性。
SSL 单向认证和加密:客户端单向校验服务器端证书的有效性并对通信数据进行加密。客户端和服务器需要配置 SSL 环境,服务器端需要加载 CA 证书和服务器证书,客户端需要加载 CA 证书并验证服务器端证书的有效性。
相关概念:
证书:绑定身份与公钥、由 CA 盖章的网络身份证
公钥:公开密钥,负责加密数据、核验签名
私钥:私密密钥,用于解密数据、出具签名
CA:权威发证机构,核验身份并签发合法证书
CA 私钥:机构专属签章,用来签署认证合法证书
ENABLE_ENCRYPT 取值 0、1、2、3、4 或 5,缺省值为 0。不论设置为 1、2、4 或 5,它内部所使用的密码套件是 SSL 协议自动协商的,达梦未进行任何干涉。
0:通信数据不经 SSL 加密,通信双方也不进行证书验证。
1:通信数据会被加密,并且通信双方需要交换并验证对方证书是否匹配。
2:通信数据不会被加密,但通信双方会交换并验证对方证书是否匹配。
4:通信数据会被加密,但通信双方不需要验证证书。
5:通信数据会被加密,仅客户端会验证服务器端证书。
6:通信数据基于商密 TLCP 协议加密,通信双方交换并验证对方证书是否匹配。
证书放置目录:
服务器目录:$DM_HOME/bin/server_ssl
客户端目录:$DM_HOME/bin/client_ssl/username,或者在客户端的配置文件中设置 ssl_path,指定客户端证书存放目录。其中,当用户名中含有具有大小写概念的多字节字符时,连接服务器时用户名需要与客户端证书存放目录$DM_HOME/bin/client_ssl/username 中文件名以及证书中的通用名保持一致,否则无法连接。
服务器证书:服务器加密证书(server-enc.crt),服务器加密 key(server-enc.key),服务器签名证书(server-sign.crt),服务器签名 key(server-sign.key)
客户端证书:客户端加密证书(client-enc.crt),客户端加密 key(client-enc.key),客户端签名证书(client-sign.crt),客户端签名 key(client-sign.key)
启用加密访问
使用 SP_SET_PARA_VALUE 系统过程将 ENABLE_ENCRYPT 参数的取值修改为 5。
sql
SQL> SP_SET_PARA_VALUE(2,'ENABLE_ENCRYPT',5);
当 ENABLE_ENCRYPT 取值为 5 时,客户端对服务器端进行单向的证书校验。因此在 server_ssl 目录下,需要存放 CA 证书(ca-cert.pem)、服务器证书(server-cert.pem)与服务器私钥(server-key.pem),在 client_ssl 目录下的 DM_ssl 用户目录中,仅需存放 CA 证书,用于对服务器证书的校验。
DM_ssl 用户连接 DM 服务器,输入用户名和密码、DM 服务器 IP 地址和端口号以及当前登录用户自身的 SSL 数字证书路径以及相应的 SSL 证书密码。
sql
D:\dmdbms\bin>disql.exe DM_ssl/Dm_12345@localhost:5236#"{ssl_path=D:\dmdbms\bin\client_ssl\DM_ssl,ssl_pwd=12345}"
2.7 存储加密
为了防止用户直接通过数据文件获取用户信息,DM 提供了全面的数据加密的功能,包括:
✔ 透明加密
✔ 半透明加密
✔ 非透明加密
存储加密在保证数据文件安全性的同时,也会带来一定的性能影响。
DM 使用服务器主密钥 SVR_KEY 和数据库主密钥 DB_KEY 进行分级存储加密。SVR_KEY 为服务器主密钥,用于加密数据库主密钥;DB_KEY 用于加密库内密钥。
透明加密
在透明加密中,密钥生成、密钥管理和加解密过程由数据库管理系统自动完成,用户不可见。透明加密的目的主要是保证存储在数据文件中的敏感数据的安全,并不能保护合法用户的个人私密数据。
对 DM 数据库进行全库加密需要在初始化数据库时通过 ENCRYPT_NAME 参数指定全库加密算法,加密密钥由 DM 自动生成。若初始化数据库时不指定 ENCRYPT_NAME 参数,则不进行全库加密。
指定全库加密时,在 DM 数据库服务器启动及运行的过程中,需要对处理的所有数据页通过指定的加密算法和 DM 自动生成的密钥进行加解密处理。如果数据页读入缓存,需要进行解密后才能使用,在缓存中的数据页进行刷盘时,需要对数据页进行加密后存储到数据文件中。
例如,使用了全库加密算法 xor1。
sql
SQL> select SF_GET_ENCRYPT_NAME();
行号 SF_GET_ENCRYPT_NAME()
---------- ---------------------
1 xor1
DM 支持在创建表空间时指定进行透明加密,语法格式为:
sql
CREATE TABLESPACE [IF NOT EXISTS] <表空间名> <数据文件子句> [<数据页缓冲池子句>] [<存储加密子句>]
<存储加密子句> ::= ENCRYPT WITH <加密算法> [BY <加密密码>]
2.8 资源限制
常用的资源限制。
DM 支持在创建和修改用户时指定对用户进行资源限制
| 资源设置项 | 说明 | 最大值 | 最小值 | 缺省值 |
|---|---|---|---|---|
| FAILED_LOGIN_ATTEMPTS | 将引起一个账户被锁定的连续注册失败的次数 | 100 | 1 | 3,系统预设管理员用户默认无限制 |
| CONNECT_IDLE_TIME | 会话最大空闲时间。单位由 INI 参数 RESOURCE_FLAG 决定。RESOURCE_FLAG 取值 1、0 时,CONNECT_IDLE_TIME 单位分别为秒、分钟。 RESOURCE_FLAG 缺省值为 0 | 当 RESOURCE_FLAG 取值 1、0 时,缺省值分别为 86400 秒、1440 分钟(1 天) | 1 | 无限制 |
除上述资源设置项外,DM 还支持用户 IP 地址限制和用户时间段限制。
例 4 创建对允许 IP 和允许时间段进行限制的用户,要求用户在 192.168.0.29 或 192.168.0.30 IP 进行登录,且访问时间段为 2023 年 1 月 1 日 8:30 至 2023 年 12 月 31 日 17:30。
sql
CREATE USER USER4 IDENTIFIED BY "USER4_psd" ALLOW_IP "192.168.0.29", "192.168.0.30" ALLOW_DATETIME "2023-1-1" "8:30:30" to
"2023-12-31" "17:30:00";
2.9 客体重用
在普通的环境下,数据库客体(主要指数据库对象、数据文件、缓存区)回收后不做处理,直接分配给新来的请求,但是有些窃密者会利用这一点编写特殊的非法进程通过数据库管理系统的内存泄露来获取数据库系统的信息。
为防止非法进程利用数据库客体的内存泄露来攻击数据库,DM 主要从内存和文件两个方面进行了处理:
- 内存重用 :DM 从系统
分配内存及释放内存时均对内存内容进行清零,以保证不利用内存中前一进程所残留内容,且不泄漏 DM 的内容给其他进程。 - 文件重用:DM 在系统生成、扩展及删除文件时,对文件内容也进行了清零。
DM 提供了 INI 参数 ENABLE_OBJ_REUSE 用来控制是否启用客体重用功能,将该参数置为 1 表示启用客体重用,0 表示不启用,缺省为 0。
三、给dm_svc.conf配置文件使用密文配置
dmkey 是一个 RSA 非对称加解密的公钥文件、私钥文件生成工具。公钥文件和私钥文件分别用于对登录消息中的用户名、密码进行加密和解密。
第一步,通过 dmkey 生成公钥文件、私钥文件。
sql
>dmkey PATH=D:\DAMENG pubkey=test.pubkey
DMKEY V8
generate public key file D:\DAMENG\test.pubkey success!
generate private key file D:\DAMENG\dm_login.prikey success!
第二步,首先将私钥文件 dm_login.prikey 拷贝到数据库 SYSTEM PATH 目录下,然后配置服务器 ini 参数 FORCE_CERTIFICATE_ENCRYPTION=1。
第三步,配置 dm_svc.conf 文件的 LOGIN_CERTIFICATE 配置项,指定公钥文件所在位置。dm_svc.conf 文件内容如下:
sql
TIME_ZONE=(480)
LANGUAGE=(cn)
LOGIN_CERTIFICATE=(D:\DAMENG\test.pubkey)
第四步,启动数据库服务器。
至此,配置完毕。
四、闪回
当系统 INI 参数 ENABLE_FLASHBACK 置为 1 时,闪回功能开启,可以使用闪回表或进行闪回查询。
闪回表利用的是UNDO表空间里所记录的数据被改变前的值。因此,如果因保留时间超过了初始化参数 UNDO_RETENTION 所指定的值,从而导致闪回表时所需要的 UNDO 数据被其他事务覆盖的话,那么就不能将表中数据恢复到指定的时间了。
闪回表
sql
FLASHBACK TABLE [<模式名>.]<表名> {,[<模式名>.]<表名>} TO <SCN | LSN | TIMESTAMP> <expr> [ <ENABLE|DISABLE> TRIGGERS ] ;
- < 模式名 > 指明该表属于哪个模式,缺省为当前模式;
- < 表名 > 指明被创建的基表名,基表名最大长度 128 字节;
- 指明闪回到的 LSN 值或 TIMESTAMP 值;
- <ENABLE|DISABLE> TRIGGERS 指定是否开启触发器,ENABLE 为开启触发器,DISABLE 为关闭触发器,不指定则默认为关闭。
案例
使用闪回功能需要先开启闪回参数 ENABLE_FLASHBACK。
sql
ALTER SYSTEM SET 'ENABLE_FLASHBACK'=1;
sql
CREATE TABLE T(C1 INT);
INSERT INTO T VALUES(3);
COMMIT;
SELECT * FROM T;
-- 查询当前时间
SELECT SYSDATE;
INSERT INTO T VALUES(4);
COMMIT;
SELECT * FROM T;
FLASHBACK TABLE T TO TIMESTAMP '2026-05-22 15:58:46';
SELECT * FROM T;
闪回查询
sql
<闪回查询子句>::=
WHEN <TIMESTAMP time_exp> |
AS OF <TIMESTAMP time_exp> |
AS OF <SCN|LSN lsn>
sql
SELECT * FROM T WHEN TIMESTAMP '2026-05-22 16:01:35';
五、延迟备库
应用场景:
例如,用户业务数据量很大,一旦发生了误 truncate 整张表的操作,通过备份还原方式恢复数据将会耗费很长时间,导致业务长时间中断,如果异步备库和主库之间存在一定的时间延时,在主库上数据被 truncate 以后,异步备库上还未重演,还能找到整张表数据,可以将表数据从异步备库上导出,再重新导入到主库,从而可以快速恢复主库数据,能够极大的缩短业务中断时长。
延时重演通过在源库的 dmarch.ini 文件中设置 ARCH_SEND_DELAY 生效,如果源库是主库,则需要在所有备库上也进行设置,以便在主备切换后能够继续生效;
例如,设置异步备库 GRP_LOCAL_01 延时时间为 30 分钟配置如下:
sql
[ARCHIVE_ASYNC]
ARCH_TYPE = ASYNC #异步归档类型
ARCH_DEST = GRP1_LOCAL_01 #异步归档目标实例名
ARCH_TIMER_NAME = RT_TIMER #定时器名称,和dmtimer.ini中的名称一致
ARCH_SEND_DELAY = 30 #只发送30分钟之前产生的日志
te 整张表的操作,通过备份还原方式恢复数据将会耗费很长时间,导致业务长时间中断,如果异步备库和主库之间存在一定的时间延时,在主库上数据被 truncate 以后,异步备库上还未重演,还能找到整张表数据,可以将表数据从异步备库上导出,再重新导入到主库,从而可以快速恢复主库数据,能够极大的缩短业务中断时长。
延时重演通过在源库的 dmarch.ini 文件中设置 ARCH_SEND_DELAY 生效,如果源库是主库,则需要在所有备库上也进行设置,以便在主备切换后能够继续生效;
例如,设置异步备库 GRP_LOCAL_01 延时时间为 30 分钟配置如下:
sql
[ARCHIVE_ASYNC]
ARCH_TYPE = ASYNC #异步归档类型
ARCH_DEST = GRP1_LOCAL_01 #异步归档目标实例名
ARCH_TIMER_NAME = RT_TIMER #定时器名称,和dmtimer.ini中的名称一致
ARCH_SEND_DELAY = 30 #只发送30分钟之前产生的日志