【Oracle篇】rman全庫異機恢復:從RAC環境到單機測試環境的轉移(第四篇,總共八篇)

💫《博主介紹》:?又是一天沒白過,我是奈斯,DBA一名?

💫《擅長領域》:??擅長Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式數據倉庫)、Linux,也在擴展大數據方向的知識面??

💖💖💖大佬們都喜歡靜靜的看文章,并且也會默默的點贊收藏加關注💖💖💖

? ? 在上一篇文章中,我們深入探討了RMAN備份策略的重要性及其制定方法,相信各位對如何構建一個穩健的備份體系已經有了清晰的認識。從這篇文章開始,我們將繼續這一話題,但方向將轉向RMAN的恢復流程,特別是如何從RAC(Real Application Clusters)環境的RMAN備份片中恢復數據到單機環境。

? ? 在企業的數據庫運維過程中,備份和恢復是密不可分的兩個環節。備份提供了數據安全的保障,而恢復則是確保在數據丟失或系統崩潰時能夠迅速恢復業務運行的關鍵。特別是在RAC環境到單機環境的遷移過程中,恢復流程的正確性和高效性更是至關重要。

? ? 本文將詳細介紹 如何使用RMAN從RAC環境的備份片中恢復數據到單機環境 。我們將從恢復前的準備工作講起,涵蓋恢復步驟的每一個環節,包括恢復控制文件、數據文件、參數文件、歸檔等關鍵組件。同時,我們還將討論在恢復過程中可能遇到的問題和解決方案,以確保整個恢復過程的順利進行。

? ? 然而,RMAN所涉及的內容之廣、之深,使得難以在單篇文章中全面涵蓋。所以我將理論、命令、備份策略、異機恢復、壞塊處理等分成八篇文章去講,即使分為八篇也有不少內容沒有涵蓋到,所以這八篇文章都是精華,看完這八篇就可以解決95%以上的RMAN相關工作內容了。八篇文章的內容分別如下:

  • 第一篇:rman物理備份工具的基礎理論概述
  • 第二篇:rman工具實用指南:常用命令詳解與實踐
  • 第三篇:rman標準化全庫備份策略:完整備份or增量備份
  • 第四篇:rman全庫異機恢復:從RAC環境到單機測試環境的轉移(當前篇)
  • 第五篇:rman全庫異機恢復:從單機環境到RAC測試環境的轉移
  • 第六篇:rman時間點異機恢復:從單機環境到單機測試環境的轉移
  • 第七篇:Oracle數據庫物理壞塊處理:rman修復壞塊實踐與案例分析
  • 第八篇:邏輯備份工具expdp(exp)/impdp(imp)和物理備份工具rman的區別和各自的使用場景總匯

? ? ? ? ? ? ? ? ? ?

恢復所使用的rman備份片:

在上篇文章中, 我們都知道了rman有完整備份or增量備份,所以通過那種備份都可以實現全庫的異機恢復 ,但是我的建議使用rman完整備份+歸檔備份即可?,而不建議使用rman基本增量備份+rman差異增量備份+歸檔備份(為什么使用完整備份可以參考上篇文章的原因哦,我有詳細介紹,直通車👉【Oracle篇】rman標準化全庫備份策略:完整備份or增量備份(第三篇,總共八篇)_rman 全量備份-CSDN博客👈),所以這篇文章所使用的rman備份片為rman完整備份+歸檔備份。

? ? ? ? ? ? ?

那么廢話不多說,開始今天的恢復內容!!!

? ? ? ? ? ? ??

RAC源機:

一、對在RAC上的實例進行全庫備份。包括數據文件、控制文件、參數文件、歸檔。備份策略參考👉【Oracle篇】rman標準化全庫備份策略:完整備份or增量備份(第三篇,總共八篇)_rman 全量備份-CSDN博客👈

二、通過nfs或者scp到目標FS數據庫。源庫和異機的備份片的路徑要一致,不然報找不到備份片。如果路徑不一致可以通過catalog將未識別的RMAN備份集注冊到控制文件:

scp拷貝到FS異機的/backup/full目錄下:


? ? ? ? ? ? ??

? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ?

FS異機:

一、FS已經安裝好了一套單機,與源庫實例名可以保持一致,也可以不一致。進行還原文件。

(1)定義一個空實例的SID名,啟動到nomount狀態

注意:db_unique_name、service_names、instance_name不會涉及在控制文件里,但db_name會涉及到控制文件和數據文件頭部中。所以db_name進行異機遷移,不管遷移到FS還是遷移到rac環境,db_name是不能變的。想要變動db_name就只能通過expdp這種邏輯遷移等。

[oracle@11g dbs]$ vi /oracle/app/oracle/product/11.2.0/db_1/dbs/initorcl.ora
*.db_name='orcl'
*.instance_name='orcl'[oracle@11g ~]$ export ORACLE_SID=orcl
SQL> startup nomount

? ? ? ? ??

(2)還原參數文件

[oracle@rac1 ~]$ rman target /
run {
ALLOCATE CHANNEL ch00 TYPE disk;
restore spfile to '/oracle/app/oracle/product/11.2.0/db_1/dbs/spfileorcl.ora' from '/backup/full/orcl_spfile_1684_1_20240123';
release channel ch00;
}SQL> create pfile='/oracle/app/oracle/product/11.2.0/db_1/dbs/pfileorcl.ora' from spfile='/oracle/app/oracle/product/11.2.0/db_1/dbs/spfileorcl.ora';[oracle@11g dbs]$ vi /oracle/app/oracle/product/11.2.0/db_1/dbs/pfileorcl.ora
*.audit_file_dest='/oracle/app/oracle/admin/orcl/adump'
*.audit_trail='NONE'
*.compatible='11.2.0.4.0'
*.db_block_size=8192
*.db_domain=''
*.db_files=8192
*.db_name='orcl'
*.instance_name='orcl'
*.diagnostic_dest='/oracle/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.log_archive_format='%t_%s_%r.arc'
*.memory_target=2306867200
*.remote_login_passwordfile='exclusive'
*.log_archive_dest_1='location=/oracle/app/oracle/product/11.2.0/db_1/dbs/arch'SQL> create spfile='/oracle/app/oracle/product/11.2.0/db_1/dbs/spfileorcl.ora' from pfile='/oracle/app/oracle/product/11.2.0/db_1/dbs/pfileorcl.ora';
SQL> shutdown immediate
SQL> startup nomount
SQL> show parameter spfile

? ? ? ? ? ? ? ?

(3)還原控制文件

[oracle@lf ~]$ rman target /
run {
ALLOCATE CHANNEL ch00 TYPE disk;
restore controlfile to '/oracle/app/oracle/oradata/orcl/control.ctl' from '/backup/full/orcl_ctl_1683_1_20240123';
release channel ch00;
}修改控制文件的參數,啟動至mount狀態:
SQL> show parameter control
SQL> alter system set control_files='/oracle/app/oracle/oradata/orcl/control.ctl' scope=spfile;  
SQL> shutdown immediate
SQL> startup mount
SQL> show parameter control   

? ? ? ? ? ?

(4)重命名redo日志組

注意:1)通過rman定義set newname for logfile設置路徑失敗,所以只能在sqlplus中重命名redo日志組。12c版本之后可能支持了在rman中定義set newname for logfile(待驗證)

? ? ? ? ? 2)只進行重命名redo日志組操作,先不進行刪除和重建redo日志組,如果同時進行重建redo日志組,就會導致在后續追歸檔日志階段不能應用歸檔日志(執行recover database using backup controlfile until cancel;命令,報錯ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below ORACLE)

? ? ? ? ? ?3)先還原數據文件然后再重命名redo日志組,可能會導致v$logfile里面日志組的路徑全部直接成為了+ASM磁盤組沒有具體路徑的情況,比如:全部都成了+DATA這樣,這樣的話部分日志組因為當前在用刪除不了,并且重命名redo日志組是需要具體路徑的,但是都變成了+DATA就沒有辦法識別到是哪一個日志組。所以先進行redo日志組的重命名,然后再進行數據文件還原,就可以避免這個問題。

SQL> select * from v$logfile;         ---重做日志組
SQL> select * from v$standby_log;    ---鏡像日志組(dg)

SQL> 
alter database rename file '+DATA/orcl/onlinelog/group_1.266.1140875825' to '/oracle/app/oracle/oradata/orcl/redo1.log';
alter database rename file '+DATA/orcl/onlinelog/group_2.257.1140875825' to '/oracle/app/oracle/oradata/orcl/redo2.log';
alter database rename file '+DATA/orcl/onlinelog/group_3.275.1140875827' to '/oracle/app/oracle/oradata/orcl/redo3.log';
alter database rename file '+DATA/orcl/onlinelog/group_4.276.1140875827' to '/oracle/app/oracle/oradata/orcl/redo4.log';
alter database rename file '+DATA/orcl/onlinelog/group_5.281.1140882455' to '/oracle/app/oracle/oradata/orcl/redo5.log';
alter database rename file '+DATA/orcl/onlinelog/group_6.293.1140883981' to '/oracle/app/oracle/oradata/orcl/redo6.log';
alter database rename file '+DATA/orcl/onlinelog/group_7.294.1140883981' to '/oracle/app/oracle/oradata/orcl/redo7.log';
alter database rename file '+DATA/orcl/onlinelog/group_8.295.1140883981' to '/oracle/app/oracle/oradata/orcl/redo8.log';

? ? ? ? ? ??

(5)還原數據文件

注意:rman備份記錄在控制文件中,啟動到mount狀態時,就可以查到rman的備份信息。在恢復數據文件時,會自動找備份片的位置進行恢復,所以源庫和異機的備份片的路徑要一致,不然報找不到備份片。如果路徑不一致可以通過catalog將未識別的RMAN備份集注冊到控制文件。

RMAN> CATALOG START WITH '/backup/full';   ---注冊目錄(多用于批量注冊歸檔,也可以用于注冊備份片)
RMAN> report schema;                       ---顯示實例的信息。根據數據文件和臨時文件ID恢復

RMAN>
run {
ALLOCATE CHANNEL ch00 TYPE disk;
ALLOCATE CHANNEL ch01 TYPE disk;
###還原數據文件到新的路徑
set newname for datafile 1 to '/oracle/app/oracle/oradata/orcl/system.259.1140874089';
set newname for datafile 2 to '/oracle/app/oracle/oradata/orcl/sysaux.260.1140874091';
set newname for datafile 3 to '/oracle/app/oracle/oradata/orcl/undotbs1.261.1140874091';
set newname for datafile 4 to '/oracle/app/oracle/oradata/orcl/undotbs2.263.1140874093';
set newname for datafile 5 to '/oracle/app/oracle/oradata/orcl/users.264.1140874093';
set newname for datafile 6 to '/oracle/app/oracle/oradata/orcl/itpux.277.1140877153';
set newname for datafile 7 to '/oracle/app/oracle/oradata/orcl/liu.472.1158545801';
set newname for datafile 8 to '/oracle/app/oracle/oradata/orcl/liu.427.1153721763';
###還原臨時文件到新的路徑
set newname for tempfile 1 to '/oracle/app/oracle/oradata/orcl/temp.262.1140874091';
###自動全庫恢復。restore database會導致所有文件覆蓋還原所以謹慎,restore datafile是指定單個文件從rman中還原。
restore database;           
###將已發出SET NEWNAME for DATAFILE命令的所有數據文件切換為其新名稱。如果是asm管理的文件可能在設置路徑時出現問題,導致控制文件的路徑和物理路徑不對應。所以建議源庫為asm轉文件系統時不設置這個參數,手動注冊和通知控制文件路徑catalog datafilecopy和switch datafile。
switch datafile all;  
release channel ch00;
release channel ch01;
}

? ? ? ? ? ? ? ? ?

(6)查看數據文件頭部和控制文件頭部還原的時間

SQL> select name from v$datafile;SQL> SELECT FILE#,to_char(checkpoint_change#,'999999999999') ,TO_CHAR(CHECKPOINT_TIME,'YYYY-MM-DD HH24:MI:SS') CPTIME FROM v$datafile_header;       ---數據文件頭部SQL> SELECT FILE#,to_char(checkpoint_change#,'999999999999'),TO_CHAR(CHECKPOINT_TIME,'YYYY-MM-DD HH24:MI:SS') CPTIME FROM V$DATAFILE;            ---控制文件頭部

? ? ? ? ?

二、恢復數據

(1)還原歸檔

注意:先執行一遍recover database using backup controlfile until cancel;和v$datafile_header、V$DATAFILE就會輸出當前恢復的SCN時間,然后根據時間再決定恢復幾天的歸檔,或者也會顯示從那個歸檔開始恢復,確定了開始恢復的歸檔號之后,就按照序列號恢復RESTORE ARCHIVELOG sequence,恢復到最新的序列號通過list backup查看最后一個備份的歸檔號。

RMAN> 
run{
ALLOCATE CHANNEL ch00 TYPE disk;
set archivelog destination to '/backup/arch';
restore archivelog from time 'sysdate-10';
release channel ch00;
}      ---如果恢復報錯no backup of archived log,根據序列號恢復RESTORE ARCHIVELOG sequence BETWEEN 5877 AND 5971 thread 2; 

? ? ? ? ? ? ?

(2)追歸檔日志(使用備份的控制文件恢復時,控制文件會根據歸檔追scn,同時數據文件的scn也會恢復的最新)? ?

SQL> set logsource /backup/arch;   ---set logsource +路徑:設置的是數據庫讀取歸檔的路徑,默認的讀取的路徑是archive log list,如果通過rman恢復的是其他路徑,那么就需要重新設置一下讀取歸檔的路徑。SQL> recover database using backup controlfile until cancel;
auto
SQL> recover database using backup controlfile until cancel;
CancelSQL> SELECT FILE#,to_char(checkpoint_change#,'999999999999') ,TO_CHAR(CHECKPOINT_TIME,'YYYY-MM-DD HH24:MI:SS') CPTIME FROM v$datafile_header;       ---數據文件頭部SQL> SELECT FILE#,to_char(checkpoint_change#,'999999999999'),TO_CHAR(CHECKPOINT_TIME,'YYYY-MM-DD HH24:MI:SS') CPTIME FROM V$DATAFILE;            ---控制文件頭部

? ? ? ? ? ? ? ?

(3)刪除不必要的redo日志組

SQL> select * from v$logfile;         ---重做日志組
SQL> select * from v$standby_log;    ---鏡像日志組(dg)

SQL> 
alter database drop logfile group 5;
alter database drop logfile group 6;
alter database drop logfile group 7;
alter database drop logfile group 8;   

? ? ? ? ? ? ??

(4)重建臨時文件

SQL> shutdown immediate
SQL> startup
SQL> alter database open resetlogs; 
SQL> select * from v$tablespace;        ---表空間中有temp表空間但是告警日志中顯示需要重建信息的temp數據文件

temp臨時文件的路徑還是+ASM磁盤組,所以新增一個臨時文件,然后刪除臨時文件為1的+ASM磁盤組的臨時文件:
SQL> select * from v$tempfile;    

SQL> alter tablespace temp add tempfile '/oracle/app/oracle/oradata/orcl/temp.dbf' size 31G autoextend off;
SQL> alter tablespace temp drop tempfile 1;
注意:如果刪除臨時文件失敗,需要先刪除臨時表空間,然后重建。

? ? ? ? ?

(5)禁用重做日志線程2。因為原先是rac環境,所以每個實例都是獨立的redo線程,現在恢復到單機只需要1個redo線程,單機只會在線程1的日志組來回切換

SQL> select * from v$logfile;         ---重做日志組
SQL> select * from v$standby_log;     ---鏡像日志組(dg)
SQL> select * from v$log;             ---rac環境下有多個線程的重做日志組,所以在單機環境下重做日志只保留線程1

SQL> alter database disable thread 2;   ---禁用重做日志線程2
SQL> 
alter database drop logfile group 3;
alter database drop logfile group 4;

? ? ? ? ? ?

(6)刪除UNDOTBS2表空間(undo同redo一樣是分線程的)

SQL> drop tablespace UNDOTBS2 including contents and datafiles;

? ? ? ?

三、啟動單機數據庫

SQL> shutdown immediate
SQL> startup   

? ? ? ? ??

四、物理遷移完成查看狀態

(1)通過rman恢復的實例是和生產環境一模一樣的,所以只需要做后續參數部分的優化

參數優化參考RAC環境的配置即可😄

? ??

(2)檢查實例情況

數據庫文件和undo:
set linesize 500 
set pagesize 99
col file_name for a70 
col file_id for 9999999 
col status for a10 
col ts_name for a25 
col cur_mb for 99999 
col max_mb for 99999
select status, file_id, file_name, tablespace_name ts_name,blocks/128 tolal_mb, maxblocks/128 max_mb,AUTOEXTENSIBLE from dba_data_files order by file_name;temp臨時表空間:
select username,temporary_tablespace from dba_users;
set linesize 230
col file_name for a65
select  FILE_ID,FILE_NAME,TABLESPACE_NAME,bytes/1024/1024 tolal_mb,status,AUTOEXTENSIBLE,MAXBYTES/1024/1024 max_mb from dba_temp_files;redo重做日志:
set linesize 230
col member for a50
select * from v$logfile;
select * from v$log;查看數據庫實例的狀態和模式:
select  instance_name , status  from  v$instance ;
select  name, open_mode  from  v$database ;

? ? 兄弟們關于《rman全庫異機恢復:從RAC環境到單機測試環境的轉移》這篇文章就到這里啦,我自己覺得這篇文章寫的非常詳細了,并且我自己也在多次恢復中驗證過,所以各位希望各位可以 收藏、點贊、加關注 ,既然講解了從生產RAC環境到單機測試恢復,那么就不得不提從生產單機環境到RAC測試恢復,那么下篇將帶來《rman全庫異機恢復:從單機環境到RAC測試環境的轉移》哦。

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

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

相關文章

【TensorFlow深度學習】深度學習中的損失函數種類與適用場景

深度學習中的損失函數種類與適用場景 深度學習中的損失函數種類與適用場景:精確度量模型誤差的藝術一、均方誤差(Mean Squared Error, MSE)二、交叉熵損失(Cross-Entropy)三、Hinge損失(Margin Loss&#x…

ROS RViz觀測傳感器數據

ROS RViz觀測傳感器數據 The Robot Visualization Tool 可視化工具 機器人傳感器采集到的數據都可以圖形化的顯示在這個軟件里,機器人運算處理的中間結果,和即將要執行的目標指示,比如機器人對空間中某個物體進行識別后,我們可以…

【Linux】Linux工具——make/Makefile

1.背景 會不會寫makefile,從一個側面說明了一個人是否具備完成大型工程的能力一個工程中的源文件不計數,其按類型、功能、模塊分別放在若干個目錄中,makefile定義了一系列的 規則來指定,哪些文件需要先編譯,哪些文件需…

Edge 工作區是什么?它都有哪些作用?

什么是工作區 Edge 工作區是什么?它是微軟 Edge 瀏覽器中的一個功能,在幫助用戶更好地組織和管理他們的瀏覽會話。通過工作區,用戶可以創建多個獨立的瀏覽環境,每個工作區內包含一組相關的標簽頁和瀏覽器設置。這使得用戶能夠根據…

SQL進階day9————聚合與分組

目錄 1聚合函數 1.1SQL類別高難度試卷得分的截斷平均值 1.2統計作答次數 1.3 得分不小于平均分的最低分 2 分組查詢 2.1平均活躍天數和月活人數 2.2 月總刷題數和日均刷題數 2.3未完成試卷數大于1的有效用戶 1聚合函數 1.1SQL類別高難度試卷得分的截斷平均值 我的錯誤…

開放式耳機十大品牌推薦!怎么選耳機看這六招!

隨著耳機廠家的瘋狂內卷,以前讓學生黨望其項背的千元耳機技術,紛紛被廠家下沉至百元耳機,是以2024年始,百元開放式耳機以新物種、價低格而爆火。看到身邊朋友爭相購買開放式耳機,既當耳飾,又當耳機&#xf…

分享:2024年(第12屆)“泰迪杯”數據挖掘挑戰賽成績公示

2024年(第12屆)“泰迪杯”數據挖掘挑戰賽歷時兩個月順利結束。競賽采用盲審(屏蔽參賽者信息;評審專家只能評閱非本區域作品;三位評閱專家同時評閱同一作品,超限調整后再取平均分),答…

redis做為緩存,mysql的數據如何與redis進行同步呢?

讓我們一步步來實現如何讓MySQL數據庫的數據和Redis緩存保持同步。想象一下,MySQL是一個大倉庫,存放著所有重要的貨物(數據),而Redis則像是一個快速取貨窗口,讓你能更快拿到常用的東西。為了讓兩者保持一致…

FC-135是一款受歡迎的32.768kHz晶振

KHZ中愛普生是以32.768KHZ最為出名的。32.768K晶振是一款數字電路板都要使用到的重要部件,有人比喻為電路板的冰發生器,也就是說心如果停止了跳動,那么電路板也將無法進行穩定的工作了,愛普生晶振FC-135是一款受歡迎的32.768KHz晶…

ALOS PALSAR 產品介紹

簡介 L1.0 產品 該產品由原始觀測數據(0 級)通過數據編輯(如位重新調整和添加軌道信息)生成。它是重建的、未經處理的信號數據,帶有輻射和幾何校正系數(附加但未應用)。 L1.1 產品 該產品由…

Java Web學習筆記13——JSON

JavaScript自定義對象 定義格式&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Js-對…

前端面試題日常練-day57 【面試題】

題目 希望這些選擇題能夠幫助您進行前端面試的準備&#xff0c;答案在文末 1. 在PHP中&#xff0c;以下哪個符號用于連接兩個字符串&#xff1f; a) b) . c) , d) : 2. PHP中的預定義變量$_SESSION用于存儲什么類型的數據&#xff1f; a) 用戶的輸入數據 b) 瀏覽器發送的…

前后端不分離與前后端分離的Java Web開發對比介紹

在現代Web開發中&#xff0c;前后端架構設計有兩種主要模式&#xff1a;前后端不分離和前后端分離。本文將詳細介紹這兩種模式&#xff0c;展示如何使用Spring Boot開發應用&#xff0c;并提供可運行的示例代碼。 前后端不分離的Java Web開發 在前后端不分離的架構中&#xf…

Linux 命令 `uniq`:去重利器

Linux 命令 uniq&#xff1a;去重利器 在 Linux 系統中&#xff0c;處理文本數據是日常任務中不可或缺的一部分。當我們面對大量重復的數據行時&#xff0c;如何高效地去除這些重復項成為了一個值得探討的話題。這時&#xff0c;uniq 命令就派上了用場。本文將介紹 uniq 命令的…

走進AI大模型的瘦身房,看看如何把大模型塞進我們的手機里

人工智能的廣泛應用已經改變了我們的生活方式。從智能助手到自動駕駛汽車&#xff0c;AI技術正變得越來越普及。然而&#xff0c;這些AI大模型往往參數眾多&#xff0c;體積龐大&#xff0c;需要依賴龐大的網絡計算資源&#xff0c;如何讓大模型能在個人電腦&#xff0c;甚至手…

【docker】 /bin/sh: ./mvnw: No such file or directory解決方案.dockerignore被忽略

報錯如下&#xff1a;解決方案很簡單&#xff0c;但是容易讓大家忽視的問題。 > CACHED [stage-1 2/4] WORKDIR /work/ …

【Android面試八股文】使用equals和==進行比較的區別?

使用equals和==進行比較的區別 這道題想考察什么 ? 在開發中當需要對引用類型和基本數據類型比較時應該怎么做,為什么有區別。 考察的知識點 equals 的實現以及棧和堆的內存管理 考生應該如何回答 在 Java 中,equals() 方法和 == 運算符用于比較對象之間的相等性,但它…

數據賦能(111)——體系:監控數據采集——概述、關注焦點

概述 監控數據采集是指對數據采集過程進行實時的監視和控制&#xff0c;以確保數據的準確性、完整性和可用性。監控數據采集旨在及時發現并解決數據采集過程中出現的問題&#xff0c;保證數據的穩定性和可靠性。 監控數據采集的主要目的是確保數據的準確性、完整性和可用性。…

要改進單例模式的實現以確保線程安全并優化性能,有幾種常見的方法

要改進單例模式的實現以確保線程安全并優化性能&#xff0c;有幾種常見的方法。以下是幾種改進 ThreadUtil 單例實現的方法&#xff1a; ### 1. 懶漢式&#xff08;線程安全版&#xff09; 使用同步機制來確保線程安全&#xff0c;但只在第一次創建實例時同步&#xff0c;這樣…

正則匹配規則

正則表達式&#xff1a;查找某字符串開始和某字符串結束的字符串 a.*?b 查找以a開始&#xff0c;并且以b結束的字符串 例如&#xff1a; 字符串為&#xff1a;上海12345abcd.opi,.<>北京 patten &#xff1a;上海.*?北京 結果&#xff1a;上海12345abcd.opi,.<>…