본문 바로가기

ddl4

ddl_lock_timeout 과 ORA-00054 : resource busy 테이블에 DML이 일어나면 lock이 발생되고 다른세션은 이전 DML이 종료될때까지 waiting이 발생합니다. 다른 세션의 작업이 DML이라면, 세션이 계속 대기중이면서 이전 세션이 종료됨과 동시에 수행이 될 것입니다. 하지만 다른 세션의 작업이 DDL이라면? DDL은 바로 해당 에러를 보이면서 되지 않을 것입니다. ERROR at line 1: ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired 리소스가 사용중이니 에러를 뱉으며 명령어를 수행할 수 없다는 뜻입니다. 기존세션에서 있는 DML이 언제 끝날지 모르고 계속 대기해야 하거나, DML을 강제로 종료시키고 저의 DDL 작업을 수행해야 하는데, DML과 다르게 .. 2023. 7. 24.
[12c] Drop USER 시 ORA-00604,ORA-00942 DB : 12.2.0.1 테스트 서버에서 DROP USER 할 일이 생겼었는데 DROP USER를 하니 아래와 같은 에러가 발생하였습니다. SQL> DROP USER ORG_REORG CASCADE; ERROR at line 1: ORA-00604: error occurred at recursive SQL level 1 ORA-00942: table or view does not exist 원인은 ILM 관련 sys의 테이블들이 없었고,(왜 없는지는 모르겠습니다..) 해당 테이블들을 잘 수행되는 DB에서 DDL 스크립트를 가져와 재생성 후 다시 DROP USER 시도를 하니 잘 수행되었습니다. 분석을 위해 세션 10046 trace 를 생성했고 그것을 통해서 분석하였습니다. 1.10046 trace 생성.. 2022. 9. 1.
다른 유저 테이블 Truncate 시키는 권한 일반적인 DML(INSERT,UPDATE,DELETE,SELECT)권한은 Oracle의 권한을 부여해서 제어가 가능합니다. 하지만 Truncate의 경우에는 일반적인 권한부여로는 제어할 수가 없는데요, 아래의 문구를 보시면 해당스키마의 테이블이거나 DROP ANY TABLE의 권한이 있어야 Truncate가 가능하다고 나와 있습니다. Truncate는 DML이 아닌 DDL로 분류되고 사용되기 때문에 이러한 권한부여가 필요하겠죠. To truncate a table, the table must be in your schema or you must have the DROP ANY TABLE system privilege. grant truncate~~가 아니라 DROP ANY TABLE 권한이 필요하다는 사.. 2021. 10. 25.
Delete와 Truncate 운영업무를 하다보면 Delete와 Truncate에 대해서 설명해야 할때가 있었습니다. 따라서 둘의 차이를 정리하는 글을 포스팅해보겠습니다. Delete DML언어 중 하나로 데이터를 삭제할 수 있는 명령어입니다. 특징은 Delete 후에 Rollback시 원복할 수 있다는 것입니다. 따라서 Delete를 하게되면 원본 데이터를 UNDO에 저장하게 되는 작업이 필수적으로 들어갑니다. 또한 삭제하여도 테이블 용량은 줄어들지 않고 그대로인 상태가 됩니다. 또한 전체 데이터 삭제도 가능하고, 조건절 등을 추가하여 일부데이터만 삭제도 가능합니다. TRUNCATE DDL언어이며, 테이블을 최초 생성된 상태로 만듭니다. 테이블 내의 모든 데이터를 삭제하게 되며, 테이블의 용량도 생성 시 초기 용량상태로 돌아갑니다... 2020. 9. 24.