重现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 数据管理》。
相关文章:
重现ORA-01555 细说Oracle Undo 数据管理
1. 概述 1.1. Undo 数据应用 undo数据是: 原始的、修改之前的数据副本 是针对更改数据的每个事务处理所捕获的 至少保留到事务处理结束 用于支持: 回退操作 读取一致性查询 闪回查询、闪回事务处理和闪回表 从失败的事务处理中进行恢复 1.2. 事…...
通过blob请求后端导出文件
后端controller PostMapping("/exportPlanProject2")public void exportActive(RequestBody IfPlanListDTO plan, HttpServletResponse httpServletResponse) throws IOException {}后端service public void exportExcel2(HttpServletResponse response) throws IOEx…...
养老院小程序怎么搭建?让老年人老有所养,老有所依!
随着社会老龄化的加剧,养老服务成为一个越来越重要的话题。在这个互联网的时代,养老院也开始拥抱技术,借助小程序的便捷性来改善老年人的居住和生活体验。那么,如何搭建一个适合老年人的养老院小程序呢?本文将从实际操作的角度出…...
【2024美国数学建模AB题原文翻译】
2024 MCM 问题A:资源可用性与性别比例 虽然一些动物物种超出了通常的雄性或雌性性别范畴,但大多数物种要么是雄性要么是雌性。尽管许多物种在出生时展现出1:1的性别比例,其他物种则偏离了这个性别比例,这被称为适应性性别比例变化…...
判断旗帜是否符合ISO新标准
背景介绍 在全球化的背景下,不同国家的旗帜设计需要满足某些国际标准以便于统一化和规范化。ISO(国际标准化组织)提出了一项新规定,要求国家旗帜在设计时遵循一些规则,特别是棋盘状设计中的颜色分布规则。比如&#x…...
海量数据存储实现方案设计1-mycat版
目的 这里使用mycat为例子说明方案设计思路(仅个人学习、思考笔记)。主要尝试解决海量数据存储、动态不停机扩容问题,不再受限于单库、单表、单机等。 mycat简述 mycat 主要以中间件代理的方式,不侵入工程代码来实现分库分表&a…...
Elasticsearch检索之三:官方推荐方案search_after检索实现(golang)
Elasticsearch8.17.0在mac上的安装 Kibana8.17.0在mac上的安装 Elasticsearch检索方案之一:使用fromsize实现分页 快速掌握Elasticsearch检索之二:滚动查询(scrool)获取全量数据(golang) 1、search_after检索 在前面的文章介绍了fromsize的普通分页…...
hot100_238. 除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...
软件测试基础详解
🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 “尽早的介入测试,遇到问题的解决成本就越低” 随着软件测试技术的发展,测试工作由原来单一的寻找缺陷逐渐发展成为预防缺陷,…...
MySQL 备份方案设计之准备事项
MySQL 备份方案设计之准备事项 文章目录 MySQL 备份方案设计之准备事项1.选择合适的备份工具2.其他需要考虑的因素推荐资料 1.选择合适的备份工具 工欲善其事,必先利其器。 目前市面上的 MySQL 备份工具也有很多,整理如下(仅供参考ÿ…...
《计算机网络A》单选题-复习题库解析-最终
目录 151、信道容量计算公式“CW*log2(1S/N)”中,“S/N”表示( ) 152、下面哪一种编码方式不包含同步时钟信息( ) 153、子网划分的根本目的是( ) 154、在传统以太…...
向 SwiftUI 视图注入 managedObjectContext 环境变量导致 Xcode 预览(Preview)崩溃的解决
问题现象 从 SwiftUI 诞生到现在,我们这些秃头码农们早已都习惯了在 Xcode 预览中调试 App 界面了。不过,对于某些场景下向 SwiftUI 视图传递 managedObjectContext 环境变量(environment)总是会导致 Xcode 预览崩溃,这是怎么回事呢? 如上图所示,甚至我们将一个常驻内存…...
Ruby 数据类型
Ruby 数据类型 Ruby,作为一种动态、开放源代码的编程语言,以其简洁明了的语法和强大的功能而闻名。在Ruby中,数据类型是编程的核心组成部分,它们决定了变量可以存储的信息种类以及可以对这些信息执行的操作。Ruby是一种类型安全的…...
复合机器人正以其高效、精准、灵活的特点,逐渐在汽车装配线上崭露头角
随着全球汽车制造业的快速发展,汽车装配线已成为衡量企业生产效率和技术水平的重要标准。传统的装配方式往往依赖于大量的人工操作,这不仅效率低下,还面临着质量不稳定、安全隐患等问题。然而,随着智能科技的飞速进步,…...
Docker + JMeter + InfluxDB + Grafana搭建压测可视化实时监控
一:简单介绍 为了解决上述问题,必须要请出了 InfluxDB + Grafana : InfluxDB :持续型数据库,有时间戳组件,以时间的形式去存储数据; Grafana :一款采用 Go 语言编写的开源应用,主要用于大规模指标数据的可视化展现,是网络架构和应用分析中最流行的时序数据展示工具…...
leetcode 2658. 网格图中鱼的最大数目
题目如下 数据范围 使用并查集来做这道题。 其实按照题目的意思就是让我们求每一个联通的水域可以捞到的最大权值。 我们可以从前往后遍历这个二维数组只需要判断前一个水域和上一个水域是否和当前的(i, j)联通如果有则合并水域,同时用一个weight数组保存每一个联…...
Java 集合 Collection、List、Set
一. Collection 单列集合 1. Collection代表单列集合,每个元素(数据)只包含一个值 2. Collection集合特点 ① List系列集合:添加的元素是有序、可重复、有索引。 ArrayList、LinekdList:有序、可重复,有索引 ② Set系列集合&…...
报错:nginx [emerg] open() etcnginxnginx.conf failed (2 No such file or directory)
报错:nginx: [emerg] open() “/etc/nginx/nginx.conf” failed (2: No such file or directory) 背景:在创建nginx容器时,想把宿主机上的某一目录挂载到容器的/etc/nginx路径,报错"/etc/nginx/nginx.conf" failed (2:…...
基于AI的运维资源调度:效率与智能的双重提升
在现代运维场景中,随着系统复杂性和服务规模的不断增长,传统的资源调度方式已无法满足高效、动态和精准的需求。AI技术的引入为资源调度带来了新的解决方案,通过智能算法和数据驱动,实现了资源分配的自动化与优化。本文将详细探讨…...
自动化办公 | 根据成绩进行自动评级
今天我们将介绍一个常见的自动化办公需求:根据成绩自动评级。通过这篇文章,我们将介绍如何利用Python进行自动化办公,将表格中的成绩根据预定的规则进行评级,并生成一个新的带评级信息的表格。 需求背景 我们有一个表格…...
SharpSCADA项目实战:基于样例工程构建完整物料接收生产线
SharpSCADA项目实战:基于样例工程构建完整物料接收生产线 【免费下载链接】SharpSCADA C# SCADA 项目地址: https://gitcode.com/gh_mirrors/sh/SharpSCADA 想要快速掌握工业自动化SCADA系统的开发吗?SharpSCADA项目为你提供了一个完美的起点&…...
小型团队协作:OpenClaw+Qwen3-14B搭建内部问答知识库
小型团队协作:OpenClawQwen3-14B搭建内部问答知识库 1. 为什么我们需要本地化问答知识库 去年我们团队遇到一个典型问题:每当新人加入时,总要花费大量时间在数百份技术文档和客户案例中寻找特定问题的解答。更麻烦的是,有些涉及…...
收藏备用!Workflow与Agent详解:小白也能看懂的AI自动化核心(附上手工具)
对于刚接触大模型的小白和程序员来说,Workflow和Agent是AI自动化领域最易混淆、也最核心的两个概念。本文将用通俗的语言拆解二者的核心作用、本质区别,补充实用落地细节,同时推荐新手友好型工具,帮你快速建立体系化认知ÿ…...
如何在 React Native 中使用 Expo AV 高效缓存视频文件
本文详解在裸 React Native 项目中集成 expo-av 实现视频本地缓存的完整方案,涵盖路径处理、文件写入、URI 适配及常见兼容性问题(如 react-native-fs 路径不被 expo-av 识别),并提供可直接运行的优化代码与关键注意事项。 本…...
别再手动查日志了!用Skywalking 9.x快速定位Spring Boot微服务性能瓶颈
别再手动查日志了!用Skywalking 9.x快速定位Spring Boot微服务性能瓶颈 微服务架构下最令人头疼的场景莫过于:凌晨三点收到告警,某个核心接口响应时间从200ms飙升到5秒,而你面对几十个相互调用的服务和海量日志,完全不…...
AI技术原理--AI上下文窗口:为什么AI没有真正的记忆
99%的人都理解错了一个问题:AI真的会记得你吗? 很多人信誓旦旦跟我说:昨天我跟GPT聊了好久,今天一打开还能接着聊,这不是记忆是什么? 但如果我告诉你,它根本就不记得你——你是不是直接懵了&…...
用C++实现LBM格子玻尔兹曼方法MRT模拟加热气泡脱离
lbm格子玻尔兹曼方法mrt模拟加热气泡脱离c代码最近在研究流体力学相关的模拟,其中LBM(格子玻尔兹曼方法)的MRT(多松弛时间)模型在模拟加热气泡脱离这类复杂现象时展现出独特的优势。今天就来和大家分享一下如何用C 实现…...
DMA内存访问与Cheat Engine插件开发全指南:零基础配置到高效内存分析
DMA内存访问与Cheat Engine插件开发全指南:零基础配置到高效内存分析 【免费下载链接】CheatEngine-DMA Cheat Engine Plugin for DMA users 项目地址: https://gitcode.com/gh_mirrors/ch/CheatEngine-DMA CheatEngine-DMA是一款专为技术爱好者和开发者设计…...
Anthropic Claude Code源代码意外泄露:npm打包失误暴露512,000行闭源代码
2026年3月31日,Anthropic公司一名员工在向npm公开注册账户发布AI编程工具Claude Code(版本2.1.88)时,意外捆绑了源映射(source map)文件,导致该闭源代理式编码工具的完整专有源代码完全暴露。 …...
Netbird iOS客户端连接问题分析与解决方案
Netbird iOS客户端连接问题分析与解决方案 Netbird作为一款优秀的P2P网络工具,在跨平台使用中可能会遇到一些兼容性问题。近期iOS客户端出现的连接异常现象引起了开发者社区的关注。本文将深入分析该问题的技术背景,并提供有效的解决方案。 问题现象描述…...
