【Oracle資源損壞類故障】:詳細了解壞塊

目錄

1、物理壞塊與邏輯壞塊

1.1、物理壞塊

1.2、邏輯壞塊

2、兩個壞塊相關的參數

2.1、db_block_checksum

2.2、db_block_checking

3、檢測壞塊?

3.1、告警日志

3.2、RMAN

3.3、ANALYZE

3.4、數據字典

3.5、DBVERIFY

4、修復壞塊

4.1、RMAN修復

4.2、DBMS_REPAIR修復

4.3、BBED

5、寫在最后


1、物理壞塊與邏輯壞塊

????????將數據庫比喻成一本書,每一頁看作是一個數據塊。當我們看不懂書中某頁的內容可能有3種原因:該頁缺損、該頁內容邏輯有錯誤、智商不夠。我們的智商顯然不是問題,這點首先排除。

????????所以書頁缺損、書頁上的內容邏輯錯誤是最可能的兩點原因。其中頁書缺損就好比數據庫中的物理壞塊,直接粗暴的破壞了這一頁;書頁上的內容邏輯錯誤就像是數據庫中的邏輯壞塊,寫的內容驢頭不對馬嘴。

????????如果現在寫的這篇文章讓您讀著不通順或者讀不懂,那這篇文章也屬于是個邏輯壞塊。

1.1、物理壞塊

????????存儲介質導致的數據塊損壞,常見的場景是磁盤損壞、網絡故障導致數據塊在傳輸時發生損壞,突然斷電導致數據塊的元數據損壞。

1.1.1、物理壞塊的常見錯誤表現

1.1.1.1、Fractured Block(斷塊)

????????斷塊是指數據塊不完整,塊頭信息與塊尾信息不匹配。

Corrupt block relative dba: 0x0380e573 (file 14, block 58739)

Fractured block found during buffer read

Data in bad block -

type: 6 format: 2 rdba: 0x0380e573

last change scn: 0x0288.8e5a2f78 seq: 0x1 flg: 0x04

consistency value in tail: 0x00780601

check value in block header: 0x8739, computed block checksum: 0x2f00

spare1: 0x0, spare2: 0x0, spare3: 0x0

***

Reread of rdba: 0x0380e573 (file 14, block 58739) found same corrupted data

1.1.1.2、Bad checksum

? ? ? ? 這個錯誤是指checksum不一致。

????????checksum是數據塊的校驗和,它是Oracle將數據塊中的內容通某種算法進行計算生成的一個唯一的校驗值。checksum存儲在數據塊的頭部;當讀取數據塊時,Oracle會重新計算checksum,與存儲在數據塊頭部的checksum進行比較,如果不一致,就判斷數據塊發生了損壞。

Corrupt block relative dba: 0x0380a58f (file 14, block 42383)

Bad check value found during buffer read

Data in bad block -

type: 6 format: 2 rdba: 0x0380a58f

last change scn: 0x0288.7784c5ee seq: 0x1 flg: 0x06

consistency value in tail: 0xc5ee0601

check value in block header: 0x68a7, computed block checksum: 0x2f00

spare1: 0x0, spare2: 0x0, spare3: 0x0

***

Reread of rdba: 0x0380a58f (file 14, block 42383) found same corrupted data

1.1.1.3、Block Misplaced

????????Oracle檢測到正在讀取的數據塊的內容屬于另一個塊,但是checksum有效。

?Corrupt block relative dba: 0x0d805a89 (file 54, block 23177)

Bad header found during buffer read

Data in bad block -

type: 6 format: 2 rdba: 0x0d805b08 ----> Block is different than expected 0x0d805a89

last change scn: 0x0692.86dc08e3 seq: 0x1 flg: 0x04

consistency value in tail: 0x08e30601

check value in block header: 0x2a6e, computed block checksum: 0x0

spare1: 0x0, spare2: 0x0, spare3: 0x0

1.1.1.4、Zeroed out blocks

????????如果Oracle數據庫發生了Zeroed out blocks,那么基本可以判斷是操作系統或者存儲系統發生了故障。

????????根據Oracle官方文檔描述,在設計的時候,Oracle就被確定不會寫全零塊,目的是為了識別底層操作系統或者存儲中的故障。

Corrupt block relative dba: 0x014000a0 (file 5, block 160)

Completely zero block found during multiblock buffer read

1.2、邏輯壞塊

????????邏輯壞塊是指數據塊的內容或者結構不符合Oracle內部規范,但是在物理存儲介質方面沒有問題。雖然發生了邏輯壞塊,但其checksum很可能并無問題,只是數據塊中的內容發生了損壞。

????????邏輯壞塊的詳細損壞描述通常不會輸出到告警日志中,這點是和物理壞塊不同的。

1.2.1、邏輯壞塊常見錯誤表現:

1.2.1.1、ORA-600 [4512]

ORA-600 [4512],被不存在的事務鎖定了行。

1.2.1.2、不符合自然邏輯

日期數據類型字段,存入了2025-03-32 25:61:61這種不符合自然邏輯的數據。

1.2.1.3、數據字典邏輯損壞

Oracle數據字典字典表發生了字典數據與實際不一致的情況;例如:dba_tables顯示某表存在,但是實際的數據文件沒有這個表段。

執行DDL操作時,觸發ORA-00600 [kdsgrp1],或者元數據查詢失敗。

1.2.1.4、索引失效

索引指向了無效的ROWID,比如說數據行已經被刪除了,但是索引沒有更新。

索引掃描時,返回ORA-01410(無效的ROWID),或者查詢結果不匹配。

1.2.1.5、數據塊頭部元數據損壞

數據塊的頭部信息,例如塊的類型、SCN、事務槽遭到損壞。例如數據塊的類型本來是表段塊,但是實際存儲的卻是索引,這種錯誤就屬于是Oracle軟件的bug了。

訪問到這種邏輯壞塊時,觸發ORA-00600 [kddummy_blkchk]內部錯誤。


2、兩個壞塊相關的參數

2.1、db_block_checksum

????????這個參數是用來控制checksum的生成.

????????checksum是數據塊的校驗和,它是Oracle將數據塊中的內容通某種算法進行計算生成的一個唯一的校驗值。checksum存儲在數據塊的頭部;當讀取數據塊時,Oracle會重新計算checksum,與存儲在數據塊頭部的checksum進行比較,如果不一致,就判斷數據塊發生了損壞。

????????可以通過show parameter來查看當前數據庫對于此參數的配置情況。

SQL> show parameter db_block_checksumNAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
db_block_checksum		     string	 TYPICAL

????????db_block_checksum參數有3種選項:FULL、TYPICAL、OFF,下面對這三種選項進行簡單說明。

參數選項簡單說明
FULL對所有數據塊,包括數據文件、控制文件、日志文件生成校驗和。
TYPICAL默認值,對數據文件、控制文件生成校驗和,不會作用于臨時表空間。
OFF不生成checksum,這個是不推薦的。

? ? ? ? 可以修改db_block_checksum參數,但因為是靜態參數,修改完參數需要重啟數據庫。

ALTER SYSTEM SET db_block_checksum = FULL SCOPE=SPFILE;

2.2、db_block_checking

????????這個參數是對數據塊的邏輯一致性檢查,當數據塊在被讀取或者修改時,自動檢測數據塊內部結構的邏輯錯誤,從而防止因為邏輯損壞導致數據丟失。

????????db_block_checking參數有4種選項:HIGH、MEDIUM、LOW、OFF,下面對這4種選項進行簡單的說明。

參數選項簡單說明
HIGH執行完整的邏輯檢查,包括索引塊、事務槽,覆蓋數據庫所有的修改操作。
MEDIUM對所有表空間的數據塊執行基本檢查,例如塊頭等。
LOW只對數據庫的系統表空間執行數據塊檢查。
OFF不對任何數據塊執行檢查,這是個默認值。

????????可以修改db_block_checking參數,但因為是靜態參數,修改完參數需要重啟數據庫。

ALTER SYSTEM SET db_block_checking=HIGH SCOPE=SPFILE;

? ? ? ?db_block_checksum與db_block_checking參數的不同點在于db_block_checksum是用來檢測物理完整性的,主要是服務于物理壞塊問題處理;db_block_checking是用來檢測邏輯一致性的,主要是服務于邏輯壞塊問題處理。

????????db_block_checksum與db_block_checking參數的相同點是當啟用參數時,啟用的級別的越高,對性能的影響就會越大。所以在使用這兩個參數時,需要在數據庫性能和數據安全這兩方面做好平衡。


3、檢測壞塊?

????????Oracle數據庫提供了幾種手段可以對壞塊進行監測,下面對這些手段進行逐一介紹。這些手段側重點和使用場景都有不同,有的也可以組合使用,效率效果更佳。

3.1、告警日志

????????告警日志是DBA最常看的日志,每次巡檢如果繞開它,個人覺得都不算一次標準的巡檢。Oracle在檢測到數據壞塊時,會在告警日志中記錄錯誤信息。通過檢查告警日志,可以及時發現數據壞塊錯誤。

????????確定告警日志位置,以下兩個方法都可以。

SQL> show parameter dumpNAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
background_core_dump		     string	 partial
background_dump_dest		     string	 /oracle/app/diag/rdbms/htbase/htbase1/trace
core_dump_dest			         string	 /oracle/app/diag/rdbms/htbase/htbase1/cdump
max_dump_file_size		         string	 unlimited
shadow_core_dump		         string	 PARTIAL
user_dump_dest			         string	 /oracle/app/diag/rdbms/htbase/htbase1/traceSQL> SELECT value FROM v$diag_info WHERE name = 'Diag Trace';VALUE
--------------------------------------------------------------------------------
/oracle/app/diag/rdbms/htbase/htbase1/trace

????????檢索壞塊錯誤記錄

? ? ? ? 在告警日志中搜索“ORA-01578”,或者搜素“Corrupt block“關鍵字。這個大家可以看上文物理壞塊介紹那里就知道為什么檢索兩個了。

3.2、RMAN

????????RMAN也是官方推薦壞塊檢測工具,支持對數據文件、控制文件、歸檔日志文件等進行完整性檢查,個人覺得RMAN比較適合作為一種定期健康檢查的手段。RMAN有下面幾種檢查方式。

3.2.1、檢查整個數據庫

????????可以輸出所有數據文件、控制文件、日志文件的壞塊信息。

RMAN> VALIDATE DATABASE;

3.2.2、檢查指定的數據文件

????????可以輸出數據文件內每個塊的物理和邏輯一致性。

RMAN> VALIDATE DATAFILE 28;  -- 文件號為28的數據文件

3.2.3、邏輯一致性檢查

????????不僅檢查數據塊的物理完整性,還會檢查數據塊的邏輯結構。

RMAN> VALIDATE CHECK LOGICAL DATABASE;

3.2.4、檢查備份集

????????這個命令,無論是新手還是老手都不陌生,備份常用命令,檢查備份文件是否損壞,確保恢復的時候是可用的。

RMAN> VALIDATE BACKUPSET <備份集編號>;

3.3、ANALYZE

ANALYZE命令可以檢查表、索引的邏輯一致性。

3.3.1、檢查表結構

????????如果存在壞塊,會拋出ORA-01498錯誤。此時可能是數據塊頭部的元數據信息出錯、索引對應數據塊的關聯關系有誤(這些都在上文的邏輯壞塊部分介紹過);如果是物理壞塊,還會伴隨著ORA-01578。

ANALYZE TABLE hr.zqd VALIDATE STRUCTURE;

3.3.2、檢查索引的一致性

????????如果索引與表數據不匹配,會拋出ORA-01499錯誤。這可能是索引和表數據沒同步,例如刪除大量數據后,沒有重建索引;事務異常中斷導致索引條目沒有正常更新等等。如果是物理損壞的話,會伴隨著ORA-01578錯誤。

? ? ? ? 此時比較高效的修復操作是重建索引,但不一定能解決所有場景下的此類問題。

ANALYZE INDEX HR.zqd_idx VALIDATE STRUCTURE;

3.4、數據字典

3.4.1、V$DATABASE_BLOCK_CORRUPTION

SELECT * FROM V$DATABASE_BLOCK_CORRUPTION;

????????這個視圖會記錄Oracle數據庫中檢測到壞塊信息。這個視圖的數據寫入觸發機制包含以下幾種途徑。

操作具體操作
RAMN

1、使用RMAN進行備份的時候,會驗證數據塊的完整性,若發現壞塊,會寫入該視圖。

2、使用RMAN進行VALIDATE驗證時,若發現壞塊,會寫入該視圖。

3、使用RMAN進行RECOVER恢復時,若發現壞塊,會寫入該視圖。

進程檢測

1、讀取數據時,checksum不一致,會將壞塊信息寫入該視圖。

2、SELECT語句訪問到壞塊時,會將壞塊信息寫入該視圖。

工具檢查

1、DBVERIFY作為外部工具,不會直接將壞塊信息寫入視圖,但可以通過日志文件手動確認壞塊后,需要通過數據庫操作才會將壞塊信息寫入視圖。

2、ANALYZE命令若檢測到壞塊可能會將壞塊信息寫入視圖。

3.4.2、DBA_EXTENTS

????????通過這個Oracle系統基礎表,可以定位到具體的壞塊所在對象,可能是表、索引、大字段。

SELECT owner, segment_name, segment_type
FROM dba_extents
WHERE file_id = 5    -- 文件號AND 1234 BETWEEN block_id AND block_id + blocks -1;  -- 塊號

3.5、DBVERIFY

????????DBVERIFY是Oracle數據庫提供的命令行工具,用于檢查數據文件物理和邏輯一致性,重點檢查數據塊的完整性。

3.5.1、DBVERIFY有幾個特點,主要包含以下幾個方面。

3.5.1.1、只讀方式打開

? ? ? ? 它以只讀的方式打開數據文件,不會修改數據文件,確保了數據文件的安全性。

3.5.1.2、在線檢查

????????它支持在線檢查數據文件,不需要關閉數據庫。當然離線時對數據文件的檢查速度更快。

3.5.1.3、支持對ASM文件的檢查

? ? ? ? 在數據庫是正常打開的情況下,通過userid參數指定用戶權限,即可檢查ASM文件。

dbv file=+DG1/orcl/datafile/system01.dbf userid=system/sys

3.5.2、DBVERIFY是有局限性的,主要包含以下幾個方面:

3.5.2.1、只檢查數據文件

????????它只能檢查數據文件;不能檢查控制文件和日志文件。

3.5.2.2、不檢查邏輯關聯性

? ? ? ? 只會檢查數據塊內部的結構,不會檢查索引與表數據的匹配關系。

3.5.2.3、文件大小限制

????????在某些平臺下,不能檢查超過2G的數據文件(但這一點我自己沒有實際驗證過)。

3.5.3、常用與幫助

????????DBVERIFY工具的命令參數有很多,但常用的就是FILE、BLOCKSIZE、LOGFILE等。如果有特殊需要可以查看幫助:dbv help=y

dbv FILE=/oradata/users01.dbf BLOCKSIZE=8192 LOGFILE=/tmp/dbv.log

4、修復壞塊

4.1、RMAN修復

? ? ? ? 最理想的是使用RMAN恢復,進而實現修復壞塊的目的。但這是需要當前數據庫有備份,并且備份可用無壞塊的情況下。

4.1.1、使用RMAN進行塊恢復

????????檢測到數據庫的壞塊、壞塊所在數據文件后,可以指定壞塊進行塊恢復。建議是在數據庫壞塊不多的情況下使用塊恢復,這種修復效率很高;如果是恢復整個數據文件,恢復效率會相對很低。

RMAN> VALIDATE BACKUPSET ALL; --檢查所有備份集是否可用,且有無壞塊。RMAN> VALIDATE BACKUPSET <備份集編號>; --指定備份集進行檢查,檢查是否可用,且有無壞塊。
RMAN> VALIDATE DATABASE; --檢測壞塊位置
RMAN> blockrecover?datafile?4?block?1798; --進行塊恢復--也可以一次修復同一數據文件中的多個壞塊
RMAN> blockrecover?datafile?4?block?1798,1799; --進行多個壞塊恢復
 VALIDATE DATAFILE 4 BLOCK 1798; --驗證修復結果

4.1.2、使用RMAN進行數據文件恢復

????????如果數據庫中的壞塊很多,或者進行RMAN塊恢復失敗時,可以嘗試使用RMAN進行數據文件恢復。

? ? ? ? 使用RMAN進行數據文件恢復會有幾點事項需要注意:恢復期間,數據庫部分不可用,因為壞塊所在的數據文件需要OFFLINE;需要確保歸檔日志完整以支持完全恢復;如果壞塊所在的數據文件比較大,恢復效率不會很高。

RMAN> VALIDATE BACKUPSET ALL; --檢查所有備份集是否可用,且有無壞塊。RMAN> VALIDATE BACKUPSET <備份集編號>; --指定備份集進行檢查,檢查是否可用,且有無壞塊。
RMAN> VALIDATE DATABASE; --檢測壞塊位置
SQL> ALTER DATABASE DATAFILE 4 OFFLINE; --離線壞塊所在的數據文件
RMAN> RESTORE DATAFILE 4; --從備份恢復數據文件
RMAN> RECOVER DATAFILE 4; --還原壞塊所在的數據文件
SQL> ALTER DATABASE DATAFILE 4 ONLINE; --切換數據文件為ONLINE狀態。

4.1.3、補充

????????上文的備份集檢查是建議每次備份完就執行檢查,定期巡檢也加入這類檢查。如果備份集不可用或者存在壞塊,那么使用RMAN進行壞塊修復的這條路就斷掉了。

4.2、DBMS_REPAIR修復

????????Oracle數據庫提供了DBMS_REPAIR包用于修復壞塊。但這個方法在修復壞塊方面往往是不奏效的。擬人化的講,我個人覺得這個DBMS包有點 “打的過就打,打不過就跑” 的感覺。因為它雖然很多時候修不好壞塊,但是它能讓Oracle的增刪改查操作跳過壞塊;這也就導致了使用DBMS_REPAIR方法非常可能會丟失數據。但是在沒有備份的情況下,這也是發生壞塊時,能拯救部分數據的方法之一。

????????下圖是DBMS_REPAIR的常用方法總結。

? ? ? ? 現在Oracle數據庫中HR.ZQD0318表有個壞塊,接下來詳細描述下DBMS_REPAIR修復/跳過壞塊的步驟。

SQL> SELECT COUNT(*) FROM HR.ZQD0318;COUNT(*)
----------72594

4.2.1、創建REPAIR表

????????REPAIR表用于記錄需要被修復的表。REPAIR表創建完后,是不會立刻有數據的;在檢查完對象的數據塊受損情況后,REPAIR表才會有數據。

BEGIN
DBMS_REPAIR.ADMIN_TABLES(TABLE_NAME => 'REPAIR_TABLE',TABLE_TYPE => DBMS_REPAIR.REPAIR_TABLE,ACTION => DBMS_REPAIR.CREATE_ACTION,TABLESPACE => 'ZQD');
END;
--如果在SQLPLUS中執行PLSQL代碼塊,需要在代碼塊末尾加上“/”

4.2.2、?創建ORPHAN表

????????ORPHAN表是用來存放在表出現壞塊后的孤立(OPRHAN)索引相關信息,也就是指向那些壞塊的索引信息。ORPHAN表創建完后,不會立刻有數據;在使用DUMP_ORPHAN_KEYS過程后,才會有指向壞塊的索引相關信息。

BEGINDBMS_REPAIR.ADMIN_TABLES(TABLE_NAME => 'ORPHAN_KEY_TABLE',TABLE_TYPE => DBMS_REPAIR.ORPHAN_TABLE,ACTION => DBMS_REPAIR.CREATE_ACTION,TABLESPACE => 'ZQD');
END;
--如果在SQLPLUS中執行PLSQL代碼塊,需要在代碼塊末尾加上“/”

4.2.3、檢查對象的數據塊受損情況

????????檢查完后,壞塊信息會寫入REPAIR表。

DECLAREcorruptnum INT;
BEGINcorruptnum := 0;DBMS_REPAIR.CHECK_OBJECT(SCHEMA_NAME => 'HR',OBJECT_NAME => 'ZQD0318',REPAIR_TABLE_NAME => 'REPAIR_TABLE',CORRUPT_COUNT => corruptnum);DBMS_OUTPUT.PUT_LINE('壞塊數量:' || TO_CHAR(corruptnum));
END;
--如果在SQLPLUS中執行PLSQL代碼塊,需要在代碼塊末尾加上“/”

4.2.4、查看壞塊信息

SELECT OBJECT_NAME,BLOCK_ID,CORRUPT_TYPE,MARKED_CORRUPT,REPAIR_DESCRIPTION FROM REPAIR_TABLE;

4.2.5、嘗試修復壞塊

????????如果輸出是0,則說明修復了0個壞塊,修復無效,此時可以選擇跳過壞塊。

DECLARE
fixnum number;
BEGINDBMS_REPAIR.FIX_CORRUPT_BLOCKS(SCHEMA_NAME => 'HR',OBJECT_NAME => 'ZQD0318',FIX_COUNT => fixnum);DBMS_OUTPUT.PUT_LINE('修復壞塊的數量:' || TO_CHAR(fixnum));
END;
--如果在SQLPLUS中執行PLSQL代碼塊,需要在代碼塊末尾加上“/”

4.2.6、?記錄指向壞塊的索引相關信息

????????執行完如下的PLSQL代碼塊后,失效索引相關信息(指向壞塊的索引相關信息)會寫入ORPHAN表。PLSQL代碼塊中的OBJECT_NAME是索引的名字,不是表名;如果有多個索引,需要為每個索引執行DUMP_ORPHAN_KEYS操作。

DECLAREDATAS NUMBER;
BEGINDBMS_REPAIR.DUMP_ORPHAN_KEYS(SCHEMA_NAME => 'HR',OBJECT_NAME => 'IDX_ZQD',OBJECT_TYPE => DBMS_REPAIR.INDEX_OBJECT,REPAIR_TABLE_NAME => 'REPAIR_TABLE',ORPHAN_TABLE_NAME => 'ORPHAN_KEY_TABLE',KEY_COUNT => COUNTS);DBMS_OUTPUT.PUT_LINE('孤立索引數量:' || TO_CHAR(COUNTS));
END;

4.2.7、跳過壞塊

????????執行下面PLSQL代碼塊后,壞塊已被標記跳過。此時增刪改查都不會報錯,但壞塊上的這部分數據也就丟失了。但丟失的數據的ROWID依然可以在ORPHAN表找到。

BEGINDBMS_REPAIR.SKIP_CORRUPT_BLOCKS(SCHEMA_NAME => 'HR',OBJECT_NAME => 'ZQD0318',OBJECT_TYPE => DBMS_REPAIR.TABLE_OBJECT,FLAGS => DBMS_REPAIR.SKIP_FLAG);
END;
--如果在SQLPLUS中執行PLSQL代碼塊,需要在代碼塊末尾加上“/”

4.2.8、重建索引

ALTER INDEX HR.IDX_ZQD REBUILD

4.2.9、驗證結果

SQL> SELECT COUNT(*) FROM HR.ZQD0318;COUNT(*)
----------72542

4.2.10、后續

????????上面的一套組合拳打完,表雖然恢復了訪問、但是也丟失了部分數據。即使丟失的數據可以通過其他方式補回來(例如數據倉庫可以再重新抽取數據),也存在一個問題:壞塊依然存在。

????????此時,將表中的數據全部導出(導出時跳過了壞塊數據),然后重建表;再將導出的數據重新導入到數據庫中;這個過程建議是使用數據泵expdp/impdp操作。操作完畢后,可以徹底消除壞塊。

4.3、BBED

????????BBED:Block Browser and Editor(塊瀏覽器和編輯器)

? ? ? ? BBED直接操作底層數據塊,風險很高,需要非常專業的人士來操作。且操作不可逆,是作為壞塊修復的最后一種手段使用。


5、寫在最后

????????上面簡單介紹了壞塊的3種修復手段;但當真在生產上遇到了壞塊情況,僅憑這篇文章的描述,很難高效解決問題。這篇文章只是基礎了解,想要高效解決壞塊問題,除了基礎以外,需要平時多做模擬演練,定期總結,才能在遇到壞塊時,快速給出最完美的解決方案。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/74243.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/74243.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/74243.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

計算機網絡高頻(二)TCP/IP基礎

計算機網絡高頻(二)TCP/IP基礎 1.什么是TCP/IP?? TCP/IP是一種網絡通信協議,它是互聯網中最常用的協議之一。TCP/IP有兩個基本的協議:TCP(傳輸控制協議)和IP(互聯網協議)。 TCP(Transmission Control Protocol,傳輸控制協議)是一種可靠的、面向連接的協議。它負…

【大模型算法工程】大模型應用工具化、忠誠度以及知識庫場景下PDF雙欄解析問題的討論

1. 大模型時代應用工具化以及無忠誠度現象討論 接觸大模型久了&#xff0c;也慢慢探到一些大模型能力表現非常自然和突出的場景&#xff0c;比如AI搜索&#xff08;依賴大模型的理解總結能力&#xff09;、AI對話&#xff08;即chat&#xff0c;依賴大模型的生成能力&#xff0…

Java EE(13)——網絡編程——UDP/TCP回顯服務器

前言 本文主要介紹UDP和TCP相關的API&#xff0c;并且基于這兩套API實現回顯服務器 UDP和TCP UDP和TCP屬于網絡五層模型中傳輸層的協議 特點&#xff1a; UDP&#xff1a;無連接&#xff0c;不可靠&#xff0c;面向數據包&#xff0c;全雙工 TCP&#xff1a;有連接&#xff…

【藍橋杯】12111暖氣冰場(多源BFS 或者 二分)

思路 這題可以用BFS做&#xff0c;也可以用二分來做。 用二分這里只提供一個思路&#xff1a;對時間來二分查找&#xff0c;check函數就是檢查在特定的時間 t 0 t_0 t0?內每一個暖氣爐的傳播距離能否覆蓋所有格子。 用BFS做&#xff1a; 由幾個點開始向外擴散&#xff0c;知道…

使用bat批量獲取WORD中包含對應字符的段落,段落使用回車換行

get_word_paragraphs.vbs 獲取命令行參數 If WScript.Arguments.Count 0 ThenWScript.Quit 1 End If 獲取 Word 文檔路徑 docPath WScript.Arguments(0) 創建 Word 應用程序對象 Set objWord CreateObject("Word.Application") objWord.Visible False 打開 Word …

DeepSeek自學手冊:《從理論(模型訓練)到實踐(模型應用)》|73頁|附PPT下載方法

導 讀INTRODUCTION 今天分享是由ai呀蔡蔡團隊帶來的DeepSeek自學手冊&#xff1a;《從理論&#xff08;模型訓練&#xff09;到實踐&#xff08;模型應用&#xff09;》&#xff0c;這是一篇關于DeepSeek模型訓練、應用場景及替代方案的綜合指南文章&#xff0c;主要介紹了Deep…

WEB API 設計規范

REST API 簡介 REST 是 Representational State Transfer 的縮寫&#xff0c;它將資源作為核心概念&#xff0c;通過 HTTP 方法對資源進行操作。其本身是一套圍繞資源進行操作的架構規范。在實際應用中&#xff0c;更多的是體現在 API 的設計上。 企業在進行產品設計開發時&a…

QT軟件匠心開發,塑造卓越設計服務

在當今這個數字化飛速發展的時代&#xff0c;軟件已經成為我們生活中不可或缺的一部分。而QT&#xff0c;作為一款跨平臺的C圖形用戶界面應用程序開發框架&#xff0c;憑借其強大的功能和靈活性&#xff0c;在眾多軟件開發工具中脫穎而出。我們深知&#xff0c;在軟件開發領域&…

標貝科技入選2025年市級數據要素市場化配置改革“揭榜掛帥”名單

近日&#xff0c;山東省大數據局、青島市大數據局公布2025年數據要素市場化配置改革“揭榜掛帥”名單。標貝科技聯合嶗山區電子政務和大數據中心申報的“政務熱線通話錄音數據價值挖掘與權益保護”項目成功入選。這一成果不僅彰顯了標貝科技在數據領域的創新實力&#xff0c;更…

Flutter TextField 從入門到精通:掌握輸入框的完整指南

目錄 1. 引言 2. TextField 的基本用法 3. 主要屬性 4. 自定義 TextField 樣式 4.1 自定義邊框與提示文本 4.2 增加前綴/后綴圖標 4.3 只允許輸入數字 4.4 表單驗證系統 4.5 動態樣式修改 4.6 防抖搜索&#xff08;Debounce&#xff09; 5. 結論 相關推薦 1. 引言…

藍橋杯備賽 背包問題

背包問題 ![[背包問題.png]] 01背包 1.題意概要&#xff1a;有 n n n個物品和一個容量為 V V V的背包&#xff0c;每個物品有重量 w i w_i wi?和價值 v i v_i vi? 兩種屬性&#xff0c;要求選若干物品放入背包使背包中物品的總價值最大且背包中物品的總重量不超過背包的容…

MyBatis-Plus 自動填充:優雅實現創建/更新時間自動更新!

目錄 一、什么是 MyBatis-Plus 自動填充&#xff1f; &#x1f914;二、自動填充的原理 ??三、實際例子&#xff1a;創建時間和更新時間字段自動填充 ?四、注意事項 ??五、總結 &#x1f389; &#x1f31f;我的其他文章也講解的比較有趣&#x1f601;&#xff0c;如果喜歡…

arduino R4 SD卡讀寫測試

使用買來的 st7789LCD 顯示器背面就帶著一個 tf 卡槽&#xff0c;可以直接連接 tf 卡。使用 Sdfat 庫就可以實現對 sd 卡的讀寫操作。這里嘗試測試 sd 卡的讀寫功能。 LCD 顯示器的初始化 //定義LCD的對象 Adafruit_ST7789 tft Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);tf…

【武漢·4月11日】Parasoft聯合光庭信息研討會|邀您共探AI賦能新機遇

Parasoft聯合光庭信息Workshop邀您共探AI賦能新機遇 AI浪潮已至&#xff0c;你準備好了嗎&#xff1f; 在智能網聯汽車飛速發展的今天&#xff0c;AI技術正以前所未有的速度重塑行業生態。如何把握AI機遇&#xff0c;賦能企業創新&#xff1f; 4月11日&#xff0c;自動化軟件…

VLLM專題(三十九)—自動前綴緩存(二)

前綴緩存(Prefix Caching)是一種在LLM推理中廣泛使用的優化技術,旨在避免冗余的提示詞(prompt)計算。其核心思想很簡單——我們緩存已處理請求的鍵值緩存(kv-cache)塊,并在新請求的前綴與之前請求相同時重用這些塊。由于前綴緩存幾乎是一種“免費的午餐”,并且不會改變…

自動駕駛系統的車輛動力學建模:自行車模型與汽車模型的對比分析

在自動駕駛系統的車輛動力學建模中&#xff0c;自行車模型&#xff08;Bicycle Model&#xff09;和更復雜的汽車模型&#xff08;如雙軌模型或多體動力學模型&#xff09;各有其適用場景和優缺點。以下是兩者的詳細對比及選擇原因解析&#xff1a; 1. 模型定義與核心差異 特性…

C語言入門教程100講(6)類型修飾符

文章目錄 1. 什么是類型修飾符&#xff1f;2. 常見的類型修飾符3. 類型修飾符的使用3.1 short 和 long3.2 signed 和 unsigned 4. 類型修飾符的組合5. 示例代碼代碼解析&#xff1a;輸出結果&#xff1a; 6. 常見問題問題 1&#xff1a;short 和 long 的具體大小是多少&#xf…

Linux-Ubuntu 系統學習筆記 | 從入門到實戰

&#x1f4d8; Linux-Ubuntu 系統學習筆記 | 從入門到實戰 &#x1f4dc; 目錄 環境安裝基本操作Linux操作系統介紹文件系統常用命令用戶權限管理編輯器vimGCC編譯器動態庫與靜態庫Makefile 1. 環境安裝 &#x1f31f; 下載鏡像 推薦使用清華大學開源鏡像站下載Ubuntu鏡像&a…

防火墻帶寬管理

拓撲 配置 [fw]interface GigabitEthernet 0/0/0 [fw-GigabitEthernet0/0/0]service-manage all permit [fw]interface GigabitEthernet 1/0/0 [fw-GigabitEthernet1/0/0]ip address 12.0.0.1 24 [fw]interface GigabitEthernet 1/0/1 [fw-GigabitEthernet1/0/1]ip ad…

一人系統 之 為什么要做一人系統?

一人系統 之 賺錢認知篇&#xff08;下&#xff09; 本文 2119個字&#xff0c;大概閱讀時間 16分鐘。 在上一篇文章中&#xff0c;主要講了以下三個內容&#xff1a; 什么是好的工作&#xff1f;時薪高&#xff0c;并且有能力提升&#xff0c;而且最終可以獨立創業的工作&…