본문 바로가기

프로그래밍/데이터베이스33

mysqldump를 사용하여 MySQL(MariaDB)백업하기 MySQL 또는 MariaDB를 백업하는 간단한 방법인 mysqldump 프로그램을 사용하는 방법은 알아봅니다. sqlyog와 같은 GUI 툴을 사용해서 하는게 간편하지만 명령행 툴을 사용할 수밖에 없는 경우도 있습니다. 알아둬서 나쁠건 없겠습니다. 1. 전체 데이터베이스 백업 C:\>mysqldump -uroot -p비밀번호 --all-databases > D:\backup\all_db.sql or C:\>mysqldump -uroot -p비밀번호 -A > D:\backup\all_db.sql 모든 데이터베이스의 생성 스크립트 및 데이터가 D:\backup\all_db.sql 파일로 생성됩니다. 2. 데이터베이스 지정하여 백업하기 C:\>mysqldump -u아이디 -p비밀번호 dbname > D:\>.. 2018. 4. 20.
데이터베이스에서 null 과 빈 문자열(empty string)의 차이점 테이블의 NULL 허용 필드에 데이터를 넣을 때 빈 문자열(empty string)을 넣으면 어떻게 될까요? 아래의 두가지 쿼리가 어떻게 동작할지를 말하는 것입니다. INSERT INTO tb_test (id, name) VALUES (1, NULL); INERRT INTO tb_test (id, name) VALUES (2, ''); 1. Oracle 오라클에서는 NULL과 빈문자열 '' 이 모두 NULL 로 처리 됩니다. 위에서 id 가 1, 2 인 행의 name은 모두 NULL 이 들어갑니다. SELECT * FROM tb_test WHERE name IS NULL; 위와 같이 쿼리하면 id가 1, 2인 행이 모두 조회됩니다. 데이터베이스에서 NULL은 등호(=)로 비교할 수 없습니다. 반드시 IS.. 2018. 4. 20.
MySQL locking - Table-Level Locking, Row-Level Locking, Optimistic Locking 웹 프로그래밍은 기본적으로 다중 사용자 환경입니다. 동일한 자원에 여러 사용자가 동시에 접근하는 상황이 발생할 수 있습니다. 쇼핑몰에서 물건을 구매하는 상황을 생각해 봅시다. 두 명의 사용자가 재고가 하나밖에 없는 제품을 조회하고, 동시에 구매를 한 상황입니다. 서버로 요청이 넘어가면 서버에서는 다음 세 단계를 거쳐 구매를 처리한다고 가정해 봅니다. 1) 다시 한번 재고를 확인합니다.2) 재고를 감소 시킵니다.3) 구매정보를 입력합니다. 재고를 확인하고 구매할 수 있다고 판단한 후에 재고를 감소하기 전에 다른 요청을 처리하는 쓰레드 또는 프로세스가 재고를 확인하게 되면 둘 다 구매 할 수 있다고 판단하게 되고 구매 처리가 되어 버립니다. MySQL 데이터베이스를 사용하는 경우 이런 환경에서 어떻게 처리하.. 2018. 4. 20.
Oracle에서 VARCHAR2 컬럼을 CLOB으로 변경하기 VARCHAR2(4000) 으로 사용하던 컬럼에 데이터를 더 많이 저장할 필요가 생겨서 CLOB 타입으로 변경하려고 합니다. ALTER 명령으로 바로 변경하려면 에러가 발생합니다. ALTER TABLE table_name MODIFY (CONTENTS CLOB) 오류 보고 - ORA-22858: 데이터유형의 변경이 부적당합니다 22858. 00000 - "invalid alteration of datatype" *Cause: An attempt was made to modify the column type to object, REF, nested table, VARRAY or LOB type. *Action: Create a new column of the desired type and copy the .. 2018. 4. 20.
Windows 10에 MariaDB 설치하기 개발용으로 Windows 10 PC에 MariaDB 를 설치해 봅니다. 1. http://mariadb.org/ 에 접속하여 다운로드 페이지로 들어갑니다. 2. 실제 다운로드 URL은 https://downloads.mariadb.org/ 입니다. 현재 안정 버전은 10.2 이므로 그것을 다운로드 받습니다. 여기서는 64bit용 윈도우즈 설치파일을 다운받습니다. mariadb-10.2.9-win64.msi 파일 입니다. 클릭하면 다운로드 하는 사람의 정보를 입력하는 창이 뜨는데 "No thanks just take me to the download" 를 클릭하고 그냥 다운로드만 받으면 됩니다. 개인정보를 입력하면 DB관련 알림을 이메일로 보내줄 것입니다. 3. 다운로드 받은 설치 파일을 더블클릭하여 실행.. 2018. 4. 19.
sqldeveloper를 사용하여 export/import 하기 오라클 데이터베이스를 export/import 하기 위해서 Original Utility인 exp/imp 또는 10g 이후부터 새로 나온 Oracle Data Pump (expdp/impdp)를 주로 사용합니다. 하지만 스키마 만을 옮기거나 데이터가 작을 경우 sqldeveloper를 사용해서 간단하게 export/import 할 수 있습니다. sqldeveloper를 사용하여 export 하는 방법을 알아 보겠습니다. 이 글의 테스트는 Oracle 11g express editon과 SQL Developer 17.2를 사용하였고 샘플 데이터베이스는 전자정부 표준프레임워크 Portal Site 템플릿의 테이블을 사용하였습니다. 1. SQL Developer 메뉴에서 도구(T) -> 데이터베이스 익스포트(.. 2018. 4. 17.
새로운 Oracle export/import 유틸리티 - Oracle Data Pump(expdp/impdp) Oracle 10g 부터는 데이터의 백업과 복원을 위해서 기존에 사용되는 exp/imp툴을 대신할 Oracle Data Pump(expdp/impdp) 유틸리티가 제공되어 집니다. exp/imp 툴이 없어진것은 아닙니다. Oracle 11g 부터는 기존의 Original exp/imp툴에 대한 일반적인 사용지원이 되지 않는다고 합니다. Oracle Data Pump 유틸리티는 더욱 유연하고, 빠른 속도의 기존의 exp/imp를 대체할 유틸리티 라고 합니다. 기존의 exp/imp와의 차이점을 간단히 알아보겠습니다. 1. exp/imp는 덤프 파일을 유틸리티를 실행하는 컴퓨터에 생성합니다. expdp/impdp 는 덤프 파일이 데이터베이스 서버의 지정된 폴더에 생성됩니다. 즉, 덤프 파일을 받고 올리기 위해.. 2018. 4. 17.
Oracle XE 컴퓨터 이름(Hostname) 변경후 접속 안될 때 Oracle XE가 설치된 컴퓨터의 이름을 변경한 후 데이터베이스에 접속이 안될 때 처리 방법입니다. 다음 폴더에서 두 개의 파일내에 컴퓨터 이름을 수정합니다. oraclexe\app\oracle\product\11.2.0\server\network\ADMIN 수정할 파일 입니다.* listener.ora LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1)) (ADDRESS = (PROTOCOL = TCP)(HOST = PENTODE)(PORT = 1521)) ) ) * tnsnames.ora XE = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = PEN.. 2018. 4. 12.
오라클 테이블 스페이스 생성하기 및 다른 사용자 권한 부여 오라클 테이블 스페이스를 만드는 방법에 대해서 알아 보겠습니다. 오라클의 테이블 스페이스는 데이터가 저장될 실제 서버상의 파일과 맵핑 됩니다. 생성할 테이블 스페이스 이름과 연관된 파일을 지정하여 생성합니다. 그리고나서 테이블 및 인덱스를 생성할 때 어떤 테이블 스페이스를 사용할지를 지정하게 되는 것입니다. 테이블 스페이스를 지정하지 않고 그냥 테이블 또는 인덱스를 생성하게되면 기본값이 "USERS" 테이블 스페이스에 저장 되게 됩니다. 테이블 스페이스를 사용하는 이점은 테이터를 서로 다른 디스크에 배치할 수 있게 해줍니다. 인덱스용 테이블 스페이스는 빠른 SSD 에, 자주 사용되지 않는 데이터들은 SATA 디스크에 배치하는 등의 최적화를 하는게 가능합니다. 백업시에도 테이블 스페이스별로 하는 분리하여 .. 2018. 4. 12.
오라클 ALTER 명령을 사용해서 테이블 변경하기 ALTER 명령어를 사용해서 오라클 테이블 구조를 변경하는 방법에 대해 알아봅니다. 1. 테스트용 테이블 생성 스크립트 입니다. CREATE TABLE TB_BOARD ( NUM NUMBER(20,0) NOT NULL, NAME VARCHAR2(20) NOT NULL, TITLE VARCHAR2(100) NOT NULL, CONTENT CLOB, D_CODE VARCHAR(20), READ_COUNT NUMBER(10,0) DEFAULT 0 NOT NULL, WRITE_DATE DATE NOT NULL ); CREATE TABLE TB_DEPT ( D_CODE VARCHAR2(20) NOT NULL, D_NAME VARCHAR2(255) NOT NULL ); -- TABLESPACE 사용 CREATE T.. 2018. 4. 9.
오라클 비밀번호 만료(Oracle password has expired) 오늘 데이터베이스에 접속을 하려고 하니 비밀번호가 만료되었다는 오류메세지가 뜹니다(ORA-28001: the password has expired). 데이터베이스는 Oracle 11g r2 express editon 입니다. 11g r2 가 나왔을 때 사용자의 기본 프로필이 180일 지나면 비밀번호가 만료 되도록 변경 되었습니다. 예전에 이것 때문에 여러곳에서 갑자기 웹서비스가 안된다고 연락이 왔었던 기억이 납니다. 그 때는 보안 때문에 문제가 지금처럼 많이 발생하던 시절이 아니라, 한번 정한 비밀번호를 주기적인 변경없이 계속 사용했었습니다. 요즘은 대부분 3개월 주기로 비밀번호를 변경하는걸로 알고 있습니다. 비밀번호가 만료되면 비밀번호를 변경해주는게 맞겠습니다. 실제로 만료 전부터 로그인하면 만료기간에.. 2018. 4. 9.
오라클 계층 쿼리(Hierarchical Query)의 사용법 업무를 데이터베이스로 구현을 하다보면 한 테이블 내의 데이터가 계층적 관계를 가지는 경우가 많이 있습니다. 예를 들어보면 코드정보, 부서정보, 사이트의 메뉴 정보 등이 되겠습니다. 계층의 단계가 고정 되어 있고, 두 계층 정도라면 테이블을 분리할 수도 있지만, 임의의 단계를 표현해야 한다면 한 테이블에 상위 데이터로의 연결고리를 가지도록 구현을 하게 됩니다. 제품의 BOM(Bill of Material - 부품의 계층 정보) 정보 같은 것이 되겠습니다. 이러한 자기참조 구조는 이해하기도 편하고, 깔끔하게 구현이 됩니다. 하지만 한가지 중대한 단점이 있습니다. 관계 데이터베이스는 한 행내의 데이터들 간의 연산은 아주 간단히 처리되지만, 다른 행과 관계되는 연산은 쿼리가 상당히 복잡해 집니다. 복잡한 서브쿼.. 2018. 4. 9.
Oracle Original Export and Import(exp and imp) 오라클에서 데이터의 백업과 복원에 간단히 사용할 수 있는 툴로 exp와 imp를 많이 사용해왔습니다. Oracle 10g 부터는 Oracle Data Pump Export(expdb) 와 Import(impdb) 툴이 제공됩니다. 그래서 이것과 구분하기 위해서 이전의 툴은 Original Export(exp)와 Import(imp) 라고 부릅니다. Original 툴은 Oracle 10g R2 까지만 지원되고, 11g 부터는 일반적인 사용지원이 되지 않는다고 합니다. 그렇다고 사용하지 못하는 것은 아닙니다. Oracle은 Oracle Data Pump Export(expdb)와 Import(impdb)를 사용하기를 권장하고 있습니다. 하지만, 이전의 exp 로 만들어진 덤프 파일을 import 하려하거나.. 2018. 4. 9.
ORACLE 작업(JOB)의 실행 일정관리 - DBMS_JOB ORACLE에서 주기적으로 작업을 실행하고 작업 큐 내의 작업들을 관리하는데, DBMS_JOB 패키지가 사용됩니다. Oracle 10g 부터는 좀더 확장된 기능을 가진 DBMS_SCHEDULER 패키지가 제공됩니다. DBMS_JOB 패키지도 그대로 제공됩니다. 이번에는 DBMS_JOB 패키지에 대해서 알아봅니다. DBMS_JOB 패키지를 사용하는데 특별한 시스템 권한이 요구되지 않습니다. 작업(Job)은 작업의 소유자가 아닌 다른 사용자가 수정 또는 삭제 할 수 없습니다. Job 으로 실행할 프로시저(Procedure)자신이 소유자가 아니더라도 실행(Execute)권한이 있으면 작업으로 실행시킬 수 있습니다. 주의해야할 점은 작업이 시작되어서 실행되는 중에 작업을 중지시킬 수 있는 방법은 없다는 것입니다.. 2018. 4. 4.
SQLyog 사용법 이글에서는 SQLyog Community Edition의 사용법을 알아봅니다. 설치 및 데이터베이스 연결설정은 "SQLyog - MySQL 관리툴 설치하기"를 참조 하세요. SQLyog는 MySQL, MariaDB 모두에서 동일하게 사용할 수 있습니다. 실제 이 글을 쓰면서 테스트는 MariaDB에서 하였습니다. 0. 화면 구성 SQLyog 의 화면구성은 상단에 메뉴 영역, 그 아래에 툴바가 있고, 그 아래에 현재 연결된 서버 이름이 보이는 탭이 있습니다. 여러개의 서버에 연결을 하여 사용중이라면 이 탭이 연결된 서버 만큼 증가할 것입니다. 그 아래에는 하나의 연결된 서버에 대한 작업을 할 수 있는 세군데 영역으로나뉘는데 좌측에는 트리 구조로 데이터베이스 정보들이 보여집니다. 우측 상단에는 쿼리를 입력해.. 2018. 4. 3.