본문 바로가기

oracle

[오라클] 리두 로그 파일(Redo Log File) -2 리두 로그 파일 -1 에 이은 두번째 글입니다. 다음의 보시는 그림은 LGWR 이 디스크에 리두로그 파일을 쓸때의 모습입니다. LGWR는 두개의 디스크에 리두로그 파일을 기록하는데요. 위에 보시듯 각 동일한 그룹을 각각의 디스크에 나눕니다. 그리고 멤버는 나뉘어진 그룹에 각각 담기구요. 앞 글에서 각 그룹의 멤버는 동일한 로그 기록을 저장한다고 했죠? LGWR는 리두로그 파일을 디크스에 쓸때 두 디스크 동시에 멤버로서 기록함으로써 에러시에 한쪽이 문제가 있어도 다른 한쪽의 디스크가 복구를 가능케 합니다. 그리고 각 그룹의 멤버가 용량이 다 차서 더 이상 리두로그 파일을 기록할 수 없을때 다음 리두로그 그룹으로 리두로그 파일을 기록하게 됩니다. 이때 리두로그 그룹간의 이동을 로그 스위치(Log Switch.. 더보기
[오라클] 리두 로그 파일(Redo Log File) -1 데이터베이스 시스템인 오라클에서 복구시 사용되는 것들이 있는데요. 그중에 하나가 리두로그 파일입니다. 리두로그 파일은 데이터베이스, 즉 오라클 에러 발생시에 데이터 복구를 위한 로그파일인데요. 이 리두로그 파일은 DML 작업시에 기록이 되게 됩니다. DML 작업시에 시스템에 변경되는 작업의 내용을 기록하는 것이죠. 이것을 통해서 문제가 생기면 이 파일을 이용해서 작업순서에 맞게 복구를 하게 되는 겁니다. 먼저, DML 작업으로 생성되는 리두로그는 SGA에 위치하게 되는데 SGA는 System Global Area로서 오라클 데이터 서버가 구동을 하게 되면 해당 인스턴스 내에서 생기게 되는 메모리 영역입니다. 이 메모리 영역안에 리두로그가 구성이 되는 것이구요. 그리고 메모리 안의 그 영역을 리두로그 버퍼.. 더보기
[SQL] WHERE 절을 활용하자, NULL! NULL 은 의미하는 바 대로 존재하지 않는다 입니다. 오라클에서는 NULL을 값이 아닌 상태로 표시하기 때문에 우리가 알고 있는 연산자를 쓸 수 없습니다. department_id=null 과 같이 말이죠. 못 쓰는 것은 아니지만 우리가 의도한 값이 나오지 않게 됩니다. 이때 쓸수 있는 것이 IS NULL 인데요. 다른 SQL에서는 위와 같이 사용 가능합니다. 즉 오라클에서는 부서아이디가 NULL인 사원을 조회하고 싶을때 WHERE department_id IS NULL; 로 하게 되면 우리가 의도 한 것을 얻을 수 있습니다. 해봅시다. SELECT department_id, first_name, salary FROM hr.employees WHERE department_id IS NULL; 이렇게 쓰.. 더보기
[SQL] WHERE 절을 활용하자, LIKE! 쿼리를 이용해서 데이터를 조회 할 때 어떤 특정 패턴을 이용한 조회가 가능합니다. 가령, 회사의 사원들 중에 이름이 'J' 로 시작하는 하는 사원을 조회하고 싶다라던지 사원들의 전화번호가 001로 시작하는 사원들을 조회하고 싶을 때를 말하는 겁니다. 즉 데이터의 일부나 그런 조건을 이용할 수 있도록 가능하게 하는것이 LIKE 라는 키워드 입니다. 다음과 같이 쓸 수 있겠습니다. WHERE 컬럼명 LIKE 조건; 위의 '조건'에 해당하는 부분에 대해서 짚고 넘어갈게요. J로 시작하는 사원의 이름을 조회하고 싶다면 다음과 같이 하면 됩니다. 'J%' 여기서 '%'의 의미는 그 자리가 위치하는 곳에서 다른 문자나 숫자따위가 0개 또는 하나 이상임을 표시합니다. 즉 이렇게 된다면 이름 자체가 J 또는 James.. 더보기
[SQL] WHERE 절을 활용하자, EXISTS! EXISTS는 IN과 유사한 개념입니다. 하지만 적용되는 범위가 다른데요. IN의 괄호( ) 사이에는 특정값이나, 서브쿼리가 올 수 있는 반면에 EXISTS의 () 사이에는 서브쿼리만 올 수 있습니다. 그리고 IN는 ( ) 안에 있는 특정값이나 서브쿼리의 결과값이 포함이 되는지만 체크를 하지만 EXISTS는 () 안의 서브쿼리로 부터 해당 컬럼의 값이 존재 유무만 체크를 합니다. 서브쿼리에 관한 것은 다른글을 참조하면 되겠습니다. 우선 IN을 통해서 부서아이디가 100 또는 110인 부서를 조회해봅시다. IN을 이용한 방법 2가지와 EXIST 문을 작성하겠습니다. 참고로 셋다 같은 결과를 반환하도록 작성할 것이구요. 1. IN에 특정값을 명시해줬습니다. SELECT department_id, employ.. 더보기
[SQL] WHERE 절을 활용하자, IN! 이번 글에서 알아볼 IN과 EXITS는 BETWEEN과는 조금 다릅니다. BETWEEN 이 어느 시작값에서 어느 끝값까지 범위값을 조건으로 하는데에 비해서 IN 과 EXITS는 범위라는 개념보다는 여러 해당 값을 조건으로 한다고 할 수 있습니다. 예를 들면 IN은 OR의 개념과 비슷하다고 보면 되겠는데, 절대 똑같다는 말이 아닙니다. SELECT department_id, first_name, salary FROM employees WHERE department_id=10 OR department_id=20 OR department_id=30; 위의 쿼리는 부서아이디가 10, 20, 30인 사원들의 정보를 보여주고 있는데, 이 또한 너무 깁니다.. 마치 우리가 전글처럼 AND로 사용해서 범위를 조건으로 .. 더보기
[SQL] WHERE 절을 활용하자, BETWEEN! 앞에서 AND와 OR을 이용한 WHERE절의 활용법을 익혔습니다. 한가지 생각해보죠. 우리가 회사의 사원들중에 월급이 '4000' 에서 '9000' 사이를 받는 직원들을 조회하고 싶다. 그렇다면 쿼리를 어떻게 작성해야 할까요? 앞에서 배운 AND를 이용해서 나타낼 수 있습니다. SELECT dep.department_name, emp.first_name, emp.salary FROM hr.employees emp INNER JOIN hr.departments dep USING (department_id) WHERE emp.salary>4000 AND emp.salary4000 ↔ WHERE emp.salary BETWEEN 4000 AND 9000; AND emp.salary 더보기
[SQL] WHERE 절을 활용하자, AND · OR!! 지금까지 WHERE절을 접할때 단순한 연산자 즉, 기본 수식 연산자(+, -, /, * )와 비교연산자(=, ,=) 를 이용하여 쿼리에 조건을 부여할 수 있었는데, 이것들 말고도 다른 표현식들이 있습니다. 이를테면, 이번에 소개할 "AND"와 "OR"이 그것인데, 의미는 우리가 알고있는 영어식 표현과 동일합니다. AND는 당연히 '그리고~' 라는 표현이 되겠고 OR은 '또는, 그렇지 않으면' 라는 표현으로 해석할 수 있겠습니다. 이것들을 이용해서 WHERE절에 한개 이상의 조건을 부여할 수 있는데, 다음 실습문을 통해서 차례대로 AND · OR 에 대해서 알아봅시다. SELECT department_id, manager_id, first_name FROM hr.employees WHERE dep.. 더보기
[SQL] NATURAL JOIN, 자연스럽나요? 타이틀이 좀. 웃깁니다. 자~ 넘어갑시다. 이번에는 NATURAL JOIN에 대해서 알아봅시다. 이것도 별것 없습니다. 단지 조인하는 두테이블에 대해서 자동으로 조인조건을 같은 데이터형식과 컬럼명을 사용하고 있는~ 으로 한정시킵니다. 알아서 묶어주는 거죠. 그래서 조인조건을 명시해줄 필요가 없는데요. NATURAL JOIN 도 어느정도 의미만 알것 같아서. 바로 예시만 보고 끝을 내도록 할게요. employees 테이블과 departments 테이블을 내부조인을 해서 데이터를 조회한겁니다. 결과는 NATURAL JOIN과 동일한 조회결과를 내기위해서 다음과 같이 쓰였습니다. SELECT emp.department_id, dep.department_name, emp.first_name FROM hr.emp.. 더보기
[SQL] SELF JOIN, 내 자신과의 조인 이번에 다루게 될 것은 SELF JOIN 입니다. 말 그대로 해당 테이블 자신과 조인을 하는 것을 일컫는데요. 사실 잘 쓰이진 않지만 쓰는 경우도 있습니다. 일단 소개를 하자면 내부조인을 하든 외부조인을 하든 자기 자신의 테이블의 이름을 적어주면 되겠는데요. 이를테면 다음과 같이요. FROM hr.employees INNER JOIN hr.employees 이렇게 적어주면 되겠습니다. 그렇다면, 어떻게 쓰일까요? 예로. employees 테이블을 살펴보면 employee_id 와 manager_id 컬럼이 있는 것을 볼 수 있는데요. 여기서 manager_id는 어느 한사원의 상관의 employee_id가 되겠죠? 그러니 한사원의 상관의 이름이나 기타 다른 정보를 알고 싶을때 사용될 수 있습니다. 다음과.. 더보기