如何刪除數據庫中重復沒用數據

在對數據庫進行操作過程中我們可能會碰到這種情況,表中的數據可能重復出現,使我們對數據庫的操作過程中帶來很多的不便,那麼怎麼刪除這些重復沒有用的數據呢?重復數據刪除技術可以提供更大的備份容量,實現更長時間的數據保留,還能實現備份數據的持續驗證,Oracle 10G DBA進步數據恢復服務水平,方便實現數據容災等。重復的數據可能有這洋兩種情況,第壹種時表中只有某些字段壹洋,第二種是兩行記錄完全壹洋。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最大的壹條記錄就可以了。
下面是查詢重復數據的壹個例子:
以下是引用片段:
selecta.rowid,a.*from表名a 
  wherea.rowid!= 
  ( 
  selectmax(b.rowid)from表名b 
  wherea.字段1=b.字段1and 
  a.字段2=b.字段2 
  )

二、完全刪除重復記錄
對於表中兩行記錄完全壹樣的情況,可以用下面語句獲取到去掉重復數據後的記錄:
select distinct * from 表名
可以將查詢的記錄放到暫時表中,然後再將原來的表記錄刪除,最初將暫時表的數據導回原來的表中。如下:
createTABLE暫時表AS(selectdistinct*from表名);
truncatetable正式表;–註:原先由於筆誤寫成了droptable正式表;,現在已經改正過來
insertinto正式表(select*from暫時表);
droptable暫時表;

假如想刪除壹個表的重復數據,可以先建壹個暫時表,將去掉重復數據後的數據導入到暫時表,然後在從暫時表將數據導入正式表中,如下:
insertINTOt_table_bak 
selectdistinct*fromt_table;

三、怎樣快速刪除oracle數據庫
最快的方法就進入註冊表 在運行..裏輸入regedit.
依次展開HKEY_LOCAL_MACHINE SOFTWARE
找到ORACLE節點。刪除。
然後刪除ORACLE數據文件,安裝的時候選的路徑。
最初刪除oracle引導文件,在系統盤符的Program Files 裏面刪除oracle文件夾。

1z0-043

10g DBA 1Z0-043考試題庫由KillTest認證題庫網資深IT認證講師和10g DBA產品專家結合PROMETRIC或VUE的真實1Z0-043考試環境最新原題傾心打造。題庫覆蓋了當前最新的真實考題,並且全部附有正確答案,我們承諾題庫對10g DBA 1Z0-043(oracle database 10g:administration ii)考試原題完整覆蓋。1Z0-043題庫助您輕鬆通過認證考試,一次不過全額退款。

You are working on an Oracle Database 10g database that operates in the ARCHIVELOG mode. At 06:00 p.m., you discovered that a table in the SYSTEM tablespace that does not belong to the data dictionary was dropped at 03:00 p.m. What would you do to recover the table?
A.perform point-in-time recovery to recover the table
B.recover the table by using the Flashback Table feature
C.restore the entire database from the most recent backup and open it
D.use the Flashback Transaction Query feature to identify the relevant SQL statement and use it to undrop the table
Correct:A

Your production database is running in the ARCHIVELOG mode and the ARCn process is functional. You have two online redo log groups. Which three background processes would be involved when a log switch happens? (Choose three.)
A.archival
B.log writer
C.database writer
D.system monitor
E.process monitor
F.change tracking writer
Correct:A B C

10g DBA 1Z0-043(oracle database 10g:administration ii)考題由我們的資深IT認證講師和10g DBA產品專家精心打造,包括了當前最新的真實1Z0-043考題,全部附有正確答案。所有購買KillTest 1Z0-043 題庫的客戶都將得到60天的免費升級服務,保證了客戶的一次通過率。KillTest IT認證題庫網助您一次通過10g DBA 1Z0-043考試。