oracle sqlplus中copy命令的用法

2021-07-08 17:52:25 字數 3429 閱讀 8551

一、語法

首先明確sql*plus copy command不是乙個方法或是函式,也不是乙個sql語句,它是乙個命令(command),這個命令

必須在sql*plus裡執行。

sql*plus copy command的語法:

二、引數說明

from database – 源資料庫

to database – 目標資料庫

此處注意花括號中有三種可選的寫法(以」|」隔開),如果源資料表和目標資料表在同乙個schema中,則可以只寫from database,也可以只寫to database,當然還可以是第三種寫法,把from database和to database寫全。但如果源資料表和目標資料表不在同乙個schema中,則必須用第三種寫法,即把from database和to database都寫全。

from database和to database的格式是一樣的:userid/password@sid。

create – 建立目標表並且向其中追加記錄,如果目標表已經存在,則會返回錯誤。

replace – 用查詢出來的資料覆蓋已有的目標表中的資料,如果目標表不存在,自動建立。

destination_table – 目標表的名字

[(column, column, column, ...)] – 可以指定目標表中列的名字,如果不指定,則自動使用query中的列名。

using query – 查詢語句,交流的資料來自這裡。

三、使用說明

1.這種方法適合小額資料的遷移,只能在sql*plus中執行。

2.這種方法不能copy大物件的表,不然會拋異常"cpy0012: object datatypes cannot be copied"。

在資料表間複製資料是oracle dba經常面對的任務之一,oracle為這一任務提供了多種解決方案,sql*plus copy 命令便是其中之一;sql*plus copy 命令通過sql*net在不同的表(同一伺服器或是不同伺服器)之間複製資料或移動資料;在實際執行環境中若能恰當地選擇使用sql*plus copy 命令可以有效地提高資料複製的效能。

四、使用範例

下面通過幾個例子來看一下sql*plus copy 命令的使用:

1.在同乙個伺服器的同乙個schema中複製資料:

同時指定from database和to database

sql> copy from scott/tiger@lsj to scott/tiger@lsj create dept1 using select * from dept;

只指定from database

sql> copy from scott/tiger@lsj create dept2 using select * from dept;

只指定to database

sql> copy to scott/tiger@lsj create dept3 using select * from dept;

2.在同乙個伺服器的不同schema中複製資料:

這種情況下必須同時指定from database和to database

sql> copy from scott/tiger@lsj to lsjdemo/lsjdemo@lsj create dept using select * from dept;

注意這種情況下,using select * from dept 中並不需要使用scott.demp的形式。

3.在不同的伺服器間複製資料:

sql> conn lsj/lsj@sunserve

已連線。

sql> copy from scott/tiger@lsj to lsj/lsj@sunserve create dept using select * from dept;

4、如果直接copy create複製資料,則必須保證query的記錄是非空的;因為create的表預設是乙個非空字段的表。

sql> copy from c##sjni/c##sjni@orcl to c##nisj/c##nisj@orcl create dorm_phone using select * from c##sjni.dorm_phone;

array fetch/bind size is 15. (arraysize is 15)

will commit when done. (copycommit is 0)

maximum long size is 80. (long is 80)

error:

ora-01400: cannot insert null into ("c##nisj"."dorm_phone"."phone")

sql> copy from c##sjni/c##sjni@orcl to c##nisj/c##nisj@orcl create dorm_phone using select * from c##sjni.dorm_phone where trim(phone) is not null;

array fetch/bind size is 15. (arraysize is 15)

will commit when done. (copycommit is 0)

maximum long size is 80. (long is 80)

table dorm_phone created.

34760 rows selected from c##sjni@orcl.

34760 rows inserted into dorm_phone.

34760 rows committed into dorm_phone at c##nisj@orcl.

sql>

五、與create as及insert into select比較的說明

create table…as select…是最快的,而且生成的undo和redo資訊最少,所以只要可能,請盡量使用這種方案;但這種方案有一定的限制,即目標表必須是不存在的,不能用它向已有的目標表中追加記錄。

insert into … select … 是最慢的,而且生成最多的undo和redo資訊,對i/o的壓力最大;優勢在於大家對它比較熟悉,使用起來比較簡單,適合於處理少量的資料,若要處理大量的資料,不推薦使用這種方案。

copy command可以處理create table不能處理的情況,即向已有的資料表中追加記錄,相對於insert來說,效率更高一些,生成更少的redo資訊,不生成undo資訊,所以在執行大量的資料追加時,推薦使用copy command命令。

Oracle sqlplus 登入命令

1 執行sqlplus工具 c users wd pc sqlplus 2 直接進入sqlplus命令提示符 c users wd pc sqlplus nolog 3 以os身份連線 c users wd pc sqlplus as sysdba 或 sql connect as sysdba 4...

oraclesqlplus 執行計畫

一般通過很多任務具可以看pl sql的執行計畫來分析語句效能。這裡介紹通過pl sql檢視sql執行計畫的幾種方法 方法一.set autotrace on 然後當執行你的sql語句的時候,執行計畫自動顯示出來。不想看執行計畫了,set autotrace off 方法二.執行語句 explain ...

Oracle SQL Plus 簡單操作

conn 使用者名稱 密碼 as 連線身份 伺服器連線字串連線身份 表示該使用者連線後擁有的許可權 sysdba 資料庫管理員,許可權包括 開啟資料庫伺服器 關閉資料庫伺服器 備份資料庫 恢復資料庫 日誌歸檔 會話限制 管理功能 建立資料庫。sys 使用者必須用 sysdba 身份才能登入,syst...