重现ORA-01555 细说Oracle Undo 数据管理

1. 概述

1.1. Undo 数据应用

undo数据是:

原始的、修改之前的数据副本

是针对更改数据的每个事务处理所捕获的

至少保留到事务处理结束

用于支持:

回退操作

读取一致性查询

闪回查询、闪回事务处理和闪回表

从失败的事务处理中进行恢复

1.2. 事务和 undo 数据

1.3. undo管理方式与新特性

1.4. undo的状态--EXPIRE过期

Undo段里数据三种状态:

  • ACTIVE:未提交的数据
  • UNEXPIRE:已提交,未超过undo retention保留时间
  • EXPIRE:已提交,超过undo_retention保留时间

2. 设置 CDB 使用 Shared Undo Mode

2.1. 案例需求

12cR2 版本中,DBCA 建库时默认勾选 Use Local Undo tablespace for PDBs,CDB 中每个容器使用本地的 UNDO 表空间。

查看当前 undo 模式,设置 CDB 使用 shared undo mode,即 CDB 中所有容器共享使用一个 UNDO 表空间。

2.2. 启动数据实例

[oracle@enmoedu1 ~]$ export ORACLE_SID=cdb1 
[oracle@enmoedu1 ~]$ sqlplus / as sysdba
SYS@cdb1> startup 
SYS@cdb1> show pdbs

2.3. 启动所有 PDB

SYS@cdb1> show pdbs 
SYS@cdb1> alter pluggable database all open; 
SYS@cdb1> show pdbs 

2.4. 查看 CDB 数据库中所有 undo 表空间

SYS@cdb1> select con_id,TABLESPACE_NAME,CONTENTS
from cdb_tablespaces 
where contents='UNDO';查看 undo 表空间对应数据文件 
SYS@cdb1> col FILE_NAME for a60 
select con_id,tablespace_name,file_name 
from cdb_data_files 
where tablespace_name='UNDOTBS1'; 

2.5. 查看 undo 相关参数

SYS@cdb1> col name for a20 
col value for a20 
select con_id,NAME,VALUE,ISINSTANCE_MODIFIABLE, ISPDB_MODIFIABLE
from v$parameter
where name 
like 'undo%';

2.6. 查看 CDB 当前 undo 模式

SYS@cdb1> 
col property_name for a20 
col PROPERTY_VALUE for a20 
select PROPERTY_NAME,PROPERTY_VALUE 
from database_properties 
where ROPERTY_NAME='LOCAL_UNDO_ENABLED';

当前环境使用 12cR2 版本,DBCA 创建 cdb1 时,默认勾选了 Use Local Undo tablespace for PDBs

2.7. 设置 CDB 使用 Shared Undo Mode

关闭实例,startup upgrade 启动实例

SYS@cdb1> shutdown immediate; 
SYS@cdb1> startup upgrade;
SYS@cdb1> alter pluggable database all open; 
SYS@cdb1> show pdbs;

2.8. 查看 cdb1 当前 undo 模式

SYS@cdb1> 
col property_name for a20 
col PROPERTY_VALUE for a20 
select PROPERTY_NAME,PROPERTY_VALUE 
from database_properties 
where ROPERTY_NAME='LOCAL_UNDO_ENABLED';

当前使用 Shared Undo Mode,CDB 中所有容器共享使用一个 Undo 表空间

2.9. 删除 pdb1、pdb2 本地 undo 表空间

共享 undo 模式下,oracle 忽略 PDB 本地的 undo 表空间。

可以删除 PDB 本地的 undo 表空间及数据文件。

[oracle@enmoedu1 ~]$ sqlplus sys/oracle@pdb1 as sysdba
col file_name for a60
select tablespace_name,file_name from dba_data_files;
SYS@pdb1> drop tablespace undotbs1 including contents and datafiles; 
SYS@pdb1> select tablespace_name,file_name from dba_data_files; 
[oracle@enmoedu1 ~]$ sqlplus sys/oracle@pdb2 as sysdba 
SYS@pdb2> drop tablespace undotbs1 including contents and datafiles;
SYS@pdb2> 
col file_name for a60 
select tablespace_name,file_name from dba_data_files;

2.10. 查看 CDB 数据库中所有 undo 表空间

查看所有容器中 undo 表空间

SYS@cdb1> select con_id,TABLESPACE_NAME,CONTENTS 
from cdb_tablespaces 
where contents='UNDO';

查看 undo 表空间对应数据文件

SYS@cdb1> col FILE_NAME for a60 
select con_id,tablespace_name,file_name 
from cdb_data_files 
where tablespace_name='UNDOTBS1';

2.11. 关闭 pdb2

后续实验在根容器和 pdb1 中进行操作

SYS@cdb1> alter pluggable database pdb2 close immediate; 
show pdbs

3. Undo 数据的应用

3.1. pdb1 创建测试表

[oracle@enmoedu1 ~]$ sqlplus sys/oracle@pdb1 as sysdba 
SYS@pdb1> 
create table test1 (id number,name char(20)); 
insert into test1 values (1,'Oracle'); 
insert into test1 values (2,'DBA'); 
commit;SYS@pdb1> select current_scn from v$database;

3.2. pdb1 session 1 执行查询

SYS@pdb1> 
variable rfc refcursor; 
execute open :rfc for select * from test1;

模拟开始查询,记录查询开始时的 SCN,但未访问具体数据行

3.3. pdb1 新建会话 session2 更新 test1 表数据

新开会话 session2 登录连接 pdb1

[oracle@enmoedu1 ~]$ sqlplus sys/oracle@pdb1 as sysdba 
SYS@pdb1> 
select * from test1; 
update test1 set name='OCM' where id=2; 
select * from test1;

3.4. pdb1 新建会话 session3 查看

[oracle@enmoedu1 ~]$ sqlplus sys/oracle@pdb1 as sysdba 
SYS@pdb1> select * from test1;

session2 未提交,其他会话看不到 session2 做出的修改,session3 查询显示的是修改之前

的状态,id=2 的 NAME 字段值“DBA”来自 undo 数据。

未提交的事务对应的 active 状态的 undo 数据,用于支持 rollback 回滚操作、避免脏读。

3.5. session2 commit 提交

SYS@pdb1> commit;

3.6. session 3 再次查看

session2 提交以后,session3 查看显示是更新之后的结果。

3.7. session 1 查看查询结果

SYS@pdb1> print :rfc

尽管 session2 事务已经提交,session1 查询返回结果与查询开始时状态保持一致,id=2 的name 列值 DBA 来自于 undo 数据。

3.8. session1 闪回查询

SYS@pdb1> select * from test1; 
SYS@pdb1> select * from test1 as of scn 1605491;

已经提交的事务对应的 undo 数据仍然保留一段时间,未超出 undo_retention 时间的 unexpired 状态的 undo 数据用于支持长时间执行的查询语句的一致性读以及部分闪回操作

(闪回查询、闪回表等)

4. ORA-01555 错误

4.1. 案例需求

通过设置比较小的固定大小的 undo 表空间,模拟长时间执行的 SQL 查询语句执行过程中,其他会话更新表中数据并提交,由于大量并发事务造成 undo 数据被覆盖,导致当前查询语句无法正常返回一致性读的结果,发生 ORA-01555 错误。

4.2. CDB 查看当前 undo 设置

SYS@cdb1> show parameter undo

SYS@cdb1> 
select con_id,tablespace_name,file_name,bytes/1024/1024 MB,AUTOEXTENSIBLE 
from cdb_data_files 
where tablespace_name='UNDOTBS1'; 

4.3. cdb 创建新的 undo 表空间

创建一个非常小的固定大小的 undo 表空间(数据文件不自动扩展)

SYS@cdb1> create undo tablespace smallundo datafile '/u01/app/oracle/oradata/cdb1/smallundo01.dbf' size 2m autoextend off;
SYS@cdb1> select con_id,tablespace_name,file_name, bytes/1024/1024 MB,AUTOEXTENSIBLE 
from cdb_data_files 
where tablespace_name 
like '%UNDO%';

4.4. cdb 切换 undo 表空间

SYS@cdb1> alter system set undo_tablespace='SMALLUNDO'; 
SYS@cdb1> show parameter undo 

4.5. pdb1 session1 执行查询

session1 查看当前 test1 表中数据 
SYS@pdb1> select * from test1; 
session1 查看当前 scn 
SYS@pdb1> select current_scn from v$database;
session1 模拟开始查询 
SYS@pdb1> 
var rfc refcursor 
exec open :rfc for select * from test1 

4.6. pdb1 session2 执行循环更新操作

session2 循环更新 test1 表中数据,模拟 undo 数据被覆盖

SYS@pdb1> 
begin 
for i in 1..20000 loop 
update test1 set name='Oracle'; 
commit; 
end loop; 
end; 
/

4.7. pdb1 session3 查看查询结果

session2 事务在循环更新过程中已经提交,session3 查看到的是提交后的结果。

4.8. pdb1 session1 查看查询结果

SYS@pdb1> print :rfc

4.9. pdb1 session1 闪回查询

SYS@pdb1> select * from test1 as of scn 1608613; 
session1 再次查询 
SYS@pdb1> select * from test1; 

4.10. ORA-01555

4.11. 查看 undo 表空间属性

SYS@cdb1> select tablespace_name,RETENTION 
from dba_tablespaces 
where tablespace_name='SMALLUNDO';

SYS@cdb1> show parameter undo

4.12. undo_retention

undo_retention 参数指定了提交后的 undo 数据(unexpired)保留多少秒。

当前环境中设置了 undo_retention=900,默认 undo 表空间未设置 guarantee。

当使用固定大小的 undo 表空间时,undo_retention 值被忽略,数据库根据 undo 表空间

大小和系统负载情况动态调整优化 retention 值。v$undostat 视图可以查看动态调整后的

retention 值 。 v$undostat 视图每 10 分 钟 生 成 一 行 记 录 , 当 前 时 间 对 应 行 的

tuned_undoretention 值会随事务繁忙程度变化而更新,事务越繁忙,优化后的 retention 值越小。

SYS@cdb1> select to_char(begin_time, 'yyyy-mm-dd hh24:mi') begin_time, 
to_char(end_time, 'yyyy-mm-dd hh24:mi') end_time, tuned_undoretention 
from v$undostat order by end_time;

上图查询结果中两行数据,第一行显示结果是切换使用固定大小的 undo 表空间后,没有

事务操作时,tuned_undoretention 值为 1336;第二行显示结果是 session2 进行循环更新操作

后,tuned_undoretention 值为 41

undo 表空间太小且不支持数据文件自动扩展时,大量并发事务操作会使 unexpired 状态

undo 数据被覆盖,进而导致长时间执行的查询语句报错 snapshot too old(ORA-01555).

5. ORA-30036 错误

5.1. 设置 retention guarantee

SYS@cdb1> select tablespace_name,contents,RETENTION 
from cdb_tablespaces 
where tablespace_name='SMALLUNDO';

设置当前使用的 undo 表空间 retention guarantee 属性

SYS@cdb1> alter tablespace smallundo retention guarantee; 
SYS@cdb1> select tablespace_name,contents,RETENTION 
from cdb_tablespaces 
where tablespace_name='SMALLUNDO';

5.2. pdb1 session1 执行查询

SYS@pdb1> select * from test1; 
SYS@pdb1> select current_scn from v$database; 
SYS@pdb1> 
var rfc refcursor 
exec open :rfc for select * from test1 

5.3. pdb1 session2 执行循环更新操作

SYS@pdb1> 
begin 
for i in 1..20000 loop 
update test1 set name='12C OCM'; 
commit; 
end loop; 
end; 
/ 

5.4. pdb1 session3 查看结果

SYS@pdb1> select * from test1;

5.5. pdb1 session1 查看查询结果

SYS@pdb1> print :rfc

5.6. pdb1 session1 闪回查询

session1 没有报 ORA-01555 错误,查询结果与查询开始时状态保持一致。

session1 闪回查询 
SYS@pdb1> select * from test1 as of scn 1644658; 
session1 再次查询 
SYS@pdb1> select * from test1;

5.7. ORA-30036

SYS@pdb1> ! oerr ora 30036 

当前设置了 undo_retention=900 并且设置了 undo 表空间 guarantee 属性。强制保证

unexpired 状态的 undo 数据在 900s 保留期内不被覆盖。session1 最终能够正常返回结果满足 一致性读。session2 并发事务操作则由于 undo 空间不足而报错 ORA-30036

设置 undo 表空间的 guarantee 属性后,查看 tuned_undoretention 值

SYS@cdb1> select to_char(begin_time, 'yyyy-mm-dd hh24:mi') begin_time, to_char(end_time, 'yyyy-mm-dd hh24:mi') end_time, tuned_undoretention 
from v$undostat 
order by end_time;

5.8. 取消 guarantee 属性

SYS@cdb1> alter tablespace smallundo retention noguarantee; 
SYS@cdb1> select tablespace_name,contents,RETENTION 
from cdb_tablespaces 
where tablespace_name='SMALLUNDO';

5.9. resize 调整 undo 表空间大小

SYS@cdb1> alter database datafile 26 resize 10m; 
SYS@cdb1> select con_id,tablespace_name,file_id,file_name, bytes/1024/1024 MB,AUTOEXTENSIBLE 
from cdb_data_files 
where tablespace_name='SMALLUNDO';

5.10. pdb1 创建测试表模拟事务操作

SYS@pdb1> 
create table test2 as select * from dba_objects; 
insert into test2 select * from test2; 
insert into test2 select * from test2; 
insert into test2 select * from test2; 
insert into test2 select * from test2;SYS@pdb1> select count(*) from test2; 
delete from test2; 
commit; 

test2 表中插入 100 多万行数据未提交,尝试删除所有数据时 undo 空间不足报错。

当前已经取消 undo 表空间 guarantee 属性,但由于使用了固定大小的 undo 表空间,大

事务操作也可能会因undo空间不足而报错 ORA-30036。同时由于事务越繁忙,优化后的 undo

保留期值越小,仍然有可能报 ORA-01555 错误。

SYS@cdb1> select to_char(begin_time, 'yyyy-mm-dd hh24:mi') begin_time, to_char(end_time, 'yyyy-mm-dd hh24:mi') end_time, tuned_undoretention 
from v$undostat 
order by end_time;

6. Undo 表空间数据文件自动扩展

6.1. 开启 undo 表空间自动扩展

SYS@cdb1> select con_id,tablespace_name,file_id,file_name, bytes/1024/1024 MB,AUTOEXTENSIBLE from cdb_data_files where tablespace_name='SMALLUNDO';开启 undo 表空间数据文件自动扩展 
SYS@cdb1> alter database datafile 26 autoextend on; 
SYS@cdb1> select con_id,tablespace_name,file_id,file_name, bytes/1024/1024 MB,AUTOEXTENSIBLE from cdb_data_files where tablespace_name='SMALLUNDO';

6.2. pdb1 session1 执行查询

SYS@pdb1> select * from test1; 
SYS@pdb1> select current_scn from v$database;
SYS@pdb1> 
var rfc refcursor 
exec open :rfc for select * from test1

6.3. pdb1 session2 执行循环更新操作

SYS@pdb1> 
begin 
for i in 1..20000 loop 
update test1 set name='Oracle DBA'; 
commit; 
end loop; 
end; 
/

更新成功,没有报 ORA-30036 错误。

6.4. pdb1 session3 查看结果

SYS@pdb1> select * from test1;

6.5. pdb1 session1 查看查询结果

SYS@pdb1> print :rfc

查询没有报 ORA-01555 错误,session1 查询结果与开始查询时状态保持一致。

6.6. pdb1 session1 闪回查询

session1 闪回查询 
SYS@pdb1> select * from test1 as of scn 1650833; 
session1 再次查看 
SYS@pdb1> select * from test1;

6.7. 查看当前 undo 表空间数据文件大小

SYS@cdb1> select con_id,tablespace_name,file_id,file_name, bytes/1024/1024 MB,AUTOEXTENSIBLE 
from cdb_data_files 
here tablespace_name='SMALLUNDO'; 

当前设置了 undo_retention=900, undo 表空间使用默认的 noguarantee 属性。

undo 表空间数据文件设置为 autoextend on 时,数据库以当前设置的 undo_retention

数值作为下限值,并会动态调整 retention 值来满足长时间执行查询语句的一致性读;当 undo

空间不足时,数据库会扩展 undo 表空间对应数据文件。

SYS@cdb1> select to_char(begin_time, 'yyyy-mm-dd hh24:mi') begin_time, to_char(end_time, 'yyyy-mm-dd hh24:mi') end_time, tuned_undoretention 
from v$undostat 
order by end_time;

如果 undo 表空间数据文件自动扩展达到 maxsize 最大值,数据库仍然会开始覆盖unexpired 状态的 undo 数据。

7. 设置 CDB 使用 Local Undo Mode

7.1. 案例需求

设置当前 CDB 使用 12.2 版本默认的 Local Undo Mode, 即 CDB 中每个容器使用本地

undo 表空间。

7.2. 查看所有容器中 undo 表空间

SYS@cdb1> select con_id,TABLESPACE_NAME,CONTENTS from cdb_tablespaces where contents='UNDO';

7.3. 查看 CDB 当前 undo 模式

SYS@cdb1>

col property_name for a20

col PROPERTY_VALUE for a20

select PROPERTY_NAME,PROPERTY_VALUE from database_properties where ROPERTY_NAME='LOCAL_UNDO_ENABLED';

7.4. 设置 Local Undo Mode

7.4.1.1. 关闭数据库实例
SYS@cdb1> shutdown immediate; 

7.4.1. startup upgrade 启动实例

SYS@cdb1> startup upgrade;

7.4.2. 设置 undo 模式

SYS@cdb1> ALTER DATABASE LOCAL UNDO ON;

7.4.3. 重启实例

SYS@cdb1> shutdown immediate; 
SYS@cdb1> startup

7.5. 查看 CDB 当前 undo 模式

SYS@cdb1> 
col property_name for a20 
col PROPERTY_VALUE for a20 
select PROPERTY_NAME,PROPERTY_VALUE from database_properties where ROPERTY_NAME='LOCAL_UNDO_ENABLED'; 

7.6. 启动 PDB

SYS@cdb1> alter pluggable database all open; 
SYS@cdb1> show pdbs 

7.7. 查看所有容器中 undo 参数

SYS@cdb1> show parameter undo

SYS@pdb1> show parameter undo 

7.8. 查看 CDB 数据库中所有 undo 表空间

查看所有容器中 undo 表空间

SYS@cdb1> select con_id,TABLESPACE_NAME,CONTENTS from cdb_tablespaces where contents='UNDO'; 

查看 undo 表空间对应数据文件

SYS@cdb1> 
col FILE_NAME for a60 
select con_id,tablespace_name,file_name from cdb_data_files where tablespace_name like '%UNDO%';
设置 CDB 使用 Local Undo Mode 后,数据库在每个 PDB 中创建了本地的 undo 表空间。

8. 12cR1 Temporary Undo

8.1. redo 与 undo

8.2. 临时表

8.3. 12cR1 Temporary Undo

文章主要内容摘抄墨天轮恩墨大讲堂《重现ORA-01555 细说Oracle Undo 数据管理》。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/64802.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java 集合 Collection、List、Set

一. Collection 单列集合 1. Collection代表单列集合,每个元素(数据)只包含一个值 2. Collection集合特点 ① List系列集合:添加的元素是有序、可重复、有索引。 ArrayList、LinekdList:有序、可重复,有索引 ② Set系列集合&…

wamp php7.4 运行dm8

背景 1、电脑安装了dm8,具体参照官网dm8安装 2、安装好了wamp,我当前的php版本切换成了7.4的,我wamp的安装路径d:\wamp64\ 操作 3、查看phpinfo,如果Thread Safet为enabled,则选择pdo74_dm.dll,否则选择…

linux 系统 mysql :8.4.3 主从复制 教程及运维命令

一、环境准备 硬件配置CPU2 核 CPU内存2 GB 内存硬盘30 GB 硬盘容量外网访问服务器可以访问外网软件环境操作系统Anolis OS 7.9MySQL版本8.4.3 二、服务器清单 Master192.168.153.221Node192.168.153.222 三、安装mysql (两台机器都要下载) # 下载 …

UE5材质节点Camera Vector/Reflection Vector

Camera Vector相机向量,输出像素到相机的方向,结果归一化 会随着相机移动而改变 Reflection Vector 反射向量,物体表面法线反射到相机的方向,x和y和camera vector相反 配合hdr使用

复合机器人正以其高效、精准、灵活的特点,逐渐在汽车装配线上崭露头角

随着全球汽车制造业的快速发展,汽车装配线已成为衡量企业生产效率和技术水平的重要标准。传统的装配方式往往依赖于大量的人工操作,这不仅效率低下,还面临着质量不稳定、安全隐患等问题。然而,随着智能科技的飞速进步,…

导致启动nacos报错Caused by: java.lang.IllegalStateException: No DataSource set 的两种原因

Java资深小白,不足之处,或者有任何错误欢迎指出。 --蓝紫报错代码如下: C:\Windows\System32>cd D:\nacos-server-2.2.3\nacos\binC:\Windows\System32>d:D:\nacos-server-2.2.3\nacos\bin>startup.cmd -m standalone "nacos is starting…

LinuxUbuntu打开VSCode白屏解决方案

解决方法是 以root权限打开VSCode sudo /usr/share/code/code --no-sandbox --unity-launch

C语言期末复习笔记(下)

目录 九、指针 1.指针变量的定义和初始化 2.间接寻址符* 3.按值调用和按址调用 4.实例 5.函数指针 6.指针变量和其它类型变量的对比 十、字符串 1.字符串常量 2.字符串的存储 3.字符指针 4.字符串的访问和输入/输出 5.字符串处理函数 (1)str…

1、蓝牙打印机环境搭建

本项目采用stm32f103c8T6芯片,通过库函数实现打印功能,并配置有小程序蓝牙通信上位机。 1、创建文件夹目录 core文件夹存放核心库文件 LIB文件夹存放标准库函数文件 这里可以删减,用不到的可以不要。 obj存放编译后的文件 project存放项目…

多输入多输出 | Matlab实现WOA-CNN鲸鱼算法优化卷积神经网络多输入多输出预测

多输入多输出 | Matlab实现WOA-CNN鲸鱼算法优化卷积神经网络多输入多输出预测 目录 多输入多输出 | Matlab实现WOA-CNN鲸鱼算法优化卷积神经网络多输入多输出预测预测效果基本介绍模型背景程序设计参考资料 预测效果 基本介绍 Matlab实现WOA-CNN鲸鱼算法优化卷积神经网络多输入…

Leecode刷题C语言之切蛋糕的最小总共开销②

执行结果:通过 执行用时和内存消耗如下: typedef struct {int *booked;int bookedSize; } MyCalendar;#define MAX_BOOK_SIZE 1001MyCalendar* myCalendarCreate() {MyCalendar *obj (MyCalendar *)malloc(sizeof(MyCalendar));obj->booked (int *)malloc(siz…

力扣-数据结构-10【算法学习day.81】

前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向(例如想要掌握基础用法,该刷哪些题?建议灵神的题单和代码随想录)和记录自己的学习过程,我的解析也不会做的非常详细,只会提供思路和一些关…

Vue 全局事件总线:Vue 2 vs Vue 3 实现

🌟 前言 欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍 &#x…

基于Spring Boot的电影网站系统

一、技术架构 后端框架:Spring Boot,它提供了自动配置、简化依赖管理、内嵌式容器等特性,使得开发者可以快速搭建起一个功能完备的Web应用。 前端技术:可能采用Vue.js、JS、jQuery、Ajax等技术,结合Element UI等组件库…

DeepSpeed训练得到checkpoint如何像Huggingface模型一样评测evaluation?zero_to_fp32.py有什么用?怎么用?

DeepSpeed训练得到checkpoint如何像Huggingface模型一样评测evaluation? 具体步骤 首先看一个样例: 这是我用open-instruct框架,使用DeepSpeed训练1728个steps得到的一个checkpoint。请注意,下文我演示用的例子是基于step_1152&…

最新版Chrome浏览器加载ActiveX控件之CFCA安全输入控件

背景 CFCA安全输入控件用于保证用户在浏览器、桌面客户端、移动客户端中输入信息的安全性,防止运行在用户系统上的病毒、木马等恶意程序入侵窃取用户输入的敏感信息。确保用户输入、本地缓存、网络传输整个流程中,输入的敏感信息不被窃取。广泛应用于银行…

接口测试面试题

接口测试在软件测试中占据重要位置,无论是功能测试还是性能测试,接口的稳定性至关重要。以下总结了一些常见的接口测试面试题,帮助你从容应对面试挑战! 面试官常说:“接口测试是测试的重头戏,了解接口的设计…

Easy-Trans反向翻译+Excel导入最佳实践

1、概述 实现用户excel上传、解析、对于用户输入的中文翻译为字典码或者id,实现用户输入的参数校验,最后入库。如果用户输入的参数有问题,返回校验结果给前端。 excel解析使用My-Excel组件,校验使用hibernate-validator&#xff…

高效管理 Nginx 的利器:nginxWebUI 指南和 Docker 部署安装过程

前言 Nginx WebUI 是一个为 Nginx 提供图形化管理界面的工具。通过 WebUI,用户可以轻松管理 Nginx 配置,而无需直接编辑配置文件,尤其适合新手用户和频繁修改配置的场景。 官网文档:nginxWebUI - 文档 本文将分享为什么选择 ngin…

SpringCloud源码-openFeign

LoadBalancer默认只有nacos服务发现器 openFeign与springcloud loadbalancer的结合点 openFeign通过spring cloud loadbalancer进行负载均衡,spring cloud loadbalancer通过discovery client获取nacos的机器列表,然后底层进行负载均衡。