코딩헤딩

오라클 데이터베이스 [ORA-00955, ORA-00060, ORA-00907] 오류 본문

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