|
The SQL*Plus COPY command can copy data between two databases via
SQL*Net. The preferred method of doing this is to use SQL*Plus on the
host where the database resides. If performing the copy command from a
client SQL*Net connection, the data is transferred through the client
machine.
The copy command copies data from one Oracle instance to another. The
data is simply copied directly from a source to a target. The format of
the copy command is:
COPY FROM database TO database
action -
destination_table (column_name, column_name...) USING query
The action can include:
-
create – If the destination table already exists, copy will report
an error, otherwise the table is created and the data is copied.
-
replace – If the destination table exists, copy will drop and
recreate the table with the newly copied data. Otherwise, it will
create the table and populate it with the data.
-
insert – If the destination table exists, copy inserts the new
rows into the table. Otherwise, copy reports an error and aborts.
-
append– Inserts the data into the table if it exists, otherwise it
will create the table and then insert the data.
SQL> copy from scott/tiger@ORCL92 -
to scott/tiger@ORCL92-
create new_emp –
using select * from emp;
Once the command above is executed, the copy utility displays the
values of three parameters, each of which can be set with the SQL*Plus
set command. The arraysize specifies the number of rows that
SQL*Plus will retrieve from the database at one time. The copycommit
parameter specifies how often a commit is performed and is related to
the number of trips – one trip is the number of rows defined in
arraysize. Finally, the long parameter displays the maximum
number of characters copied for each column with a LONG datatype.
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 NEW_EMP created.
1400 rows selected from scott@ORCL92.
1400 rows inserted into NEW_EMP.
1400 rows committed into NEW_EMP at scott@ORCL92.
SQL> desc new_emp;
Name
Null? Type
------------------------- -------- --------------
EMPNO
NOT NULL NUMBER(4)
ENAME
VARCHAR2(10)
JOB
VARCHAR2(9)
MGR
NUMBER(4)
HIREDATE
DATE
SAL
NUMBER(7,2)
COMM
NUMBER(7,2)
DEPTNO
NUMBER(2)
The command above did not specify column names for the new table (new_emp).
As a result, the new table will have the same column names as the table
being copied. If different column names are required, they can be
specified after the table name:
create new_emp (col1, col2, …) –
However, if one column name is
specified, they all must be specified.
A DBA could perform this same function with a database link from one
database pointing to another. The appeal of the copy command is that it
only requires SQL*Net service names and proper privileges to get the job
done. For those environments that restrict the usage of database links,
the copy utility can be leveraged. In addition, the copy command
provides many options, as defined by the actions create, replace, insert
and append.
If the copy command is executed from a client PC to copy data from
remote database DB0 to remote database DB1, the data will be copied from
DB0 to the client PC and then to DB1. For this reason, it is best to use
SQL*Plus from either remote host and not require the data to travel
through a client machine in order to reach its final destination.
The following command copied the table_with_one_million_rows
table to new_table:
SQL> copy from scott/tiger@orcl92 -
> to scott/tiger@orcl92 -
> create new_table -
> using select * from table_with_one_million_rows;
Array fetch/bind size is 5000. (arraysize is 5000)
Will commit after every 5000 array binds. (copycommit is 5000)
Maximum long size is 80. (long is 80)
Table NEW_TABLE created.
1000000 rows selected from scott@orcl92.
1000000 rows inserted into NEW_TABLE.
1000000 rows committed into NEW_TABLE at scott@orcl92.
The elapsed time for this copy command was consistently 85 seconds.
However, there was no network involved in this test since the command
created the new table in the same instance. The next utility described
as SQL*Loader, provides the ability to load data from ASCII (flat) files
into the database with great speed.
Deep inside the operating system executables there are
many utilities at the fingertips of Oracle professionals, but until now
there has been no advice on how to use these utilities. From tnsping.exe
to dbv.exe to wrap.exe, Dave Moore describes each utility and has
working examples in the online code depot. Your time savings from a
single script is worth the price of this great book.
Get your copy of Oracle Utilities: Using Hidden Programs,
Import/Export, SQL Loader, oradebug, Dbverify, Tkprof and More today
and receive immediate access to the Online Code Depot!
http://www.rampant-books.com/book_2003_1_utils.htm
Regards,

Don Burleson
www.dba-oracle.com
www.remote-dba.net
|