본문 바로가기

Database

[Oracle] docker로 oracle 실행 후, DB 한글깨짐현상 해결 데이터를 AS-IS → TO-BE 로 이전하면서 가장 많이 발생하는 문제 중 하나가 데이터의 변경과 손실이다. 데이터 이관 후 조회했을 때 글자가 다 깨져서 알아볼 수 없는 상황이 발생하는 이유는 서로의 Character Set이 일치하지 않아서가 거의 대부분의 이유이다. Character Set이란 데이터베이스 내부에 데이터가 저장될 때 참조되는 글자의 종류를 적어 놓은 일종의 사전이다. 사용자가 어떤 데이터를 Insert 하게 되면 Server Process가 Insert할 때 Character Set을 보고 글자를 확인하고 입력 해 주는 원리이다. 만약 사용자가 입력한 글자가 Character Set에 없는 글자라면 Server Process는 무슨 글자인지 몰라서 그냥 ?로 저장하게 된다. 이 C.. 더보기
[Oracle에서의 네트워크 이해] Oracle Server 로 접속하는 과정 Oracle Database Server에는 외부에서 많은 사용자들이 동시에 접속을 해서 데이터를 조회도 하고 입력, 변경, 삭제 등의 작업을 하게 됩니다. 외부에서 접속을 해야 하는 특성이 있으므로 네트워크 관련 기능이 필수인데 Oracle에서의 네트워크는 크게 Client 쪽과 Server 쪽으로 분류됩니다. 위 그림에서 왼쪽에서 사용자가 SQL 문을 수행하면 User Process 라는 Process 가 생성되어 사용자가 작성한 SQL 문장을 서버 쪽으로 전달해 줍니다. 여기서 User Process는 SQL 문장을 작성하는 프로그램을 의미합니다. 그림의 예처럼 SQL*PLUS가 대표적 예입니다. 메모장 같은 프로그램에서 위 SQL 문장을 수행하려 해도 수행이 안 되는 이유는 메모장 프로그램은 Us.. 더보기
컴퓨터 사이의 통신 원리 (같은 네트워크간 / 다른 네트워크간) 1. 같은 Network 간의 통신일 경우 (A 컴퓨터 ↔ B 컴퓨터) 1. A 컴퓨터는 자신의 ip address 와 mac address 정보를 담아서 Switch 장비에게 B 컴퓨터의 IP를 알려주고 찾아 달라고 요청합니다. 2. 이 요청을 받은 Switch 장비는 해당 ip를 가진 컴퓨터가 자신의 Mac Address Table에 존재하는지 살펴봅니다. 여기서 알 수 있듯이 Switch 장비가 하는 역할 중 한가지는 IP MAC 변환입니다. 이런 일을 빨리 하기 위해서 Switch 장비는 ip와 mac 주소를 연결해서 Switch 장비의 메모리에 저장해 두고 요청이 들어올 때마다 이것을 참조해서 즉시 연결해 줍니다. (이 주소들을 메모리에 저장해 두는 곳을 Switching Table이라고 합니다.. 더보기
IP Address 와 MAC Address란 IP Address And MAC Address 네트워크 용어에서 서로 다른 네트워크로 접속하기 위해 사용하는 성문 역할을 하는 컴퓨터를 Gateway 라고 합니다. 같은 네트워크 대역의 컴퓨터를 찾을 때는 Gateway가 없어도 잘 되지만 다른 네트워크 대역의 컴퓨터를 찾을 때는 반드시 Gateway를 통해서 외부로 나가도록 설정되어 있어야만 합니다. 컴퓨터 세상에서 사용되는 주소는 IP Address와 MAC Address가 있습니다. 1. IP Address (1) IPv4 와 IPv6 Internet Protocol 의 약자 숫자로 이루어져 있으며 이 주소는 "8비트 . 8비트 . 8비트 . 8비트"로 총 32비트로 구성됨 . ex) 192.168.0.1 이는 IPv4의 경우이고 최근에는 IPv4.. 더보기
[ORACLE] LISTAGG가 오라클 버전 문제로 에러날 때 -> WM_CONCAT 이용하자 회사에서 운영서버에 반영하려는데, 아무생각없이 써놨던 LISTAGG 절들이 하나도 안 통했다. 알아보니 운영서버의 오라클 버전은 10g 였고 내가 작업하던 개발서버의 오라클 버전은 11g 였는데, 10g 에서는 LISTAGG 가 먹지 않는다고 한다. 대체제로 10g 에서는 WM_CONCAT 을 이용한다. DT 컬럼을 WM_CONCAT 으로 뽑아내보자 SELECT WM_CONCAT (DT) FROM TEST_TABLE 만약 DT 컬럼이 CLOB 타입일 정도로 용량이 크다면, DBMS_LOB.SUBSTR( 컬럼명 , 1000 ) 을 이용하자. 1000은 1000자를 뜻하고 더 늘려도 된다. SELECT DBMS_LOB.SUBSTR (WM_CONCAT (DT), 1000) FROM TEST_TABLE 참고로 .. 더보기
[Oracle] 프로시저 / ORA-06553 - 호출 시 인수의 갯수나 유형이 잘못되었습니다 해결법 함수와의 가장 큰 차이점 함수는 결과 값을 반환하지만 프로시저는 특정한 로직을 처리하기만 하고 결과 값을 반환하지 않는 프로그램이다. 언제 사용? 테이블에서 데이터를 추출해 입맛에 맞게 조작하고 그 결과를 다른 테이블에 다시 저장하거나 갱신하는 일련의 처리를 할 때 주로 프로시저를 이용한다. 프로시저 구문 예시 CREATE OR REPLACE PROCEDURE MY_NEW_JOB_PROC (AV_EMP_NO IN VARCHAR2, AV_EMP_NM IN VARCHAR2, AV_AGE IN NUMBER) IS V_AGE EMP_INFO.AGE%TYPE; V_GRD_CD EMP_INFO.GRD_CD%TYPE; -- EMP_INFO라는 테이블의 컬럼의 타입을 가져온다 V_CNT NUMBER := 0; -- 이.. 더보기
[Oracle] SEQ를 이용해서 MAX값 따오는 경우 발생할 수 있는 실수 현재 DB에 저장되어 있는 컬럼 SEQ 중 최대값을 가져와 + 1 한 값을 구하기 위해 다음과 같이 쿼리를 작성했다. SELECT MAX(NVL(SEQ, 0)) + 1 FROM TBL 하지만 아무 row도 나오지 않는다. 상식적으로 SEQ가 null인 경우 '0' 을 반환하라고 쿼리를 작성한 것이나, NVL을 해보면 아무 row도 반환되지 않는다. SELECT NVL(SEQ, 0) FROM TBL 결론부터 말하면, 다음과 같이 그룹함수를 이용하여 '해당 테이블에 아무 데이터도 없는 경우여 무조건 빈 row 하나는 리턴되게' 한 후 원하는 작업을 해야 한다. SELECT NVL(MAX(SEQ), 0) + 1 FROM TBL 이게 정상 작동할 수 있는 이유는 해당 테이블에 아무런 데이터가 없어도 그룹함수를 .. 더보기
NUMBER 타입 정의하는 방법 (3가지) NUMBER을 정의하는 방법 ① 고정 소수점 숫자 NUMBER(p,s) ② 정수 NUMBER(p) 또는 NUMBER(p,0) ③ 부동 소수점 숫자 NUMBER 출처 - https://m.blog.naver.com/hanccii/220733159291 더보기