【发布时间】:2014-02-03 14:59:42
【问题描述】:
我正在尝试通过 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
)
请注意,我正在插入表 SCHEMA.TABLE_NAME。由于我将从架构depotapp01 进行sqlldr'ing,因此我将在globalref01 上运行以下命令:
GRANT INSERT ON dw_stg_holiday_extract TO depotapp01;
检查它是否有效:
SELECT * FROM user_tab_privs_recd WHERE table_name = 'DW_STG_HOLIDAY_EXTRACT' AND owner = 'GLOBALREF01';
这确认我有来自depotapp01 的 INSERT privs:
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 权限,我还需要授予哪些其他权限才能使其正常工作?
【问题讨论】:
-
您是否测试过使用完全相同的凭据和连接字符串登录到 SQL*Plus,并发出单个插入语句?
-
是的,大卫。解决方案是,您需要 SELECT privs 才能通过 SQL*Loader 执行 INSERT。有关详细信息,请参阅下面文森特的回答。
标签: sql oracle sql-loader