简体   繁体   中英

SQL*Loader-926: OCI error while executing delete/truncate ORA-01031: insufficient privileges

I have 12 .csv files which should be loaded in a staging table and after it loaded the data to the staging table it should load the data grouped by parameters into another table . It throws an error by creating the table . It is missing privileges.

GABER_RIGHTS.SQL:

GRANT SELECT, DELETE, INSERT, UPDATE ON FOOTBALLCLUB.FACT_GABER_FOOTBALLCLUB                    TO GABER;
GRANT SELECT, DELETE, INSERT, UPDATE ON FOOTBALLCLUB.FACT_GABER_FOOTBALLCLUB_STA        TO GABER;
GRANT SELECT, DELETE, INSERT, UPDATE ON FOOTBALLCLUB.DIM_PLAYER                TO GABER;
GRANT SELECT, DELETE, INSERT, UPDATE ON FOOTBALLCLUB.DIM_TEAM                   TO GABER;
GRANT SELECT, DELETE, INSERT, UPDATE ON FOOTBALLCLUB.DIM_TRAINER                  TO GABER;
exit;

gaber_footballclub.sh:

#!/bin/bash

sqlplus system/oracle @FOOTBALLCLUB_GABER_CREATE_USER.sql
sqlplus gaber/oracle @FOOTBALLCLUB_GABER_CREATE_TABLES.plsql
sqlplus gaber/oracle @FOOTBALLCLUB_GABER_CREATE_TABLES.sql
sqlplus system/oracle @GABER_RIGHTS.sql

for FILE_NAME in `ls ../data/FACT_FOOTBALLCLUB_GABER*.csv`
do
   export BASE_NAME=`basename $FILE_NAME`
   export JUST_NAME=`echo $BASE_NAME | sed -e 's/\..*//'`
   echo $FILE_NAME
   echo $BASE_NAME
   echo $JUST_NAME


sed -e 's/"//g' ../data/$FILE_NAME | dos2unix >../data/FACT_FOOTBALLCLUB_GABER.csv 
sqlldr gaber/oracle data=../data/FACT_FOOTBALLCLUB_GABER.csv control=gaber_footballclub_staging.ldr log=../log/$JUST_NAME.log bad=../log/$JUST_NAME.bad errors=20

   sqlplus gaber/oracle <<!
      INSERT INTO FOOTBALLCLUB.FACT_GABER_FOOTBALLCLUB
      SELECT 
   ID,
   Sum(NUMBER_OF_PLAYERS) as NUMBER_OF_PLAYERS,
   Sum(GOALS_SHOT) as GOALS_SHOT,
   Sum(GOALS_GOT) as GOALS_GOT,
   Sum(YELLOW_CARDS) as YELLOW_CARDS,
   Sum(RED_CARDS) as RED_CARDS,
   Sum(MINUTES_PLAYED) as MINUTES_PLAYED,
   DATE_PLAYED,
   TEAM_ID,
   TRAINER_ID
      FROM   FOOTBALLCLUB.FACT_GABER_FOOTBALLCLUB_STA
      GROUP BY ID, DATE_PLAYED, TEAM_ID, TRAINER_ID;
      exit;
!
done

gaber_footballclub_staging.ldr:

LOAD DATA
REPLACE
INTO TABLE FOOTBALLCLUB.FACT_GABER_FOOTBALLCLUB_STA
FIELDS TERMINATED BY ','
(
   ID,
   NUMBER_OF_PLAYERS,
   GOALS_SHOT,
   GOALS_GOT,
   YELLOW_CARDS,
   RED_CARDS,
   MINUTES_PLAYED,
   DATE_PLAYED  DATE "YYYY-MM-DD",
   TEAM_ID,
   TRAINER_ID
)

FOOTBALLCLUB_GABER_CREATE_USER.sql:

DROP TABLESPACE TBS_GABER_DWH INCLUDING CONTENTS AND DATAFILES;
DROP USER FOOTBALLCLUB CASCADE;
DROP USER GABER CASCADE;


CREATE SMALLFILE TABLESPACE TBS_GABER_DWH DATAFILE
'/home/oracle/app/oracle/oradata/orcl/gaber_dwh01.dbf' SIZE 200M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED,
'/home/oracle/app/oracle/oradata/orcl/gaber_dwh02.dbf' SIZE 200M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED
LOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;

CREATE USER GABER PROFILE DEFAULT IDENTIFIED BY "oracle"
DEFAULT TABLESPACE TBS_GABER_DWH
QUOTA UNLIMITED ON TBS_GABER_DWH
TEMPORARY TABLESPACE TEMP ACCOUNT UNLOCK;
GRANT SELECT ANY DICTIONARY TO GABER;
GRANT UNLIMITED TABLESPACE TO GABER;
GRANT CONNECT TO GABER;
GRANT RESOURCE TO GABER;
GRANT CREATE TABLE TO GABER;
GRANT CREATE ANY TABLE TO GABER;
GRANT CREATE PROCEDURE TO GABER;
GRANT CREATE ANY PROCEDURE TO GABER;
GRANT EXECUTE ANY PROCEDURE TO GABER;
GRANT CREATE SESSION TO GABER;
GRANT SELECT ANY TABLE TO GABER;



CREATE USER FOOTBALLCLUB PROFILE DEFAULT IDENTIFIED BY "oracle"
DEFAULT TABLESPACE TBS_GABER_DWH
TEMPORARY TABLESPACE TEMP
QUOTA UNLIMITED ON TBS_GABER_DWH
ACCOUNT LOCK;
GRANT CREATE TABLE TO FOOTBALLCLUB;
GRANT UNLIMITED TABLESPACE TO FOOTBALLCLUB;


exit;

FOOTBALLCLUB_GABER_CREATE_TABLES.sql:

call FOOTBALLCLUB.PROC_GABER_CREATE_TABLES('FOOTBALLCLUB');
exit;

FOOTBALLCLUB_GABER_CREATE_TABLES.plsql:

CREATE OR REPLACE PROCEDURE FOOTBALLCLUB.PROC_GABER_CREATE_TABLES (SCHEMA_NAME IN VARCHAR2) IS
  v_tabcnt number;
BEGIN


  SELECT count(*) into v_tabcnt
  FROM   ALL_TABLES
  WHERE  OWNER = SCHEMA_NAME and
         TABLE_NAME = 'DIM_TEAM';

  if v_tabcnt = 0 then
      EXECUTE IMMEDIATE
            'CREATE TABLE ' || SCHEMA_NAME || '.DIM_TEAM
            (
                TEAM_ID  INTEGER      NOT NULL PRIMARY KEY,
                TEAM_NAME VARCHAR2(30)     NOT NULL
            )';
  end if;




  SELECT count(*) into v_tabcnt
  FROM   ALL_TABLES
  WHERE  OWNER = SCHEMA_NAME and
         TABLE_NAME = 'DIM_PLAYER';

  if v_tabcnt = 0 then
      EXECUTE IMMEDIATE
            'CREATE TABLE ' || SCHEMA_NAME || '.DIM_PLAYER
            (
                PLAYER_ID     INTEGER      NOT NULL PRIMARY KEY,
                PLAYER_NAME   VARCHAR2(30) NOT NULL,
                PLAYER_NUMBER INTEGER NOT NULL,
                PLAYER_BIRTHDATE DATE NOT NULL,
                TEAM_ID INTEGER NOT NULL,

                CONSTRAINT fk_team_id
                   FOREIGN KEY (TEAM_ID)
                   REFERENCES ' || SCHEMA_NAME || '.DIM_TEAM (TEAM_ID)
            )';
  end if;


  SELECT count(*) into v_tabcnt
  FROM   ALL_TABLES
  WHERE  OWNER = SCHEMA_NAME and
         TABLE_NAME = 'DIM_TRAINER';

  if v_tabcnt = 0 then
      EXECUTE IMMEDIATE
            'CREATE TABLE ' || SCHEMA_NAME || '.DIM_TRAINER
            (
                TRAINER_ID  INTEGER      NOT NULL PRIMARY KEY,
                TRAINER_NAME VARCHAR2(30) NOT NULL,
                TRAINER_BIRTHDATE DATE NOT NULL
            )';
  end if;


  SELECT count(*) into v_tabcnt
  FROM   ALL_TABLES
  WHERE  OWNER = SCHEMA_NAME and
         TABLE_NAME = 'FACT_GABER_FOOTBALLCLUB_STA';

  if v_tabcnt = 0 then
      EXECUTE IMMEDIATE
            'CREATE TABLE ' || SCHEMA_NAME || '.FACT_GABER_FOOTBALLCLUB_STA
            (
                ID     INTEGER    NOT NULL PRIMARY KEY,
                NUMBER_OF_PLAYERS     INTEGER NOT NULL,
                GOALS_SHOT  INTEGER NOT NULL,
                GOALS_GOT     INTEGER NOT NULL,
                YELLOW_CARDS    INTEGER NOT NULL,
                RED_CARDS         INTEGER NOT NULL,
                MINUTES_PLAYED        DECIMAL(12,2) NOT NULL,
                DATE_PLAYED       DATE NOT NULL,
                TEAM_ID            INTEGER NOT NULL,
                TRAINER_ID      INTEGER NOT NULL,

                CONSTRAINT fk_fact_team_id_st
                   FOREIGN KEY (TEAM_ID)
                   REFERENCES ' || SCHEMA_NAME || '.DIM_TEAM (TEAM_ID),
                CONSTRAINT fk_trainer_id_st
                   FOREIGN KEY (TRAINER_ID)
                   REFERENCES ' || SCHEMA_NAME || '.DIM_TRAINER (TRAINER_ID)
            )';
  end if;

    SELECT count(*) into v_tabcnt
  FROM   ALL_TABLES
  WHERE  OWNER = SCHEMA_NAME and
         TABLE_NAME = 'FACT_GABER_FOOTBALLCLUB';

  if v_tabcnt = 0 then
      EXECUTE IMMEDIATE
            'CREATE TABLE ' || SCHEMA_NAME || '.FACT_GABER_FOOTBALLCLUB
            (
                ID     INTEGER    NOT NULL PRIMARY KEY,
                NUMBER_OF_PLAYERS     INTEGER NOT NULL,
                GOALS_SHOT  INTEGER NOT NULL,
                GOALS_GOT     INTEGER NOT NULL,
                YELLOW_CARDS    INTEGER NOT NULL,
                RED_CARDS         INTEGER NOT NULL,
                MINUTES_PLAYED        DECIMAL(12,2) NOT NULL,
                DATE_PLAYED       DATE NOT NULL,
                TEAM_ID            INTEGER NOT NULL,
                TRAINER_ID      INTEGER NOT NULL,
                CONSTRAINT fk_fact_team_id  
                   FOREIGN KEY (TEAM_ID)
                   REFERENCES ' || SCHEMA_NAME || '.DIM_TEAM (TEAM_ID),
                CONSTRAINT fk_trainer_id
                   FOREIGN KEY (TRAINER_ID)
                   REFERENCES ' || SCHEMA_NAME || '.DIM_TRAINER (TRAINER_ID)           
            )';
  end if;
END;
/
exit;

gaber_footballclub_staging.log: SQL*Loader: Release 11.2.0.2.0 - Production on Thu Feb 13 15:05:23 2020

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

Control File:   gaber_footballclub_staging.ldr
Data File:      ../data/FACT_FOOTBALLCLUB_GABER.csv
  Bad File:     FACT_FOOTBALLCLUB_GABER.bad
  Discard File:  none specified

 (Allow all discards)

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

Table FOOTBALLCLUB.FACT_GABER_FOOTBALLCLUB_STA, loaded from every logical record.
Insert option in effect for this table: REPLACE

   Column Name                  Position   Len  Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
ID                                  FIRST     *   ;       CHARACTER            
NUMBER_OF_PLAYERS                    NEXT     *   ;       CHARACTER            
GOALS_SHOT                           NEXT     *   ;       CHARACTER            
GOALS_GOT                            NEXT     *   ;       CHARACTER            
YELLOW_CARDS                         NEXT     *   ;       CHARACTER            
RED_CARDS                            NEXT     *   ;       CHARACTER            
MINUTES_PLAYED                       NEXT     *   ;       CHARACTER            
DATE_PLAYED                          NEXT     *   ;       DATE YYYY-MM-DD      
TEAM_ID                              NEXT     *   ;       CHARACTER            
TRAINER_ID                           NEXT     *   ;       CHARACTER            

SQL*Loader-926: OCI error while executing delete/truncate (due to REPLACE/TRUNCATE keyword) for table FOOTBALLCLUB.FACT_GABER_FOOTBALLCLUB_STA
ORA-01031: insufficient privileges

I have solved my problems by deleting the constraints and primary keys in the plsql script . Furthermore, I had one 0 instead of an O in one csv sheet .

The only document that has changed is FOOTBALLCLUB_GABER_CREATE_TABLES.plsql:

CREATE OR REPLACE PROCEDURE FOOTBALLCLUB.PROC_GABER_CREATE_TABLES (SCHEMA_NAME IN VARCHAR2) IS
  v_tabcnt number;
BEGIN


  SELECT count(*) into v_tabcnt
  FROM   ALL_TABLES
  WHERE  OWNER = SCHEMA_NAME and
  TABLE_NAME = 'DIM_TEAM';

  if v_tabcnt = 0 then
      EXECUTE IMMEDIATE
            'CREATE TABLE ' || SCHEMA_NAME || '.DIM_TEAM
            (
                TEAM_ID  INTEGER      NOT NULL,
                TEAM_NAME VARCHAR2(30)     NOT NULL
            )';
  end if;




  SELECT count(*) into v_tabcnt
  FROM   ALL_TABLES
  WHERE  OWNER = SCHEMA_NAME and
         TABLE_NAME = 'DIM_PLAYER';

  if v_tabcnt = 0 then
      EXECUTE IMMEDIATE
            'CREATE TABLE ' || SCHEMA_NAME || '.DIM_PLAYER
            (
                PLAYER_ID     INTEGER      NOT NULL,
                PLAYER_NAME   VARCHAR2(30) NOT NULL,
                PLAYER_NUMBER INTEGER NOT NULL,
                PLAYER_BIRTHDATE DATE NOT NULL,
                TEAM_ID INTEGER NOT NULL
            )';
  end if;


  SELECT count(*) into v_tabcnt
  FROM   ALL_TABLES
  WHERE  OWNER = SCHEMA_NAME and
         TABLE_NAME = 'DIM_TRAINER';

  if v_tabcnt = 0 then
      EXECUTE IMMEDIATE
            'CREATE TABLE ' || SCHEMA_NAME || '.DIM_TRAINER
            (
                TRAINER_ID  INTEGER      NOT NULL,
                TRAINER_NAME VARCHAR2(30) NOT NULL,
                TRAINER_BIRTHDATE DATE NOT NULL
            )';
  end if;


  SELECT count(*) into v_tabcnt
  FROM   ALL_TABLES
  WHERE  OWNER = SCHEMA_NAME and
         TABLE_NAME = 'FACT_GABER_FOOTBALLCLUB_STA';

  if v_tabcnt = 0 then
      EXECUTE IMMEDIATE
            'CREATE TABLE ' || SCHEMA_NAME || '.FACT_GABER_FOOTBALLCLUB_STA
            (
                ID     INTEGER    NOT NULL,
                NUMBER_OF_PLAYERS     INTEGER NOT NULL,
                GOALS_SHOT  INTEGER NOT NULL,
                GOALS_GOT     INTEGER NOT NULL,
                YELLOW_CARDS    INTEGER NOT NULL,
                RED_CARDS         INTEGER NOT NULL,
                MINUTES_PLAYED        DECIMAL(12,2) NOT NULL,
                DATE_PLAYED       DATE NOT NULL,
                TEAM_ID            INTEGER NOT NULL,
                TRAINER_ID      INTEGER NOT NULL
            )';
  end if;

    SELECT count(*) into v_tabcnt
  FROM   ALL_TABLES
  WHERE  OWNER = SCHEMA_NAME and
         TABLE_NAME = 'FACT_GABER_FOOTBALLCLUB';

  if v_tabcnt = 0 then
      EXECUTE IMMEDIATE
            'CREATE TABLE ' || SCHEMA_NAME || '.FACT_GABER_FOOTBALLCLUB
            (
                ID     INTEGER    NOT NULL,
                NUMBER_OF_PLAYERS     INTEGER NOT NULL,
                GOALS_SHOT  INTEGER NOT NULL,
                GOALS_GOT     INTEGER NOT NULL,
                YELLOW_CARDS    INTEGER NOT NULL,
                RED_CARDS         INTEGER NOT NULL,
                MINUTES_PLAYED        DECIMAL(12,2) NOT NULL,
                DATE_PLAYED       DATE NOT NULL,
                TEAM_ID            INTEGER NOT NULL,
                TRAINER_ID      INTEGER NOT NULL          
            )';
  end if;
END;
/
exit;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM