![[Oracle] 프로시저 내에서 DDL 실행하기 - Create, Drop, Atler, Truncate, CTAS](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYj4ML%2FbtsKREQ3q7t%2FE7EO24wypKIRXFdYJbMRV1%2Fimg.png)
Procedure 내에서 DDL 실행Oracle의 프로시저 내에서는 DDL문을 바로 실행 할 수 없다.create or replace procedure UP_BAN_TEST isbegin create table XTMP_DDL_TABLE (t_no number(10));end;위와 같은 프로시저를 생성하면, 컴파일 시 아래와 같은 오류가 발생한다. (Error: PLS-00103) Oracle의 프로시저는 컴파일 시 문법적 오류를 확인하며 실행 계획을 미리 정하는데, DDL은 실제 런타임에만 실행이 가능하여 실행 계획을 미리 정할 수 없어 오류가 발생하게 된다. 동적 쿼리 실행프로시저 내에서 DDL문을 실행하기 위해서는 동적쿼리를 실행하는 방식으로 작성하여 실행하도록한다. 주로 CTAS, CREAT..
![[Oracle] 프로시저 내용 찾기 - 특정 테이블이 사용되는 프로시저 찾기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmXvRE%2FbtsKIyrFFVw%2FM6xVrh6dRTQYuQji5nmXx1%2Fimg.png)
Procedure 내용 찾기특정 테이블이 사용되는 프로시저를 찾거나, 특정한 구문이 포함된 프로시저를 찾아야 할 때가 있다.간단한 쿼리로 해당 프로시저를 찾을 수 있으며, 프로시저가 아닌 Function / Trigger /Package 등의 내용을 찾을때도 사용 할 수 있다. Queryselect a.object_id, a.object_name, a.object_type, b.line, b.text from DBA_OBJECTS a inner join DBA_SOURCE b on a.object_name = b.name where a.object_type = 'PROCEDURE' -- FUNCTION / TRIGGER / PACKAGE and a.o..
![[Oracle] DML Trigger - 테이블에서 사용하는 트리거 정리](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0IphG%2FbtsKDB122jC%2FuH6TYLO2ImVWHm0wPBHXf1%2Fimg.png)
DML Trigger트리거, 우리 대부분 트리거에 대해서 알고 있을 것 이다. 트리거의 특징으로는 아래 정도 알 고 있을 것 이다.* 특정한 동작이 실행되었을 때, 자동으로 함께 실행되는 것 * 데이터의 무결성을 유지* 자동으로 함께 실행되기에 성능 이슈가 있을 수 있다create or replace trigger [트리거 이름]before [or atfer] -- dml문 이전이냐 이후냐insert [or update / delete] [트리거가 동작할 테이블] -- 테이블에서 지정한 dml문이 동작시 트리거 실행[FOR EACH ROW] -- 행 트리거 일 경우 / 문장 트리거 생략begin -- 동작할 트리거 내용end;근데 트리거에 대해서 깊게 생각 해본 적이 있는가??? 그냥 함께 실행된다..
![[Oracle] 테이블 정의서 만들기 - 쿼리로 추출하기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FY7XSW%2FbtsF5UrZLAD%2FsXN9r8bIVt5KlsbCr9Amy1%2Fimg.png)
테이블 정의서 (Table Spec) MsSQL 의 테이블 정의서를 만드는 내용을 저번 포스팅에서 다뤄보았는데, 오늘은 오라클에 대해서 조회해보도록 하자. [MsSQL] 테이블 정의서 만들기 - 쿼리로 추출하기 테이블의 자세한 내용에 대해 설명 할 때 꼭 필요한 것이 테이블 정의서이다. 테이블의 존재하는 컬럼과 컬럼들의 Data Type 등을 기록하는 문서이며, 해당 문서를 통해 DBA에게 Table 생성을 요청하거나, 프로젝트 명세를 위해 내역을 첨부하는 등 필요가 많다. 보통은 DBA에게 요청하는 문서로 작성되어 오지만, 기존의 테이블의 정의를 확인하고 문서화 하기위해 정의서를 생성해 내야할 필요가 있다. 그럴 때 사용하기 적절한 쿼리에 대해 소개해보도록 하겠다. Query 쿼리내용은 아래와 같다. ..
![[Oracle] External Table - 외부 CSV 파일을 테이블로 만들기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeLwADL%2FbtsF12cr2Sa%2Fei9ETUnRLozooJsJeFPkak%2Fimg.png)
External Table 외부 테이블이라고 불리우는 External Table은 Oracle의 여러 Object 중 하나로서, Table에 쌓이는 데이터를 Block에 저장하는 것이 아닌, Local Host의 저장되어있는 데이터베이스 외부 파일에서 데이터를 불러와 Table 형식으로 보여주는 것이다. 형식화 된 대용량 CSV파일 등을 힘들게 Insert 하지 않고도 테이블 형식으로 만들어 사용 할 수 있어 편리한 External Table 생성에 대해 한번 알아보도록 하자. Create External Table External Table을 생성하는 방법은 아래와 같다. create table TB_CSV_TEST ( col_1 NUMBER(10), col_2 VARCHAR2(100), col_3 V..
![[Oracle] 11g 시퀀스 (Sequence) 컬럼 자동 증가 값](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbk8Txr%2FbtspmKs1uHr%2FLlMPkhmMikK41crjTJIKqk%2Fimg.png)
Intro 안녕하세요 초보 DBA 다뉴입니다. 오늘은 오라클의 Object중 하나인 시퀀스에 대해 알아 보도록 하겠습니다. Sequence 시퀀스(Sequence)란? - 순차적으로 자동증가 하는 값을 반환하는 객체 - 일반적으로 PK값 중복 방지를 위해 사용 - 생성, 사용 방법, 수정, 삭제 시퀀스(Sequence) 생성 CREATE SEQUENCE [SequenceName] -- 생성 시퀀스 명, 해당 Create문을 제외한 나머지 부분은 다 생략 가능 INCREMENT BY [n] -- 증감 값, n만큼 시퀀스 값이 증가(양수) 또는 감소(음수), default = 1 (생략시) START WITH [n] -- 시작숫자 default = 증가 일때 MINVALUE / 감소 일때 MAXVALUE M..
![[Oracle] 저장 구조 - Tablespace, Segments, Extents, Data Block, OS Block, Data File](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc1SCR1%2FbtsnZJOMVZl%2FGaY2fXmlRE3viMtixAw8S1%2Fimg.png)
Intro 안녕하세요 초보 DBA 다뉴입니다. 요번에 Oracle - Tablespace 관련 업무를 하다가 Data 구조에 대해서 궁금하게 되었습니다. 그래서 이것저것 공부하고 찾아보게 되어 간략하게 기본 구조에 대해서 남겨볼까 합니다. 논리적인 구조로는 Data Blocks, Extents, Segments, Tablespaces 물리적인 구조로는 OS Blocks, Data Files 이렇게 구성되어 있습니다. 한번 알아보도록 하죠. 오라클의 논리적 구조 알아두기 논리적 구조는 실제로 저장되는 공간이 아닌 공간의 나눔과 연속성에 대한 구분입니다. 구조의 순서로는 Data Block → Extents → Segments → Tablespaces 로 되어있습니다. 데이터 블록 (Data block) 논..
![[Oracle][Error] ORA-01502: 인덱스 'PK_Name' 또는 인덱스 분할영역은 사용할 수 없는 상태입니다.](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuuL2w%2Fbtsn1bDZf43%2FJk21u6K9pkajC7uV8BZU6k%2Fimg.png)
Intro 안녕하세요. 초보 DBA 다뉴입니다. 오늘 갑자기 Schedule걸어둔 작업에 갑자기 오류가 났습니다. ORA-01502: 인덱스 'PK_Name' 또는 인덱스 분할영역은 사용할 수 없는 상태입니다. 라는 에러 메시지가 출력되었는데요. 한번 알아보도록 하겠습니다. 어떤 오류? ORA-01502: 인덱스 'PK_Name' 또는 인덱스 분할영역은 사용할 수 없는 상태입니다. 이러한 메시지가 출력되며, 데이터 Insert, Update, Delete를 할 수 없는 상태가 되었습니다. select은 정상적으로 되었네요. 이유는? 금일 데이터베이스 관리 작업 중에 해당 테이블에 TableSpace를 변경하였습니다. 제 생각에는 이 작업이 문제였다고 생각되네요. 저는 Index에 대해서는 따로 Index..
![[Oracle] 파티션 (Partition) 1 - 테이블 파티션 이란?](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbc6YLj%2FbtsltjecoCp%2FTQgKEWsulFJR8KAzsamMd0%2Fimg.png)
Intro 안녕하세요. 초보 DBA 다뉴 입니다. 최근 Oracle업무에 Table Partition 을 사용할 일이 있었습니다. 처음 사용해 보는거라 약간 헤매기도 했는데요. 이것저것 공부한 내용을 정리한 내용과 새롭게 알게된 내용에 대해 정리해 보도록 하겠습니다. 파티션(Partition) 파티션 이란? 테이블이나 인덱스 데이터를 파티션 단위로 나누어 저장하는 것을 말합니다. 논리적으로는 하나의 테이블이나 인덱스를 여러 물리적 저장공간에 나누어 저장하는 것 인데요. 대용량의 데이터를 관리하고 성능을 향상 시키는데 많은 도움이 됩니다. 파티션을 사용하는 이유 파티션은 크게 관리적인 측면과 성능적인 측면에서 장점을 찾을 수 있습니다. 관리적 측면의 장점으로는 파티션 단위의 data작업의 수월함에 있습니다..
Intro 안녕하세요. 초보 DBA 다뉴입니다. 오늘은 오라클 11G 클라이언트 설치 시 발생한 에러에 대해서 한번 알아보려하는 데요. Oracle Client 11g - 64bit 와 Oracle Client 11g - 32bit 가 필요하여, 64bit 설치후 Oracle Client 11g - 64bit 설치 과정에서 발생한 INS-30131 에러입니다. INS-30131 무슨 에러? [INS-30131] 설치 프로그램 검증 실행에 필요한 기초 설정을 실패했습니다. 라는 문구와 함께 설치에 실패하여, 원인 - 임시 위치에 액세스를 실패했습니다. 작업 - 현재 사용자에게 임시 위치에 엑세스하는 데 필요한 권한이 있는지 확인하십시오. 라는 상세 문구를 확인 할 수 있었습니다. 해결방법 에러 INS-30..