2009-10-08 72 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沒有問題。