是否有可能在oracle中編寫腳本,該腳本根據年齡從表中刪除行。即,我想刪除行s。我有一張有數百萬行的表格,我只想保留最近3個月的行。我有下列列表名稱爲腳本根據年齡或日期從oracle表中刪除數百萬行
我對數據庫的東西很新。我怎樣才能爲此編寫一個腳本?
是否有可能在oracle中編寫腳本,該腳本根據年齡從表中刪除行。即,我想刪除行s。我有一張有數百萬行的表格,我只想保留最近3個月的行。我有下列列表名稱爲腳本根據年齡或日期從oracle表中刪除數百萬行
我對數據庫的東西很新。我怎樣才能爲此編寫一個腳本?
由於FEED_DT_TM
是DATE
,因此不需要使用TO_DATE
將其轉換爲DATE
。只要
DELETE FROM your_table_name
WHERE sysdate - feed_dt_tm >= 120
非常感謝。我仍然困惑着是否要去刪除一條刪除語句,從我的表中刪除大約1,200萬行。有沒有什麼方法可以執行相同的操作,如編寫腳本並運行它。我擔心執行上述刪除操作需要較長的時間。 – Raghavendar 2012-01-16 21:17:44
@Raghavendar - 還有其他方法可以刪除大量的行。然而,這些方式將花費更長的時間,消耗更多的資源,而且難以編寫和測試。一個'DELETE'語句是刪除大量行的最有效方式。 – 2012-01-16 21:40:24
謝謝先生。我現在清除了我的疑慮。在與我的DBA討論後,我將執行上述操作。其實,我的DBA讓我寫腳本而不是刪除語句,我會讓他知道的 – Raghavendar 2012-01-16 22:48:30
隨着單個事務中刪除,你也應該預測,多這麼多行撤銷空間將被使用。您刪除的所有行都將暫時保存在撤消表空間中,以允許您回滾事務,更重要的是,允許其他用戶查看行,直到您提交您的刪除。有關建議請參閱this asktom thread。
另請考慮將所需的行保留在新表中然後刪除舊錶的選項。
喜歡的東西..
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;
確保你也看看約束,索引和其他對象,如果適用於初始表。不要忘記測試,測試,測試。
請自己嘗試,但將它作爲「選擇」查詢來測試您的where子句。一旦確定數據看起來正確,請執行備份,然後切換到實際的「刪除」查詢。 – 2012-01-16 19:32:59
ORA_ROWSCN,我不確定它是否支持Oracle9i – 2012-01-16 19:42:50
@Raghavendar - FEED_DT_TM是什麼數據類型?如果它是'DATE',則不想調用'TO_DATE'。如果它是'VARCHAR2',則幾乎可以肯定地使用與字符串格式匹配的格式掩碼。從數據模型的角度來看,它應該是'DATE'。 – 2012-01-16 20:09:13