source

테이블스페이스 'USERS'에 대한 권한 없음

manysource 2023. 8. 8. 21:41

테이블스페이스 'USERS'에 대한 권한 없음

행을 삽입할 수 있는 테이블이 많지만 테이블 하나에 대해서만 이 오류가 발생합니다.

Error starting at line 1 in command:
INSERT INTO ERRORLOG (MESSAGE) VALUES ('test')
Error report:
SQL Error: ORA-01950: no privileges on tablespace 'USERS'
01950. 00000 -  "no privileges on tablespace '%s'"
*Cause:    User does not have privileges to allocate an extent in the
           specified tablespace.
*Action:   Grant the user the appropriate system privileges or grant the user
           space resource on the tablespace.

나는 오라클에 전문가는 아니지만 오류 메시지에서 이해한 바와 같이, 'USERS' 테이블스페이스가 가득 찼고 내 사용자는 테이블스페이스를 확장할 수 있는 권한이 없지만 다른 테이블'(내가 삽입할 수 있는) 테이블스페이스는 동일합니다.삽입 가능한 테이블에 대한 SQL과 오류가 발생하는 테이블입니다.

문제 없음;

  CREATE TABLE "MYUSER"."HEADSHIP" 
   (    "ID" NUMBER NOT NULL ENABLE, 
    "DESCRIPTION" VARCHAR2(255 BYTE), 
    "ISDELETED" VARCHAR2(1 BYTE) DEFAULT 0 NOT NULL ENABLE, 
     CONSTRAINT "HEADSHIP_PK" PRIMARY KEY ("ID")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "USERS"  ENABLE, 
     CONSTRAINT "HEADSHIP_UI" UNIQUE ("DESCRIPTION")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "USERS"  ENABLE
   ) SEGMENT CREATION IMMEDIATE 
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "USERS" ;


  CREATE OR REPLACE TRIGGER "MYUSER"."HEADSHIP_TRG" BEFORE INSERT ON HEADSHIP 
FOR EACH ROW 
BEGIN
  <<COLUMN_SEQUENCES>>
  BEGIN
    IF :NEW.ID IS NULL THEN
      SELECT HEADSHIP_SEQ.NEXTVAL INTO :NEW.ID FROM DUAL;
    END IF;
  END COLUMN_SEQUENCES;
END;
/
ALTER TRIGGER "MYUSER"."HEADSHIP_TRG" ENABLE;

다음에 대한 오류 발생:

CREATE TABLE "MYUSER"."ERRORLOG" 
   (    "ID" NUMBER NOT NULL ENABLE, 
    "MESSAGE" VARCHAR2(2048 BYTE), 
    "STACKTRACE" VARCHAR2(2048 BYTE), 
    "XDATE" DATE, 
    "USERLDAPNAME" VARCHAR2(127 BYTE), 
    "QUERY" VARCHAR2(2048 BYTE), 
     CONSTRAINT "ERRORLOG_PK" PRIMARY KEY ("ID")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "USERS"  ENABLE
   ) SEGMENT CREATION IMMEDIATE 
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "USERS" ;


  CREATE OR REPLACE TRIGGER "MYUSER"."ERRORLOG_TRG" BEFORE INSERT ON ERRORLOG 
FOR EACH ROW 
BEGIN
  <<COLUMN_SEQUENCES>>
  BEGIN
    IF :NEW.ID IS NULL THEN
      SELECT ERRORLOG_SEQ.NEXTVAL INTO :NEW.ID FROM DUAL;
    END IF;
  END COLUMN_SEQUENCES;
END;
/
ALTER TRIGGER "MYUSER"."ERRORLOG_TRG" ENABLE;

사용자MYUSER사용자 테이블 영역에 데이터를 삽입할 수 있는 권한이 없습니다.사용자에게 USERS 테이블스페이스에 삽입할 권한 또는 할당량을 부여해야 합니다.이 작업은 여러 가지 방법으로 수행할 수 있습니다.

  1. 예를 들어 사용자에게 제공할 수 있습니다.MYUSERUSERS 테이블스페이스의 무제한 할당량:

    ALTER USER MYUSER QUOTA UNLIMITED ON USERS;
    
  2. 사용자가 테이블스페이스에 할당할 수 있는 최대 공간을 정의할 수도 있습니다.

    ALTER USER MYUSER QUOTA 100M ON USERS;
    
  3. 또한 사용자에게 무제한 TABLESPACE 시스템 권한을 부여할 수 있습니다. 즉, 데이터베이스 내의 모든 테이블스페이스에 대해 무제한 할당량을 가집니다.

    GRANT UNLIMITED TABLESPACE TO MYUSER;
    

Oracle Database의 리소스 관리에 대한 자세한 내용은 Oracle Database Documentation을 참조하십시오.

사용자가 다음 중 하나를 가지고 있다면 이 효과를 얻을 수 있습니다.RESOURCE또는UNLIMITED TABLESPACE테이블이 생성된 시점에 할당된 역할입니다. 그러나 해당 역할은 취소되었으며 테이블에서 새 익스텐트를 할당하려고 합니다.사용자가 테이블스페이스에 대한 할당량을 명시적으로 설정하지 않았습니다. 0으로 설정하여 할당량을 제거한 경우에도 "ORA-01536: 테이블스페이스 'USERS'에 대한 공간 할당량 초과"가 대신 표시됩니다.

효과 확인하기

-- grant unlimited tablespace to user;

create table t42 (id number) tablespace users;

Table t42 created.

insert into t42
select level as id
from dual
connect by level < 1000;

1,999 rows inserted.

select extents from user_segments where segment_name = 'T42';

   EXTENTS
----------
         1 

-- revoke unlimited tablespace from user;

이 시점에서도 데이터를 삽입할 수 있습니다.

insert into t42 values (2000);

1 rows inserted.

그러나 두 번째 익스텐트를 할당해야 할 만큼 충분한 행을 삽입하면 다음 오류와 함께 실패합니다.

insert into t42
select level + 2000 as id
from dual
connect by level < 2000;

Error report -
SQL Error: ORA-01950: no privileges on tablespace 'USERS'
01950. 00000 -  "no privileges on tablespace '%s'"
*Cause:    User does not have privileges to allocate an extent in the
           specified tablespace.
*Action:   Grant the user the appropriate system privileges or grant the user
           space resource on the tablespace.

아마도 당신의 DBA가 약간의 권한을 수행하고 있을 것이고, 아마도 취소할 것입니다.RESOURCE더 이상 사용되지 않기 때문입니다.

코멘트에서 언급한 바와 같이 DBA는 테이블스페이스에 특정 크기 또는 이전과 일치하는 공간을 제한 없이 허용해야 합니다.

grant quota unlimited on users to myuser;

언급URL : https://stackoverflow.com/questions/27940522/no-privileges-on-tablespace-users