* MySQL 5.5.x 버전에서 테스트한 내용임!


Oracle에서는 테이블에 date형의 컬럼을 만들면서 default 값을 sysdate로 넣어주면, 명시적으로 null 값을 넣으려하거나 insert 문장에서 해당 컬럼이 빠져도 현재 시각이 입력되게 되어 있다. 이런 설정을 여러개의 컬럼에 적용할 수 있다는게 아주 당연한 일이었다. PostgreSQL도 마찬가지로 current_timestamp나 current_date 둥을 여러 컬럼에 default로 설정해 줄 수 있다.

하.

지.

만.

MySQL에서는 안된다.

DA#에서 기본값에 current_timestamp를 넣어줬더니 스크립트가 잘 뽑히길래 돌렸더니 에러 발생.

기본적으로 MySQL에서는 하나의 테이블에 하나의 timestamp 컬럼에만 current_timestamp를 넣어줄 수 있다고한다.

그러나 꼼수가 존재하니 아래 코드를 돌려보시길...


CREATE TABLE test

(

id INT NOT NULL,

regdttm TIMESTAMP DEFAULT '0000-00-00 00:00:00',

moddttm TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

)

;


INSERT INTO test(id, regdttm) VALUES(1, NULL);

INSERT INTO test(id, regdttm) VALUES(2, NULL);

INSERT INTO test(id, regdttm) VALUES(3, NULL);

regdttm에 null 값을 명시적으로 넣어주는 insert 문장을 실행하면 regdttm과 moddttm에 current_timestamp값이 들어갑니다.


SELECT * FROM test;


"id" "regdttm"                 "moddttm"

---------------------------------------------------------------

"1" "2014-07-23 17:36:05" "2014-07-23 17:36:05"

"2" "2014-07-23 18:49:52" "2014-07-23 18:49:52"

"3" "2014-07-23 17:36:24" "2014-07-23 17:37:06"




 SQL Deveroper는 Oracle corp.에서 배포하는 Oracle 개발, 관리 등을 지원하는 개발 Tool입니다. Oracle Homepage에서 무료로 받아서 사용할 수 있으며, 현재 안정 버전은 3.0이며 "3.1 Early Adopter" 버전도 받아서 사용할 수 있습니다. 이 글을 작성하던 시점에는 3.0이 최신빌드였는데, 3.1이 정식으로 나왔습니다. (아래의 푸른 글 상자 안의 내용을 추가했습니다. 최신 버전에 대한 정보는 아래의 글 상자 내용을 참조하세요.)

Oracle SQL Developer 3.1 (3.1.07.42)

 February 7, 2012

출처 : http://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/index.html

To install Oracle SQL Developer 3.1 download the file, there is no in-place upgrade available, you must unzip the file into an empty folder. Select the "Use folder names" checkbox when unzipping the file. You can migrate your settings from Oracle SQL Developer 1.5.x or SQL Developer 2.1.x.. See the Release Notes 3.1 for more details.

JDK Support
Oracle SQL Developer 3.0 is shipped with JDK1.6.0_11. However, you can connect to and use any JDK 1.6.0_11 or above. To use an existing JDK, download the zip files listed below "with JDK already installed."

Use Check for Updates to install:
  • Third-party database drivers for Sybase, SQL Server and MySQL. For more information on setting up the third-party drivers, see Migrations: Getting Started
  • Version control systems, Concurrent Versions System (CVS), Serena Dimensions or Perforce.

Check for Updates also supports an increasing number of Third-Party extensions. These are available with separate licensing agreements and are developed, tested and maintained by third-party vendors.



뒷북이 되어버린... 3.1 Early Adopter 버전입니다.

 
 3.1 버전을 설치했더니, 기본적으로 Oracle과 MS Access에 접근할 수 있게 되어있네요. 추가 설정 작업을 해주면 Microsoft SQL Server, Sybase, IBM DB2에도 접근할 수 있습니다. (Update 메뉴를 통해서 확장 기능을 검색해보면 MySQL, SQL Server 접속 기능도 설치할 수 있는데, 3.1 버전은 아직 정식 버전이 아니라서 그런지 설치를 할 수 없네요.)

 실행하면 화면에 위와 같은 창이 뜨고, 진행막대가 지나갈 겁니다. Java로 되어 있어서 그런지 (Oracle JDeveloper 기반인것 같다. VisualVM(정확한 이름인지는 모르겠다.)으로 상태를 모니터링하면서 보니까 이름이 JDeveloper로 뜨네요.) 초기 기동이 아주 느립니다. 토드와 맞짱 뜰만한 기동 시간이라니... 아 토드 보단 쪼금 빨랐던거 같습니다. 아마도...
  

0. Oracle Database
 Oracle database는 기본적으로 접속이 가능하다. TNS와 IP기반의 접속이 모두 가능하며 쓸만합니다.
 

1. MySQL 접속이 가능하도록 설정하기
1-1. MySQL JDBC Driver 다운로드 받아서 설치하기
  mysql.com의 다운로드 메뉴에서 Connector라는 항목을 선택하면 Connector/J라는 항목이 있다. 여기에서 다운로드 받을 수 있다. 다운로드 받은 파일의 압축을 풀어서 jar file을 원하는 위치에 저장하면 된다.

1-2. SQL Developer에 MySQL JDBC Driver 설정하기
환경설정 메뉴의 "데이터베이스 > 타사 JDBC 드라이버"를 클릭하면 설정 화면이 나옵니다.

1-3. SQL Developer 접속 설정하기
아래 이미지를 보시면 짐작이 가시겠죠? IP 혹은 Hostname, 그리고 계정 정보 등이 필요합니다.


 

2. Microsoft SQL Server에 접속이 가능하도록 설정하기
2-1. SQL Server JTDS Driver 다운로드 받아서 설치하기
  SQL Server는 MS에서 제공하는 JDBC Driver를 사용하면 SQL Developer가 인식하지 못한다. 대신에 Open source로 만들어지는 JTDS Driver를 이용하면 된다. Sourceforge에서 JTDS로 검색하면 찾을 수 있으며, 아래의 "관련 자료 다운로드"의 링크를 따라가면 바로 찾을 수 있다. 다운로드 받은 파일의 압축을 풀어서 jar file을 원하는 위치에 저장하면 된다.
 
2-2. SQL Developer에 JTDS Driver 설정하기
환경설정 메뉴의 "데이터베이스 > 타사 JDBC 드라이버"를 클릭하면 설정 화면이 나옵니다.


2-3. SQL Developer 접속 설정하기
아래의 이미지를 보시면 MySQL과 다른점이 있다면 "Windows 인증 사용"일겁니다. 그외에는 뭐...IP 혹은 Hostname, 계정 정보 등이 필요합니다.




<참고문서>

2. Oracle SQL Developer 3.1 Release Notes


<관련 자료 다운로드>



 MySQL Storage Engine들을 비교해볼 일이 생겨서 자료를 찾아봤습니다. 5.1 버전과 5.5 버전의 영문 메뉴얼을 보면서 정리한 내용입니다. MySQLKorea의 5.1버전 한글 번역판도 참고 했습니다.


1. MyISAM
Transaction을 지원하지 않지만 기본 Storage engine이며 많이 사용되고 있다. Table을 각각 독립적인 File에 저장한다. 5.5. 버전을 기준으로 256 TB까지 저장할 수 있다. Transaction을 지원하지 않는 대신 빠르고, 디스크 공간을 덜 차지하며, Update를 위한 메모리 공간도 적게 사용한다.
Transaction을 지원하지 않는 MyISAM 때문에 MySQL은 RDBMS로 인정해주지 못하겠다는 의견도 있었습니다. ("그러면 엑셀도 DB냐??"같은 의견이었죠.) 이제는 InnoDB같이 Transaction을 지원하는 Engine도 기본으로 설치되고 (설치는 되지만 여전히 사용 여부는 운영자의 판단이죠.), Transaction 지원을 포기한 대신에 빠른 속도와 가벼운 시스템 부하 등도 하나의 컨셉으로 받아들여지는것 같습니다. 하지만... Transaction을 지원하지 않는것은 큰 약점이라고 생각합니다. DB에서 처리해줄 Transaction을 Application상에서 구현해줘야 하니까요.


2. Memory
Table을 Memory에 저장하는 engine이다. 서버 재기동시 모든 data가 삭제된다. 5.5 버전 기준으로 RAM의 여유공간만큼 저장할 수 있다. Hash index를 지원한다.
Memory상에 Table이 직접 올라가 있으니 조회 속도는 엄청 좋을거라 생각합니다. 물론 시스템 부하가 얼마나 걸리는지, 과연 비싼 서버 메모리 비용을 부담할 만큼의 이점이 있는지는 실제 테스트를 한뒤 결정해야한다고 생각합니다.


3. Merge
여러개의 Table을 하나의 Table처럼 사용할 수 있게 해주는 Storage engine이라고 한다.
이부분은 음... 어떻게 보면 재밌게 쓸 수 있을거 같은데, 다음에 좀더 알아보고 정리하겠습니다.


4. InnoDB
Transaction을 지원하는 Storage engine이다.(기본 설정은 Auto commit이다) Foregine key 제약 사항, Clustered index, Row level lock을 지원하며 최대 64 TB까지 저장할 수 있다. Oracle과 유사하게 Tablespace에 data를 저장한다. 기본으로 설치용 바이너리 배포판에 포함되어 있다.
 SUN Microsystems가 Oracle에 인수되기 이전에 이미 Oracle사에 인수되어서 한때 MySQL 진영에서 InnoDB를 대체할 Storage Engine을 개발하려는 움직임이 있었죠.


5. BDB
BDB는 BerkeleyDB의 약자이다. InnoDB와 마찬가지로 Tarnsaction을 지원하는 storage engine이다. 다른 점이 있다면 Table을 저장할 때 MyISAM처럼 Table별로 독립된 File을 생성해서 저장한다는 점이다. 5.5 버전의 문서에 지원하는 Storage engine에서 제외된 걸로 봐서 앞으로의 공식 지원은 불투명한 상태이다. (뭐 이건 주관적인 생각입니다.)
 BerkeleyDB 역시 InnoDB와 마찬가지로 Sun Microsystems 인수 이전에 Oracle에 인수되었죠.(맞을겁니다.) MySQL과 별도로 단독으로 Application에 내장되어서 파일 기반의 DB로도 사용 가능합니다. 활용도가 높다고 생각합니다. 앞으로 어떻게 될지는 지켜봐야 겠네요.


6. Archive
대용량의 데이타를 인덱스 없이 저장하기 위한 Storage engine이다. INSERT, SELECT는 지원하지만, DELETE, UPDATE는 지원하지 않는다. 저장할 수 있는 크기에 제한이 없다.


7. CSV
Text file에 data를 저장하는 storage engine이다. 저장된 data file을 MS Excel이나 OpenOffice Calc같은 spreadsheet에서 열 수 있다. Index를 지원하지 않고, NULL도 저장할 수 없다.
 이거... 성능만 나쁘지 않다면 꽤 유용하게 쓸 수 있지 않을까요?!?! 이걸 어떻게 써먹을지 궁리를 좀 해봐야 겠습니다. 그리고 성능이 얼마나 나오는지도 확인해봐야 겠죠?


이상 너무 간단하지만, MySQL Storage Engine들에 대한 정리를 마칩니다. 영문 메뉴얼을 좀더 읽어보고, 실제로 Test도 해본뒤에 좀더 유용한 자료를 만들면 다시 올리겠습니다. 그럼 이만...


참고 자료
MySQL Documentation: MySQL Reference Manuals
MySQL Korea

 LAMP 시스템 조율 시리즈의 마지막인 Part 3, MySQL 조율에 관한 문서를 소개합니다.
공개 DataBase 중에서 가장 (최소한 한국에서는...) 다양한 사용자층을 확보한 MySQL은 UNIX/Linux 환경에서 사용할 수 있는 대표적인 DataBase중의 하나입니다. 특히나 오픈소스 제품이기에 무료로 사용할 수 있지만, 그 덕에 정교한 튜닝을 하지 않고 사용하는 적당히 설치해서 적당히 사용하는 제품이기도 하죠... 물론 상용 제품들도 벤더사에서 설치해준 상태 그대로 사용하는게 대부분의 DB서버가 처한 우울한 현실이기도 하죠.

자... 이제 IBM DeveloperWorks에서 소개하는  "LAMP 시스템 조율, Part 3: MySQL 조율"을 소개합니다. 아~ 한글이라서 더욱더 맘에 듭니다. (이 놈의 영어 울렁증은...)

원문 : LAMP 시스템 조율, Part 3: MySQL 조율


LAMP(Linux®, Apache, MySQL, PHP/Perl) 아키텍처를 활용하는 응용 프로그램은 끊임없이 개발되고 배포되고 있습니다. 하지만 때로 서버 관리자는 다른 사람이 작성했다는 이유만으로 응용 프로그램 자체에 대한 통제권이 거의 없습니다. 기사 셋으로 이뤄진 이번 연재물은 응용 프로그램 성능을 향상시킬 서버 환경 설정 항목을 다룹니다. 연재 마지막인 세 번째 기사에서는 최대 성능을 발휘하도록 데이터베이스 계층을 조율하는 데 초점을 맞춥니다.

MySQL 조율에 대해

MySQL 서버를 빠르게 하기 위한 방법은 세 가지가 있는데, 효율이 낮은 쪽에서 높아지는 쪽으로 나열하면 다음과 같다.

  1. 하드웨어로 문제를 푼다.
  2. MySQL 프로세스 설정을 조율한다.
  3. 질의를 최적화한다.
DB2®로 이주
MySQL에서 IBM® DB2®로 이주하는 명쾌하고 비용이 들지 않는 방법을 찾고 싶은가? "MySQL 또는 PostgreSQL에서 DB2 Express-C로의 마이그레이션 (영문)" 기사에서는 이주 도구를 활용해 쉽게 이전하는 방법을 보여준다. 공짜 DB2 Express-C를 내려받아 지금 바로 시도해보자.

하드웨어로 문제를 푸는 방법이 가장 먼저 떠오른다. 특히 데이터베이스가 자원을 잡아먹는 괴물이라는 사실을 감안하면 말이다. 하지만 이 해법에는 한계가 있다. 현실을 고려할 때 CPU나 디스크 속력은 두 배로, 메모리 용량은 네 배에서 여덟 배 정도만 늘일 수 있다.

두 번째로 좋은 방법은 mysqld라는 MySQL 서버 조율이다. 이 프로세스 조율은 올바른 위치에 메모리를 할당하고 어떤 부하가 걸릴지 mysqld에 알려주는 조정 기법을 의미한다. 디스크 속력을 좀 더 빠르게 만드는 대신, 필요한 디스크 접근 횟수를 줄이는 편이 유리하다. 비슷하게, MySQL 프로세스가 올바르게 동작하도록 만드는 조율은 개발자가 임시 디스크 테이블과 파일 여닫기 같은 배경 작업에 신경을 쓰는 대신 질의에 대한 서비스에 좀 더 많은 시간을 보낼 수 있음을 의미한다. mysqld 조율은 이번 기사에서 주로 다룰 내용이다.

최고로 좋은 방법은 질의 최적화다. 이는 적절한 색인을 테이블에 만들어 놓고, MySQL의 장점을 최대로 활용하는 방향으로 질의를 작성하는 조율 기법을 의미한다. 이번 기사에서 질의 조율을 다루지는 않지만(이 주제로 책을 써도 되겠다), mysqld 환경 설정을 변경해 조율이 필요한 질의를 보고하도록 만든다.

중요한 조율 순서를 제시하긴 했지만, 그렇다고 해서 적절히 조율을 마친 질의를 위해 하드웨어나 mysqld 설정을 무시하라는 말은 아니다. 느린 기계는 느린 기계일 뿐이며, 제대로 작성한 질의를 돌리더라도 부하가 걸려 실패하는 경우를 목격했는데, mysqld가 질의를 서비스하는 대신 바쁘게 움직이느라 시간을 소모하고 있었기 때문이었다.

LDS[각주:1]에서 주최하는 MySQL User Conference Korea - 2007 행사에 점심시간을 이용해서 잠시 갔다왔습니다.
음... 컨퍼런스 내용은 5분도 못 들었고, 자료만 챙겨서 나왔죠. 좀 일찍 퇴근해서 마지막 시간의 [Case of succeed of MySQL & RedHat]이라도 들어볼까하는데, 금요일이라 여유가 될지 모르겠네요. 눈치만 살피고 있습니다. :)

자~ 일단 홍보 부스에서 받은 자료를 살펴보면요.

1. SUN Microsystems
 랙형 서버 2대(1대는 스토리지였던가???)와 데스크탑형 워크스테이션 1대가 있더군요. 곧 쿼드 코어 옵테론을 이용한 서버가 출시될거라고 하더군요.

2. Terrace Technologies
 TIMS라는 메일 솔루션을 가지고 나왔더군요. 대용량 메일 처리가 가능하다고 하더군요. 제가 웹메일  서버를 관리하고 있어서 그런지 관심이 가긴했는데, 점심시간내에 둘러보고 가야하는 관계로 걍 통과했습니다.

3. DideoNET
 SeeMedia라는 동영상 인코딩/스트리밍/UCC 솔루션을 소개하는 부스였습니다.
이런 솔루션을 만들어보는게 목표이긴한데... 배워야 할게 많네요.
인코딩 서버, 스트리밍 서버...

4. 회사 이름이 기억나지 않는 부스
 MySQL HA Cluster.... 아마도 이런 이름이었을겁니다. 메모리 DBMS라면서 MySQL Cluster solution을 소개하던데, 엔지니어가 아닌 영업 하시는 분이라 자세한 얘기는 듣지 못했습니다.

  1. Linux Data System의 약자. 아는 형이 근무하는 회사입니다. [본문으로]

+ Recent posts