ORA-01031:通过SQL*加载器将数据从一个架构大容量加载到另一个架构时权限不足
我试图通过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
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能够很好地加载数据。非常感谢。