【Oracle】数据备份与恢复

article/2025/8/10 8:42:04

在这里插入图片描述

个人主页:Guiat
归属专栏:Oracle

在这里插入图片描述

文章目录

  • 1. Oracle备份恢复概述
    • 1.1 为什么备份这么重要?
    • 1.2 Oracle备份策略全景图
  • 2. 物理备份详解
    • 2.1 冷备份 - 最简单粗暴的方式
      • 2.1.1 冷备份的步骤
      • 2.1.2 冷备份恢复过程
    • 2.2 热备份 - 不停机的备份艺术
      • 2.2.1 启用归档模式
      • 2.2.2 表空间级热备份
    • 2.3 RMAN - Oracle的备份神器
      • 2.3.1 RMAN基础配置
      • 2.3.2 完整数据库备份
      • 2.3.3 RMAN备份脚本示例
      • 2.3.4 RMAN备份策略图
  • 3. 逻辑备份详解
    • 3.1 Data Pump - 现代逻辑备份利器
      • 3.1.1 创建Directory对象
      • 3.1.2 使用expdp进行导出
      • 3.1.3 使用impdp进行导入
      • 3.1.4 Data Pump监控和管理
    • 3.2 传统Export/Import工具
      • 3.2.1 Export导出示例
      • 3.2.2 Import导入示例
  • 4. 数据恢复策略
    • 4.1 恢复场景分类
    • 4.2 使用RMAN进行恢复
      • 4.2.1 完整数据库恢复
      • 4.2.2 单个数据文件恢复
      • 4.2.3 基于时间点的恢复
      • 4.2.4 表空间时间点恢复(TSPITR)
    • 4.3 控制文件恢复
      • 4.3.1 从自动备份恢复控制文件
      • 4.3.2 从指定备份恢复控制文件
  • 5. 高级备份恢复技术
    • 5.1 闪回技术
      • 5.1.1 闪回查询
      • 5.1.2 闪回表
      • 5.1.3 闪回删除(回收站)
      • 5.1.4 闪回数据库
    • 5.2 Oracle Data Guard
      • 5.2.1 Data Guard架构
      • 5.2.2 创建物理备用数据库
    • 5.3 零数据丢失恢复设备(ZDLRA)
  • 6. 备份恢复最佳实践
    • 6.1 备份策略设计原则
    • 6.2 3-2-1备份规则
      • 6.2.1 实现3-2-1规则的脚本

正文

1. Oracle备份恢复概述

Oracle数据库的备份与恢复就像给你的数据上了一道保险,万一出现意外情况,你总能有个可靠的退路。无论是硬件故障、人为误操作,还是自然灾害,备份都是你最后的救命稻草。

1.1 为什么备份这么重要?

数据库备份不仅仅是为了防范灾难,更是为了:

  • 保护企业的核心数据资产
  • 满足法律法规和合规性要求
  • 确保业务连续性不中断
  • 提供测试和开发环境的数据源
  • 支持历史数据的归档需求

1.2 Oracle备份策略全景图

Oracle提供了多种备份方式,每种都有自己的特点和适用场景:

Oracle备份策略
物理备份
逻辑备份
冷备份
热备份
RMAN备份
Export/Import
Data Pump
SQL脚本
数据库完全关闭
拷贝所有数据文件
归档模式下
在线备份
Oracle官方工具
增量备份

2. 物理备份详解

2.1 冷备份 - 最简单粗暴的方式

冷备份就是把数据库完全关闭,然后把所有相关文件都拷贝一份。虽然简单,但是对业务影响比较大。

2.1.1 冷备份的步骤

-- 1. 首先查看数据库当前状态
SELECT name, open_mode FROM v$database;-- 2. 查看数据文件位置
SELECT file_name, tablespace_name FROM dba_data_files
UNION ALL
SELECT file_name, tablespace_name FROM dba_temp_files;-- 3. 查看控制文件位置
SELECT name FROM v$controlfile;-- 4. 查看日志文件位置
SELECT member FROM v$logfile;-- 5. 正常关闭数据库
SHUTDOWN IMMEDIATE;

关闭数据库后,在操作系统层面进行文件拷贝:

#!/bin/bash
# 冷备份脚本示例# 设置备份目录
BACKUP_DIR="/backup/cold_backup_$(date +%Y%m%d_%H%M%S)"
mkdir -p $BACKUP_DIR# 备份数据文件
cp /u01/oradata/ORCL/*.dbf $BACKUP_DIR/
cp /u01/oradata/ORCL/temp01.dbf $BACKUP_DIR/# 备份控制文件
cp /u01/oradata/ORCL/control*.ctl $BACKUP_DIR/# 备份日志文件
cp /u01/oradata/ORCL/redo*.log $BACKUP_DIR/# 备份参数文件
cp $ORACLE_HOME/dbs/spfileORCL.ora $BACKUP_DIR/
cp $ORACLE_HOME/dbs/initORCL.ora $BACKUP_DIR/# 备份密码文件
cp $ORACLE_HOME/dbs/orapwORCL $BACKUP_DIR/echo "冷备份完成,备份位置:$BACKUP_DIR"

2.1.2 冷备份恢复过程

#!/bin/bash
# 冷恢复脚本示例# 停止数据库
sqlplus / as sysdba << EOF
SHUTDOWN ABORT;
EXIT;
EOF# 恢复所有文件
BACKUP_DIR="/backup/cold_backup_20241201_140000"
cp $BACKUP_DIR/*.dbf /u01/oradata/ORCL/
cp $BACKUP_DIR/control*.ctl /u01/oradata/ORCL/
cp $BACKUP_DIR/redo*.log /u01/oradata/ORCL/
cp $BACKUP_DIR/spfileORCL.ora $ORACLE_HOME/dbs/
cp $BACKUP_DIR/orapwORCL $ORACLE_HOME/dbs/# 启动数据库
sqlplus / as sysdba << EOF
STARTUP;
EXIT;
EOF

2.2 热备份 - 不停机的备份艺术

热备份允许在数据库运行时进行备份,但有个前提条件:数据库必须运行在归档模式下。

2.2.1 启用归档模式

-- 检查当前归档模式
SELECT log_mode FROM v$database;-- 如果不是归档模式,需要先设置
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;-- 验证归档模式
SELECT log_mode FROM v$database;
SELECT name, log_mode FROM v$database;

2.2.2 表空间级热备份

-- 开始备份特定表空间
ALTER TABLESPACE USERS BEGIN BACKUP;-- 在操作系统层面拷贝数据文件
-- cp /u01/oradata/ORCL/users01.dbf /backup/hot_backup/-- 结束备份模式
ALTER TABLESPACE USERS END BACKUP;-- 强制日志切换,确保备份一致性
ALTER SYSTEM SWITCH LOGFILE;

完整的热备份脚本:

-- 创建热备份存储过程
CREATE OR REPLACE PROCEDURE hot_backup_all_tablespaces ASCURSOR c_tablespaces ISSELECT tablespace_name FROM dba_tablespaces WHERE status = 'ONLINE' AND contents != 'TEMPORARY';v_backup_dir VARCHAR2(200) := '/backup/hot_backup_' || TO_CHAR(SYSDATE, 'YYYYMMDD_HH24MISS');v_sql VARCHAR2(4000);
BEGIN-- 创建备份目录DBMS_OUTPUT.PUT_LINE('开始热备份到目录: ' || v_backup_dir);FOR ts IN c_tablespaces LOOPBEGIN-- 开始表空间备份EXECUTE IMMEDIATE 'ALTER TABLESPACE ' || ts.tablespace_name || ' BEGIN BACKUP';DBMS_OUTPUT.PUT_LINE('开始备份表空间: ' || ts.tablespace_name);-- 这里应该调用操作系统命令拷贝文件-- 实际环境中需要结合shell脚本-- 结束表空间备份EXECUTE IMMEDIATE 'ALTER TABLESPACE ' || ts.tablespace_name || ' END BACKUP';DBMS_OUTPUT.PUT_LINE('完成备份表空间: ' || ts.tablespace_name);EXCEPTIONWHEN OTHERS THEN-- 确保即使出错也要结束备份模式BEGINEXECUTE IMMEDIATE 'ALTER TABLESPACE ' || ts.tablespace_name || ' END BACKUP';EXCEPTIONWHEN OTHERS THEN NULL;END;RAISE;END;END LOOP;-- 备份控制文件EXECUTE IMMEDIATE 'ALTER DATABASE BACKUP CONTROLFILE TO ''' || v_backup_dir || '/control_backup.ctl''';-- 强制日志切换EXECUTE IMMEDIATE 'ALTER SYSTEM SWITCH LOGFILE';DBMS_OUTPUT.PUT_LINE('热备份完成!');
END;
/

2.3 RMAN - Oracle的备份神器

RMAN(Recovery Manager)是Oracle官方推荐的备份恢复工具,功能强大且易于管理。

2.3.1 RMAN基础配置

-- 连接到RMAN
$ rman target /-- 查看RMAN配置
RMAN> SHOW ALL;-- 配置备份保留策略
RMAN> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;-- 配置备份优化
RMAN> CONFIGURE BACKUP OPTIMIZATION ON;-- 配置控制文件自动备份
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;-- 设置备份存储位置
RMAN> CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/backup/rman/%U';

2.3.2 完整数据库备份

-- 完整数据库备份
RMAN> BACKUP DATABASE PLUS ARCHIVELOG;-- 带压缩的完整备份
RMAN> BACKUP AS COMPRESSED BACKUPSET DATABASE PLUS ARCHIVELOG;-- 增量备份(0级,相当于完整备份)
RMAN> BACKUP INCREMENTAL LEVEL 0 DATABASE;-- 增量备份(1级,只备份变化的块)
RMAN> BACKUP INCREMENTAL LEVEL 1 DATABASE;

2.3.3 RMAN备份脚本示例

#!/bin/bash
# RMAN备份自动化脚本# 设置环境变量
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
export ORACLE_SID=ORCL
export PATH=$ORACLE_HOME/bin:$PATH# 设置备份目录
BACKUP_DIR=/backup/rman/$(date +%Y%m%d)
mkdir -p $BACKUP_DIR# 执行备份
rman target / << EOF
RUN {ALLOCATE CHANNEL ch1 DEVICE TYPE DISK FORMAT '$BACKUP_DIR/full_%U';ALLOCATE CHANNEL ch2 DEVICE TYPE DISK FORMAT '$BACKUP_DIR/full_%U';BACKUP AS COMPRESSED BACKUPSET DATABASE PLUS ARCHIVELOG;BACKUP CURRENT CONTROLFILE FORMAT '$BACKUP_DIR/control_%U';DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-1';RELEASE CHANNEL ch1;RELEASE CHANNEL ch2;
}
EXIT;
EOF# 检查备份状态
if [ $? -eq 0 ]; thenecho "RMAN备份成功完成 - $(date)"
elseecho "RMAN备份失败 - $(date)"exit 1
fi

2.3.4 RMAN备份策略图

RMAN备份策略
0级增量备份
1级增量备份
归档日志备份
每周日执行
完整数据备份
每日执行
仅备份变化块
每小时执行
保证恢复连续性
恢复基础
快速恢复

3. 逻辑备份详解

3.1 Data Pump - 现代逻辑备份利器

Data Pump是Oracle推荐的逻辑备份工具,比传统的exp/imp工具性能提升了很多。

3.1.1 创建Directory对象

-- 创建目录对象
CREATE DIRECTORY dpump_dir AS '/backup/datapump';-- 授权给用户
GRANT READ, WRITE ON DIRECTORY dpump_dir TO hr;
GRANT READ, WRITE ON DIRECTORY dpump_dir TO system;

3.1.2 使用expdp进行导出

# 导出整个数据库
expdp system/password@orcl DIRECTORY=dpump_dir DUMPFILE=full_db_%U.dmp \LOGFILE=full_db_export.log FULL=Y PARALLEL=4# 导出特定用户
expdp system/password@orcl DIRECTORY=dpump_dir DUMPFILE=hr_user.dmp \LOGFILE=hr_export.log SCHEMAS=HR# 导出特定表
expdp hr/password@orcl DIRECTORY=dpump_dir DUMPFILE=employees.dmp \LOGFILE=emp_export.log TABLES=EMPLOYEES# 按查询条件导出
expdp hr/password@orcl DIRECTORY=dpump_dir DUMPFILE=recent_orders.dmp \LOGFILE=orders_export.log TABLES=ORDERS \QUERY='WHERE order_date > SYSDATE-30'

3.1.3 使用impdp进行导入

# 导入整个dump文件
impdp system/password@orcl DIRECTORY=dpump_dir DUMPFILE=full_db_01.dmp \LOGFILE=full_db_import.log# 导入到不同用户
impdp system/password@orcl DIRECTORY=dpump_dir DUMPFILE=hr_user.dmp \LOGFILE=hr_import.log REMAP_SCHEMA=HR:HR_BACKUP# 导入到不同表空间
impdp system/password@orcl DIRECTORY=dpump_dir DUMPFILE=hr_user.dmp \LOGFILE=hr_import.log REMAP_TABLESPACE=USERS:USERS_BACKUP# 只导入表结构,不导入数据
impdp system/password@orcl DIRECTORY=dpump_dir DUMPFILE=hr_user.dmp \LOGFILE=structure_only.log CONTENT=METADATA_ONLY

3.1.4 Data Pump监控和管理

-- 查看正在运行的Data Pump作业
SELECT owner_name, job_name, operation, job_mode, state 
FROM dba_datapump_jobs;-- 连接到正在运行的作业
$ expdp system/password@orcl ATTACH=SYS_EXPORT_FULL_01-- 在交互模式下检查状态
Export> STATUS-- 暂停作业
Export> STOP_JOB-- 继续作业
Export> START_JOB-- 终止作业
Export> KILL_JOB

3.2 传统Export/Import工具

虽然Data Pump更强大,但在某些场景下,传统的exp/imp仍然有用。

3.2.1 Export导出示例

# 导出整个数据库
exp system/password@orcl FILE=full_database.dmp LOG=full_export.log FULL=Y# 导出特定用户
exp system/password@orcl FILE=hr_user.dmp LOG=hr_export.log OWNER=HR# 导出特定表
exp hr/password@orcl FILE=employees.dmp LOG=emp_export.log TABLES=EMPLOYEES# 导出表结构(不包含数据)
exp hr/password@orcl FILE=structure.dmp LOG=structure.log TABLES=EMPLOYEES ROWS=N

3.2.2 Import导入示例

# 导入dump文件
imp system/password@orcl FILE=hr_user.dmp LOG=hr_import.log FROMUSER=HR TOUSER=HR_NEW# 只导入表结构
imp system/password@orcl FILE=hr_user.dmp LOG=structure_import.log ROWS=N# 忽略创建错误继续导入
imp system/password@orcl FILE=hr_user.dmp LOG=hr_import.log IGNORE=Y

4. 数据恢复策略

4.1 恢复场景分类

不同的故障需要不同的恢复策略:

Oracle恢复场景
完全恢复
不完全恢复
实例恢复
介质恢复
基于时间恢复
基于SCN恢复
基于日志序列恢复
实例异常关闭
自动恢复
数据文件损坏
需要备份恢复
恢复到指定时间点
恢复到指定SCN
恢复到指定日志

4.2 使用RMAN进行恢复

4.2.1 完整数据库恢复

-- 完整数据库恢复(数据库关闭状态)
RMAN> STARTUP MOUNT;
RMAN> RESTORE DATABASE;
RMAN> RECOVER DATABASE;
RMAN> ALTER DATABASE OPEN;-- 检查恢复后的数据库
RMAN> LIST BACKUP SUMMARY;
RMAN> REPORT SCHEMA;

4.2.2 单个数据文件恢复

-- 在线恢复数据文件(数据库开启状态)
RMAN> SQL "ALTER TABLESPACE USERS OFFLINE IMMEDIATE";
RMAN> RESTORE DATAFILE '/u01/oradata/ORCL/users01.dbf';
RMAN> RECOVER DATAFILE '/u01/oradata/ORCL/users01.dbf';
RMAN> SQL "ALTER TABLESPACE USERS ONLINE";-- 离线恢复数据文件
RMAN> SHUTDOWN IMMEDIATE;
RMAN> STARTUP MOUNT;
RMAN> RESTORE DATAFILE 4;
RMAN> RECOVER DATAFILE 4;
RMAN> ALTER DATABASE OPEN;

4.2.3 基于时间点的恢复

-- 恢复到指定时间点
RMAN> STARTUP MOUNT;
RMAN> RUN {SET UNTIL TIME "TO_DATE('2024-12-01 14:30:00','YYYY-MM-DD HH24:MI:SS')";RESTORE DATABASE;RECOVER DATABASE;
}
RMAN> ALTER DATABASE OPEN RESETLOGS;-- 恢复到指定SCN
RMAN> RUN {SET UNTIL SCN 1000000;RESTORE DATABASE;RECOVER DATABASE;
}
RMAN> ALTER DATABASE OPEN RESETLOGS;

4.2.4 表空间时间点恢复(TSPITR)

-- 执行表空间时间点恢复
RMAN> RECOVER TABLESPACE USERS UNTIL TIME "TO_DATE('2024-12-01 10:00:00','YYYY-MM-DD HH24:MI:SS')"AUXILIARY DESTINATION '/tmp/aux_dest';

4.3 控制文件恢复

4.3.1 从自动备份恢复控制文件

-- 启动到nomount状态
RMAN> STARTUP NOMOUNT;-- 恢复控制文件
RMAN> RESTORE CONTROLFILE FROM AUTOBACKUP;-- 挂载数据库
RMAN> ALTER DATABASE MOUNT;-- 恢复数据库
RMAN> RECOVER DATABASE;-- 打开数据库(可能需要resetlogs)
RMAN> ALTER DATABASE OPEN RESETLOGS;

4.3.2 从指定备份恢复控制文件

-- 从指定备份片恢复
RMAN> RESTORE CONTROLFILE FROM '/backup/rman/control_c-1234567890-20241201-00';-- 从最新备份恢复
RMAN> RESTORE CONTROLFILE FROM TAG 'weekly_backup';

5. 高级备份恢复技术

5.1 闪回技术

Oracle的闪回技术提供了多种数据恢复选项,无需传统的备份恢复过程。

5.1.1 闪回查询

-- 查看表在指定时间点的数据
SELECT * FROM employees 
AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '2' HOUR);-- 基于SCN的闪回查询
SELECT * FROM employees AS OF SCN 1000000;-- 查看数据变化历史
SELECT employee_id, first_name, last_name, VERSIONS_STARTTIME, VERSIONS_ENDTIME,VERSIONS_OPERATION
FROM employees 
VERSIONS BETWEEN TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' DAY) AND SYSTIMESTAMP
WHERE employee_id = 100;

5.1.2 闪回表

-- 启用表的行移动功能
ALTER TABLE employees ENABLE ROW MOVEMENT;-- 闪回表到指定时间点
FLASHBACK TABLE employees TO TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' HOUR);-- 闪回表到指定SCN
FLASHBACK TABLE employees TO SCN 1000000;

5.1.3 闪回删除(回收站)

-- 查看回收站内容
SELECT object_name, original_name, type, ts_name, createtime, droptime 
FROM recyclebin;-- 恢复删除的表
FLASHBACK TABLE employees TO BEFORE DROP;-- 恢复删除的表并重命名
FLASHBACK TABLE employees TO BEFORE DROP RENAME TO employees_restored;-- 清空回收站
PURGE RECYCLEBIN;

5.1.4 闪回数据库

-- 启用闪回数据库
ALTER DATABASE FLASHBACK ON;-- 设置闪回恢复区大小
ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE = 10G;-- 执行数据库闪回
STARTUP MOUNT;
FLASHBACK DATABASE TO TIMESTAMP (SYSTIMESTAMP - INTERVAL '2' HOUR);
ALTER DATABASE OPEN RESETLOGS;

5.2 Oracle Data Guard

Data Guard提供了高可用性和灾难恢复解决方案。

5.2.1 Data Guard架构

主数据库
Primary
备用数据库
Standby
在线事务处理
生成归档日志
日志传输
Log Transport
日志应用
Log Apply
数据同步
灾难恢复
读取负载均衡

5.2.2 创建物理备用数据库

-- 在主数据库上准备
ALTER DATABASE FORCE LOGGING;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 4 '/path/to/redo04.log' SIZE 100M;
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=standby_db ASYNC VALID_FOR=(ONLINE_LOGFILE,PRIMARY_ROLE) DB_UNIQUE_NAME=standby_db';-- 备份主数据库用于备用库
RMAN> BACKUP DATABASE PLUS ARCHIVELOG;-- 在备用数据库上恢复
RMAN> RESTORE DATABASE;
RMAN> RECOVER DATABASE;-- 启动备用数据库
STARTUP MOUNT;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

5.3 零数据丢失恢复设备(ZDLRA)

这是Oracle云端的备份服务,提供接近零的数据丢失保护。

-- 配置ZDLRA连接
CONFIGURE CHANNEL DEVICE TYPE 'SBT_TAPE' PARMS 'SBT_LIBRARY=/opt/oracle/backup/lib/libra.so, ENV=(ZDLRA_SID=zdlra_db)';-- 备份到ZDLRA
RMAN> BACKUP DATABASE TO DESTINATION 'ZDLRA';-- 从ZDLRA恢复
RMAN> RESTORE DATABASE FROM DESTINATION 'ZDLRA';

6. 备份恢复最佳实践

6.1 备份策略设计原则

一个好的备份策略应该考虑以下因素:

备份策略设计
业务需求分析
技术实现
成本控制
RTO恢复时间目标
RPO恢复点目标
业务重要性
备份频率
备份类型
存储方式
存储成本
网络带宽
人力成本
备份方案
实施部署
监控维护

6.2 3-2-1备份规则

这是业界公认的备份最佳实践:

  • 3份数据拷贝:1份生产数据 + 2份备份
  • 2种不同媒介:本地磁盘 + 远程存储
  • 1份异地备份:防范灾难性事件

6.2.1 实现3-2-1规则的脚本

#!/bin/bash
# 实现3-2-1备份规则的综合脚本# 配置参数
LOCAL_BACKUP="/backup/local"
REMOTE_BACKUP="/backup/remote"
CLOUD_BACKUP="s3://mybucket/oracle-backup"
ORACLE_SID="ORCL"# 本地RMAN备份
echo "开始本地RMAN备份..."
rman target / << EOF
RUN {ALLOCATE CHANNEL c1 DEVICE TYPE DISK FORMAT '$LOCAL_BACKUP/rman_%U';BACKUP AS COMPRESSED BACKUPSET DATABASE PLUS ARCHIVELOG;BACKUP CURRENT CONTROLFILE FORMAT '$LOCAL_BACKUP/control_%U';RELEASE CHANNEL c1;
}
EOF# 远程备份(使用rsync)
echo "开始远程同步备份..."
rsync -avz --delete $LOCAL_BACKUP/ backup-server:$REMOTE_BACKUP/# 云端备份(使用aws cli)
echo "开始云端备份..."
aws s3 sync $LOCAL_BACKUP $CLOUD_BACKUP --delete# 清理过期备份
echo "清理过期备份..."
rman target / << EOF
DELETE NOPROMPT OBSOLETE;
DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';
EOFecho "3-2-1备份完成 - $(date)"

结语
感谢您的阅读!期待您的一键三连!欢迎指正!

在这里插入图片描述


http://www.hkcw.cn/article/GokCdvBdLv.shtml

相关文章

使用BERT/BiLSTM + CRF 模型进行NER进展记录~

使用代码处理数据集&#xff0c;发现了一些问题&#xff0c;以及解决办法~ 下载了一组数据集&#xff0c;数据存放在CSV中&#xff0c;GBK格式。如下&#xff1a; 首先对每一列直接进行NER抽取&#xff0c;结果非常不好&#xff1a; 几乎是乱抽取的&#xff0c;解决办法是自己创…

18. Qt系统相关:多线程

一、概述 在Qt中&#xff0c;使用QThread类对系统线程进行了封装。QThread代表一个在应用程序中可独立控制的线程&#xff0c;也可以和进程中的其他线程共享数据。 二、QThread常用API 三、QThread使用 自定义一个类&#xff0c;继承自QThread&#xff0c;并且只有一个线程处…

YOLOv7 辅助检测头与重参数化解析2025.6.1

YOLOv7 是目标检测领域的一个重要模型&#xff0c;其在速度和精度之间取得了较好的平衡。其中的**辅助检测头&#xff08;Auxiliary Head&#xff09;和重参数化&#xff08;Re-parameterization&#xff09;**是其核心创新点。以下是对这两个技术的详细解析&#xff1a; 一、辅…

CP4-OFDM模糊函数原理及仿真

文章目录 前言一、互补P4码序列二、barker-OFDM 信号1、OFDM 信号表达式2、模糊函数表达式 三、MATLAB 仿真1、MATLAB 核心源码2、仿真结果①、CP4-OFDM 模糊函数②、CP4-OFDM 距离分辨率③、CP4-OFDM 速度分辨率④、CP4-OFDM 等高线图 四、资源自取 前言 本文进行 CP4-OFDM 的…

【C语言预处理详解(上)】--预定义符号,#define定义常量,#define定义宏,带有副作用的宏参数,宏替换的规则,宏和函数的对比

目录 一.预定义符号 二.#define定义常量 三.#define定义宏 3.1--定义宏的方法和注意事项 3.2--带有副作用的宏参数 3.3--宏替换的规则 四.宏与函数的对比 &#x1f525;个人主页&#xff1a;草莓熊Lotso的个人主页 &#x1f3ac;作者简介&#xff1a;C研发方向学习者 &a…

CppCon 2014 学习:C++ Memory Model Meets High-Update-Rate Data Structures

这段内容是对一个主题的概览&#xff08;Overview&#xff09;&#xff0c;涉及并行更新的问题&#xff0c;特别是“Issaquah Challenge”这个具体案例。详细解读如下&#xff1a; Overview&#xff08;概览&#xff09; The Issaquah Challenge 这是一个特定的挑战或问题&am…

如何用利用deepseek的API能力来搭建属于自己的智能体-优雅草卓伊凡

如何用利用deepseek的API能力来搭建属于自己的智能体-优雅草卓伊凡 上一篇文章我们已经介绍了智能体和大模型AI的区别&#xff0c;现在我们开始搭建自己的智能体进行工作 1. 了解 DeepSeek 提供的 AI 能力 DeepSeek 提供强大的 大语言模型&#xff08;LLM&#xff09;&#x…

智能制造之精读——RPA制造行业常见场景【附全文阅读】

RPA 在制造行业应用广泛&#xff0c;为企业带来显著价值&#xff0c;是极具潜力的智能化解决方案。它能节省成本&#xff0c;降低人力与管理成本&#xff1b;提升运营效率&#xff0c;减少人机交互损耗&#xff1b;提高质量&#xff0c;保障流程准确性&#xff1b;还能增强合规…

【2025.06】jupyter notebook 7+ 新手安装、配置、扩展应用(windows篇)

本文目录 前述一、安装二、配置2.1 jupyter_notebook_config.py生成配置文件2.2 服务器与网络设置a. 修改端口号b. 允许远程访问c. 设置工作目录 2.3 安全与认证a. 禁用密码登录&#xff08;仅限本地安全环境&#xff09;b. 设置登录密码c. 启用SSL加密&#xff08;HTTPS&#…

ASP.NET Core SignalR 身份认证集成指南(Identity + JWT)

文章目录 前言一、完整解决方案架构二、实现步骤1.配置 Identity 和 JWT 认证2. SignalR JWT配置3.SignalR Hub 集成认证和授权4.控制器5.客户端集成 (JavaScript)6.配置 appsettings.json 三、认证流程详解1.用户登录&#xff1a;2.SignalR 连接&#xff1a;3.JWT 验证&#x…

Redis最佳实践——性能优化技巧之数据结构选择

Redis在电商应用中的数据结构选择与性能优化技巧 一、电商核心场景与数据结构选型矩阵 应用场景推荐数据结构内存占用读写复杂度典型操作商品详情缓存Hash低O(1)HGETALL, HMSET购物车管理Hash中O(1)HINCRBY, HDEL用户会话管理Hash低O(1)HSETEX, HGET商品分类目录Sorted Set高O…

【Tauri2】049——upload

前言 这篇就看看一个简单地插件——upload Upload | Taurihttps://tauri.app/plugin/upload/upload的英文意思是“上传&#xff08;程序或信息&#xff09;”。 看来是用来上传文件的。 支持移动端 正文 安装 pnpm tauri add upload 在前后端都会安装&#xff0c;即 .plug…

《深度解构现代云原生微服务架构的七大支柱》

☁️《深度解构现代云原生微服务架构的七大支柱》 一线架构师实战总结&#xff0c;系统性拆解现代微服务架构中最核心的 7 大支柱模块&#xff0c;涵盖通信协议、容器编排、服务网格、弹性伸缩、安全治理、可观测性、CI/CD 等。文内附架构图、实操路径与真实案例&#xff0c;适…

ADAS概述

一、ADAS的概念 1.1 ADAS功能概述、架构方案、控制器、传感器 核心概念&#xff1a;ADAS(Advanced Driving Assistance System)是高级驾驶辅助系统的总称&#xff0c;包含三大类功能&#xff1a; 舒适体验类&#xff1a;如自适应巡航(ACC)、高速公路辅助(HWA)、车道居中控制&…

深入探讨redis:万字讲解集群

什么是集群 广义的集群&#xff1a;多个机器&#xff0c;构成了分布式系统&#xff0c;就可以称为“集群”。 狭义的集群&#xff1a;redis提供的集群模式&#xff0c;这个集群模式之下&#xff0c;主要解决的是存储空间不足的问题(拓展存储空间) 随着数据量的增多一台机器的…

一键开关机电路分析

左边电源9V为输入电源&#xff0c;中间有一个LDO&#xff0c;输出5V给右侧的芯片供电。 Q1是PNP三极管&#xff0c;Q2和Q3是NPN三极管。 初始状态下&#xff0c;按键断开&#xff0c;Q3截止&#xff0c;故Q1的基极为高电平&#xff0c;电压为9V&#xff0c;be间没有电流流过&am…

输入ifconfig,发现ens33不见了,无法连接至虚拟机

输入ifconfig&#xff0c;发现ens33不见了&#xff0c;无法连接至虚拟机 输入ifconfig&#xff0c;发现ens33不见了&#xff0c;无法连接至虚拟机 输入ifconfig&#xff0c;发现ens33不见了&#xff0c;无法连接至虚拟机 当输入ifconfig&#xff0c;发现少了ens33&#xff0c;无…

c++学习值---模版

目录 一、函数模板&#xff1a; 1、基本定义格式&#xff1a; 2、模版函数的优先匹配原则&#xff1a; 二、类模板&#xff1a; 1、基本定义格式&#xff1a; 2、类模版的优先匹配原则&#xff08;有坑哦&#xff09;&#xff1a; 3、缺省值的设置&#xff1a; 4、ty…

day62—DFS—太平洋大西洋水流问题(LeetCode-417)

题目描述 有一个 m n 的矩形岛屿&#xff0c;与 太平洋 和 大西洋 相邻。 “太平洋” 处于大陆的左边界和上边界&#xff0c;而 “大西洋” 处于大陆的右边界和下边界。 这个岛被分割成一个由若干方形单元格组成的网格。给定一个 m x n 的整数矩阵 heights &#xff0c; hei…

LeetCode第240题_搜索二维矩阵II

LeetCode 第240题&#xff1a;搜索二维矩阵 II 题目描述 编写一个高效的算法来搜索 m n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 难度 中等 题目链接 点击在LeetCode中查看题目…