EXCHANGE PARTITION 方法处理(挽救)大型分区表中的块损坏的步骤

当在巨大的表分区块(例如 ORA-01578)中发现损坏时,并且我们没有备份(例如 RMAN、操作系统级别、导出或任何外部资源)来恢复损坏,我们仍然可以尝试挽救使用 10231 事件处理表中的剩余数据(由于跳过损坏的数据块,可能会导致一些数据丢失和不一致)。

实现此目的的一种方法是:

a) 创建救援表(使用 10231 事件)并从损坏的分区插入数据(使用 CTAS 或 INSERT INTO SELECT...):

b) 截断分区(使用 alter table <original_table> truncate partition <partition_name>) 或删除分区

c) 中的行 将数据从抢救表插入到截断的损坏分区(使用 INSERT INTO SELECT...)


在上述方法中,步骤 c) 将花费大量时间,具体取决于行数在分区中,即如果表分区包含大量行。

通过使用可与分区表一起使用的 EXCHANGE PARTITION 方法,我们可以显着减少上述步骤 c) 所花费的时间。

解决方案

步骤如下:

0) 当我们识别出损坏块的​​ file# 和 block# 后,确定损坏的表分区(例如,通过查看 ORA-01578 的alert.log):

 

SQL> 选择所有者、段名称、分区名称、段类型、表空间名称、相对 fno、文件 ID
FROM dba_extents
WHERE file_id = &corrupted_file#
AND &corrupted_block# BETWEEN block_id AND block_id +blocks - 1 ;


还有其他方法可以识别数据库中损坏的块:
 


Note 352907.1在数据库的所有数据文件上运行 DBV 的脚本

Note 472231.1如何识别 RMAN 报告的数据库中的所有损坏对象



1) 设置事件 10231 以跳过损坏的块:
 

SQL> alter session set events '10231 跟踪名称上下文永远,级别 10';



2) 使用表分区中的良好块数据创建抢救表:

Salvage_table ---> 抢救表名称

Table_name ---> 具有损坏的原始基表

Table_partition_name ---> 涉及的分区名称

 

SQL> create table scott.<Salvage_table> 表空间用户并行(度 4) as select * from scott.<table_name> 分区 (Table_partition_name) ;


如果填充上表也失败并出现块损坏消息(例如位图块上的 ORA-1578),我们可以使用其他方法,例如下面文章中的方法:
 

注意 422547.1从损坏的表中提取行,从 DBA_EXTENTS 创建 ROWID



3) (可选)验证,与原始表相比,抢救表中的计数是否合适,并包含损坏块的数量:
 

SQL> select count(*) from scott.<Salvage_table> ;

SQL> select count(*) from scott.<表名> 分区 (表分区名) ;



4) 用创建的挽救表交换损坏的分区。通过使用WITHOUT VALIDATION子句,交换会更快,因为它不会验证抢救表中的每一行是否正确映射到表分区(我们不担心它,因为抢救表是从同一分区创建的):
 

SQL> alter table scott.<table_name> 将分区 Tab​​le_partition_name 与表 scott.<salvage_table> 交换,无需验证;



5) 取消设置事件 10231 以确保我们在从交换分区中进行选择时不会忽略任何未被注意到的损坏块:
 

SQL> alter session set events '10231 跟踪名称上下文关闭';



6) (可选)验证损坏分区中的数据现在是否可访问且有效。其中一项验证是计算行数:
 

SQL> select count(*) from scott.<表名> 分区 (表分区名) ;



7) 删除​​临时抢救表,因为它现在包含与损坏的表分区交换的损坏块:
 

SQL> 删除表 scott.salvage_table purge ;



8) 识别UNUSABLE的非分区索引和索引分区:
 

--- 对于非分区索引

select a.owner index_owner, a.index_name
from dba_indexes a
where a.table_owner='SCOTT'
and a.table_name='<table_name>'
and a.partitioned='NO'
and a.status ='UNUSABLE'
order by a.owner, a.index_name ;

--- 对于索引分区,从 dba_indexes a、dba_ind_partitions b 中

选择 a.owner index_owner、a.index_name、b.partition_name、b.partition_position其中 a.owner=b.index_owner  和 a.index_name=b.index_name  和 a.table_owner= 'SCOTT'  和 a.table_name='<table_name>'  和 b.status='UNUSABLE'按 a.owner、a.index_name、b.partition_position 排序;






 



9) 重建步骤8)中确定的UNUSABLE非分区索引和索引分区:
 

SQL> alter index scott.<name> 在线重建 ;

SQL> alter index scott.<name> 重建分区 <Table_partition_name>;

当在巨大的表分区块(例如 ORA-01578)中发现损坏时,并且我们没有备份(例如 RMAN、操作系统级别、导出或任何外部资源)来恢复损坏,我们仍然可以尝试挽救使用 10231 事件处理表中的剩余数据(由于跳过损坏的数据块,可能会导致一些数据丢失和不一致)。

实现此目的的一种方法是:

a) 创建救援表(使用 10231 事件)并从损坏的分区插入数据(使用 CTAS 或 INSERT INTO SELECT...):

b) 截断分区(使用 alter table <original_table> truncate partition <partition_name>) 或删除分区

c) 中的行 将数据从抢救表插入到截断的损坏分区(使用 INSERT INTO SELECT...)


在上述方法中,步骤 c) 将花费大量时间,具体取决于行数在分区中,即如果表分区包含大量行。

通过使用可与分区表一起使用的 EXCHANGE PARTITION 方法,我们可以显着减少上述步骤 c) 所花费的时间。

解决方案

步骤如下:

0) 当我们识别出损坏块的​​ file# 和 block# 后,确定损坏的表分区(例如,通过查看 ORA-01578 的alert.log):

 

SQL> 选择所有者、段名称、分区名称、段类型、表空间名称、相对 fno、文件 ID
FROM dba_extents
WHERE file_id = &corrupted_file#
AND &corrupted_block# BETWEEN block_id AND block_id +blocks - 1 ;


还有其他方法可以识别数据库中损坏的块:
 


Note 352907.1在数据库的所有数据文件上运行 DBV 的脚本

Note 472231.1如何识别 RMAN 报告的数据库中的所有损坏对象



1) 设置事件 10231 以跳过损坏的块:
 

SQL> alter session set events '10231 跟踪名称上下文永远,级别 10';



2) 使用表分区中的良好块数据创建抢救表:

Salvage_table ---> 抢救表名称

Table_name ---> 具有损坏的原始基表

Table_partition_name ---> 涉及的分区名称

 

SQL> create table scott.<Salvage_table> 表空间用户并行(度 4) as select * from scott.<table_name> 分区 (Table_partition_name) ;


如果填充上表也失败并出现块损坏消息(例如位图块上的 ORA-1578),我们可以使用其他方法,例如下面文章中的方法:
 

注意 422547.1从损坏的表中提取行,从 DBA_EXTENTS 创建 ROWID



3) (可选)验证,与原始表相比,抢救表中的计数是否合适,并包含损坏块的数量:
 

SQL> select count(*) from scott.<Salvage_table> ;

SQL> select count(*) from scott.<表名> 分区 (表分区名) ;



4) 用创建的挽救表交换损坏的分区。通过使用WITHOUT VALIDATION子句,交换会更快,因为它不会验证抢救表中的每一行是否正确映射到表分区(我们不担心它,因为抢救表是从同一分区创建的):
 

SQL> alter table scott.<table_name> 将分区 Tab​​le_partition_name 与表 scott.<salvage_table> 交换,无需验证;



5) 取消设置事件 10231 以确保我们在从交换分区中进行选择时不会忽略任何未被注意到的损坏块:
 

SQL> alter session set events '10231 跟踪名称上下文关闭';



6) (可选)验证损坏分区中的数据现在是否可访问且有效。其中一项验证是计算行数:
 

SQL> select count(*) from scott.<表名> 分区 (表分区名) ;



7) 删除​​临时抢救表,因为它现在包含与损坏的表分区交换的损坏块:
 

SQL> 删除表 scott.salvage_table purge ;



8) 识别UNUSABLE的非分区索引和索引分区:
 

--- 对于非分区索引

select a.owner index_owner, a.index_name
from dba_indexes a
where a.table_owner='SCOTT'
and a.table_name='<table_name>'
and a.partitioned='NO'
and a.status ='UNUSABLE'
order by a.owner, a.index_name ;

--- 对于索引分区,从 dba_indexes a、dba_ind_partitions b 中

选择 a.owner index_owner、a.index_name、b.partition_name、b.partition_position其中 a.owner=b.index_owner  和 a.index_name=b.index_name  和 a.table_owner= 'SCOTT'  和 a.table_name='<table_name>'  和 b.status='UNUSABLE'按 a.owner、a.index_name、b.partition_position 排序;






 



9) 重建步骤8)中确定的UNUSABLE非分区索引和索引分区:
 

SQL> alter index scott.<name> 在线重建 ;

SQL> alter index scott.<name> 重建分区 <Table_partition_name>;

当在巨大的表分区块(例如 ORA-01578)中发现损坏时,并且我们没有备份(例如 RMAN、操作系统级别、导出或任何外部资源)来恢复损坏,我们仍然可以尝试挽救使用 10231 事件处理表中的剩余数据(由于跳过损坏的数据块,可能会导致一些数据丢失和不一致)。

实现此目的的一种方法是:

a) 创建救援表(使用 10231 事件)并从损坏的分区插入数据(使用 CTAS 或 INSERT INTO SELECT...):

b) 截断分区(使用 alter table <original_table> truncate partition <partition_name>) 或删除分区

c) 中的行 将数据从抢救表插入到截断的损坏分区(使用 INSERT INTO SELECT...)


在上述方法中,步骤 c) 将花费大量时间,具体取决于行数在分区中,即如果表分区包含大量行。

通过使用可与分区表一起使用的 EXCHANGE PARTITION 方法,我们可以显着减少上述步骤 c) 所花费的时间。

解决方案

步骤如下:

0) 当我们识别出损坏块的​​ file# 和 block# 后,确定损坏的表分区(例如,通过查看 ORA-01578 的alert.log):

 

SQL> 选择所有者、段名称、分区名称、段类型、表空间名称、相对 fno、文件 ID
FROM dba_extents
WHERE file_id = &corrupted_file#
AND &corrupted_block# BETWEEN block_id AND block_id +blocks - 1 ;


还有其他方法可以识别数据库中损坏的块:
 


Note 352907.1在数据库的所有数据文件上运行 DBV 的脚本

Note 472231.1如何识别 RMAN 报告的数据库中的所有损坏对象



1) 设置事件 10231 以跳过损坏的块:
 

SQL> alter session set events '10231 跟踪名称上下文永远,级别 10';



2) 使用表分区中的良好块数据创建抢救表:

Salvage_table ---> 抢救表名称

Table_name ---> 具有损坏的原始基表

Table_partition_name ---> 涉及的分区名称

 

SQL> create table scott.<Salvage_table> 表空间用户并行(度 4) as select * from scott.<table_name> 分区 (Table_partition_name) ;


如果填充上表也失败并出现块损坏消息(例如位图块上的 ORA-1578),我们可以使用其他方法,例如下面文章中的方法:
 

注意 422547.1从损坏的表中提取行,从 DBA_EXTENTS 创建 ROWID



3) (可选)验证,与原始表相比,抢救表中的计数是否合适,并包含损坏块的数量:
 

SQL> select count(*) from scott.<Salvage_table> ;

SQL> select count(*) from scott.<表名> 分区 (表分区名) ;



4) 用创建的挽救表交换损坏的分区。通过使用WITHOUT VALIDATION子句,交换会更快,因为它不会验证抢救表中的每一行是否正确映射到表分区(我们不担心它,因为抢救表是从同一分区创建的):
 

SQL> alter table scott.<table_name> 将分区 Tab​​le_partition_name 与表 scott.<salvage_table> 交换,无需验证;



5) 取消设置事件 10231 以确保我们在从交换分区中进行选择时不会忽略任何未被注意到的损坏块:
 

SQL> alter session set events '10231 跟踪名称上下文关闭';



6) (可选)验证损坏分区中的数据现在是否可访问且有效。其中一项验证是计算行数:
 

SQL> select count(*) from scott.<表名> 分区 (表分区名) ;



7) 删除​​临时抢救表,因为它现在包含与损坏的表分区交换的损坏块:
 

SQL> 删除表 scott.salvage_table purge ;



8) 识别UNUSABLE的非分区索引和索引分区:
 

--- 对于非分区索引

select a.owner index_owner, a.index_name
from dba_indexes a
where a.table_owner='SCOTT'
and a.table_name='<table_name>'
and a.partitioned='NO'
and a.status ='UNUSABLE'
order by a.owner, a.index_name ;

--- 对于索引分区,从 dba_indexes a、dba_ind_partitions b 中

选择 a.owner index_owner、a.index_name、b.partition_name、b.partition_position其中 a.owner=b.index_owner  和 a.index_name=b.index_name  和 a.table_owner= 'SCOTT'  和 a.table_name='<table_name>'  和 b.status='UNUSABLE'按 a.owner、a.index_name、b.partition_position 排序;






 



9) 重建步骤8)中确定的UNUSABLE非分区索引和索引分区:
 

SQL> alter index scott.<name> 在线重建 ;

SQL> alter index scott.<name> 重建分区 <Table_partition_name>;

When a corruption is identified in a huge table partition block (e.g. ORA-01578), and we don't have backups (e.g. RMAN, OS level, Export, or any external resource) to recover the corruption, we can still try to salvage the remaining data in the table using 10231 event (with some possible data loss and inconsistency by skipping corrupted data blocks).

One method to achieve this is:

a) create a salvage table (using 10231 event) and insert data from corrupted partition (using CTAS or INSERT INTO SELECT...) :

b) truncate the partition (using alter table <original_table> truncate partition <partition_name>) or DELETE the rows in partition

c) Insert the data from salvage table to truncated corrupted partition (using INSERT INTO SELECT...)


In above method, step c) will take significant amount of time depending on the number of rows in the partition i.e. if the table partition contains large number of rows.

We can significantly reduce the time taken in step c) above by using EXCHANGE PARTITION method which can be used with partitioned tables.

SOLUTION

Here are the steps:

0) Determine the corrupted table partition when we have identified file# and block# for the corrupted blocks (e.g. by reviewing alert.log for ORA-01578):
 

SQL> select owner, segment_name, partition_name, segment_type, tablespace_name, relative_fno, file_id
FROM dba_extents
WHERE file_id = &corrupted_file#
AND &corrupted_block# BETWEEN block_id AND block_id + blocks - 1 ;


There are other ways to identify the corrupted blocks in the database :
 


Note 352907.1 Script To Run DBV On All Datafiles Of the Database

Note 472231.1 How to identify all the Corrupted Objects in the Database reported by RMAN



1) Set event 10231 to skip the corrupted blocks:
 

SQL> alter session set events '10231 trace name context forever, level 10';



2) Create salvage table with good blocks data from table partition:

Salvage_table ---> Salvage table name

Table_name ---> Original Base table having the corruption

Table_partition_name --->Partition name involved
 

SQL> create table scott.<Salvage_table> tablespace users parallel (degree 4) as select * from scott.<table_name> partition (Table_partition_name) ;


If populating above table also fails with block corruption messages (e.g. ORA-1578 on a BITMAP BLOCK), we can use other methods, e.g. the one in below Article:
 

Note 422547.1 Extract rows from a CORRUPT table creating ROWID from DBA_EXTENTS



3) (Optional) Verify, the count is appropriate in salvage table in comparsion to orignal table with the fact of number of corrupted blocks:
 

SQL> select count(*) from scott.<Salvage_table> ;

SQL> select count(*) from scott.<table_name> partition (Table_partition_name) ;



4) Exchange the corrupted partition with salvage table created. By using WITHOUT VALIDATION clause, the exchange will be faster as it will NOT validate that each row from salvage table maps correctly to the table partition (We don't worry about it because the salvage table is created from same partition):
 

SQL> alter table scott.<table_name> exchange partition Table_partition_name with table scott.<salvage_table> without validation ;



5) Unset the event 10231 to make sure we don't ingore any unnoticed corrupted blocks while selecting from exchanged partition:
 

SQL> alter session set events '10231 trace name context off';

----------

EVENT: 10231 "skip corrupted blocks on _table_scans_" (Doc ID 21205.1)​编辑To Bottom






Event: 10231
Text:  skip corrupted blocks on _table_scans_
-------------------------------------------------------------------------------
Cause:
Action: Corrupt blocks are skipped in table scans, and listed in trace files.
 
Explanation:
        This is NOT an error but is a special EVENT code.
        It should *NOT* be used unless explicitly requested by ST support.

   8.1 onwards:
   ~~~~~~~~~~~~
        The "7.2 onwards" notes below still apply but in Oracle8i 
        there is a PL/SQL <Package:DBMS_REPAIR> which can be used 
        to check corrupt blocks.  See <DocIndex:DBMS_REPAIR>.

        It is possible to simulate 10231 on a table using
        DBMS_REPAIR.SKIP_CORRUPT_BLOCKS('schema','table').
        The SKIP_CORRUPT column of DBA_TABLES shows tables which
        have been marked to allow skipping of corrupt blocks.
 
   7.2 onwards:
   ~~~~~~~~~~~~
	Event 10231 causes SOFTWARE CORRUPT or MEDIA corrupt blocks
	to be skipped on FULL TABLE SCANS only.  (E.g: on export)
	Software corrupt blocks are defined below.  Media corrupt 
        blocks are Oracle blocks where the header field information 
        is not what was expected.  These can now be skipped with
	the 10231 event.

   Before 7.2:
   ~~~~~~~~~~~
        Event 10231 causes SOFTWARE CORRUPT blocks to be skipped on 
        FULL TABLE SCANS only.  (E.g: on export). 

        A 'software corrupt' block is a block that has a SEQ number of ZERO.
        This raises an ORA-1578 error.

	NB: Blocks may be internally corrupt and still cause problems or 
	    raise ORA-1578.  If a block is physically corrupt and the SEQ
	    is not set to ZERO, you cannot use 10231 to skip it.  You have 
	    to try to scan around the block instead.
	
	    To manually corrupt a block and cause it to be skipped you
	    must: Set SEQ to ZERO.
		  Set the INCSEQ at the end of the block to match.


	You can set event numbers 10210, 10211, and 10212 to check blocks 
        at the data level and mark them software corrupt if they are found 
        to be corrupt.  You CANNOT use these events to mark a physically 
        corrupt block as software corrupt because the block never reaches 
        the data layer.

        When a block is skipped, any data in the block is totally ignored.


Usage:  Event="10231 trace name context forever, level 10".
	This should be removed from the instance parameters immediately after
	it has been used.

        Alternatively it can be set at session level:
        alter session set events '10231 trace name context forever, level 10'



6) (Optional) Verify, if the data in corrupted partition is now accessible and valid. One of the verifications is to count the rows:

SQL> select count(*) from scott.<table_name> partition (Table_partition_name) ;



7) Drop the temporary salvage table as it now contains the corrupted blocks exchanged with corrupted table partition :
 

SQL> drop table scott.salvage_table purge ;



8) Identify the UNUSABLE non-partitioned indexes and index partitions:
 

--- for non-partitioned indexes

select a.owner index_owner, a.index_name
from dba_indexes a
where a.table_owner='SCOTT'
and a.table_name='<table_name>'
and a.partitioned='NO'
and a.status='UNUSABLE'
order by a.owner, a.index_name ;

--- for index partitions

select a.owner index_owner, a.index_name, b.partition_name, b.partition_position
from dba_indexes a, dba_ind_partitions b
where a.owner=b.index_owner
  and a.index_name=b.index_name
  and a.table_owner='SCOTT'
  and a.table_name='<table_name>'
  and b.status='UNUSABLE'
order by a.owner, a.index_name, b.partition_position ;



9) Rebuild the UNUSABLE non-partitioned indexes and index partitions identified in step 8):
 

SQL> alter index scott.<name> rebuild online ;

SQL> alter index scott.<name> rebuild partition  <Table_partition_name>;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

扩展学习|商业智能和大数据分析的研究前景(比对分析)

文献来源&#xff1a; Liang T P , Liu Y H .Research Landscape of Business Intelligence and Big Data analytics: A bibliometrics study[J].Expert Systems with Applications, 2018, 111(NOV.):2-10.DOI:10.1016/j.eswa.2018.05.018. 信息和通信技术的快速发展导致了数字…

养老院|基于Springboot的养老院管理系统设计与实现(源码+数据库+文档)

养老院管理系统目录 目录 基于Springboot的养老院管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、老人信息管理 2、家属信息管理 3、公告类型管理 4、公告信息管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选…

西瓜书读书笔记整理(十二) —— 第十二章 计算学习理论(下)

第十二章 计算学习理论&#xff08;下&#xff09; 12.4 VC 维&#xff08;Vapnik-Chervonenkis dimension&#xff09;12.4.1 什么是 VC 维12.4.2 增长函数&#xff08;growth function&#xff09;、对分&#xff08;dichotomy&#xff09;和打散&#xff08;shattering&…

【Linux系统】文件系统和软硬链接

前言 之前的博客介绍过了打开的文件是如何被操作系统管理起来的&#xff0c;但是绝大多数文件是没有被打开的&#xff0c;静静地躺在磁盘上。 这些文件也应该要被操作系统管理起来&#xff0c;以方便系统快速地在磁盘上查找它们&#xff0c;进而加载到内存。 这套管理方式就…

vue使用json格式化

安装 npm i bin-code-editor -S // Vue2 npm install vue-json-viewer --save 在main.js引用 //引入bin-code-editor相关插件和样式 import CodeEditor from bin-code-editor; import bin-code-editor/lib/styles/index.css; import JsonViewer from vue-json-viewer //vue使用…

golang开源的可嵌入应用程序高性能的MQTT服务

golang开源的可嵌入应用程序高性能的MQTT服务 什么是MQTT&#xff1f; MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一种轻量级的、开放的消息传输协议&#xff0c;设计用于在低带宽、高延迟或不可靠的网络环境中进行通信。MQTT最初由IBM开发&#xf…

python webdriver 测试框架数据驱动json文件驱动的方式

简介&#xff1a; 数据驱动excel驱动方式,就是数据配置在excel里面&#xff0c;主程序调用的时候每次用从excel里取出的数据作为参数&#xff0c;进行操作&#xff0c; 需要掌握的地方是对excel的操作&#xff0c;要灵活的找到目标数据 测试数据.xlsx: 路径-D:\test\0627 E…

产品原型图设计规范大全

目前&#xff0c;市场上许多产品经理或设计师都在使用一些优秀的原型设计规范&#xff0c;这些规范几乎涵盖了原型设计的许多方面。一套好的、完整的原型设计规范可以统一产品设计风格&#xff0c;检验产品的可用性&#xff0c;有效提高产品经理绘制原型图的效率&#xff0c;更…

力扣238. 除自身以外数组的乘积(前后缀和)

Problem: 238. 除自身以外数组的乘积 文章目录 题目描述思路复杂度Code 题目描述 思路 思路1&#xff1a; 1.先求取数组的包括当前下标值得前后缀乘积&#xff08;利用两个数组记录下来分别为leftProduct和rightProduct&#xff09; 2.当求取一个下标为i的数组中的元素&#x…

构建基于Flask的跑腿外卖小程序

跑腿外卖小程序作为现代生活中的重要组成部分&#xff0c;其技术实现涉及诸多方面&#xff0c;其中Web开发框架是至关重要的一环。在这篇文章中&#xff0c;我们将使用Python的Flask框架构建一个简单的跑腿外卖小程序的原型&#xff0c;展示其基本功能和实现原理。 首先&…

linux --中断管理 -- irq的自动探测机制

irq自动探测机制 如果一个设备的驱动程序无法确定它说管理的设备的软件中断号irq&#xff0c;此时设备驱动程序可以使用irq的自动探测机制来获取其正在使用的irq。 使用自动探测机制的条件 内核与驱动&#xff0c;必须共同努力才能完成只限于非共享中断的情况 探测前&#…

如何查看某一页面在在谷歌有哪些关键词

随着跨境贸易的不断发展&#xff0c;谷歌SEO也被越来越多的人群所了解&#xff0c;所接受。我们在日常操作SEO的时候&#xff0c;往往都会远见这样的事情&#xff0c;那就是自己网站的某一个页面原本只是简单的承载着某一个关键词&#xff0c;但是随着时间的推移&#xff0c;这…

Shell脚本之 -------------免交互操作

一、Here Document 1.Here Document概述 Here Document 使用I/O重定向的方式将命令列表提供给交互式程序 Here Document 是标准输 入的一种替代品&#xff0c;可以帮助脚本开发人员不必使用临时文件来构建输入信息&#xff0c;而是直接就地 生产出一个文件并用作命令的标准…

Linux——动静态库

在进行开发过程中&#xff0c;我们不可避免地会使用到人家的库&#xff0c;那么库到底是什 么&#xff1f;而库又分为动态库和静态库&#xff0c;那么这两个又是什么&#xff1f;这篇博客由我来 简单介绍动静态库。文章目录 1. 库2. 静态库a. 静态库的制作b. 使用静态库 3. 动态…

打击者H5小游戏

欢迎来到程序小院 打击者 玩法&#xff1a;点击飞机上下左右移动躲过子弹射击&#xff0c;打掉上方敌人飞机&#xff0c; 遇到药包会增加能量&#xff0c;弹药包会升级武器&#xff0c;快去射击吧^^。开始游戏https://www.ormcc.com/play/gameStart/262 html <div id"…

基于矢量控制的交流电机驱动simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 交流电机基础 4.2 矢量控制原理 4.3 矢量控制的实现 5.完整工程文件 1.课题概述 基于矢量控制的交流电机驱动simulink建模与仿真。系统仿真输出电压&#xff0c;电流&#xff0c;电机转速以及扭矩…

语言革命:NLP与GPT-3.5如何改变我们的世界

文章目录 &#x1f4d1;前言一、技术进步与应用场景1.1 技术进步1.2 应用场景 二、挑战与前景三、伦理和社会影响四、实践经验五、总结与展望 &#x1f4d1;前言 自然语言处理&#xff08;Natural Language Processing&#xff0c;NLP&#xff09;是人工智能领域的一个重要分支…

快速入门存内计算—助力人工智能加速深度学习模型的训练和推理

存内计算&#xff1a;提高计算性能和能效的新技术 传统的计算机架构是将数据存储在存储器中&#xff0c;然后将数据传输到计算单元进行处理。这种架构存在一个性能瓶颈&#xff0c;即数据传输延迟。存内计算通过将计算单元集成到存储器中&#xff0c;消除了数据传输延迟&#…

中国的茶文化:现代生活中的茶文化

中国的茶文化&#xff1a;现代生活中的茶文化 引言 在现代社会的快节奏生活中&#xff0c;茶文化并未随时间流逝而褪色&#xff0c;反而以其独特的方式融入了全球各地人们的日常生活。它超越了饮品本身的范畴&#xff0c;成为一种连接历史、人文与现代生活方式的艺术形式。本文…

Git 介绍 与 配置

Git 介绍 Git是一个分布式版本控制系统&#xff0c;用于跟踪文件的更改和协作开发。它可以管理项目的版本历史记录&#xff0c;并允许多个开发者在同一时间进行并行开发。 解决上图产生的问题就出现了git 分布式版本控制系统 看下图 Git 配置 Git的基本配置包括用户名和电子邮…
最新文章