코딩헤딩

오라클 데이터베이스 [ORA-01408, ORA-14024, ORA-01031] 오류 본문

데이터베이스/ORACLE

오라클 데이터베이스 [ORA-01408, ORA-14024, ORA-01031] 오류

멈머이 2025. 6. 10. 20:49
728x90

인덱스, 파티션, 뷰(View) 관련 오류

 

1. ORA-01408: such column list already indexed

  • 의미 : 같은 컬럼 조합의 인덱스가 이미 존재함
  • 원인 : 중복된 컬럼 조합으로 인덱스를 다시 생성하려 할 때
CREATE INDEX idx_emp_dept ON employees(department_id, employee_id);
-- 이미 같은 컬럼 조합의 인덱스가 존재함

	-- 해결 방법
-- USER_INDEXES, USER_IND_COLUMNS로 기존 인덱스 확인
SELECT index_name, column_name FROM user_ind_columns
WHERE table_name = 'EMPLOYEES';
-- 인덱스 이름만 다르고 컬럼이 같으면 생성 생략 또는 DROP 후 생성

 

 

 

2. ORA-14024: missing or incomplete partition boundary specification

  • 의미 : 파티션 테이블 생성 시 파티션 조건이 불완전하거나 빠짐
  • 원인 : PARTITION BY절 이후 경계값(VALUES LESS THAN) 누락, 누락된 MAXVALUE 파티션
CREATE TABLE sales (
  sale_id NUMBER,
  sale_date DATE
)
PARTITION BY RANGE (sale_date) (
  PARTITION p1 VALUES LESS THAN (TO_DATE('2024-01-01', 'YYYY-MM-DD'))
  -- 다음 파티션 없음
);

	-- 해결 방법
PARTITION p2 VALUES LESS THAN (MAXVALUE)
-- 처럼 반드시 최종 범위 설정 필요

 

 

 

3. ORA-01031: insufficient privileges (뷰 관련)

  • 의미 :  권한 부족 (조회는 되는데 INSERT/UPDATE 시 발생하기도 함)
  • 원인 : VIEW 기반 테이블에 대한 직접 권한 없을 때, WITH CHECK OPTION 뷰에서 조건을 위반한 UPDATE 수행 시
-- 어떤 유저가 아래 뷰에서 INSERT 수행
CREATE VIEW emp_view AS
SELECT * FROM employees WHERE department_id = 10;

INSERT INTO emp_view (employee_id, department_id) VALUES (999, 20);

	-- 해결 방법
-- WITH CHECK OPTION 없는 뷰로 수정하거나, 조건 맞게 데이터 입력
-- 직접 테이블 권한 부여 필요
GRANT INSERT, UPDATE ON employees TO your_user;

 

 

 

  • 뷰를 통한 DML은 내부 테이블 권한과 INSTEAD OF TRIGGER 여부까지 고려해야 안전
  • 파티션 테이블은 꼭 MAXVALUE, INTERVAL, LIST 등 잘 설정하고 테스트
728x90