程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> Oracle表數據的遷移和刪除基礎教程

Oracle表數據的遷移和刪除基礎教程

編輯:Oracle數據庫基礎
 

最近客戶方要求對某應用系統數據庫的特定表進行數據清理和歸類。由於該表數據量較大,約有700萬條數據。客戶希望將該大表的歷史數據遷移到另一表,遷移的數據量大概有500萬條數據,並在源表刪除遷移的數據量。對此,通過insert和truncate命令來進行表數據遷移和刪除。

正文:
     根據客戶要求和提供的信息,如下:
用戶 源表 歷史表 臨時表 ADMINERP ERP_T1 ERP_T2 ERP_T3         遷移數據 select * from erp_T1 where dorderdate is null or dorderdate<to_date('2013-01-01', 'yyyy-MM-dd') 保留數據   select * from erp_T1 where dorderdate>=to_date('2013-01-01', 'yyyy-MM-dd') 首先我們通過sqlplus以erpadmin用戶登錄:

  1. 創建歷史表,並將遷移數據寫入到ERP_T2

SQL> create table ERP_T2 nologging as select * from erp_T1 where dorderdate is null or dorderdate<to_date ('2013-01-01', 'yyyy-MM-dd');
--------完成對歷史數據的遷移。

  1. 創建臨時表,並將保留數據臨時寫入到ERP_T3

SQL> create table ERP_T3 nologging as select * from erp_T1 where dorderdate>=to_date ('2013-01-01', 'yyyy-MM-dd');

  1. 確認上述兩步沒問題後,利用truncate命令刪除ERP_T1表的全部數據。

SQL> truncate table ERP_T1;
注:truncate命令只用於刪除表數據,不刪除表結構。刪除表數據有truncate和delete。為什麼這裡要用truncate?因為該表數據量大,要是使用delete效率慢,在commit之前可以回滾。但truncate刪除後無法恢復。所以切記清楚這一點。

  1. 通過表ERP_T3向表ERP_T1寫入全部數據。

SQL> insert /*+append */ into ERP_T1 select * from ERP_T3;
注:使用/*+append */可以結合NOLOGGING模式使用,效率提高不少。需要在4之前多執行一條命令:alter table ERP_T1 nologging; 在一個ARCHIVELOG 模式的數據庫上執行NOLOGGING 操作後,必須盡快為受影響的數據文件建立一個新的基准備份,從而
避免由於介質失敗而丟失對這些對象的後續修改。

  1. 刪除臨時表ERP_T3

SQL> DROP TABLE ERP_T3;
--------完成在源表刪除遷移數據。

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved