Oracle 不同用户之间 大量数据转移的方法测试
?
?????? 上個星期,一個朋友問我,同一個實例上,將某張表從A用戶下移動到B用戶。 表有1億+條記錄。 表很大。 當時說的方法的是用create table name as select * from B .tbname.
?
?????? 因為記錄比較多,也不知道用這種方法的效率怎么樣。 之前本本上有2個dump的測試庫。 上次一不小心刪了一個dump文件。 現在就剩一個。 剛才導入了一下。最大的分區表記錄1200w. 數據量沒有朋友的那個生產庫大。 不過可以測試一下。
?
?????? 這里測試的同一個實例下的。 如果是不同實例間,可以采用數據泵+并行, 這樣速度也會很快。 具體參考:
?????? Oracle 插入大量數據
?????? http://blog.csdn.net/tianlesoftware/archive/2009/10/29/4745144.aspx
?
?????? exp/imp 與 expdp/impdp 對比 及使用中的一些優化事項
?????? http://blog.csdn.net/tianlesoftware/archive/2010/12/23/6093973.aspx
?
?
先看表的信息:
SQL> select sum(bytes)/1024/1024/1024 "GB" from dba_extents where SEGMENT_NAME='TAGENTOPRINFO' and owner='ICD';
?
??????? GB
----------
?? 1.03125
--單張分區表1G
?
SQL> select count(*) from TAGENTOPRINFO;
?
? COUNT(*)
----------
? 12172500
-- 表中記錄1200w
?
方法一: create table as select * from
SQL> set timing on
SQL> create table ta as select * from TAGENTOPRINFO;
表已創建。
已用時間:? 00: 01: 04.01
SQL> select count(*) from ta;
? COUNT(*)
----------
? 12172500
已用時間:? 00: 00: 21.11
SQL>
?
注意: 新建的表沒有原來表的索引和默認值, 只有非空(not null)的約束素條件可以繼承過來,其它的約束條件或索引需要重新建立. 如果原始表是分區表,采用這種方式創建的是非分區表。
?
?
方法二:insert /*+APPEND */ into tbname select * from
?
--先創建表結構
SQL> create table tb as select * from TAGENTOPRINFO where 1=0;
表已創建。
已用時間:? 00: 00: 00.05
SQL> select count(*) from tb;
? COUNT(*)
----------
? 0
已用時間:? 00: 00: 00.00
?
--insert data
SQL> insert /*+APPEND */ into tb select * from TAGENTOPRINFO;
已創建12172500行。
已用時間:? 00: 00: 55.43
SQL> commit;
提交完成。
已用時間:? 00: 00: 06.57
?
在這里再嘗試用nologing模式,看看這次需要多長時間:
SQL> alter table tb nologging;
表已更改。
已用時間:? 00: 00: 00.14
SQL> insert /*+APPEND */ into tb select * from TAGENTOPRINFO;
已創建12172500行。
已用時間:? 00: 01: 13.78?
SQL> commit;
提交完成。
已用時間:? 00: 00: 06.57
SQL> alter table tb logging;
表已更改。
已用時間:? 00: 00: 00.58
?
注意:
?????? 用INSERT /*+ APPEND */ 的方法會對目標表(這里的TB)產生級別為6的獨占鎖,如果運行此命令時還有對TB的DML操作會排隊在它后面。
?
?
?????? 通過上面2個測試,時間都差不多。我還是在我的本本上測試的。 硬盤的讀寫能力比服務器硬盤還要差很多。 所以,如果在服務器上進行這種操作,還應該會快一點。
?
?
?
?
?
------------------------------------------------------------------------------
Blog: http://blog.csdn.net/tianlesoftware
網上資源: http://tianlesoftware.download.csdn.net
相關視頻:http://blog.csdn.net/tianlesoftware/archive/2009/11/27/4886500.aspx
DBA1 群:62697716(滿); DBA2 群:62697977(滿)
DBA3 群:62697850?? DBA 超級群:63306533;????
聊天 群:40132017
--加群需要在備注說明Oracle表空間和數據文件的關系,否則拒絕申請
轉載于:https://www.cnblogs.com/springside-example/archive/2011/01/24/2529813.html
總結
以上是生活随笔為你收集整理的Oracle 不同用户之间 大量数据转移的方法测试的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: servlet中的几个路径有关的方法
- 下一篇: Junit实现接口类测试