我正在一個錯誤SQL*Loader -606,這意味着:SQL *裝載機問題
在SQL * Loader控制的INTO TABLE子句中指定的同義詞 文件經由 數據庫指定遠程對象鏈接。 INTO TABLE子句中只能指定 現有本地表的同義詞 。
有沒有什麼辦法可以使用SQL * Loader插入遠程表?
我正在一個錯誤SQL*Loader -606,這意味着:SQL *裝載機問題
在SQL * Loader控制的INTO TABLE子句中指定的同義詞 文件經由 數據庫指定遠程對象鏈接。 INTO TABLE子句中只能指定 現有本地表的同義詞 。
有沒有什麼辦法可以使用SQL * Loader插入遠程表?
因爲你在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過程快,但與網絡流量稅(在您的方案中不可避免)相比,這將是微不足道的。
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;
+1大多數SQL * Loader問題在SQL中更容易解決。這就是爲什麼外部表是這樣一個福音。 – APC 2009-10-08 08:32:34
@Robert。感謝您的建議,但如果桌子是一張巨大的桌子!那麼你不覺得這將花費很多時間來插入和創建,這應該是一個過程的形式定期進行,所以這恐怕將是一個可行的解決方案或不! – Vijay 2009-10-08 09:16:08
然後你爲什麼不讓sqlldr連接到遠程數據庫 sqlldr username/password @ tnsalias 你有使用tnsalias訪問遠程數據庫的權限,否則數據庫連接將不起作用 – 2009-10-08 10:45:15
如果您不能使用外部表(例如,因爲數據文件位於客戶機而不是數據庫服務器上),則可以插入到遠程對象的視圖中。
例如
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沒有問題。
您使用的是哪個版本的數據庫? – APC 2009-10-08 10:13:49
SQL * Plus:版本10.2.0.4.0 – Vijay 2009-10-08 10:27:43