Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ORA-01031:通过SQL*加载器将数据从一个架构大容量加载到另一个架构时权限不足_Sql_Oracle_Sql Loader - Fatal编程技术网

ORA-01031:通过SQL*加载器将数据从一个架构大容量加载到另一个架构时权限不足

ORA-01031:通过SQL*加载器将数据从一个架构大容量加载到另一个架构时权限不足,sql,oracle,sql-loader,Sql,Oracle,Sql Loader,我试图通过SQL加载器将数据插入到另一个模式的表中。以下是控制文件: LOAD DATA INFILE * INTO TABLE globalref01.dw_stg_holiday_extract FIELDS TERMINATED BY "|" TRAILING NULLCOLS ( ric_trd_exch, cntry_cde, holiday_date "TO_DATE (:holiday_date, 'YYYYMMDD')", holiday_de

我试图通过SQL加载器将数据插入到另一个模式的表中。以下是控制文件:

LOAD DATA
 INFILE *
 INTO TABLE globalref01.dw_stg_holiday_extract
 FIELDS TERMINATED BY "|"
 TRAILING NULLCOLS
 (  ric_trd_exch,
    cntry_cde,
    holiday_date "TO_DATE (:holiday_date, 'YYYYMMDD')",
    holiday_desc,
    trd,
    stl
 )
请注意,我将插入表
模式。表\u NAME
。由于我将从模式
depotapp01
中执行sqlldr'ing,因此我将在
globalref01
上运行以下命令:

GRANT INSERT ON dw_stg_holiday_extract TO depotapp01;
GLOBALREF01 DW_STG_HOLIDAY_EXTRACT  GLOBALREF01 INSERT  NO  NO
检查它是否工作:

SELECT * FROM user_tab_privs_recd WHERE table_name = 'DW_STG_HOLIDAY_EXTRACT' AND owner = 'GLOBALREF01';
确认我已从
depotapp01
插入priv:

GRANT INSERT ON dw_stg_holiday_extract TO depotapp01;
GLOBALREF01 DW_STG_HOLIDAY_EXTRACT  GLOBALREF01 INSERT  NO  NO
现在,当我尝试执行sqlldr命令时,我得到ORA-01031:权限不足:

SQL*Loader: Release 10.2.0.4.0 - Production on Mon Feb 3 09:41:43 2014

Copyright (c) 1982, 2007, Oracle.  All rights reserved.

Control File:   /db/platform/eq/sparc_SunOS_5.6/depot/2.0/DWRef/cfg/uat/2.1/base_config/holiday_calendar.ctl
Data File:      /export/data/depotdw/DWRef/data/oats/holiday_calendar.dat
  Bad File:     /export/data/depotdw/DWRef/data/oats/holiday_calendar.err
  Discard File: /export/data/depotdw/DWRef/data/oats/holiday_calendar.dsc
 (Allow all discards)

Number to load: ALL
Number to skip: 0
Errors allowed: 200000
Bind array:     64 rows, maximum of 1000000 bytes
Continuation:    none specified
Path used:      Conventional

Table GLOBALREF01.DW_STG_HOLIDAY_EXTRACT, loaded from every logical record.
Insert option in effect for this table: INSERT
TRAILING NULLCOLS option in effect

   Column Name                  Position   Len  Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
RIC_TRD_EXCH                        FIRST     *   |       CHARACTER
CNTRY_CDE                            NEXT     *   |       CHARACTER
HOLIDAY_DATE                         NEXT     *   |       CHARACTER
    SQL string for column : "TO_DATE (:holiday_date, 'YYYYMMDD')"
HOLIDAY_DESC                         NEXT     *   |       CHARACTER
TRD                                  NEXT     *   |       CHARACTER
STL                                  NEXT     *   |       CHARACTER

SQL*Loader-929: Error parsing insert statement for table GLOBALREF01.DW_STG_HOLIDAY_EXTRACT.
ORA-01031: insufficient privileges

所以我的问题是,既然我知道我有INSERT权限,那么我还需要授予哪些其他权限才能使其正常工作?

我认为在大多数情况下,您还需要
SELECT
权限,因为SQL*Loader会在插入之前执行检查

特别是:

插入

这是SQL*加载器的默认方法它要求表格 加载前必须为空。如果 表包含行


为了检查表是否为空,SQL*Loader使用的帐户需要
SELECT
权限。如果改为作为
APPEND
加载,则可能不需要它。相反,如果您使用
REPLACE
TRUNCATE
选项,则需要额外的权限。

您是否测试过使用完全相同的凭据和连接字符串登录SQL*Plus并发出单个insert语句?是的,David。解决方案是,您需要选择privs,以便通过SQL*Loader执行插入。更多细节请参见下面文森特的回答。太棒了,文森特。在我对正在加载数据的表授予SELECT之后,对于我正在使用sqlldr的模式,SQL*Loader能够很好地加载数据。非常感谢。