데이터베이스/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