新闻详情

新闻详情

首页 / 资讯中心 / 详情

Oracle数据库实战笔记:从环境配置到故障排查的运维指南

发布时间:2026/10/2 14:39:10来源:尧图网络
Oracle数据库实战笔记:从环境配置到故障排查的运维指南
这些年大大小小项目接触下来Oracle数据库始终是我绕不开的一个名字。谈不上多喜欢但它的稳定、复杂和“老派”都让人印象深刻尤其是手里管着几套生产库的时候所有关于速度、并发、备份、恢复的焦虑最后都会变成一句“Oracle还能撑住”。这篇小记写的都是我自己在实际环境里折腾Oracle的所见所得算不上什么高深理论更像是把踩过的坑和用着顺手的招数整理出来。如果你是一个刚开始接触Oracle的同学或者正在为某个Oracle问题挠头的开发、运维这堆文字应该都能给你一些实在的参考。1. 关于Oracle数据库先说几个反直觉的真相1.1 Oracle到底是什么“数据库”很多新手一上来就把Oracle当成类似MySQL的另一种关系型数据库这个理解不算错但会严重低估它。Oracle的核心价值不在于SQL语法有多花哨而在于它把“数据可靠性”这件事做成了教科书级别。比如重做日志Redo Log、归档模式Archive Log、UNDO表空间、控制文件多副本机制这些设计让它在硬件故障、断电、甚至误操作的情况下依然有能力把数据恢复到事务一致的状态。我用MySQL的时候敢在半夜改表结构但在Oracle上从来不敢不先看归档日志空间这是两类数据库给我的最直接差异。1.2 你会在什么场景下被迫遇到Oracle别误会我不是说Oracle好到非它不可而是它的存量市场实在太大了。金融、电信、政企、传统制造业的核心交易系统十年前的架构选型基本都被Oracle绑定这些系统至今还在跑。所以哪怕你日常主力是PostgreSQL或者MySQL只要跳槽到这些行业几乎逃不掉“接手一套Oracle老系统”的命运。更现实的是很多公司并不缺数据库选型自由缺的是能稳住老库的人。这时候懂一点Oracle的存储过程、分区表、物化视图、AWR报告哪怕只是会看告警日志都算实打实的竞争力。2. 环境安装与基础配置这些坑我替你踩过了2.1 版本选择11g、12c、19c、21c到底怎么定Oracle的版本号一直很迷11g、12c、19c、21c看起来像是游戏版本迭代实际对应的是不同的发版策略。11g虽然老但稳定网上教程最多很多老系统的生产环境还在用适合用来学习套路。12c引入了多租户架构CDB/PDB如果你还在用传统的“一个实例一个库”思路去理解很容易被绕晕。19c是目前兼容性和稳定性最均衡的版本新项目我一般直接选19c。至于21c更像是一个技术预览版本除非你有新特性尝鲜需求否则别在生产环境碰。打开热词里“Oracle 11g版本下载”“CentOS 7 Oracle 21c”这类搜索其实背后暴露的是同一个问题安装文档太老新系统兼容性差。比如CentOS 7上装11g缺一堆依赖库glibc、libaio、sysstat一个都不能少还要手动创建oracle用户和用户组修改/etc/security/limits.conf里的文件句柄限制。装21c虽然少了些兼容性麻烦但它对内存和磁盘的要求更激进2GB内存跑起来动辄交换分区狂飙。我的经验是学习环境用最新社区版生产环境用经过验证的19c别为了追新把自己坑进去。2.2 监听器、端口修改和SQL*Plus登录前的必修课监听器Listener是Oracle网络层的门卫客户端连接数据库时第一个敲门的对象就是它。默认监听端口是1521修改端口这个操作本身不复杂但很多人改了端口后连不上库原因往往是把监听配置改了却忘了同步修改tnsnames.ora里的端口号两边不一致SQL*Plus自然无法建立会话。我一般这样操作首先用lsnrctl status查看当前监听状态确认监听名字和端口。然后修改$ORACLE_HOME/network/admin/listener.ora把PORT改成新端口比如1522。接着用lsnrctl stop和lsnrctl start重启监听。最后一定要检查tnsnames.ora确保里面的HOST和PORT与监听配置一致。lsnrctl status lsnrctl stop # 修改 listener.ora 后 lsnrctl start如果你用的是RAC环境修改端口还要同步OCR里的配置那就不是简单改监听文件能解决的了需要srvctl命令重新配置这一步千万别漏。SQL*Plus登录慢的问题也常常出现在这个阶段。最典型的一种情况是客户端的sqlnet.ora里设置了SQLNET.INBOUND_CONNECT_TIMEOUT或者DNS解析顺序不对连接时数据库会尝试反向解析客户端的IP和主机名如果网络环境里没有可用的DNS或hosts映射每次登录都会卡几十秒甚至报ORA-12541、ORA-12560。我的处理方式是在Oracle服务器的hosts文件里加入客户端IP和主机名的对应关系同时在监听器配置里关闭不必要的连接等待基本能解决九成登录缓慢问题。2.3 ASM入门DBA绕不开的存储层很多单机Oracle用户并不需要ASM但一旦部署RAC或使用Oracle的集群文件系统ASM就成了躲不开的东西。ASMAutomatic Storage Management是Oracle自带的一个集群文件系统和卷管理器它把磁盘组抽象成一套统一的存储池把数据文件、控制文件、日志文件都放进去简化了存储管理。要进入ASM实例通常使用sqlplus / as sysasm或sqlplus / as sysdba取决于环境授权。ASM实例和普通数据库实例不是一个概念ASM实例只有启动、挂载磁盘组这些动作不承载用户数据。常见命令包括查看磁盘组状态、检查可用空间、添加磁盘-- 查看磁盘组 SELECT name, state, total_mb, free_mb FROM v$asm_diskgroup; -- 向磁盘组添加磁盘示例 ALTER DISKSYSTEM DATA ADD DISK /dev/oracleasm/disks/DATA01;这里要提醒一句ASM操作风险高动磁盘组之前一定要确认该磁盘组是否正在被数据库使用否则一个误删可能导致整个数据库无法启动。我见过有人为了腾空间直接把某块磁盘从磁盘组里移除结果数据库起不来的惨剧教训深刻。3. 核心SQL和开发硬功夫别只会SELECT和UPDATE3.1 增删改查的正确打开方式数据库增删改查是基本功但Oracle的SQL和MySQL相比有几个细节值得单独说。先看插入Oracle没有MySQL那种直接INSERT ... ON DUPLICATE KEY UPDATE它用的是MERGE语句来做“有则更新无则插入”。早期很多从MySQL迁移到Oracle的同事会在这个地方卡住。MERGE INTO product p USING ( SELECT 1001 AS id, NewName AS name FROM dual ) s ON (p.id s.id) WHEN MATCHED THEN UPDATE SET p.name s.name WHEN NOT MATCHED THEN INSERT (id, name) VALUES (s.id, s.name);再说删除Oracle的DELETE执行后会占用较大的UNDO空间来保存回滚信息如果你要清空一张大表别用DELETE FROM table那个速度慢得能让你怀疑人生。正确做法是TRUNCATE TABLE table它不记录行级Undo执行极快。但注意TRUNCATE是DDL操作会隐式提交且无法回滚所以操作前一定要确认这表的数据确实不要了。3.2 TRUNC(SYSDATE) 的日期处理陷阱日期处理是Oracle里最容易写错又最难排查的一类问题。SYSDATE返回当前系统时间精确到秒而很多业务需求只需要“今天”这个粒度。TRUNC(SYSDATE)可以把时间部分截断只保留日期比如TRUNC(SYSDATE)返回今天的00:00:00。这个函数看似简单但用得不好会让索引失效。比如有人在查询条件是SYSDATE LIKE TRUNC(SYSDATE)这就是错误用法正确写法是让列参与计算而不是函数套在列上。举一个常见需求查昨天的全天数据。很多人会写WHERE create_date BETWEEN SYSDATE - 1 AND SYSDATE这个写法有问题因为SYSDATE - 1是昨天的当前时间而不是昨天零点。应该写成WHERE create_date TRUNC(SYSDATE) - 1 AND create_date TRUNC(SYSDATE)这样既准确又可以利用索引。类似的场景还有月初、季度初SELECT TRUNC(SYSDATE, MM) AS first_day_of_month FROM dual; SELECT TRUNC(SYSDATE, Q) AS first_day_of_quarter FROM dual;我强烈建议团队里所有查询日期范围的条件都统一用TRUNC配合和这种写法既避免哪天零点边界出问题也让执行计划更稳定。3.3 字符串包含判断和分页查询的两种姿势判断一个字符串是否包含另一个子串Oracle里最常用的函数是INSTR而不是LIKE。LIKE当然也能用但INSTR在业务判断中更加直观而且不会遇到LIKE的转义问题。比如要找出名称里包含“管理”的用户常见写法SELECT * FROM user_info WHERE INSTR(user_name, 管理) 0;如果INSTR返回0表示不包含返回大于0的位置表示包含。在WHERE条件里用INSTR还有一个好处配合函数索引时可以精准优化而LIKE %关键字%会阻断普通索引的使用。分页查询也是老生常谈。Oracle 12c之前没有LIMIT分页全靠ROWNUM和嵌套子查询。经典写法是这样SELECT * FROM ( SELECT t.*, ROWNUM rn FROM ( SELECT * FROM employees ORDER BY salary DESC ) t WHERE ROWNUM :page * :pageSize ) WHERE rn (:page - 1) * :pageSize;外层rn就是手工生成的行号。这段代码的顺序不能乱最内层先排序中间层再限制ROWNUM 每页最大值外层过滤当前页的起始行。12c及以上版本可以用OFFSET ... ROWS FETCH NEXT ... ROWS ONLY的标准写法例如SELECT * FROM employees ORDER BY salary DESC OFFSET 20 ROWS FETCH NEXT 20 ROWS ONLY;这是我个人更推荐的方式可读性好很多不过要注意这类分页在深层分页时依然要扫描前面所有行数据量巨大时性能瓶颈依旧存在。真遇到亿级数据分页还得另想优化方案比如基于排序字段范围游标。3.4 查询总金额与分组统计时容易忽略的NULL“Oracle查询总金额”这个热词对应的其实是一个经典场景SUM函数遇到NULL值时不是报错而是直接忽略该行。如果你的金额字段里有部分记录是NULL直接SELECT SUM(amount) FROM orders的结果可能是 0 或一个偏小的数具体取决于整列是否全为NULL。更危险的是在分组统计中某组所有金额都是NULL这个组在结果集里可能不会出现或者SUM结果为NULL前端展示时容易出乱子。一个稳妥的习惯是使用NVL或COALESCE把NULL先变成0再做聚合SELECT dept_id, SUM(NVL(amount, 0)) AS total_amount FROM orders GROUP BY dept_id;另外要注意SUM返回类型。Oracle的NUMBER类型能存储非常大的数但如果你用Java的int去接收可能会溢出。我建议用BigDecimal或Long接收金额相关的结果这是很多支付系统事故的源头。4. 存储过程、Package与变长数组进阶到底在学什么4.1 为什么存储过程在Oracle里还有生命力现在很多人提倡业务逻辑放应用层但现实里Oracle的存储过程依然大量存在巨大的存量系统决定了它不会消失。我刚接触时也觉得存储过程难调试、版本控制差可真正在Oracle里写业务后才发现它在复杂计算、大批量数据处理场景下的优势少了一次Java到数据库的网络往返而且Oracle的PL/SQL引擎做了大量优化循环百万行数据并不像想象中那么慢。一个最基础的带参数存储过程长这样CREATE OR REPLACE PROCEDURE update_employee_salary ( emp_id IN NUMBER, new_sal IN NUMBER ) AS BEGIN UPDATE employees SET salary new_sal WHERE employee_id emp_id; COMMIT; EXCEPTION WHEN OTHERS THEN ROLLBACK; RAISE; END update_employee_salary; /注意PL/SQL块结尾的斜杠是给SQL*Plus识别结束用的不能漏。EXCEPTION分支里RAISE会把这个异常继续抛给调用方这样应用层能看到明确的错误。很多新手在存储过程里吞掉异常只写个NULL这会让生产环境问题特别难排查。4.2 Package把存储过程打包管理Package在Oracle里相当于把一组相关的存储过程、函数、游标和变量打包成一个模块分为包头Specification和包体Body两部分。包头只写声明包体写实现。这样做的好处很明显外部只依赖包头只要包头不变修改包体实现不需要重新编译调用方代码这在发布时非常友好。举个例子一个订单相关的Package声明CREATE OR REPLACE PACKAGE order_mgr AS FUNCTION create_order(p_customer_id NUMBER) RETURN NUMBER; PROCEDURE cancel_order(p_order_id NUMBER); END order_mgr; / CREATE OR REPLACE PACKAGE BODY order_mgr AS FUNCTION create_order(p_customer_id NUMBER) RETURN NUMBER IS v_order_id NUMBER; BEGIN SELECT seq_order_id.NEXTVAL INTO v_order_id FROM dual; INSERT INTO orders(order_id, customer_id, status) VALUES(v_order_id, p_customer_id, NEW); RETURN v_order_id; END create_order; PROCEDURE cancel_order(p_order_id NUMBER) IS BEGIN UPDATE orders SET status CANCELLED WHERE order_id p_order_id; COMMIT; END cancel_order; END order_mgr; /使用的时候用order_mgr.create_order(...)调用。和直接调用独立存储过程相比Package更利于权限控制、全局变量管理和代码组织。我接手的老系统里Package动辄几百上千行看的时候压力大但只要结构清晰、命名规范维护起来其实比散落各处的SQL强很多。4.3 变长数组VARRAY和其他集合类型Oracle的变长数组对应的是VARRAY它是一种可以在PL/SQL里使用的集合类型元素个数固定上限可以动态伸缩但不能超过声明的大小。听起来很像Java数组但使用场景有明显差异。最常见的是用它批量绑定插入数据减少SQL解析次数。DECLARE TYPE name_list IS VARRAY(100) OF VARCHAR2(50); names name_list : name_list(Tom, Jerry, Alice); BEGIN FOR i IN 1..names.COUNT LOOP DBMS_OUTPUT.PUT_LINE(names(i)); END LOOP; END; /变长数组在存储大量数据时不太高效因为它在数据库存储层面是连续存储的扩展有成本。如果业务需要更灵活的集合操作比如频繁删除中间元素我建议使用嵌套表Nested Table或关联数组Associative Array它们更贴近程序语言里的List或Map。选型时别只看“能存”还要看“怎么读怎么写”很多时候程序里先查一张表再循环处理性能反而不如把这些集合作为参数传给SQL。5. 同步工具、连接池、图形化管理与跨语言访问5.1 做数据库同步别贪图万能方案“数据库同步软件”和“数据库同步工具”是搜索热词里的常客说明大家对数据实时/准实时同步的需求非常普遍。Oracle场景下有几种常见路径使用官方Data Guard做灾备同步这是最稳的选择使用Oracle GoldenGate做异构平台或跨库同步适合与Kafka、其他数据库对接还有一类基于日志解析的商业同步工具能在不改造应用的情况下做Oracle到MySQL或云数据库的迁移。我的经验是先从业务对“延迟”和“一致性”的要求出发选型。如果是同机房同版本Oracle只需要一个灾备库直接用Data Guard配置简单且可靠性高。如果需要跨库同步到MySQL做报表或大数据分析GoldenGate是业界成熟方案但它对源库的配置要求很苛刻挖坑空间大。更轻量级的方案是用开源工具比如基于触发器或时间戳的增量同步这类方案实现简单但只能同步业务能感知到的变化DDL和手工修改数据就会漏。所谓“万能同步工具”基本不存在你真正需要的是按数据属性分层同步的架构。5.2 连接池参数怎么配才能不踩雷搜索热词里出现了“mysql的数据库连接池”但Oracle连接池同样值得关注。无论用HikariCP、Druid还是Tomcat JDBC Pool连接池的核心参数都是初始连接数、最大连接数、最小空闲连接数、连接最大存活时间和获取连接超时时间。Oracle数据库实例默认允许的进程数有限如果应用连接池最大连接数设得比数据库的processes参数还大一旦连接数打满数据库会直接报ORA-12518或ORA-00020表现为业务忽然全部卡死。我的建议是连接池最大连接数必须低于Oracleprocesses参数且预留15%到20%给DBA、监控和定时任务使用。比如processes是200应用连接池上限设150就够了。同时连接池的空闲连接验证必须开启测试语句用SELECT 1 FROM dual避免防火墙或数据库重启后池里残留一堆失效连接让新请求等满超时时间才拿到新连接。5.3 Python连接Oracle查询数据今天的环境比过去友好太多早年想在Python里连Oracle得装Oracle Instant Client再配一堆环境变量麻烦程度劝退很多人。现在Oracle官方维护了python-oracledb库它在Thin模式下不依赖Oracle Client直接纯Python就能连数据库简直是小项目建模和数据抽取的救星。安装只需要两步pip install oracledb连接示例import oracledb conn oracledb.connect(userscott, passwordtiger, dsn192.168.1.100:1521/ORCLPDB1) cursor conn.cursor() cursor.execute(SELECT employee_id, last_name FROM employees WHERE rownum 5) for row in cursor: print(row) cursor.close() conn.close()如果你手头的Python环境是旧版本也可以用cx_Oracle不过官方已经逐渐淡出维护新项目我建议直接上手python-oracledb。写脚本做数据核对、导出报表这套组合比SQL*Plus分页输出友好太多。注意连接字符串里的服务名PDB和CDB模式下DSN写法有差异连错会报ORA-12505。5.4 图形管理工具dbx、Navicat、EMCC怎么选命令行固然正统但日常业务分析、表结构查看、索引优化这些活儿有个顺手的图形工具能省一半时间。搜索热词里的“dbx数据库工具”我印象中是一个轻量级数据库管理工具适合快速查看数据、执行查询但它对Oracle高级功能如AWR报告、表空间管理的支持有限。Navicat是我用得较多的工具新版对Oracle、达梦、MySQL都能连接特别适合跨数据库对比场景。如果是Oracle官方生态EMCCEnterprise Manager Cloud Control能干的事最多从监控到调优到备份管理一应俱全但部署成本高不是所有人都愿意装。我的分工思路是日常查数据、改数据用Navicat或dbx这类轻量工具跑批量脚本、看执行计划用SQL*Plus做系统级监控和告警分析用EMCC。别指望一个工具解决所有问题工具链的覆盖范围比“唯一神器”重要得多。6. 常见故障排查实录每一行都是真金白银6.1 SQL*Plus登录缓慢或报错的几种典型原因网上搜索“sqlplus登录oracle数据库出现缓慢或者错误的原因可能很多”其实高频原因就那几类。第一类是DNS解析问题客户端IP反向解析超时导致登录延迟处理方式是在服务器hosts文件里加映射或者设置sqlnet.ora里的NAMES.DIRECTORY_PATH (EZCONNECT)绕过多余解析。第二类是监听器“假活”监听进程还在但数据库服务没有注册表现为登录时ORA-12514“监听程序当前无法识别连接描述符中请求的服务”通常是数据库实例还没完全起来或者动态注册失败可以手动执行ALTER SYSTEM REGISTER;强制注册。第三类是数据库本身负载太高CPU被占满或锁等待严重SQL*Plus连接后执行任何操作都像“卡住”这种时候先查v$session_wait和v$lock杀掉阻塞会话往往能快速恢复。6.2 监听服务无法启动多半是配置文件惹的祸Oracle监听服务无法启动是Windows和Linux环境都会遇到的经典问题。排查步骤很简单先看端口占用在Linux上用netstat -tlnp | grep 1521Windows上用netstat -ano | findstr 1521确认端口是不是被其他进程占了。如果端口被占可以改监听端口或者杀掉占用进程。如果端口没被占再检查listener.ora文件的语法一个常见的坑是HOSTlocalhost数据库实例监听本机但客户端从外部连接不上实际应该配置成服务器真实的IP地址或主机名。还有另一种情况是监听日志文件满了listener.log不断膨胀占满磁盘导致监听无法写入日志进而无法启动。清理时先备份日志文件然后清空或归档再重启监听。生产环境建议配置日志轮转不要等到磁盘报警再处理。6.3 12c删除不干净和残留目录怎么处理关于“12c删除不干净oracle”这个热词我太有感触了。Oracle卸载本来就不是一个让你“点下一步就完事”的过程12c引入了CDB和PDB概念后对象更复杂残留问题更严重。在Linux下删除Oracle要想清干净至少要做三件事停止所有相关进程删除Oracle安装目录例如/u01/app/oracle、删除/etc/oratab和/etc/oraInst.loc等配置文件再用系统用户清理oracle用户和组。Windows下还要清理注册表里的HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE键否则下次安装会提示已经存在同名数据库。清理过程最容易被忽略的是环境变量和启动脚本比如/etc/profile里加的ORACLE_HOME、ORACLE_SID还有launchd或systemd服务残留。删除不干净导致重装失败绝大多数不是因为目录没删空而是因为这些零零碎碎的引用没清掉。6.4 驱动位数不匹配和“找不到数据库引擎启动句柄”这个错误在大规模部署Oracle客户端时经常碰到。Oracle客户端分为32位和64位如果装了64位Office/应用程序配了32位ODBC驱动或者反过来就会出现类似“64位引擎不支持DBC数据只支持ACCESS数据”或者“找不到数据库引擎启动句柄”的报错。本质上是程序调用ODBC时加载了不匹配的驱动项。解决办法不是“强行装另一个位数驱动”而是先确认调用方的程序位数。如果程序是64位那就配置64位ODBC数据源如果程序是32位则配32位ODBC。Windows上要注意odbcad32.exe在64位系统里有两个版本64位面板在System32里32位面板在SysWOW64里默认打开的不一定是你要的位数。Oracle客户端如果同时装了32位和64位还要确保PATH里的ORACLE_HOME指向正确的那一个不然DLL加载也会错乱。7. 最后分享一点我的实操体会和Oracle相处时间越长我越觉得它不是一个“理所当然的现代数据库”而更像一个需要敬畏的老牌系统。它给你的强大能力很多但也要求你为每一个操作后果负责。很多事故不是Oracle本身不够稳而是操作者没想清楚就动了不该动的东西。我在实际工作中养成了两个习惯任何生产变更前先备份、任何SQL执行前先看影响行数。这两个习惯救过我太多次。如果你正在学Oracle不要只盯着语法多看两样东西执行计划和告警日志。执行计划告诉你SQL是怎么跑的告警日志告诉你数据库在抱怨什么。把这两个看明白了你才算真正进入Oracle的世界。这篇小记就当作一个引子以后碰到具体问题再翻开对应的日志慢慢查比死记硬背命令有用得多。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

投资理财常见骗局 2026/10/2 16:09:45

投资理财常见骗局

文章目录1.Web3 骗局1.1 Rug Pull1.1.1 三种类型1.1.2 典型流程1.1.3 如何识别和防范?查验流动性锁定情况审查智能合约代码考察团队透明度警惕不合理的高收益承诺1.1.4 真实案例参考1.1.5 小结1.2 貔貅盘1.2.1 貔貅盘是如何运作的?1.2.2 真实案例&#x…

阅读更多 →
Codex与Claude Code接入兼容API的安全配置实战 2026/10/2 16:09:45

Codex与Claude Code接入兼容API的安全配置实战

Codex 和 Claude Code 这两款命令行 AI 编程工具,现在越来越多人拿来写代码、跑自动化任务。但真要落地到自己的项目里,绕不开一个问题:怎么接上兼容 API,同时又不把 Key 弄丢、弄漏、弄进 Git 历史里。我见过太多人把 Key 直接写…

阅读更多 →
AstroWind 集成 shadcn/ui 设计令牌:从 CSS 变量到 React 组件的完整实战指南 2026/10/2 16:09:45

AstroWind 集成 shadcn/ui 设计令牌:从 CSS 变量到 React 组件的完整实战指南

前端UI组件 【免费下载链接】astrowind ⭕️ AstroWind: A free template using Astro v7 and Tailwind CSS v4. Astro starter theme. 项目地址: https://gitcode.com/GitHub_Trending/as/astrowind 点击查看 免费下载 AstroWind(Astro 7 Tailwind CS…

阅读更多 →
傅里叶变换六大工程性质实战指南 2026/10/2 16:09:45

傅里叶变换六大工程性质实战指南

1. 这不是数学课,是信号工程师的实战工具箱 你手头正处理一段从传感器采回来的振动数据,波形杂乱无章,看不出周期性;或者你在调试一个射频电路,频谱仪上一堆峰谷,却不知道哪个是噪声、哪个是有效信号&#…

阅读更多 →
从零手写AI工程:反向传播、Transformer与RAG实战指南 2026/10/2 16:09:45

从零手写AI工程:反向传播、Transformer与RAG实战指南

1. 项目概述与定位分析1.1 这个仓库到底解决什么问题我第一次看到 "ai-engineering-from-scratch" 这个标题的时候,第一反应是:这又是一个 repo 收集狂魔的作品?但点进去转了一圈之后,我得说,这哥们儿是真的…

阅读更多 →
DIY开放式机架openrig:用4040铝型材打造模块化裸机平台 2026/10/2 16:09:39

DIY开放式机架openrig:用4040铝型材打造模块化裸机平台

1. 项目源起:为什么我会放着好好的机箱不用,去搞一台“裸奔”的开放式机架 先交代一下背景。我自己装电脑到现在快十四年,机箱换过侧透、全塔、ITX小箱子,水冷风冷都折腾过。但最近一次给主力机换平台时,发现一个很尴尬…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉