원인
1. DDL_AUTCOMMIT 이 OFF 이고, 다른 세션에서 DDL 작업 후 커밋하지 않은경우에 발생합니다.
2. 커밋은 되었으나 Ager 가 자원을 제거하지 못한경우에 발생합니다.
해결방안
방법 1. DDL 을 수행한 세션에서 커밋을 수행합니다.
* 다른 세션에서 DDL 작업한 세션의 커밋 전 후 비교
gSQL> SELECT SESSION_ID() FROM DUAL; SESSION_ID() ------------ 4 1 row selected. gSQL> CREATE TABLE T1 (C1 INT); Table created.
gSQL> SELECT SESSION_ID() FROM DUAL; SESSION_ID() ------------ 12 1 row selected. gSQL> CREATE TABLE T1 (C1 INT); ERR-HYT00(14026): resource busy or timeout expired
gSQL> SELECT SESSION_ID() FROM DUAL; SESSION_ID() ------------ 4 1 row selected. gSQL> COMMIT; Commit complete.
gSQL> SELECT SESSION_ID() FROM DUAL; SESSION_ID() ------------ 12 1 row selected. gSQL> CREATE TABLE T1 (C1 INT); ERR-42000(16005): name 'PUBLIC.T1' is already used by an existing object : CREATE TABLE T1 (C1 INT) * ERROR at line 1:
원인 2번에 대해서는 다양한 상황에 의해 Ager 가 밀리는 현상이 나타날 수 있으며,
밀리는 시점에 장비의 상태 정보, 로그 등등을 종합적으로 확인하면서 진행해야 합니다.
* system.trc 에 Ager 가 해당 테이블에 대한 자원을 반납했는지에 대한 조회
system.trc 에 Physical ID 값으로 grep 하는 경우 내용이 없으면 Ager Thread 에 의해 반납되지 않은 상태입니다.
gSQL> SELECT TABLE_NAME, PHYSICAL_ID FROM WHOLE_TABLES WHERE TABLE_NAME = 'T1'; TABLE_NAME # T1 PHYSICAL_ID # 8310761717760 1 row selected. gSQL> DROP TABLE T1; Table dropped. gSQL> COMMIT; Commit complete.
$ grep "physical id(8310761717760)" system.trc [AGER] aging table - object scn(0.0.507), object view scn(0.0.508), type(0), physical id(8310761717760)