ORACLE外部表使用

   这周由于工作中需要将一个有30M左右的txt格式的数据导入到数据库中,由于文件还是比较大的就趁此机会使用了下oracle的外部表进行了数据的导入,具体步骤如下:
   1.使用外部表先要创指定一个ORACLE DIRECTORY,创建的目录名为temp_dir,指向操作系统文件:/home/oracle/temp_dir   

点击(此处)折叠或打开

  1. SQL> conn / as sysdba
  2. Connected.
  3. SQL> create or replace directory temp_dir as \'/home/oracle/temp_dir\'
  4.   2 ;

  5. Directory created.
    2.将我要导入的txt文件上传到服务器,我的文件名为msisdn_imsi0610.txt;
    3.创建外部表,我的表名为msis

点击(此处)折叠或打开

  1. CREATE TABLE msisdn_imsi_ex
  2.  (
  3.  msisdn varchar2(20),
  4.   imsi varchar2(18)
  5. )
  6.  ORGANIZATION EXTERNAL
  7.  (
  8.  type ORACLE_LOADER
  9.  DEFAULT DIRECTORY temp_dir
  10.  ACCESS PARAMETERS
  11.  (
  12.  records delimited by newline
  13.  fields
  14.  REJECT ROWS WITH ALL NULL FIELDS
  15.  )
  16.  LOCATION
  17.  (
  18.  \'msisdn_imsi0610.txt\'
  19.  )
  20.  )
  21.  REJECT LIMIT unlimited;
    4.创建成功后进行查询,出现错误:

点击(此处)折叠或打开

  1. SQL> select * from msisdn_imsi_ex;
  2. select * from msisdn_imsi_ex
  3. *
  4. ERROR at line 1:
  5. ORA-29913: error in executing ODCIEXTTABLEOPEN callout
  6. ORA-29400: data cartridge error
  7. KUP-04040: file msisdn_imsi0610.txt in TEMP_DIR not found
    开初,以为是没有给用户授权新创的DIRECTORY的使用权限,因此用sys登录进行授权:

点击(此处)折叠或打开

  1. SQL> conn / as sysdba
  2. Connected.
  3. SQL> grant read, write on directory temp_dir to mobile_v2;

  4. Grant succeeded.
    用原来用户登录查询还是报错误:

点击(此处)折叠或打开

  1. SQL> select count(*) from msisdn_imsi_ex;
  2. select count(*) from msisdn_imsi_ex
  3. *
  4. ERROR at line 1:
  5. ORA-29913: error in executing ODCIEXTTABLEOPEN callout
  6. ORA-29400: data cartridge error
  7. KUP-04040: file msisdn_imsi0610.txt in TEMP_DIR not found
    检查发现是我的sisdn_imsi0610.txt文件没有放到创建的目录temp_dir中(即对应的操作系统目录 /home/oracle/temp_dir),将文件放到对应的目录中,

点击(此处)折叠或打开

  1. $ mv msisdn_imsi0610.txt temp_dir
    再进行查询时发现已经能够进行查询了,30M的文件有1038706数据,再将这个外部表的数据转入到内部表中

点击(此处)折叠或打开

  1. SQL> select count(*) from msisdn_imsi_ex;

  2.   COUNT(*)
  3. ----------
  4.    1038706
  5. --建立表
  6. SQL> create table msisdn_imsi as select * from msisdn_imsi_ex;

  7. Table created.
    再看temp_dir(/home/oracle/temp_dir)目录,发现除开上传的TXT文件外多了3个log文件;

点击(此处)折叠或打开

  1. $ ls
  2. MSISDN_IMSI_EX_23789758.log MSISDN_IMSI_EX_39190554.log
  3. MSISDN_IMSI_EX_31326264.log msisdn_imsi0610.txt
    查看这些log文件的信息,发现这些日志是访问外部表时的错误信息

点击(此处)折叠或打开

  1. $ cat MSISDN_IMSI_EX_23789758.log

  2.  LOG file opened at 07/01/14 12:30:57

  3. KUP-05004: Warning: Intra source concurrency disabled because parallel select was not requested.

  4. KUP-05008: Warning: Intra source concurrency disabled because the input data is in DELIMITED record format and the characterset is neither fixed width nor UTF8.

  5. KUP-04040: file msisdn_imsi0610.txt in TEMP_DIR not found






来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24107336/viewspace-1210327/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/24107336/viewspace-1210327/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值