1

我收到一个错误SQL*Loader -606,这意味着:

SQL*Loader 控制文件的 INTO TABLE 子句中指定的同义词通过数据库链接指定远程对象。在 INTO TABLE 子句中只能指定现有本地表的同义词。

有什么方法可以使用 SQL*Loader 插入远程表?

4

4 回答 4

6

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

设置外部表很容易。 了解更多

要让外部表获取一个新文件(您可能需要这样做,因为您有一个重复的过程),请执行以下操作:

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

然后你可以这样做:

insert into whatever_table@remote_db
    select * from your_ext_table_name 
/

这避免了两批 DML。外部表不如经过良好调整的 SQL*Loader 进程快,但与网络流量税(在您的场景中是不可避免的)相比,这将是微不足道的。

于 2009-10-08T10:37:05.910 回答
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;
于 2009-10-08T08:25:51.713 回答
1

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

一定是为什么不这样做的原因,但这对我来说似乎是最简单的。

于 2009-10-08T09:50:20.167 回答
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 没有问题。

于 2009-11-22T22:01:22.487 回答