2009-10-08 77 views
0

我正在一个错误SQL*Loader -606,这意味着:SQL *装载机问题

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

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

+0

您使用的是哪个版本的数据库? – APC 2009-10-08 10:13:49

+0

SQL * Plus:版本10.2.0.4.0 – Vijay 2009-10-08 10:27:43

回答

6

因为你在10g上,你可以使用外部表而不是SQL Loader。

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

要获得外部表拿起一个新的文件(你可能需要做的,因为你有一个重复的过程),这样做:

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

然后,你可以这样做:

insert into [email protected]_db 
    select * from your_ext_table_name 
/

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

2
create table temp_table as select * from [email protected]_db where 1 = 2; 

load using sql*loader into temp_table; 

insert into [email protected]_db select * from temp_table; 
+0

+1大多数SQL * Loader问题在SQL中更容易解决。这就是为什么外部表是这样一个福音。 – APC 2009-10-08 08:32:34

+0

@Robert。感谢您的建议,但如果桌子是一张巨大的桌子!那么你不觉得这将花费很多时间来插入和创建,这应该是一个过程的形式定期进行,所以这恐怕将是一个可行的解决方案或不! – Vijay 2009-10-08 09:16:08

+2

然后你为什么不让sqlldr连接到远程数据库 sqlldr username/password @ tnsalias 你有使用tnsalias访问远程数据库的权限,否则数据库连接将不起作用 – 2009-10-08 10:45:15

1

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

必须是一个原因,但这对我来说似乎最简单。

+0

我没有访问该服务器来运行nythg。:) – Vijay 2009-10-08 09:54:07

0

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

例如

create database link schema1 connect to schema1 identified by schema1 using 'XE'; 
create view schema1_test_vw as select * from [email protected]; 

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

成功对我XE测试。 为了查看所有列大小,数据类型等在本地模式上是固定的,所以sqlldr没有问题。