SQL * Loader问题

时间:2009-10-08 07:53:07

标签: sql oracle unix sql-loader

我收到错误SQL*Loader - 606,表示:

  

INTO中指定的同义词   SQL * Loader控件中的TABLE子句   file通过a指定远程对象   数据库链接。只是一个同义词   可以指定现有的本地表   在INTO TABLE子句中。

我们是否可以使用SQL * Loader插入远程表?

4 个答案:

答案 0 :(得分:6)

因为您使用的是10g,所以可以使用外部表而不是SQL Loader。

设置外部表很容易。 Find out more

要使外部表格获取新文件(您可能需要执行此操作,因为您有重复过程),请执行以下操作:

alter table your_ext_table_name location ('<newfile.name>')
/

然后你可以这样做:

insert into whatever_table@remote_db
    select * from your_ext_table_name 
/

这避免了两批DML。外部表没有经过良好调优的SQL * Loader过程那么快,但与网络流量税(在您的方案中不可避免)相比,这将是微不足道的。

答案 1 :(得分:2)

create table temp_table as select * from remote_table@remote_db where 1 = 2;

load using sql*loader into temp_table;

insert into remote_table@remote_db select * from temp_table;

答案 2 :(得分:1)

在具有表的服务器上运行SQL Loader?

原因一定不是,但这对我来说似乎最简单。

答案 3 :(得分:0)

如果您无法使用外部表(例如,因为数据文件位于客户端计算机上而不是数据库服务器上),您可以插入远程对象的视图中。

例如

create database link schema1 connect to schema1 identified by schema1 using 'XE';
create view schema1_test_vw as select * from test@schema1;

load data
 infile *
 append
 into table schema1_test_vw
 ( id POSITION(1:4) INTEGER)
begindata
1001
1002
1003

我的XE测试成功了。 对于视图,所有列大小,数据类型等都在本地模式上修复,因此sqlldr没有问题。