데이터베이스/ORACLE
오라클 데이터베이스 [ORA-00955, ORA-00060, ORA-00907] 오류
멈머이
2025. 6. 6. 12:39
728x90
DDL 작업(CREATE, ALTER, DROP 등)을 하다가 발생하기 쉬운 오류
1. ORA-00904: invalid identifier
- 의미 : 같은 이름의 테이블, 인덱스, 시퀀스 등 객체가 이미 존재함
- 원인 : 이미 있는 테이블이나 시퀀스를 다시 생성하려 할 때, DROP을 하지 않고 CREATE만 실행할 경우
CREATE TABLE users (...); -- 이미 존재하는 경우
-- 해결 방법
-- 객체 존재 여부 먼저 확인
SELECT table_name FROM user_tables WHERE table_name = 'USERS';
-- 존재하면 DROP 후 생성
DROP TABLE users;
CREATE TABLE users (...);
-- 또는 CREATE OR REPLACE 사용 (단, VIEW, PROCEDURE 등에만 해당)
2. ORA-01430: column being added already exists in table
- 의미 : ALTER TABLE로 추가하려는 컬럼이 이미 테이블에 존재함
- 원인 : 컬럼이 이미 있는데 중복으로 추가하려는 경우, 컬럼 이름 오타가 있어 중복 시도
ALTER TABLE users ADD (username VARCHAR2(50));
-- users 테이블에 username 컬럼이 이미 있을 때
-- 해결 방법
-- 컬럼 존재 여부 확인
SELECT column_name FROM user_tab_columns
WHERE table_name = 'USERS' AND column_name = 'USERNAME';
-- 조건부로 실행하거나 스크립트 분기처리 필요 시
BEGIN
EXECUTE IMMEDIATE 'ALTER TABLE users ADD (username VARCHAR2(50))';
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE = -1430 THEN
NULL; -- 이미 존재할 경우 무시
ELSE
RAISE;
END IF;
END;
3. ORA-02429: cannot drop index used for enforcement of unique/primary key
- 의미 : PRIMARY KEY 또는 UNIQUE 제약 조건에 사용된 인덱스를 직접 DROP하려 함
- 원인 : PRIMARY KEY 제약조건 자동 생성 인덱스를 DROP하려고 할 때
DROP INDEX PK_USERS_ID;
-- 해당 인덱스가 PRIMARY KEY로 연결돼 있을 때
-- 해결 방법
-- 1. 제약조건 제거
ALTER TABLE users DROP CONSTRAINT pk_users_id;
-- 2. 다음 인덱스 DROP
DROP INDEX pk_users_id;
-- FOREIGN KEY 제약조건이 연결된 경우도 함께 고려해야 함
- DDL 실행 전, 항상 user_tables, user_constraints, user_indexes 등 메타정보 조회!
- DDL은 롤백 불가이므로 작업 전 백업 필수
728x90