본문 바로가기
728x90

전체 글179

오라클 데이터 이행 - Exchange Partition(파티션 익스체인지)를 이용한 이행 인덱스가 있는 상태에서 대량의 데이터를 INSERT하면 매 건마다 인덱스 분할(Split) 및 정렬 작업이 발생하여 속도가 심각하게 느려지고 엄청난 양의 Undo/Redo 로그가 쌓이게 됩니다. 인덱스를 제거한 상태에서 이행하는 것이 가장 빠릅니다. [1, 3] 🚀 최적의 대용량 이행 5단계 절차타깃 테이블을 MAIN_TAB(일반 테이블), 데이터 이행용 임시 파티션 테이블을 TEMP_PART_TAB이라고 가정하겠습니다.1단계: 기존 일반 테이블의 인덱스 드랍 (또는 Unusable 변경)완전히 새로 이행하는 환경이라면 DROP INDEX를 합니다.만약 기존 인덱스 구문을 백업하기 번거롭다면 인덱스를 유지한 채 UNUSABLE 상태로 만들고 이행 후 REBUILD하는 방법도 있습니다. [1] -- 방법.. 2026. 8. 13.
오라클 데이터 이행 - Exchange Partition(파티션 익스체인지) 오라클의 Exchange Partition(파티션 익스체인지)은 파티션 테이블의 특정 파티션 1개와 일반 테이블(Non-Partitioned Table)의 데이터 세그먼트(메타데이터)를 통째로 맞바꾸는 기능입니다. [1, 2] 실제 대용량 데이터를 복사하거나 이동하는 것이 아니라 데이터가 저장된 디렉토리 주소(포인터)만 변경하므로, 데이터양에 상관없이 1초 미만(순식간)에 작업이 완료됩니다. 대용량 데이터 적재(배치), 이관, 백업 후 삭제 등에 매우 유용하게 쓰입니다. [1, 3, 4, 5, 6] ➡️ 1. 기본 사용법 및 기본 문법작업을 위해서는 파티션 테이블의 컬럼 구조, 데이터 타입, 순서가 완벽히 동일한 일반 임시 테이블이 필요합니다. [4, 6, 7, 8] ALTER TABLE [파티션_테이블.. 2026. 8. 13.
오라클 데이터 이행 - 테이블 용량 조회, PGA 조회, 세션 메모리 수동 설정, 디스크 사용 확인, 대기이벤트 확인 1. 테이블의 용량 조회 (LOB 포함)테이블이 파티션되어 있거나 LOB 컬럼이 있으면 용량이 여러 행으로 쪼개집니다. 이를 합산하여 실제 디스크 점유 크기를 확인합니다.SELECT ROUND(SUM(bytes)/1024/1024/1024, 2) AS real_total_gbFROM dba_segmentsWHERE (segment_name = 'ASIS_TAB') OR (segment_name IN (SELECT segment_name FROM dba_lobs WHERE table_name = 'ASIS_TAB'));2. 시스템 PGA 설정 조회현재 DB 전체에 할당된 총 PGA 메모리 규모를 파악합니다. (wsp=AUTO 상태에서는 이 값을 기준으로 세션별 메모리가 쪼개져 배정됩니다.) [1] SE.. 2026. 8. 11.
오라클 데이터 이행 - DBMS_PARALLEL_EXECUTE DBMS_PARALLEL_EXECUTE는 대용량 테이블의 데이터를 여러 개의 작은 청크(Chunk)로 나눈 뒤, 백그라운드에서 병렬(Parallel)로 데이터를 수정, 삭제, 삽입할 수 있도록 돕는 Oracle 공식 패키지입니다.[1]주로 수천만 건 이상의 대규모 데이터에 대한 UPDATE나 DELETE 작업을 수행할 때, Lock 경합을 줄이고 Undo/Redo 테이블스페이스의 고갈(ORA-01555 Snapshot too old 등)을 방지하기 위해 필수적으로 사용됩니다.[2]🔍 DBMS_PARALLEL_EXECUTE의 핵심 특징자동 재시도 및 로깅: 특정 청크가 실패하더라도 전체 작업이 중단되지 않으며, 실패한 청크만 기록되어 추후 재실행할 수 있습니다.[3]리소스 관리: 백그라운드 Job(DBM.. 2026. 8. 5.
오라클 데이터 이행 - v$sql V$SQL은 데이터베이스 메모리(Shared Pool)에 로드되어 있는 개별 SQL의 실행 통계와 상태를 실시간으로 보여주는 딕셔너리 뷰입니다.📌 1. 필수 식별 컬럼 (무슨 쿼리인가?)SQL_ID: 오라클이 쿼리 텍스트를 해시하여 부여한 고유 식별자 (가장 많이 씀)CHILD_NUMBER: 동일한 쿼리 문장이지만 인덱스 변경, 유저 환경 등으로 실행 계획이 달라질 때 구분하는 자식 번호 (0부터 시작)SQL_TEXT: 수행된 SQL 문장의 앞부분 1,000자 (전체 문장은 V$SQLTEXT나 V$SQL_STATS 활용)PARSING_SCHEMA_NAME: 이 쿼리를 실행한 DB 접속 계정명⏱️ 2. 시간 관련 컬럼 (단위 변환 필수!)V$SQL의 모든 수치형 시간 단위는 마이크로초(Microsecon.. 2026. 8. 5.
오라클 데이터 이행 - 병렬 처리 확인 오라클에서는 이미 종료된 쿼리라도 V$SQL_PLAN이나 DBA_HIST_SQL_PLAN(AWR)에 기록된 실행 계획을 통해 병렬(PX) 오퍼레이션 수행 여부를 정확히 추적할 수 있습니다.🔍 다른 세션의 병렬 작업 및 실행 쿼리 조회 SELECT PX.QCSID AS MAIN_SID, -- 병렬 작업을 실행한 대장 세션 ID ST.SERIAL#, -- 세션 일련번호 (필요 시 KILL할 때 사용) ST.USERNAME, -- 접속한 DB 유저명 ST.MACHINE, -- 접.. 2026. 8. 5.
오라클 데이터 이행 - 롤백 진행상황 조회 롤백 상황에서 DBA_UNDO_EXTENTS의 ACTIVE 개수가 줄어들지 않거나 언두 공간이 부족해지는 현상은 대량의 데이터를 변경하다가 취소될 때 흔히 발생합니다. 오라클은 데이터를 원래대로 되돌리는 롤백 과정에서도 언두 블록을 계속 사용하고 유지해야 하기 때문입니다.현재 진행 중인 롤백 상황을 정확하게 모니터링하고 남은 시간을 예측할 수 있는 핵심 쿼리와 대응 방법을 정리해 드립니다.1. 실시간 롤백 진행률 및 예상 남은 시간 확인오라클 백그라운드 프로세스가 트랜잭션을 되돌리는 속도와 남은 작업량을 확인할 수 있는 가장 정확한 뷰는 V$FAST_START_TRANSACTIONS입니다.SELECT usn, state, undoblockstotal AS "총 언두 블록수", un.. 2026. 8. 5.
오라클 데이터 이행 - DDL 추출하기 1. 기본 추출 (모든 정보 포함)옵션을 지정하지 않고 기본 쿼리를 실행하면 테이블스페이스와 스토리지 정보가 모두 포함되어 나옵니다.-- 긴 텍스트 출력을 위한 환경 설정SET LONG 200000;SET PAGESIZE 0;SET LINESIZE 200;-- 기본 추출 실행SELECT DBMS_METADATA.GET_DDL('TABLE', 'EMP', 'SCOTT') FROM DUAL;[출력 결과 예시] CREATE TABLE "SCOTT"."EMP" ( "EMPNO" NUMBER(4,0), "ENAME" VARCHAR2(10), "JOB" VARCHAR2(9), CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO") ) SEGMENT CREATION IMMEDI.. 2026. 8. 4.
오라클 데이터 이행 - DBMS_SCHEDULER 오라클에서 프로시저를 백그라운드(비동기)로 실행하려면 오라클 내장 스케줄러 패키지인 DBMS_SCHEDULER를 사용하는 것이 가장 표준적이고 안전한 방법입니다.이 방식을 사용하면 메인 프로그램은 프로시저가 끝날 때까지 기다리지 않고 즉시 다음 로직을 수행합니다. 데이터 이행(Migration)처럼 오래 걸리는 배치 작업을 실행할 때 필수적으로 사용됩니다.1. DBMS_SCHEDULER.RUN_JOB 방식 (가장 추천)잡(Job)을 생성함과 동시에 use_current_session => FALSE 옵션을 주어 백그라운드로 즉시 실행하는 방법입니다.BEGIN -- 1. 즉시 실행할 백그라운드 잡 생성 및 실행 DBMS_SCHEDULER.CREATE_JOB ( job_name .. 2026. 7. 31.
Slot API + State Hoisting 패턴 Slot APIJetpack Compose에서 Slot API는 "UI의 특정 영역을 호출자가 직접 채워 넣을 수 있도록 Composable을 매개변수로 받는 디자인 패턴"입니다.Compose 라이브러리(Material3 포함) 전체에서 가장 많이 사용하는 패턴 중 하나이며, 상속(Inheritance) 대신 합성(Composition) 을 적극적으로 활용하는 방식입니다.왜 Slot API가 필요한가?예를 들어 프로필 카드를 만든다고 가정해 보겠습니다.처음에는 단순하게 만들 수 있습니다.@Composablefun ProfileCard( name: String, email: String) { Card { Column { Text(name) .. 2026. 6. 29.
Modifier Jetpack Compose에서 Modifier는 UI 요소의 모양, 크기, 배치, 동작을 변경하는 객체입니다.Compose를 배우면서 가장 많이 사용하게 되는 개념 중 하나이며, 거의 모든 Composable이 modifier 파라미터를 가지고 있습니다.Text( text = "Hello", modifier = Modifier)여기서 Modifier는 아무런 변경도 하지 않는 기본 Modifier입니다.Modifier의 역할Modifier는 크게 다음과 같은 역할을 합니다.크기 지정여백(Padding)위치 배치배경색테두리클릭 이벤트스크롤애니메이션그림자투명도회전즉,UI를 어떻게 보여줄지와 어떻게 동작할지를 담당합니다.Modifier는 체이닝(Chaining)된다Modifier의 가장 큰 특징은.. 2026. 6. 29.
Kotlin 함수 파라미터 기본값과 Compose Defaults 패턴 최근 드래그 가능한 리스트 컴포넌트를 라이브러리로 만들면서 이런 코드를 작성했다.@Composablefun BaseList( dragStyle: DragStyle? = null) { val resolvedDragStyle = dragStyle ?: DragStyleDefaults.default() ...}처음에는 단순히 기본값을 주면 되는 것 아닌가 생각했다.@Composablefun BaseList( dragStyle: DragStyle = DragStyle( draggingContainerColor = MaterialTheme.colorScheme.surfaceContainerHighest, hapticEnabled = t.. 2026. 6. 20.
728x90