본문 바로가기

Programming

대용량 테이블 삭제 방법 Edit 대용량 테이블 삭제 방법 목적 TMAXSOFT의 티베로 환경 ( 오라클과 유사 ) 에서 실시간으로 업데이트 되고 있는 대용량 테이블의 부분 삭제 문제 더이상 테이블 스페이스를 증설할 수 없다. 운영(실시간 업데이트)을 중단할 수 없다. 해당 TABLE에 DATE 컬럼으로 조건을 걸어 SELECT 하거나 DELETE 하면 시스텡에 부하가 걸린다. DB관련 나의 지식이 짧다. 첫번째 시도 그냥 가장 심플한 방법으로 삭제를 시도해 봤다. DELETE TABLE BIGTABLE WHERE REGISTDATE < 20160101000000 -- 여기서 REGISTDATE 컬럼은 CHAR 이다. 첫번째 결론 : 삭제 쿼리가 도는 도중 시스템에 부하가 걸려 시스템이 제대로 작동하지 않는 문제가 생겼다. 추정.. 더보기
Chocolatey 사용기 Edit Chocolatey 사용기 What is Chocolatey ? The Package Manager for Windows ( Software Management Automation ) For What ? 윈도우 환경에서 좀 더 쉽게 자바스크립트 환경을 꾸며보려고 WHY ? 하나하나 다운 받아서 설치하기 귀찮으니까 알아두면 삶이 조금은 윤택해 질지도 몰라서 1. 설치 파일 chocolatey : 패키지 매니저 ( 인터넷을 통해 설치프로그램을 다운받아서 설치하는 도구 ) nodist : Node.js 설치 도구 yarn : npm ( JS 모듈 매니저 ) 대용 cmder : 윈도우 터미널 visual studio code : 프론트엔드 에디터 2. 설치 순서 chocolatey 프로그램 설치 cho.. 더보기
9. 연습(3) Edit 9. 연습(3) 샘플 데이터 베이스 개요 앞서 부서별로 직원 수를 구하는 문제를 3가지 방법으로 살펴 보았다. 조인(Join) 4번, 서브쿼리(SubQuery) 1번과 4번 문제로 정리하는 의미에서 부서 이동 문제를 이용하여 다음과 같이 정리하였다. 1. 그룹(GROUP)의 6번 문제에서 [다음 그림과 같이 직원들의 부서 이동 과정을 출력하시오] 라는 문제를 풀었다. SELECT DE.EMP_NO, GROUP_CONCAT(DE.DEPT_NO SEPARATOR ' > ' ) PATH FROM DEPT_EMP DE GROUP BY DE.EMP_NO HAVING COUNT(*)>1 ORDER BY COUNT(*) DESC; 2. 이 문제는 좀 더 많은 설명과 구현이 필요한 SQL문이다. 먼저, 다음 .. 더보기
8. 연습(2) Edit 8. 연습(2) 샘플 데이터 베이스 개요 1. 부서별 부서장 정보를 출력하시오. SELECT DEPT_NAME, FIRST_NAME, LAST_NAME, SALARY FROM DEPT_MANAGER DM INNER JOIN DEPARTMENTS DEP ON DEP.DEPT_NO=DM.DEPT_NO INNER JOIN EMPLOYEES EMP ON EMP.EMP_NO=DM.EMP_NO INNER JOIN SALARIES SAL ON SAL.EMP_NO=DM.EMP_NO WHERE DM.TO_DATE='9999-01-01' AND SAL.TO_DATE='9999-01-01' ORDER BY DEPT_NAME; 2. 부서별 정보(부서장, 부서별 급여 평균)을 출력하시오. SELECT DEPT_NAME.. 더보기
7. 연습(1) Edit 7. 연습(1) 샘플 데이터 베이스 개요 1. 1999 년의 월별 신입 사원수를 출력하시오. SELECT MONTH(HIRE_DATE), COUNT(*) FROM EMPLOYEES WHERE YEAR(HIRE_DATE)=1999 GROUP BY MONTH(HIRE_DATE); 2. 월별 신입 사원수를 다음 그림과 같이 출력하시오.(월-행을 열로) SELECT SUM(CASE WHEN MM=1 THEN CNT ELSE 0 END) M1 , SUM(CASE WHEN MM=2 THEN CNT ELSE 0 END) M2 , SUM(CASE WHEN MM=3 THEN CNT ELSE 0 END) M3 , SUM(CASE WHEN MM=4 THEN CNT ELSE 0 END) M4 , SUM(CASE WH.. 더보기
6. 실습(4) - SubQuery Edit 6. 실습(4) - SubQuery 샘플 데이터 베이스 개요 Subquery는 SQL 안에 SQL문을 사용하는 것으로 SELECT, FROM, WHERE 등 다양한 곳에서 사용된다. 1. 다음과 같이 부서별 직원 수를 Subquery로 구하시오. SELECT D.DEPT_NAME , (SELECT COUNT(*) FROM DEPT_EMP DE WHERE DE.TO_DATE = '9999-01-01' AND DE.DEPT_NO=D.DEPT_NO) FROM DEPARTMENTS D; SELECT D.DEPT_NAME, COUNT(*) FROM DEPARTMENTS D INNER JOIN DEPT_EMP DE ON DE.DEPT_NO=D.DEPT_NO WHERE DE.TO_DATE = '9999-01.. 더보기
5. 실습(3) - Join Edit 5. 실습(3) - Join DBMS는 데이터를 하나의 테이블에 저장하는 것이 아니라 샘플 데이터 베이스 개요 의 ERD처럼 특성에 맞추어 분할해서 저장한다. 따라서 제대로 된 정보를 보기 위해서는 관련된 테이블을 결합(JOIN)해서 보여 줘야 한다. 이러한 결합을 조인(JOIN)이라고 하고 기준에 따라 Left, Right로 나뉘고, 데이터 일치 여부에 따라 Inner, Outer 등으로 구분된다. 여기서는 Left Inner만 다룰 예정으로 대부분의 SELECT문이 Left Inner 조인 이기 때문이다. 일반적으로 조인이라고 하면 Left Inner을 의미할 정도로 많이 쓰이고, 정의하자면 두 테이블 간의 교집합이라고 할 수 있다. 즉, 두 테이블간에 공통으로 있는 값을 찾는 것이라고 할 .. 더보기
4. 실습(2) - Group Edit 4. 실습(2) - Group 기초 문제에서는 고려하지 않고 넘어갔지만 모든 직원이 현재 근무 중인 것은 아니다. 샘플 데이터 베이스 개요를 보면 퇴사 관련 필드가 없는 것으로 나타나 있다. 따라서 추측으로 퇴사 여부를 파악했고 종료일자가 있는 테이블의 데이터를 살펴보면 ‘9999-01-01’인 데이터가 있다. 인터넷으로 본 샘플 데이터베이스에 대한 설명을 못 찾았는데 의미상 현재 근무 중인 직원은 급여나 현재 근무 부서, 업무의 종료일자가 없을 것이다. 종료일자가 없다는 의미를 ‘9999-01-01’로 사용한 것 같다. 다음 SQL문을 실행해 보면 데이터 개수가 일치한다. SELECT COUNT(*) FROM SALARIES WHERE TO_DATE='9999-01-01'; SELECT COU.. 더보기
3. 실습(1) - BASIC Edit 3. 실습(1) - BASIC 샘플 데이터 베이스 개요 데이터를 제공하는 MySQL에 따르면 here 준비된 데이터는 다음과 같은 개수(expected_records)를 가진다. 각 테이블의 데이터를 확인하는 SQL문을 만들어 보자 table_name expected_records expected_crc employees 300024 4d4aa689914d8fd41db7e45c2168e7dcb9697359 departments 9 4b315afa0e35ca6649df897b958345bcb3d2b764 dept_manager 24 9687a7d6f93ca8847388a42a6d8d93982a841c6c dept_emp 331603 f16f6ce609d032d6b1b34748421e9195c508.. 더보기
2. 샘플 데이터 베이스 개요 Edit 2. 샘플 데이터 베이스 개요 Mysql에서 제공되는 직원(Employees) 데이터 베이스는 6개의 테이블로 구성되어 있다. 원본 주소직원(employees), 부서(departments), 급여(salaries)의 기본 테이블이 있고 직원이 속한 부서를 나타내는 dept_emp, 해당부서의 부서장을 저장하는 dept_manager, 직원의 업무를 저장하는 titles 테이블이 있다. 직원(employees) 설명 필드명 자료형 크기 기타 직원번호 emp_no INT 기본키 생년월일 birth_date DATE 이름 first_name VARCHAR 14 성 last_name VARCHAR 16 성별 gender EUM 입사일자 hire_date DATE 급여(salaries) 설명 필드명 자.. 더보기