OceanBase v4.2 特性解析:如何实现表级恢复

背景

在某些情况下,你可能会因为误操作而遇到表数据损坏或误删表的情况。为了能在事后将表数据恢复到某个特定时间点,在OceanBase尚未有表级恢复功能之前,你需要进行以下步骤:

  1. 利用OceanBase提供的物理恢复工具,您可以在一个新租户中完整恢复该租户至数据损坏之前的某个时间点;
  2. 借助OceanBase的导出工具,将恢复后租户中的表数据导出至csv文件;
  3. 通过OceanBase的导入工具,将导出的表数据导入至目标租户中。

是不是感觉太麻烦了?为了方便用户,针对部分表数据损坏需要恢复的这种场景,OceanBase的表级恢复功能应运而生。通过表级恢复功能,你可以直接在目标集群中告诉OceanBase,你要用哪个备份数据,将哪些表、哪些库,在哪个租户下,恢复到哪个时间点。甚至这些表或者库的备份数据也可以并不是由目标租户备份的,当然,这并不是没有限制的,你还是需要遵守一定的条件。

技术原理

OceanBase表级恢复功能整体数据流动如下图。第一步先在辅助租户中将数据恢复到指定的时间点;第二步将需要恢复的表从辅助租户导入到目标租户;最后清理辅助租户。辅助租户在这里扮演的角色类似于Oracle使用的auxiliary instance,是OceanBase表级恢复过程中需要消耗的额外的计算存储资源。

1717127949

语法说明

发起表级恢复

ALTER SYSTEM RECOVER TABLE table_name_list TO TENANT dest_tenant_name FROM uri UNTIL [TIME|SCN]=['time'|scn] WITH 'restore_option'REMAP TABLE remap_table_name_listREMAP TABLEGROUP remap_tablegroup_listREMAP TABLESPACE remap_tablespace_list

table_name_list

必选参数。需要恢复的表名,格式形如"table1,table2,...",多个table之间使用逗号','来分隔。table格式如"database_name.table_name",需要指定table的database name。database_name/table_name的英文字母持久化到内部表中,以及比较时候基于租户、name_case_mode判断是否大小写敏感。

  • 对Oracle模式而言,database_name实际上是user_name,database_name/table_name是大小写不敏感的,英文字母按照大写持久化到内部表中。
  • 对MySQL模式而言,database_name就是table所属的database名字,database_name/table_name是否大小写敏感看租户的name_case_mode(一般是大小写不敏感),英文字母按照用户输入持久化到内部表中。
  • database_name/table_name可能含有特殊字符,含特殊字符的database_name/table_name需要放在反引号(``)内。parser会正确地处理特殊字符,将序列化后table_name_list持久化到内部表中,使用时进行反序列化,避免解析特殊字符。
  • 若要恢复一个database下的所有表,table_name处填写'*'。
  • 若要恢复租户下所有的表,database_name/table_name处均填写'*'。

dest_tenant_name

必选参数。将表恢复到的目标租户,仅支持指定用户租户,必须是一个活的租户

uri

必选参数。uri传入恢复需要使用的数据备份和归档日志的路径,但若数据备份是通过PLUS ARCHIVELOG方式发起的,只需要填一个路径即可,否则需要分别输入数据备份和日志归档2个路径,例如:'file:///backup/archive, file:///backup/data',其中file:///backup/archive是归档日志的路径,file:///backup/data是数据备份的路径。

TIME='time' or SCN=scn 

可选参数。指定表恢复的时间点,恢复到该位点为止,且包括该位点。OceanBase提供2种指定方式,分别是TIME和SCN。例如,恢复到'2023-06-01 12:00:00',可以用UNTIL TIME='2023-06-01 12:00:00',或者UNTIL SCN=1685592000000000000

若不指定UNTIL,默认恢复到可以恢复的最新的时间点。

restore_option

必选参数。支持指定 pool_listlocalityprimary_zonekms_encrypt, 其中 pool_list 为必选项,其余为可选项。

kms_encrypt 的取值范围如下:

  • true:表示源租户为加密租户,需要恢复密钥信息。
  • false:表示源租户不是加密租户,不需要恢复密钥信息。如果不指定,默认为 false

remap_table_name_list

可选参数。REMAP语句用于table name重命名,既可以不改变database,也可以重命名到其他database。若只需要remap部分table,REMAP_TABLE_NAME_LIST只需要包含这部分table就可以了。格式如下:

// database不变,表名从Student改成Student2
REMAP TABLE School.Student:Student2// 表名不变,database从School改成College
REMAP TABLE School.Student:College.Student// database从School改成College,表名也从Student改成Student2
REMAP TABLE School.Student:College.Student2// School下的所有表恢复到College库
REMAP TABLE School.`*:College.`*`

该例中,'Student'表将会被重命名成'Student2','Student2'前面不需要指定'School';'Score'表不需要重命名,因此不需要在REMAP命令中指定。源对象与重命名对象之间采用冒号连接。

remap_tablegroup_list

可选参数。tablegroup是OceanBase独有的,若table有绑定tablegroup,就会在目标租户创建表的时候默认使用同名的tablegroup,若不存在,则会恢复失败,可以remap到其他tablegroup。例如,假设School数据库下的所有表都放在同一个tablegroup tg1下,需要恢复到目标租户的newtg1 tablegroup下:

// tablegroup tg1下的表都恢复到目标租户的newtg1 tablegroup下
REMAP TABLEGROUP tg1:newtg1

源对象与重命名对象之间采用冒号连接。

remap_tablespace_list

可选参数。tablespace在OceanBase中是一个逻辑单元,为了兼容Oracle而设计的,目前的作用就是为了支持数据加密的。若table有绑定tablespace,也会在目标租户创建表的时候默认使用同名的tablespace,若不存在,则会恢复失败,同样也可以remap到其他tablespace。例如,假设School数据库下的所有表都放在同一个tablespace ts1下,需要恢复到目标租户的newts1 tablespace下:

// tablespace ts1下的表都恢复到目标租户的newts1 tablespace下
REMAP TABLESPACE ts1:newts1

源对象与重命名对象之间采用冒号连接。

取消表级恢复

发起表级恢复后,你也可以使用如下的命令来取消目标租户正在进行的表级恢复任务。需要注意的是,已经恢复的表无法取消。

ALTER SYSTEM CANCEL RECOVER TABLE dest_tenant_name

dest_tenant_name

正在执行表级恢复的目标租户名。

Related Schema恢复说明

Schema是否恢复说明
Database目标租户中对应的database必须要存在,否则恢复失败。如果不使用REMAP命令,例如,备份的表属于database 'HR',表级恢复也会将表放到目标租户的'HR' database下。
Tablespace目标租户中对应的tablespace必须要存在,否则恢复失败。如果不使用REMAP命令,例如,备份的表属于tablespace 'ts',表级恢复也会将表放到目标租户的'ts' tablespace下。
Tablegroup目标租户中对应的tablegroup必须要存在,否则恢复失败。如果不使用REMAP命令,例如,备份的表属于tablegroup 'tg',表级恢复也会将表放到目标租户的'tg' tablegroup下。
Table仅支持用户表,不支持系统表、临时表。
Partition
Tablet
Column
约束支持恢复的约束有:NOT NULL约束UNIQUE KEY约束PRIMARY KEY约束CHECK约束若约束的名字是用户自定义的,并且在目标租户下已存在,则不恢复。
外键
视图
局部索引
全局索引
自增列
无主键表
统计信息
触发器
函数、存储过程、包
同义词
空间索引坐标系不恢复,并且若坐标系在目标租户下不存在,则不恢复。
LOB

使用限制

1源租户和目标租户需要具有相同的compatibility_mode,例如都是MySQL模式租户,或者都是Oracle模式租户。
2MySQL模式需要保证源租户和目标租户的name case mode相同
3分区恢复不支持
4CDC等下游无法同步表级恢复创建的表的数据
5表名需要和系统实际存储的表名一致,例如oracle模式下创建表test时,实际创建的表是TEST,按表恢复也必须要指定TEST,否则会报表不存在错误。

使用示例

假设你的租户名是OBT,数据库名是TEST,设置的数据备份路径是'file:///data/backup/data',日志归档的路径是'file:///data/backup/archive',并且日志归档功能已经打开,也做了全量数据备份。

准备数据

# 建表
CREATE TABLE CITY (ID NUMBER PRIMARY KEY, NAME VARCHAR2(200) NOT NULL);CREATE TABLE STUDENT (ID NUMBER, NAME VARCHAR2(100) NOT NULL, DRIVER_ID VARCHAR2(50) UNIQUE, AGE NUMBER CHECK(AGE>20), CITY_ID NUMBER, CONSTRAINT PK_STU_ID PRIMARY KEY (ID),  CONSTRAINT STU_FK FOREIGN KEY(CITY_ID) REFERENCES CITY (ID)) TABLESPACE TS1;CREATE INDEX STU_NAME_IDX ON STUDENT(NAME);# 插入数据
INSERT INTO CITY VALUES (1, 'SHANGHAI');
INSERT INTO CITY VALUES (2, 'HANGZHOU');
INSERT INTO CITY VALUES (3, 'BEIJING');
INSERT INTO CITY VALUES (4, 'SHENZHEN');INSERT INTO STUDENT VALUES (1, 'ALLEN', '1234567890123', 21,1);
INSERT INTO STUDENT VALUES (2, 'SAM', '2234567890123', 22,2);
INSERT INTO STUDENT VALUES (3, 'BILLY', '3234567890123',23,3);commit;# 收集统计信息
CALL DBMS_STATS.GATHER_TABLE_STATS('TEST', 'STUDENT', METHOD_OPT=>'FOR ALL COLUMNS SIZE 1');# 查询当前系统时间
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') CURRENT_TIME FROM DUAL;
+---------------------+
| CURRENT_TIME        |
+---------------------+
| 2023-08-21 19:47:20 |
+---------------------+# 继续插入数据
INSERT INTO STUDENT VALUES (4, 'CARL', '4234567890123',24,4);
commit;# 查询STUDENT表索引
SELECT INDEX_NAME FROM USER_INDEXES WHERE TABLE_NAME='STUDENT';
+-----------------------------------+
| INDEX_NAME                        |
+-----------------------------------+
| STUDENT_OBUNIQUE_1692618375553934 |
| STU_NAME_IDX                      |
| PK_STU_ID                         |
+-----------------------------------+# 查询STUDENT表约束
SELECT CONSTRAINT_NAME, CONSTRAINT_TYPE, TABLE_NAME, STATUS, INDEX_NAME FROM DBA_CONSTRAINTS WHERE TABLE_NAME='STUDENT';
+------------------------------------+-----------------+------------+---------+-----------------------------------+
| CONSTRAINT_NAME                    | CONSTRAINT_TYPE | TABLE_NAME | STATUS  | INDEX_NAME                        |
+------------------------------------+-----------------+------------+---------+-----------------------------------+
| STUDENT_OBUNIQUE_1692618375553934  | U               | STUDENT    | ENABLED | STUDENT_OBUNIQUE_1692618375553934 |
| STU_FK                             | R               | STUDENT    | ENABLED | NULL                              |
| STUDENT_OBNOTNULL_1692618375553746 | C               | STUDENT    | ENABLED | NULL                              |
| STUDENT_OBCHECK_1692618375553765   | C               | STUDENT    | ENABLED | NULL                              |
| PK_STU_ID                          | P               | STUDENT    | ENABLED | PK_STU_ID                         |
+------------------------------------+-----------------+------------+---------+-----------------------------------+# 查询统计信息
SELECT TABLE_NAME, NUM_ROWS FROM DBA_TABLES WHERE TABLE_NAME='STUDENT';
+------------+----------+
| TABLE_NAME | NUM_ROWS |
+------------+----------+
| STUDENT    |        3 |
+------------+----------+# 模拟事故,删除STUDENT
DROP TABLE STUDENT;

现在要将STUDENT表恢复到'2023-08-21 19:47:20'

创建资源池

在sys租户下创建表级恢复过程中辅助租户需要的resource pool资源,本例中创建一个4c4g规格的资源池。

# 创建资源单元
CREATE RESOURCE UNIT RECOVER_4C4G MAX_CPU 4, MEMORY_SIZE = '4G', MAX_IOPS 1024, MIN_IOPS=1024;# 创建资源池
CREATE RESOURCE POOL RECOVER_TMP_POOL UNIT = 'RECOVER_4C4G', UNIT_NUM = 1, ZONE_LIST = ('z1','z2','z3');

发起表级恢复

在SYS租户下发起表级恢复命令,如下的命令中包含的信息有:

  1. 需要恢复的表的库名是TEST,表名是STUDENT
  2. 目标租户名是OBT
  3. 使用的数据备份路径是file:///data/backup/data,归档日志路径是file:///data/backup/archive
  4. 恢复到的时间点是'2023-08-21 19:47:20'
  5. 辅助租户使用的resource pool是RECOVER_TMP_POOL,primary zone是z1
  6. 该表STUDENT恢复到目标租户OBTTEST库中,并且重命名为STUDENT_RECOVER
ALTER SYSTEM RECOVER TABLE TEST.STUDENT TO TENANT OBT FROM 'file:///data/backup/data,file:///data/backup/archive' UNTIL TIME='2023-08-21 19:47:20' WITH 'pool_list=RECOVER_TMP_POOL&primary_zone=z1' REMAP TABLE TEST.STUDENT:STUDENT_RECOVER;

查看恢复进度

上述表级恢复命令执行成功后,你可以在OBT租户中通过DBA_OB_RECOVER_TABLE_JOBS视图查看恢复进度,STATUS列指明恢复阶段,RESTORE_AUX_TENANT表示正在恢复辅助租户。

SELECT * FROM DBA_OB_RECOVER_TABLE_JOBS\G
*************************** 1. row ***************************JOB_ID: 2INITIATOR_TENANT_ID: 1INITIATOR_JOB_ID: 2START_TIMESTAMP: 2023-08-21 19:54:25END_TIMESTAMP: 1970-01-01 08:00:00STATUS: RESTORE_AUX_TENANTAUX_TENANT_NAME: AUX_RECOVER$1692618864733548TARGET_TENANT_NAME: OBTIMPORT_ALL: 0DB_LIST: NULLTABLE_LIST: `TEST`.`STUDENT`RESTORE_SCN: 1692618440000000000RESTORE_SCN_DISPLAY: 21-AUG-23 07.47.20.000000000 PMRESTORE_OPTION: pool_list=RECOVER_TMP_POOL&primary_zone=z1BACKUP_DEST: file:///data/backup/data,file:///data/backup/archiveBACKUP_SET_LIST: file:///data/backup/data/backup_set_1_fullBACKUP_PIECE_LIST: file:///data/backup/archive/piece_d1002r1p1BACKUP_PASSWD: NULLEXTERNAL_KMS_INFO: NULLREMAP_DB_LIST: NULLREMAP_TABLE_LIST: `TEST`.`STUDENT`:`TEST`.`STUDENT_RECOVER`
REMAP_TABLEGROUP_LIST: NULL
REMAP_TABLESPACE_LIST: NULLRESULT: SUCCEESSCOMMENT: NULLDESCRIPTION: NULL

查看恢复结果

等到DBA_OB_RECOVER_TABLE_JOBS视图中没有记录时,说明任务执行结束,查询DBA_OB_RECOVER_TABLE_JOB_HISTORY视图,可以看到任务执行结果。

# 任务执行成功
SELECT * FROM DBA_OB_RECOVER_TABLE_JOB_HISTORY\G
*************************** 1. row ***************************JOB_ID: 2INITIATOR_TENANT_ID: 1INITIATOR_JOB_ID: 2START_TIMESTAMP: 2023-08-21 19:54:25END_TIMESTAMP: 2023-08-21 19:57:33STATUS: COMPLETEDAUX_TENANT_NAME: AUX_RECOVER$1692618864733548TARGET_TENANT_NAME: OBTIMPORT_ALL: 0DB_LIST: NULLTABLE_LIST: `TEST`.`STUDENT`RESTORE_SCN: 1692618440000000000RESTORE_SCN_DISPLAY: 21-AUG-23 07.47.20.000000000 PMRESTORE_OPTION: pool_list=RECOVER_TMP_POOL&primary_zone=z1BACKUP_DEST: file:///data/backup/data,file:///data/backup/archiveBACKUP_SET_LIST: file:///data/backup/data/backup_set_1_fullBACKUP_PIECE_LIST: file:///data/backup/archive/piece_d1002r1p1BACKUP_PASSWD: NULLEXTERNAL_KMS_INFO: NULLREMAP_DB_LIST: NULLREMAP_TABLE_LIST: `TEST`.`STUDENT`:`TEST`.`STUDENT_RECOVER`
REMAP_TABLEGROUP_LIST: NULL
REMAP_TABLESPACE_LIST: NULLRESULT: SUCCEESSCOMMENT: NULLDESCRIPTION: NULL# 3条数据被恢复
SELECT * FROM STUDENT_RECOVER;
+----+-------+---------------+------+---------+
| ID | NAME  | DRIVER_ID     | AGE  | CITY_ID |
+----+-------+---------------+------+---------+
|  1 | ALLEN | 1234567890123 |   21 |       1 |
|  2 | SAM   | 2234567890123 |   22 |       2 |
|  3 | BILLY | 3234567890123 |   23 |       3 |
+----+-------+---------------+------+---------+# 索引被恢复
SELECT INDEX_NAME FROM USER_INDEXES WHERE TABLE_NAME='STUDENT_RECOVER';
+-------------------------------------------+
| INDEX_NAME                                |
+-------------------------------------------+
| STUDENT_RECOVER_OBUNIQUE_1692618993696799 |
| STU_NAME_IDX                              |
| PK_STU_ID                                 |
+-------------------------------------------+# 约束被恢复,外键没有恢复
SELECT CONSTRAINT_NAME, CONSTRAINT_TYPE, TABLE_NAME, STATUS, INDEX_NAME FROM DBA_CONSTRAINTS WHERE TABLE_NAME='STUDENT_RECOVER';
+--------------------------------------------+-----------------+-----------------+---------+-------------------------------------------+
| CONSTRAINT_NAME                            | CONSTRAINT_TYPE | TABLE_NAME      | STATUS  | INDEX_NAME                                |
+--------------------------------------------+-----------------+-----------------+---------+-------------------------------------------+
| STUDENT_RECOVER_OBUNIQUE_1692618993696799  | U               | STUDENT_RECOVER | ENABLED | STUDENT_RECOVER_OBUNIQUE_1692618993696799 |
| PK_STU_ID                                  | P               | STUDENT_RECOVER | ENABLED | PK_STU_ID                                 |
| STUDENT_RECOVER_OBNOTNULL_1692618993672003 | C               | STUDENT_RECOVER | ENABLED | NULL                                      |
| STUDENT_RECOVER_OBCHECK_1692618993672009   | C               | STUDENT_RECOVER | ENABLED | NULL                                      |
+--------------------------------------------+-----------------+-----------------+---------+-------------------------------------------+# 统计信息被恢复
SELECT TABLE_NAME, NUM_ROWS FROM DBA_TABLES WHERE TABLE_NAME='STUDENT_RECOVER';
+------------+----------+
| TABLE_NAME | NUM_ROWS |
+------------+----------+
| STUDENT    |        3 |
+------------+----------+

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

昇思25天学习打卡营第23天|CV-ResNet50迁移学习

打卡 目录 打卡 迁移学习 实战练习 数据准备 数据处理 数据处理函数 数据处理流程 数据可视化 训练模型 构建Resnet50网络 固定特征进行训练 network 的输出 训练和评估 可视化模型预测 掌握迁移学习的重点在于,了解你的模型结构,通过冻结…

若依框架 : 生成代码

6.生成代码 6.1.配置生成设置 ruoyi-generator -> src -> main -> resources -> generator.yml 由于 案例中 表都有 前缀 为 tta_ , 这里设置去掉 6.2.生成代码 6.2.1.导入数据库中的表 6.2.2.修改设置 6.2.2.1.设置生成信息 点击 编辑 -> 生成信息 特别…

嵌入式Linux学习: 设备树实验

设备树(DeviceTree)是一种硬件描述机制,用于在嵌入式系统和操作系统中描述硬件设备的特性、连接关系和配置信息。它提供了一种与平台无关的方式来描述硬件,使得内核与硬件之间的耦合度降低,提高了系统的可移植性和可维…

乡下人的悲歌-感悟

这是一个最好的时代,也是一个最。。。的时代 前言 最近《乡下人的悲歌》一书在朋友圈火了,作为一个喜欢探究,观察生活的人,我想去探究这本书为什么突然爆火,以及作者给我们传达的什么观点,分享了那些&#…

Spring MVC 应用分层

1. 类名使⽤⼤驼峰⻛格,但以下情形例外:DO/BO/DTO/VO/AO 2. ⽅法名、参数名、成员变量、局部变量统⼀使⽤⼩驼峰⻛格 3. 包名统⼀使⽤⼩写,点分隔符之间有且仅有⼀个⾃然语义的英语单词. 常⻅命名命名⻛格介绍 ⼤驼峰: 所有单词⾸字⺟…

笔试编程算法题笔记(三 C++代码)

1.kotori和n皇后 题意简单来说就是,在一个无穷大的棋盘上,不断插入k个皇后,皇后们如果在 同一行,同一列,在一个45主对角线 在一个135副对角线上,就可以互相攻击。 我们需要判断在第i个皇后插入后&#xff…

【STM32本科毕业设计】基于STM32的多功能MP3播放器设计

目录 一. 概述二. 系统硬件设计2.1 整体设计思路2.2 硬件器件的选择2.2.1 MP3解码芯片选择 2.2.2 收音机芯片选择2.2.3 温度传感器选择2.2.4 彩灯驱动芯片选择2.2.5 音效处理芯片选择2.2.6 EEPROM芯片选择2.2.7 功率放大芯片选择2.2.8 电源芯片选择2.2.9 人机交互设备选择 2.3 …

map_set(红黑树封装)

1.map和set的整体大致架构 1.map和set的整体 平时我们使用map和set时,头文件是map和set的头文件 set头文件: map头文件 而stl_tree.h代表的就是红黑树 1.2 map和set的大致架构 map和set在源代码基本结构 map的大致特点: set的大致特点&am…

Linux gcc/g++ _ make/makefile

文章目录 库gcc/g程序编译过程链接动态链接静态链接 make _ makefile 库 一、 什么是库? 库是程序代码的集合,是共享程序代码的一种方式。根据源代码的公开情况,库可以分为两种类型: 开源库,公开源代码,能…

SPICE | 常见电路SPICE模型总结

Ref. 1. CMOS VLSI Design: A Circuits and Systems Perspective 目录 0 基础 1 反相器 inverter 2 缓存器 buffer 3 NAND 4 NOR 5 传输门 Transmission gate 6 三态反相器 Tristate Inverter 7 选择器 Multiplexers 8 D锁存器 D Latch 9 D触发器 D Flip-Flop 0 基础…

数模·微分方程

微分方程 核心概念 含导数的方程或方程组 通解和特解的区别:有初值条件的通解称作特解 解析解和数值解的:解析解是通过代数或解析方法得到的精确解。它通常以闭式表达式或公式的形式存在;数值解是通过数值方法(如迭代算法&#x…

了解Java虚拟机(JVM)

前言👀~ 上一章我们介绍网络原理相关的知识点,今天我们浅浅来了解一下java虚拟机JVM JVM( Java Virtual Machine ) JVM内存区域划分 方法区/元数据区(线程共享) 堆(线程共享) 虚…

数据结构——二叉树性质

性质1:在二叉树的第i层上至多有2^(i-1)个结点(i>1)。 这个性质很好记忆,观察一下图6-5-5。 第一层是根结点,只有一个,所以2^(1-1)2^01。 第二层有两个,2^(2-1)22。 第三层有四个,2^(3-1)2^24。 第四层有八个&am…

土地规划与水资源管理:和谐共生,共绘绿色发展的生态蓝图

在快速城市化与气候变化的双重挑战下,土地规划与水资源管理的协同成为了确保可持续发展的关键。本文旨在深入探讨如何将水资源管理融入土地规划的各个环节,以实现资源高效利用与环境的和谐共生。 一、水资源的现状与挑战 全球水资源分布不均&#xff0…

react-native从入门到实战系列教程一环境安装篇

充分阅读官网的环境配置指南,严格按照他的指导作业,不然你一直只能在web或沙箱环境下玩玩 极快的网络和科学上网,必备其中的一个较好的心理忍受能力,因为上面一点就可以让你放弃坚持不懈,努力尝试 成功效果 三大件 …

AI绘画;喂饭进阶!教你如何用Stable Diffusion生成高清建筑手工模型图,一篇文章搞懂什么是Lora模型和CKPT主模型!

前言 刚接触Stable Diffusion不久的你,是否有这样的疑问: Q1: Stable Diffusion中的主模型CKPT是什么? Q2: Stable Diffusion中的Lora模型又是什么? Q3: 在哪儿可以下载好用的AI绘图模型? Q4: Stable Diffusion 如…

Linux---01---安装VMware

一. 什么时Linux Linux 是一个开源的类 Unix 操作系统,Linux 是许多计算机硬件的底层操作系统,特别是服务器、嵌入式系统和个人电脑。它支持多种架构,包括 x86、x64、ARM 和 MIPS 等。Linux 因其稳定性、安全性、开源性以及广泛的社区支持而广受欢迎。 …

【Linux】文件系统|CHS寻址|LBA逻辑块|文件索引|inode|Date block|inodeBitmap|blockBitmap

前言 一个进程通过文件描述符标识一个打开的文件,进程拿着文件描述符可以在内核中找到目标文件进行读写等操作。这是打开的文件,而没有被打开的文件存储在磁盘中,是如何管理的?操作系统在偌大的磁盘中如何找到想要的文件并打开的…

【有哪些GPU算力租用平台值得推荐】

🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…

开放式耳机会成为未来的主流吗?开放式耳机推荐指南

开放式耳机是否会成为未来的主流,是一个值得探讨的问题。 从目前的市场趋势和技术发展来看,有一些因素支持开放式耳机可能成为主流。 一方面,人们对于健康和舒适的关注度不断提高。长时间佩戴传统耳机可能导致耳部不适,而开放式…