高效刪除Oracle中重複數據的方法

2020-12-11 IT168

【IT168 技術文章】
       在對資料庫進行操作過程中我們可能會遇到這種情況,表中的數據可能重複出現,使我們對資料庫的操作過程中帶來很多的不便,那麼怎麼刪除這些重複沒有用的數據呢?

  重複數據刪除技術可以提供更大的備份容量,實現更長時間的數據保留,還能實現備份數據的持續驗證,提高數據恢復服務水平,方便實現數據容災等。 重複的數據可能有這樣兩種情況,第一種時表中只有某些欄位一樣,第二種是兩行記錄完全一樣。Oracle資料庫重複數據刪除技術有如下優勢:更大的備份容量、數據能得到持續驗證、有更高的數據恢復服務水平、方便實現備份數據的容災。

  一、刪除部分欄位重複數據

  先來談談如何查詢重複的數據吧。

  下面語句可以查詢出那些數據是重複的:

  select 欄位1,欄位2,count(*) from 表名 group by 欄位1,欄位2 having count(*) > 1

  將上面的>號改為=號就可以查詢出沒有重複的數據了。

  想要刪除這些重複的數據,可以使用下面語句進行刪除

  delete from 表名 a where 欄位1,欄位2 in

  (select 欄位1,欄位2,count(*) from 表名 group by 欄位1,欄位2 having count(*) > 1)

  上面的語句非常簡單,就是將查詢到的數據刪除掉。不過這種刪除執行的效率非常低,對於大數據量來說,可能會將資料庫吊死。所以我建議先將查詢到的重複的數據插入到一個臨時表中,然後對進行刪除,這樣,執行刪除的時候就不用再進行一次查詢了。如下:

  CREATE TABLE 臨時表 AS

  (select 欄位1,欄位2,count(*) from 表名 group by 欄位1,欄位2 having count(*) > 1)

  上面這句話就是建立了臨時表,並將查詢到的數據插入其中。

  下面就可以進行這樣的刪除操作了:

  delete from 表名 a where 欄位1,欄位2 in (select 欄位1,欄位2 from 臨時表);

  這種先建臨時表再進行刪除的操作要比直接用一條語句進行刪除要高效得多。

  這個時候,大家可能會跳出來說,什麼?你叫我們執行這種語句,那不是把所有重複的全都刪除嗎?而我們想保留重複數據中最新的一條記錄啊!大家不要急,下面我就講一下如何進行這種操作。

  在oracle中,有個隱藏了自動rowid,裡面給每條記錄一個唯一的rowid,我們如果想保留最新的一條記錄,

  我們就可以利用這個欄位,保留重複數據中rowid最大的一條記錄就可以了。
 下面是查詢重複數據的一個例子:
  select a.rowid,a.* from 表名 a
  where a.rowid !=
  (
  select max(b.rowid) from 表名 b
  where a.欄位1 = b.欄位1 and
  a.欄位2 = b.欄位2
  )


  下面我就來講解一下,上面括號中的語句是查詢出重複數據中rowid最大的一條記錄。

  而外面就是查詢出除了rowid最大之外的其他重複的數據了。

  由此,我們要刪除重複數據,只保留最新的一條數據,就可以這樣寫了:
  delete from 表名 a
  where a.rowid !=
  (
  select max(b.rowid) from 表名 b
  where a.欄位1 = b.欄位1 and
  a.欄位2 = b.欄位2
  )


  隨便說一下,上面語句的執行效率是很低的,可以考慮建立臨時表,講需要判斷重複的欄位、rowid插入臨時表中,然後刪除的時候在進行比較。
  create table 臨時表 as
  select a.欄位1,a.欄位2,MAX(a.ROWID) dataid from 正式表 a GROUP BY a.欄位1,a.欄位2;
  delete from 表名 a
  where a.rowid !=
  (
  select b.dataid from 臨時表 b
  where a.欄位1 = b.欄位1 and
  a.欄位2 = b.欄位2
  );
  commit;

 

二、完全刪除重複記錄

  對於表中兩行記錄完全一樣的情況,可以用下面語句獲取到去掉重複數據後的記錄:

  select distinct * from 表名

  可以將查詢的記錄放到臨時表中,然後再將原來的表記錄刪除,最後將臨時表的數據導回原來的表中。如下:

  CREATE TABLE 臨時表 AS (select distinct * from 表名);

  truncate table 正式表; --註:原先由於筆誤寫成了drop table 正式表;,現在已經改正過來

  insert into 正式表 (select * from 臨時表);

  drop table 臨時表;

  如果想刪除一個表的重複數據,可以先建一個臨時表,將去掉重複數據後的數據導入到臨時表,然後在從

  臨時表將數據導入正式表中,如下:
  INSERT INTO t_table_bak
  select distinct * from t_table;

 三、怎樣快速刪除oracle資料庫

  最快的方法就進入註冊表 在運行..裡輸入regedit.

  依次展開HKEY_LOCAL_MACHINE SOFTWARE

  找到ORACLE節點。刪除。

  然後刪除ORACLE數據文件,安裝的時候選的路徑。

  最後刪除oracle引導文件,在系統盤符的Program Files 裡面刪除oracle文件夾。

 

相關焦點

  • Oracle資料庫刪除重複數據的情況!
    【IT168 論壇採風】在對資料庫進行操作過程中我們可能會遇到這種情況,表中的數據可能重複出現,使我們對資料庫的操作過程中帶來很多的不便,那麼怎麼刪除這些重複沒有用的數據呢?
  • oracle資料庫快速刪除重複記錄方式
    ROWID是數據的詳細地址,通過rowid,oracle可以快速的定位某行具體的數據的位置。ROWID可以分為物理rowid和邏輯rowid兩種。普通的表中的rowid是物理rowid,索引組織表(IOT)的rowid是邏輯rowid。
  • 刪除數據重複項,Excel中的這3種方法簡單高效
    種種原因造成數據表中的數據存在重複現象, 刪除重複數據是數據清洗的首要任務。今天,就給大家分享3種方法,以幫助大家快速刪除Excel中的重複數據。刪除重複項是 Excel 提供的數據去重功能, 可以快速刪除重複項, 具體操作步驟如下。步驟 01 執行刪除重複值命令。
  • Excel工作表中,刪除重複數據的2種方法解讀,高效且實用!
    在實際的工作中,經常要對工作表中重複的數據進行刪除,如若數據行只有幾條,則可通過人工查找出來,如若數據行較多,這種方法就費時費力,而且容易出錯,造成對表格數據的準確性和個人能力的懷疑
  • 快速刪除重複記錄(Oracle&SqlServer)
    >  資料庫中刪除重複記錄一直是件挺煩人的事,本人收集了Oracle跟SqlServer的快速刪除重複記錄的方法,供大家參考,希望對大家有所幫助。SQL SERVER  想必每一位SQL SERVER開發人員都有過類似的經歷,在對資料庫進行查詢或統計的時候不時地會碰到由於表中存在重複的記錄而導致查詢和統計結果不準確。解決該問題的辦法就是將這些重複的記錄刪除,只保留其中的一條。
  • oracle數據脫敏工具-安華金和
    【oracle數據脫敏系統功能】功能一:敏感數據發現oracle數據脫敏系統能夠按照用戶指定的一部分敏感數據或預定義的敏感數據特徵,在執行任務過程中對抽取的數據進行自動的識別並發現敏感數據。敏感數據梳理在敏感數據自動發現基礎上,人工輔助對數據列、敏感數據關係的調整,達到更精細準確敏的感數據管理。功能三:數據子集管理oracle數據脫敏系統支持對目標資料庫中一部分數據進行脫敏,用戶可指定過濾條件,對數據來源進行過濾篩選形成數據子集,適應不同場景下脫敏需求。
  • Excel快速查詢刪除重複數據,這三個方法最簡單高效
    在用Excel處理數據的過程中,我們比較擔心的一個問題就是大量數據中出現許多的重複數據內容。今天我們就來學習三個最簡單的查找刪除重複數據的方法。案例說明:如下圖,我們需要核對剩餘庫存單號中是否還存在已經出庫的單號。
  • Excel教程:刪除重複數據的4種方法!趕緊Get!
    Q:我也想像那些大神一樣用Excel函數來刪除重複數據,你可以給我寫一個公式嗎? A:怎樣的數據源,先截圖看看。 Q:收到多個銷售員發過來的客戶跟進名單,由於要匯總,所以發現不同銷售員的名單中有重複的客戶姓名,現在需要把重複的刪除。請幫我寫一條函數公式,可以嗎?
  • Excel中刪除重複數據的4種方法分享,快點學習吧
    今天給大家分享的是刪除重複值數據的幾種方法,我們在實際工作中經常會遇到錄入的數據內容重複的現象,那如何實現重複值的快速刪除呢,今天給大家分享4種方法,讓你再遇到類似的情況不再發愁。數據示例如下:方法一、 數據-刪除重複項這種方法是我們經常使用的,操作也很簡單,首先選中需要刪除重複值的數據區域,點擊菜單欄中【數據】-【刪除重複項】即可。可以看到重複的內容已經全部刪除了。
  • 你會刪除重複數據嗎?四種方法送給你!【Excel教程】
    A:怎樣的數據源,先截圖看看。   Q:收到多個銷售員發過來的客戶跟進名單,由於要匯總,所以發現不同的銷售員的名單有重複的客戶姓名,現在需要把重複的刪除。請幫我寫一條函數公式,可以嗎?    A:excel刪除重複數據,方法有很多種,不一定要用公式啊,上面的數據源用公式不是最快的方法。
  • 如何快速刪除表格區域中的重複數據
    在Excel工作表中處理數據時,如果其中的重複項太多,則核對起來相當麻煩。此時我們可以利用刪除重複值功能刪除重複數據。如果要刪除工作表中的重複數據,具體操作方法如下。第1步:打開文件所在位置,在數據區域中選中任意單元格;切換到(數據)選項卡;在(數據工具)組中單擊(刪除重複項)按鈕,如下圖所示。第2步:彈出(刪除重複項)對話框,在(列)列表框中選擇需要進行重複值檢查的列;單擊(確定)按鈕,如下圖所示。
  • MySQL如何刪除重複數據
    MySQL中經常會遇到重複的數據,那麼當我們遇到重複的時候的時候,如果定位哪些數據是有重複的記錄?如何刪除重複的數據?我們該怎麼做呢?接下來我們一步步來分析一下遇到這樣的情況後,該如何處理。這裡包含了非重複的時候和每一組重複的數據中id最小的數據行。刪除重複的數據方法一這是最笨的一種方式,也是最容易理解的一種方式,效率也比較低。
  • 在Excel2007中快速刪除重複記錄的方法
    正在閱讀:在Excel2007中快速刪除重複記錄的方法在Excel2007中快速刪除重複記錄的方法2007-12-07 09:44出處:其它網站作者:佚名>  在Excel中錄入數據後,我們一般用高級篩選來處理刪除重複的記錄,Excel 2007保留了這個功能,同時又增加了一個「刪除重複項」按鈕,使操作更加簡單、靈活。
  • excel刪除重複數據保留一條
    EXCEL中刪除重複內容只保留一個,可使用數據工具中的「刪除重複項」實現。第一種方法步驟如下:1、打開需要操作的EXCEL表格,選中需要刪除重複內容的數據列,點擊工具欄的「數據」項。2、找到數據工具,點擊「刪除重複項」。3、選擇「全選」,然後點擊下面的確定按鈕即可。4、返回EXCEL表格,可發現已成功刪除重複內容只保留一個。
  • 如何在Excel中一鍵刪除重複數據
    以下面這張表格為例:我們可以看到,這張表共有4列22行數據,分別是序號、姓名、國籍、籍貫。在實際工作中,我們要處理的數據可能要多得多。可以看出,在這張表中,第2行和第21行的數據重複,第16行和第22行的數據重複。下面,我們來看看如何一鍵刪除重複的數據。
  • 我們是如何刪除 PB 級重複數據的?
    可恢復性:保留重複數據從而在配置錯誤時可以回滾可維護性:最小化運營負載最新技術:接入 - 時間去重業界有很多富有創造性的方法來解決數據去重問題。但是,這種方法並不符合我們的要求,原因如下:√ 擴展性:分片鍵值存儲可以水平擴展× 低成本:需要一個單獨的資料庫和基礎設施來保存重複數據× 可追溯性:只能抓取一定時間段的重複數據× 可恢復性:抓取時丟棄數據
  • Excel快速刪除重複項的幾種方法,適用於各種版本,簡單高效
    拿到一個Excel工作表,表格中有許多重複數據,如何才能快速刪除這些重複數據呢?Microsoft Excel 2007及以上版本提供了快速刪除重複項的工具,操作方便,幾秒鐘就能夠完成,那低版本的Excel該如何操作呢?
  • EXCEL巧用數據透視表,快速刪除重複項,辦公如此高效!
    在上篇教程中,我們講解了如何用【篩選】命令對重複項進行刪除,今天我們再講解另一種方法,我們還可以使用【數據透視表】命令,也可以刪除重複項。數據透視表大家應該也不陌生,我們在日常工作中也會用到,前面我們也講過相關的教程,今天,我們通過數據透視表這個命令,來刪除重複的數據。
  • excel表格中刪除重複數據保留一條
    excel表格中刪除重複數據只保留一條,看似很麻煩,其實Excel表格自己就提供了最簡單的「去重」功能。只需選中所需去重內容,點擊一下就會將重複數據去掉。以下圖中數據為例:在「數據」中找到「刪除重複項」後,點擊。
  • Oracle 數據文件轉移:[1]表空間-百家號 - 百度經驗
    Oracle 數據文件轉移    當存放數據文件的存儲空間不足之後,需要將部分數據文件轉移到其他存儲上,有一種方法是通過offline表空間來達到目的。   資料庫處於open狀態需求確定:1:確定需求操作步驟:1:停止監聽或者重啟資料庫(目的是保證應用不連接資料庫)2:設置表空間為read only 3:設置表空間為 offline狀態4:複製數據文件到新的路徑5:rename 轉移數據文件6:設置表空間 online 狀態7:設置表空間為 read write8:刪除原路徑中已經複製的數據文件注意:這裡是轉移的是應用表空間,對系統表空間system、