更新时间:2023-09-04
Oracle SQL*Loader 非常适用于对象数量有限的大型数据库。对于架构而言,从源数据库导出及加载到目标数据库所涉及的过程非常有针对性,因此,采用以下示例来说明创建示例架构对象、从源数据库导出、然后 加载到目标数据库等过程。
要下载 Oracle SQL*Loader,请转到
http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html
1. 使用以下命令创建示例源表。
create table customer_0 tablespace users as select rownum id, o.* from all_objects o, all_objects x where rownum <= 1000000;
2. 在目标 DMP 实例上,创建用于加载数据的目标表。
create table customer_1 tablespace users as select 0 as id, owner, object_name, created from all_objects where 1=2;
3. 数据将从源数据库导出到带有分隔符的平面文件。为执行该操作,本示例使用了 SQL*Plus。对于数据, 您可能需要生成用于执行数据库中所有对象导出操作的脚本。
alter session set nls_date_format = 'YYYY/MM/DD HH24:MI:SS';
set linesize 800 HEADING OFF FEEDBACK OFF array 5000 pagesize 0
spool customer_0.out
SET MARKUP HTML PREFORMAT ON
SET COLSEP ','
SELECT id, owner, object_name, created FROM customer_0;
spool off
4. 您需要创建一个控制文件来描述数据。此外,根据数据,您可能需要构建执行此步骤的脚本。
cat << EOF > sqlldr_1.ctl load data
infile customer_0.out into table customer_1
APPEND
fields terminated by "," optionally enclosed by '"'
(
id POSITION(01:10) INTEGER EXTERNAL,
owner POSITION(12:41) CHAR,
object_name POSITION(43:72) CHAR,
created POSITION(74:92) date "YYYY/MM/DD HH24:MI:SS"
)
5. 最后,通过相应的用户名和密码,使用 SQL*Loader 将数据导入目标数据库。
sqlldr cust_dba@targetdb control=sqlldr_1.ctl BINDSIZE=10485760 READSIZE=10485760
ROWS=1000