乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      sqlplus copy(復(fù)制大批量數(shù)據(jù)(long類型))

       guolijiegg 2012-01-14

      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)驗很不足的說,上面的研究過程肯定有不少不足和錯誤,敬請各位拍磚指正

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多