본문 바로가기

DB/Oracle

오라클 사용자 tablespace 변경 단순하게 물리적인 Tablespace이동이라면 파일 이동하시면 됩니다. Step1) Tablespace OffLine -> ALTER TABLESPACE tablespace명 OFFLINE; Step2) file copy -> cp oldfile newfile Step3) Target Tablespace 수정 -> ALTER DATABASE tablespace명 rename file 'oldFile' to 'newFile'; Step4) Tablespace OnLine -> ALTER TABLESPACE tablespace명 ONLINE; 단, 시스템 TableSpace이라면 shutdown 하셔야합니다. 그런데 그게아니라 특정 테이블의 TableSpace이동이라면 수동으로 Target Table과 Co.. 더보기
다중row를 컬럼으로 변경 (ORACLE) ------------------------------- -- 1번째 방법 : XMLAGG ------------------------------- - 예제 WITH T1 AS ( SELECT 'A' AS COL1 FROM DUAL UNION ALL SELECT 'B' FROM DUAL UNION ALL SELECT 'C' FROM DUAL UNION ALL SELECT 'D' FROM DUAL UNION ALL SELECT 'D' FROM DUAL ) SELECT SUBSTR(XMLAGG(XMLELEMENT(A, ',' || COL1) ORDER BY COL1).EXTRACT('//text()'), 2) FROM T1; ----------------------------------------------.. 더보기
유용한 sql -- 테이블스페이스 삭제 -- 테이블스페이스가 오프라인으로 상태에서 명령을 내리길 권장 DROP TABLESPACE unicorn_temp INCLUDING CONTENTS CASCADE CONSTRAINTS; -- DATA TABLESPACE 생성 CREATE TABLESPACE unicorn_data DATAFILE 'D:\oracle\oradata\unicorn_data.TBL' SIZE 100M AUTOEXTEND ON NEXT 10M MAXSIZE 500M DEFAULT STORAGE (INITIAL 4K NEXT 128K MINEXTENTS 1 PCTINCREASE 0); -- INDEX TABLESPACE 생성 CREATE TABLESPACE unicorn_index DATAFILE 'D:\.. 더보기
ORACLE segment관리 --세그먼트 사용자 조회 SELECT UNIQUE(OWNER) FROM DBA_SEGMENTS --segment 조회 SELECT * FROM DBA_SEGMENTS WHERE OWNER='스키마' --불필요한 SEGMENT정리 EXECUTE IMMEDIATE 'ALTER TABLE TABLE_NAME ENABLE ROW MOVEMENT'; EXECUTE IMMEDIATE 'ALTER TABLE TABLE_NAME SHRINK SPACE CASCADE'; EXECUTE IMMEDIATE 'ALTER TABLE TABLE_NAME DISABLE ROW MOVEMENT'; --ORACLE 10g에서 테이블을 DROP하면 쓰레기 값이 남는경우 --명령어를 날리면 스레기 값은 사라진다. PURGE RECYCLE.. 더보기
오라클과 MSSQL 함수비교 문자열 함수 Function Oracle SQL Server Convert character to ASCII ASCII ASCII String concatenate CONCAT (expression + expression) Convert ASCII to character CHR CHAR Return starting point of character in character string (from left) INSTR CHARINDEX Convert characters to lowercase LOWER LOWER Convert characters to uppercase UPPER UPPER Pad left side of character string LPAD N/A Remove leading blank sp.. 더보기
[ORACLE] Group by, Rollup, Cube의 차이점 ◈ ROLLUP operator - ROLLUP구문은 GROUP BY절과 같이 사용 되며, GROUP BY절에 의해서 그룹 지어진 집합결과에 대해서 좀 더 상세한 정보를 반환하는 기능을 수행합니다. - SELECT절에 ROLLUP을 사용함으로써 보통의 select된 데이터와 그 데이터의 총계를 구할 수 있습니다. ※ 우선 아주 간단한 예제부터 살펴 보겠습니다. (scott유저의 emp테이블을 가지고 테스트 했습니다.) -- Group By를 사용해서 직업별로 급여 합계를 구하는 예제 입니다. SELECT job, SUM(sal) FROM emp GROUP BY job JOB SUM(SAL) ---------- ---------- ANALYST 600 CLERK 3200 MANAGER 33925 PRESI.. 더보기
[ORACLE] CONNECT BY Dummy Table(흔히 Copy_t 라고 불림) 대신에 9i 이후부터는 Connect By level 문을 사용하곤 한다. 하지만 조심하지 않으면 해당 SQL이 종료되지 않는 장애를 만나게 된다. 오늘은 Connect By level 문을 오용하는 사례와 해결책을 제시하고자 한다. 상황 업무팀에서 새로운 SQL을 작성하고 컴파일하여 운영 시스템에 반영되었다. 문제의 SQL이 실행되자 너무 오래걸려서 Time Out이 발생하였다. 아래는 상황을 최대한 간단히 표현하여 테스트를 수행하기 위한 스크립트 이다. --입사년도 테이블 생성 create table hire as select '2006' hire_date from dual union all select '2003' hire_date from dua.. 더보기
ORACLE HINT 정리 /*+ ALL_ROWS */ explicitly chooses the cost-based approach to optimize a statement block with a goal of best throughput (that is, minimum total resource consumption) 전체 RESOURCE 소비를 최소화 시키기 위한 힌트. Cost-Based 접근방식. /*+ CHOOSE */ causes the optimizer to choose between the rule-based approach and the cost-based approach for a SQL statement based on the presence of statistics for the tables accessed.. 더보기
I. Oracle에서의 SYS_CONNECT_BY_PATH 사용 목적과 흉내내기 I. Oracle에서의 SYS_CONNECT_BY_PATH 사용 목적과 흉내내기 부모-자식의 관계가 있는 데이터, 특히 BOM, 사원정보 및 계층형 분류를 출력함에 있어서 최종 노드로부터 최상위 노드까지의 모든 노드의 데이터를 구분자를 이용하여 출력하기 위해 사용됩니다. 앞으로 제시할 방법은 말 그대로 흉내내기 입니다. 오라클의 계층형 함수는 다양한 형태로 사용될 수 있기 때문에 SQL만으로는 복잡한 쿼리문에 사용되는 함수형태로 구현하기는 어렵습니다. 단지, 계층형 구조 데이터를 오라클의 SYS_CONNECT_BY_PATH와 유사한 결과물을 표현하는 데 목적이 있다면 제가 소개하는 방법만으로도 충분할 것입니다. 언젠가는 CUBRID에서도 계층형 함수가 제공될 것으로 생각됩니다만, 그 전까지는 부족하나마 .. 더보기
[ORACLE]START WITH ~ CONNECT BY PRIOR 작성하신 쿼리는 정상 수행됩니다. 1. START WITH는 처음 시작할 조건을 의미합니다. 즉, '1007' 이면서 'Y'인 로우부터 출발합니다. 2. CONNECT BY는 1.의 데이터와 연결된 로우를 반복하여 찾습니다. PRIOR 과 가까운 쪽의 컬럼(EMP_ID)이 '1007'의 컬럼이고, 반대쪽이 다른 로우의 컬럼입니다. 즉, 나의 EMP_ID ('1007')를 manager_emp_id 로 갖는 로우를 찾는 것입니다. (내 부하직원) 쉽게 생각해 Prior쪽의 컬럼이 하위이면 밑으로, 상위코드이면 위로 찾는 구조입니다. CONNECT BY와 START WITH의 순서는 의미가 없습니다. (AND가 없을 때) 다만, AND의 위치가 FROM절, CONNECT BY, START WITH 다음의 어.. 더보기