所以,我有一个文件A.txt
ENG,England,English
SCO,Scotland,English
IRE,Ireland,English
WAL,Wales,Welsh
我希望加载到oracle EXTERNAL TABLES
。所以这就是我现在做的所有事情。
CREATE DIRECTORY LOCAL_DIR AS 'C:/Directory/'
GRANT ALL ON DIRECTORY LOCAL_DIR TO ruser;
然后我在A.txt
C:/Directory/
然后我执行了以下查询:
CREATE TABLE countries_ext (
country_code VARCHAR2(5),
country_name VARCHAR2(50),
country_language VARCHAR2(50)
)
ORGANIZATION EXTERNAL (
TYPE ORACLE_LOADER
DEFAULT DIRECTORY LOCAL_DIR
ACCESS PARAMETERS (
RECORDS DELIMITED BY NEWLINE
FIELDS TERMINATED BY ','
MISSING FIELD VALUES ARE NULL
(
country_code,country_name,country_language
)
)
LOCATION ('Countries1.txt')
)
PARALLEL 5
REJECT LIMIT UNLIMITED;
显示Table Created.
但是当我尝试执行查询时:
SELECT * FROM countries_ext;
我得到以下异常:
Unable to open file countries_ext_5244.log. The location or file does not exist.
有人能告诉我这里我做错了吗?
答案 0 :(得分:0)
您已经创建了这样的目录:
CREATE DIRECTORY LOCAL_DIR AS 'C:/Directory/'
但根据the Oracle documentation 路径不包括尾部斜杠。
“can
external tables
还可以用于远程计算机中的文件吗?”
我们可以针对任何可从数据库服务器寻址的操作系统目录创建目录对象。因此,必须将远程计算机映射到数据库服务器上的驱动器。
这有几个问题。首先,根据我的经验,DBA不愿意让他们的数据库依赖于其他服务器,尤其是那些无法控制的服务器。第二个是性能:外部表不能像堆表一样调整,因为它们只是本地操作系统上的文件。由于网络延迟,针对远程文件的性能肯定会更差。这将我们带到第三个问题,网络管理员将关注对远程文件执行的查询对网络的影响。老实说,我从未见过用于远程文件的外部表。
这并不是说它无法奏效。但它是否是最佳解决方案取决于文件的大小,查询频率,网络容量以及不在数据库服务器上托管文件的原因。