Segment 오브젝트는 오브젝트 ID가 순차적으로 부여되고, Non-segment 오브젝트를 오브젝트 ID가 재사용될 수 있는 것으로 보입니다. 참고로 이 동작에 대한 오라클 포럼의 Regarding object_id in Oracle 글에도 명확한 이유가 설명되어 있지 않습니다.
아래는 Segment 오브젝트인 테이블로 테스트한 결과입니다. 오브젝트 ID가 순차적으로 부여되는 것을 확인할 수 있습니다.
-- 1-1
DROP TABLE t1 PURGE;
CREATE TABLE t1 (c1 NUMBER);
-- 1-2
SELECT object_id, data_object_id FROM user_objects WHERE object_name = 'T1';
OBJECT_ID DATA_OBJECT_ID
--------- --------------
153493 153493
1개의 행이 선택되었습니다.
-- 1-3
DROP TABLE t1 PURGE;
CREATE TABLE t1 (c1 NUMBER);
-- 1-4
SELECT object_id, data_object_id FROM user_objects WHERE object_name = 'T1';
OBJECT_ID DATA_OBJECT_ID
--------- --------------
153494 153494
1개의 행이 선택되었습니다.
아래는 Non-segment 오브젝트인 프로시저로 테스트한 결과입니다. 오브젝트 ID가 재사용되는 것을 확인할 수 있습니다.
-- 2-1
DROP PROCEDURE p1;
CREATE PROCEDURE p1 IS BEGIN NULL; END;
/
-- 2-2
SELECT object_id, data_object_id FROM user_objects WHERE object_name = 'P1';
OBJECT_ID DATA_OBJECT_ID
--------- --------------
89111
1개의 행이 선택되었습니다.
-- 2-3
DROP PROCEDURE p1;
CREATE PROCEDURE p1 IS BEGIN NULL; END;
/
-- 2-4
SELECT object_id, data_object_id FROM user_objects WHERE object_name = 'P1';
OBJECT_ID DATA_OBJECT_ID
--------- --------------
89111
1개의 행이 선택되었습니다.
관련 링크