테이블스페이스 '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 테이블스페이스에 삽입할 권한 또는 할당량을 부여해야 합니다.이 작업은 여러 가지 방법으로 수행할 수 있습니다.
예를 들어 사용자에게 제공할 수 있습니다.
MYUSER
USERS 테이블스페이스의 무제한 할당량:ALTER USER MYUSER QUOTA UNLIMITED ON USERS;
사용자가 테이블스페이스에 할당할 수 있는 최대 공간을 정의할 수도 있습니다.
ALTER USER MYUSER QUOTA 100M ON USERS;
또한 사용자에게 무제한 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
'source' 카테고리의 다른 글
헤드리스 브라우저로 테스트를 실행하려면 어떻게 해야 합니까? (0) | 2023.08.08 |
---|---|
PHP의 base64 문자열에서 이미지 유형 탐지 (0) | 2023.08.08 |
코어 모듈에 추가된 http 인터셉터를 무시하도록 앵글 모듈을 만드는 방법 (0) | 2023.08.08 |
모듈에서 사용 가능한 명령을 검색하려면 어떻게 해야 합니까? (0) | 2023.07.29 |
분할 오류와 스택 오버플로의 차이점은 무엇입니까? (0) | 2023.07.29 |