sqlplus copy(復(fù)制大批量數(shù)據(jù)(long類型))
使用sqlplus Copy 命令從遠程數(shù)據(jù)庫讀取數(shù)據(jù). 需要從9個地市的計費數(shù)據(jù)庫中讀取一些表,存儲到運營分析系統(tǒng)中. 有幾個表數(shù)據(jù)量超過1億條.
對于這么大的數(shù)據(jù)量,如果用create table as select 或者使用cursor的話,對回滾段的壓力肯定非常大.
經(jīng)過同事提示,想到了sqlplus的copy命令.
connect ods/ods set time on set timing on set head on set echo on set copycommit 10 set arraysize 5000
-- 長春 copy from yyfx/******@ccbill1 to changchun/******@ora1 create serv using select * from lbas.serv;
這個命令不用太多解釋. 需要注意的是: create處有4中選擇: create,append,insert,replace. 具體命令下面有一個itput的帖子,解釋得很詳細.
補充點: 在sqlplus執(zhí)行這個命令的時候,有3個選項需要注意: set long 1000 -----------long型字符的長度 set copycommit 10 -----------讀多少次提交 set arraysize 5000 -----------每次讀取數(shù)據(jù)的行數(shù) 根據(jù)以上的設(shè)置,copy命令每次讀取5000行數(shù)據(jù),沒讀取10次(50000行)commit一次.
下面是itpub的文檔:
Copy Command的初步研究
SQL*Plus Copy Command 前言 這段時間論壇里有好幾個貼子討論到了在表之間復(fù)制數(shù)據(jù)的問題,也討論到了SQL*Plus Copy Command。 在數(shù)據(jù)表間復(fù)制數(shù)據(jù)是Oracle DBA經(jīng)常面對的任務(wù)之一,Oracle為這一任務(wù)提供了多種解決方案,SQL*Plus Copy Command便是其中之一。SQL*Plus Copy Command通過SQL*Net在不同的表(同一服務(wù)器或是不同服務(wù)器)之間復(fù)制數(shù)據(jù)或移動數(shù)據(jù)。 在實際運行環(huán)境中若能恰當(dāng)?shù)剡x擇使用SQL*Plus Copy Command可以有效地提高數(shù)據(jù)復(fù)制的性能。 下面將簡要介紹SQL*Plus Copy Command使用,并在性能方面與其他兩種方案進行對比,力求能提供一個使用Copy Command的方案參考。
1.語法及使用說明 1.1 語法 下面我們來看一下SQL*Copy Command的語法及使用說明。 在解釋SQL*Plus Copy Command的語法之前,我們必須要明確SQL*Plus Copy Command不是一個方法或是函數(shù),也不是一個SQL語句,它是一個命令(command),當(dāng)然這個命令必須在SQL*Plus里運行。
SQL*Plus Copy Command的語法: COPY {FROM database | TO database | FROM database TO database} {APPEND|CREATE|INSERT|REPLACE} destination_table [(column, column, column, ...)] USING query
我們分部分來解釋一下:
COPY – 這個不太需要解釋,主命令,聲明要執(zhí)行COPY操作
From Database – 源數(shù)據(jù)庫 To Database – 目標(biāo)數(shù)據(jù)庫 此處注意花括號中有三種可選的寫法(以”|”隔開),如果源數(shù)據(jù)表和目標(biāo)數(shù)據(jù)表在同一個Schema中,則可以只寫From Database,也可以只寫To Database,當(dāng)然還可以是第三種寫法,把From Database和To Database寫全。但如果源數(shù)據(jù)表和目標(biāo)數(shù)據(jù)表不在同一個Schema中,則必須用第三種寫法,即把From Database和To Database都寫全 From Database和To Database的格式是一樣的:USERID/PASSWORD@SID,這個大家都應(yīng)該很熟悉了。
{APPEND|CREATE|INSERT|REPLACE} – 聲明操作數(shù)據(jù)的方式,下面分別解釋一下: Append – 向已有的目標(biāo)表中追加記錄,如果目標(biāo)表不存在,自動創(chuàng)建,這種情況下和Create等效。 Create – 創(chuàng)建目標(biāo)表并且向其中追加記錄,如果目標(biāo)表已經(jīng)存在,則會返回錯誤。 Insert – 向已有的目標(biāo)表中插入記錄,與Append不同的是,如果目標(biāo)表不存在,不自動創(chuàng)建而是返回錯誤。 Replace – 用查詢出來的數(shù)據(jù)覆蓋已有的目標(biāo)表中的數(shù)據(jù),如果目標(biāo)表不存在,自動創(chuàng)建。
destination_table – 目標(biāo)表的名字 [(column, column, column, ...)] – 可以指定目標(biāo)表中列的名字,如果不指定,則自動使用Query中的列名。 USING query – 查詢語句,交流的數(shù)據(jù)來自這兒。
1.2 使用范例 下面我們通過幾個例子來看一下SQL*Plus Copy Command的使用:
1.2.1 在同一個服務(wù)器的同一個Schema中復(fù)制數(shù)據(jù): Copy操作前Schema中的表
SQL> conn scott/tiger 已連接。 SQL> select tname from tab; TNAME ------------------------------ DEPT EMP BONUS SALGRADE
同時指定From database和To database
SQL> copy from scott/tiger@lsj to scott/tiger@lsj create dept1 using select * from dept; 數(shù)組提取/綁定大小為 15。(數(shù)組大小為 15) 將在完成時提交。(提交的副本為 0) 最大 long 大小為 80。(long 為 80) 表 DEPT1 已創(chuàng)建。 4 行選自 scott@lsj。 4 行已插入 DEPT1。 4 行已提交至 DEPT1 (位于 scott@lsj)。
只指定From Database
SQL> copy from scott/tiger@lsj create dept2 using select * from dept; 數(shù)組提取/綁定大小為 15。(數(shù)組大小為 15) 將在完成時提交。(提交的副本為 0) 最大 long 大小為 80。(long 為 80) 表 DEPT2 已創(chuàng)建。
4 行選自 scott@lsj。 4 行已插入 DEPT2。 4 行已提交至 DEPT2 (位于 DEFAULT HOST 連接)。
只指定To Database
SQL> copy to scott/tiger@lsj create dept3 using select * from dept; 數(shù)組提取/綁定大小為 15。(數(shù)組大小為 15) 將在完成時提交。(提交的副本為 0) 最大 long 大小為 80。(long 為 80) 表 DEPT3 已創(chuàng)建。
4 行選自 DEFAULT HOST 連接。 4 行已插入 DEPT3。 4 行已提交至 DEPT3 (位于 scott@lsj)。
Copy操作后Schema中的表
SQL> select tname from tab; TNAME ------------------------------ DEPT EMP BONUS SALGRADE DEPT1 DEPT2 DEPT3
已選擇7行。
1.2.2 在同一個服務(wù)器的不同Schema中復(fù)制數(shù)據(jù): 這種情況下必須同時指定From Database和To Database
SQL> copy from scott/tiger@lsj to lsjdemo/lsjdemo@lsj create dept using select * from dept;
數(shù)組提取/綁定大小為 15。(數(shù)組大小為 15) 將在完成時提交。(提交的副本為 0) 最大 long 大小為 80。(long 為 80) 表 DEPT 已創(chuàng)建。
4 行選自 scott@lsj。 4 行已插入 DEPT。 4 行已提交至 DEPT (位于 lsjdemo@lsj)。
注意這種情況下,using select * from dept 中并不需要使用scott.demp的形式。
1.2.3 在不同的服務(wù)器間復(fù)制數(shù)據(jù):
SQL> conn lsj/lsj@sunserve 已連接。 SQL> copy from scott/tiger@lsj to lsj/lsj@sunserve create dept using select * from dept;
數(shù)組提取/綁定大小為 15。(數(shù)組大小為 15) 將在完成時提交。(提交的副本為 0) 最大 long 大小為 80。(long 為 80) 表 DEPT 已創(chuàng)建。
4 行選自 scott@lsj。 4 行已插入 DEPT。 4 行已提交至 DEPT (位于 lsj@sunserve)。
2.SQL*Plus Copy Command的性能
對于SQL*Plus Copy Command的性能問題可謂是眾說紛紜,有人說SQL*Plus Copy Command復(fù)制數(shù)據(jù)時不經(jīng)過Buffer,不寫回滾段,所以速度是非常快的;而有人經(jīng)過實驗發(fā)現(xiàn)SQL*Plus Copy Command并不像想象中的那么快,甚至慢得讓人難以接受。
我們說SQL*Plus Copy Command快還是慢主要是與其他兩種復(fù)制數(shù)據(jù)的方案進行對比: Create table … as select … Insert into … select … from …
這三種方案在性能上到底有什么差別呢,我們通過實驗來驗證一下。
實驗環(huán)境: 我的工作用機,lsj CPU:2.6G MEM:1G Oracle:10g
實驗方案描述:
構(gòu)造一個500余萬條記錄的實驗表,分別用三種方案復(fù)制到新的表統(tǒng)計所花的時間,Create…as..和Insert …. select…直接使用Sql*Plus的時間統(tǒng)計,Copy命令不能使用Sql*Plus的時間統(tǒng)計,采用秒表計時,可精確到百分之一秒。
實驗前后監(jiān)控UNDOTBS來查看寫回滾段的數(shù)據(jù)量,數(shù)據(jù)庫運行在Archivelog狀態(tài)下,查看Archivelog來監(jiān)控寫Redo的數(shù)據(jù)量(這個可能不太精確,誰有更好的方法請指教一下)。
2.1 準(zhǔn)備實驗數(shù)據(jù)
SQL> conn lsjdemo/lsjdemo@lsj 已連接。 SQL> select count(*) from all_objects;
COUNT(*) ---------- 10164
SQL> create table a as select * from all_objects where 1<0;
表已創(chuàng)建。
SQL> declare n number; 2 begin 3 for n in 1..500 loop 4 insert into a select * from all_objects; 5 end loop; 6 end; 7 /
PL/SQL 過程已成功完成。
SQL> select count(*) from a;
COUNT(*) ---------- 5082500
看一下500多萬條記錄占了多大空間
SQL> select SUM(BYTES)/(1024*1024) Total_Space from DBA_extents 2 where owner='LSJDEMO' and segment_type='TABLE' and segment_name='A' 3 GROUP BY TABLESPACE_NAME,SEGMENT_NAME;
TOTAL_SPACE ----------- 504
2.2 實驗過程 2.2.1 Copy Command
首先來看一下SQL*Plus Copy Command的表現(xiàn)。
操作前的狀態(tài):
SQL> column 表空間名 format a15
SQL> select a.file_id "文件號",a.tablespace_name "表空間名", a.bytes/(1024*1024) "空間(M)", (a.bytes-sum(nvl(b.bytes,0)))/(1024*1024) "已用(M)", (sum(nvl(b.bytes,0)))/(1024*1024) "剩余空間(M)", sum(nvl(b.bytes,0))/a.bytes*100 "可用比率" from dba_data_files a, dba_free_space b where a.file_id=b.file_id(+) and a.tablespace_name='UNDOTBS1' group by a.tablespace_name ,a.file_id,a.bytes;
文件號 表空間名 空間(M) 已用(M) 剩余空間(M) 可用比率 ---------- --------------- ---------- ---------- ----------- ---------- 2 UNDOTBS1 3000 1032.625 1967.375 65.5791667
執(zhí)行過程:
SQL> copy from lsjdemo/lsjdemo@lsj create b using select * from a;
數(shù)組提取/綁定大小為 15。(數(shù)組大小為 15) 將在完成時提交。(提交的副本為 0) 最大 long 大小為 80。(long 為 80) 表 B 已創(chuàng)建。
5083000 行選自 lsjdemo@lsj。 5083000 行已插入 B。 5083000 行已提交至 B (位于 DEFAULT HOST 連接)。
再次查看回滾段表空間狀態(tài):
SQL> /
文件號 表空間名 空間(M) 已用(M) 剩余空間(M) 可用比率 ---------- --------------- ---------- ---------- ----------- ---------- 2 UNDOTBS1 3000 1032.625 1967.375 65.5791667
上面的結(jié)果說明copy command沒有生成undo。
經(jīng)查看發(fā)現(xiàn)生成了592M的歸檔日志,說明copy comm.and生成了大量的redo數(shù)據(jù)。
執(zhí)行時間:8分40.51秒 = 520.51秒
2.2.2 Insert into …. select …. 接下來我們看一下Insert 的性能,在執(zhí)行Insert前將歸檔日志清空:
SQL> set timing on SQL> create table c as select * from a where 1<0;
表已創(chuàng)建。
已用時間: 00: 00: 00.45 SQL> insert into c select * from a;
已創(chuàng)建5083000行。
已用時間: 00: 10: 31.64
再次查看回滾段表空間狀態(tài):
SQL> /
文件號 表空間名 空間(M) 已用(M) 剩余空間(M) 可用比率 ---------- --------------- ---------- ---------- ----------- ---------- 2 UNDOTBS1 3000 1032.625 1967.375 65.5791667
咦,回滾段表空間依然是1032.625M,難道Insert不生成undo信息?不可能啊。
偶再次執(zhí)行insert into c select * from a; 并啟動一個監(jiān)控程序,每5秒報告UNDOTBS1的空間信息,這才發(fā)現(xiàn)了問題所在.
原來在開始執(zhí)行Insert的時候回滾段表空間被釋放了一部分,釋放到687.625M,然后在Insert的過程中逐漸增長,最后又增長到1032.625M,說明Insert生成了1032.625-687.625=345M回滾信息。
回滾段表空間為什么會先釋放后增長呢,它里面明明有足夠的Free空間呀,這個偶也想不明白了。
同樣,偶也想到,Copy Command會不會也是這種情況呢
所以,偶再次執(zhí)行Copy,也同樣地監(jiān)控回滾段表空間,發(fā)現(xiàn)在執(zhí)行過程中回滾段表空間始終是1032.625M,最終證明了Copy command沒有生成Undo信息。
接下來查看歸檔日志,發(fā)現(xiàn)Insert生成了1.72G的歸檔日志,歸檔日志的數(shù)據(jù)量是Copy Command的三倍之多。
執(zhí)行時間從上面的結(jié)果已經(jīng)可以看到了:
已用時間: 00: 10: 31.64
10分31.64秒 = 631.64秒。
2.2.3 Create … as select… 最后來看看Create的性能。
SQL> create table d as select * from a;
表已創(chuàng)建。
已用時間: 00: 04: 04.79
在執(zhí)行過程中監(jiān)控Undo表空間,發(fā)現(xiàn)也沒有生成回滾信息。其實Create不生成回滾是很好理解的,因為Create Table 是DDL語句,根本無法回滾,自然也就不會生成回滾信息了。
經(jīng)查看發(fā)現(xiàn)生成了515M歸檔日志,比Insert少得多,比Copy Command也少一些。
執(zhí)行時間上快得有些出乎意料: 4分4.79秒 = 244.79秒,明顯快于前兩種方案。
在這里偶對Create的執(zhí)行機制產(chǎn)生了一個猜測,認為它并不是把數(shù)據(jù)先Query出來,再用Query的結(jié)果寫入目標(biāo)表中,而是直接讀Block數(shù)據(jù)并寫入目標(biāo)表中,所以才會有這么快的執(zhí)行速度。 下面來驗證一下:
SQL> create view v_a as select * from a; 視圖已創(chuàng)建。 已用時間: 00: 00: 00.14 SQL> create table e as select * from v_a; 表已創(chuàng)建。 已用時間: 00: 04: 03.62
從上面的結(jié)果看出還是很快,難道是這個視圖太特殊了,再試一個:
SQL> drop view v_a;
視圖已刪除。 SQL> desc a; 名稱 是否為空? 類型 ----------------------------------------- -------- ---------------------------- OWNER VARCHAR2(30) OBJECT_NAME VARCHAR2(30) SUBOBJECT_NAME VARCHAR2(30) OBJECT_ID NUMBER DATA_OBJECT_ID NUMBER OBJECT_TYPE VARCHAR2(19) CREATED DATE LAST_DDL_TIME DATE TIMESTAMP VARCHAR2(19) STATUS VARCHAR2(7) TEMPORARY VARCHAR2(1) GENERATED VARCHAR2(1) SECONDARY VARCHAR2(1)
SQL> create view v_a as select owner,object_name,subobject_name, rownum rno,data_object_id,object_type,created, last_ddl_time,timestamp,status,temporary,generated,secondary from a; 視圖已創(chuàng)建。 已用時間: 00: 00: 00.03 SQL> create table e as select * from v_a; 表已創(chuàng)建。 已用時間: 00: 04: 12.65
這個結(jié)果依然是很快,看來偶的猜測是完全錯誤的,那Create table ….as select 為什么會這么快呢?偶是想不明白了,敬請諸位老大指教一下。
2.2.4 實驗結(jié)果 實驗數(shù)據(jù): 記錄數(shù):5,082,500 數(shù)據(jù)量:504M 實驗結(jié)果
方案------------------------執(zhí)行時間(秒) ---------Undo(M) ------Redo(M) Copy command -------------520.51----------------------0 ---------------- 592 Insert into…select …---- 631.64 ------------------345 -------------1720 Create Table…------------- 244.79 --------------------0 ----------------515
2.2.5 實驗總結(jié)
Create Table…as select…是最快的,而且生成的Undo和Redo信息最少,所以只要可能,請盡量使用這種方案。但這種方案有一定的限制,即目標(biāo)表必須是不存在的,不能用它向已有的目標(biāo)表中追加記錄。
Insert into … select … 是最慢的,而且生成最多的Undo和Redo信息,對I/O的壓力最大,優(yōu)勢在于大家對它比較熟悉,使用起來比較簡單,適合于處理少量的數(shù)據(jù),若要處理大量的數(shù)據(jù),不推薦使用這種方案。
Copy Command可以處理Create Table不能處理的情況,即向已有的數(shù)據(jù)表中追加記錄,相對于insert來說,效率更高一些,生成更少的Redo信息,不生成Undo信息,所以在執(zhí)行大量的數(shù)據(jù)追加時,推薦使用Copy Command命令。
2.3 對Copy Command的進一步實驗
我們在觀察Copy Command的結(jié)果的時候發(fā)現(xiàn)輸出中有幾個引人注意的信息:
SQL> copy from lsjdemo/lsjdemo@lsj create b using select * from a;
數(shù)組提取/綁定大小為 15。(數(shù)組大小為 15) 將在完成時提交。(提交的副本為 0) 最大 long 大小為 80。(long 為 80) 表 B 已創(chuàng)建。
5083000 行選自 lsjdemo@lsj。 5083000 行已插入 B。 5083000 行已提交至 B (位于 DEFAULT HOST 連接)。
其中: 數(shù)組提取/綁定大小為 15。(數(shù)組大小為 15) 這個和SQL Plus的一個選項有關(guān) -- Arraysize
SQL> show arraysize arraysize 15
這個選項決定在Copy操作時以15條記錄為一個批處理,在這兒偶又猜測,如果把這個值設(shè)大一些,Copy 是否會快一些呢? 實驗一把:
SQL> set arraysize 2048 SQL> show arraysize arraysize 2048 SQL> copy from lsjdemo/lsjdemo@lsj create f using select * from a; 數(shù)組提取/綁定大小為 2048。(數(shù)組大小為 2048) 將在完成時提交。(提交的副本為 0) 最大 long 大小為 80。(long 為 80) 表 F 已創(chuàng)建。
5083000 行選自 lsjdemo@lsj。 5083000 行已插入 F。 5083000 行已提交至 F (位于 DEFAULT HOST 連接)。
哈哈,果然不出偶所料(終于料準(zhǔn)了一把 ): 執(zhí)行時間:4分35.37秒 = 275.37秒,這個結(jié)果已經(jīng)和Create table … 相差不多了
最新實驗結(jié)果
方案---------------------執(zhí)行時間(秒)---------------Undo(M)-------------Redo(M) Copy command------------275.37---------------------0-------------------------592 Insert into…----------------631.64------------------345---------------------1720 Create Table… -----------244.79---------------------0----------------------515
偶繼續(xù)猜想,偶把Arraysize從15改成2048,結(jié)果快了很多,那改得再大一些,應(yīng)該會更快的,偶把它改成最大值5000,繼續(xù)實驗:
SQL> set arraysize 5000 SQL> show arraysize arraysize 5000
SQL> copy from lsjdemo/lsjdemo@lsj create g using select * from a; 數(shù)組提取/綁定大小為 5000。(數(shù)組大小為 5000) 將在完成時提交。(提交的副本為 0) 最大 long 大小為 80。(long 為 80) 表 G 已創(chuàng)建。
5083000 行選自 lsjdemo@lsj。 5083000 行已插入 G。 5083000 行已提交至 G (位于 DEFAULT HOST 連接)。
呵呵,偶又料準(zhǔn)了一把: 執(zhí)行時間:4分22.97秒 = 262.97秒
最新實驗結(jié)果
方案---------------------執(zhí)行時間(秒)---------------Undo(M)-------------Redo(M) Copy command------------262.97---------------------0-------------------------592 Insert into…----------------631.64------------------345---------------------1720 Create Table… -----------244.79---------------------0----------------------515
進一步實驗后的結(jié)論: Copy comm.and的執(zhí)行速度受Arryasize的影響,一般來說,把Arraysize設(shè)置得大一些Copy command會執(zhí)行得更快,Arraysize的最大值是5000。
3.Copy Command的一些其他說明
3.1 數(shù)據(jù)類型方面的限制
Copy Command只支持如下幾種類型的字段:
CHAR DATE LONG NUMBER VARCHAR2
如果Query中包含這些字段之外的字段,則Copy Command無法執(zhí)行,返回錯誤:
SQL> create table m(a number,b blob default empty_blob()); 表已創(chuàng)建。 已用時間: 00: 00: 00.07 SQL> insert into m values(1,empty_blob()); 已創(chuàng)建 1 行。 已用時間: 00: 00: 00.00 SQL> commit; 提交完成。 已用時間: 00: 00: 00.00 SQL> copy from lsjdemo/lsjdemo@lsj create n using select * from m; 數(shù)組提取/綁定大小為 5000。(數(shù)組大小為 5000) 將在完成時提交。(提交的副本為 0) 最大 long 大小為 80。(long 為 80) CPY-0012: 無法復(fù)制數(shù)據(jù)類型
3.2 對LONG系列類型字段的支持
與2.4.1中所論述的相反,Copy Command支持Long 及Long Raw類型的字段,但Insert into…select …及Create Table …. as select …則不支持Long及Long Raw 類型的字段。這種情況下,Copy Command反而可以很好地完成任務(wù)。
SQL> create table o(a number,b long raw); 表已創(chuàng)建。 已用時間: 00: 00: 00.04 SQL> insert into o values(1,NULL); 已創(chuàng)建 1 行。 已用時間: 00: 00: 00.00 SQL> create table p as select * from o; create table p as select * from o * 第 1 行出現(xiàn)錯誤: ORA-00997: 非法使用 LONG 數(shù)據(jù)類型
已用時間: 00: 00: 00.00 SQL> create table p(a number, b long raw); 表已創(chuàng)建。 已用時間: 00: 00: 00.00 SQL> insert into p select * from o; insert into p select * from o * 第 1 行出現(xiàn)錯誤: ORA-00997: 非法使用 LONG 數(shù)據(jù)類型
已用時間: 00: 00: 00.01 SQL> copy from lsjdemo/lsjdemo@lsj append p using select * from o; 數(shù)組提取/綁定大小為 5000。(數(shù)組大小為 5000) 將在完成時提交。(提交的副本為 0) 最大 long 大小為 80。(long 為 80) 1 行選自 lsjdemo@lsj。 1 行已插入 P。 1 行已提交至 P (位于 DEFAULT HOST 連接)。
3.3 選擇執(zhí)行Host
選擇執(zhí)行Copy command的Host時需要十分注意,如果目標(biāo)Schema和源Schema在同一臺服務(wù)器上,由執(zhí)行的Host最好也放在這臺服務(wù)器上,也即在這臺服務(wù)器上執(zhí)行Copy Command,如果目標(biāo)Schema和源Schema不在同一臺服務(wù)器上,則可以在目標(biāo)服務(wù)器上執(zhí)行Copy Command,也可以在源服務(wù)器上執(zhí)行Copy Command,但不要在第三臺機器上執(zhí)行Copy Command。
總之,不要在和Copy Command操作的數(shù)據(jù)無關(guān)的客戶端上執(zhí)行Copy Command。
原因比較好理解,Copy Command的執(zhí)行機制是通過SQL*Net來周轉(zhuǎn)數(shù)據(jù),如果是在第三臺機器上執(zhí)行的話,相當(dāng)于數(shù)據(jù)繞了一大段彎路才進入目標(biāo)服務(wù)器,自然會影響效率。
4.總結(jié)
最終實驗結(jié)果
方案---------------------執(zhí)行時間(秒)---------------Undo(M)-------------Redo(M) Copy command------------262.97--------------------0-------------------------592 Insert into…----------------631.64------------------345---------------------1720 Create Table… -----------244.79---------------------0----------------------515
相信您可以參考這個結(jié)果得出什么情況下可以使用Copy Command的結(jié)論。
總體來說,SQL*Plus Copy Command是一個很不錯的東東,其實Oracle為我們的每一項可能面臨的工作任務(wù)都提供了多種可以選擇的實現(xiàn)方案,關(guān)鍵在于我們要了解這些方案,并且知道在什么情況下選擇哪種方案更加合適。
偶研究Oracle的時間不長,經(jīng)驗很不足的說,上面的研究過程肯定有不少不足和錯誤,敬請各位拍磚指正
|