2012-01-16 74 views
0

是否有可能在oracle中編寫腳本,該腳本根據年齡從表中刪除行。即,我想刪除行s。我有一張有數百萬行的表格,我只想保留最近3個月的行。我有下列列表名稱爲腳本根據年齡或日期從oracle表中刪除數百萬行

我對數據庫的東西很新。我怎樣才能爲此編寫一個腳本?

+1

請自己嘗試,但將它作爲「選擇」查詢來測試您的where子句。一旦確定數據看起來正確,請執行備份,然後切換到實際的「刪除」查詢。 – 2012-01-16 19:32:59

+0

ORA_ROWSCN,我不確定它是否支持Oracle9i – 2012-01-16 19:42:50

+0

@Raghavendar - FEED_DT_TM是什麼數據類型?如果它是'DATE',則不想調用'TO_DATE'。如果它是'VARCHAR2',則幾乎可以肯定地使用與字符串格式匹配的格式掩碼。從數據模型的角度來看,它應該是'DATE'。 – 2012-01-16 20:09:13

回答

1

由於FEED_DT_TMDATE,因此不需要使用TO_DATE將其轉換爲DATE。只要

DELETE FROM your_table_name 
WHERE sysdate - feed_dt_tm >= 120 
+0

非常感謝。我仍然困惑着是否要去刪除一條刪除語句,從我的表中刪除大約1,200萬行。有沒有什麼方法可以執行相同的操作,如編寫腳本並運行它。我擔心執行上述刪除操作需要較長的時間。 – Raghavendar 2012-01-16 21:17:44

+0

@Raghavendar - 還有其他方法可以刪除大量的行。然而,這些方式將花費更長的時間,消耗更多的資源,而且難以編寫和測試。一個'DELETE'語句是刪除大量行的最有效方式。 – 2012-01-16 21:40:24

+0

謝謝先生。我現在清除了我的疑慮。在與我的DBA討論後,我將執行上述操作。其實,我的DBA讓我寫腳本而不是刪除語句,我會讓他知道的 – Raghavendar 2012-01-16 22:48:30

2

隨着單個事務中刪除,你也應該預測,多這麼多行撤銷空間將被使用。您刪除的所有行都將暫時保存在撤消表空間中,以允許您回滾事務,更重要的是,允許其他用戶查看行,直到您提交您的刪除。有關建議請參閱this asktom thread

1

另請考慮將所需的行保留在新表中然後刪除舊錶的選項。

喜歡的東西..

create table new_table_2_months 
as 
select * 
    from table1 
    where date_column > (sysdate-60) 

drop table table1; 

alter table new_table_2_months rename to table1; 

確保你也看看約束,索引和其他對象,如果適用於初始表。不要忘記測試,測試,測試。