JKUN

Welcome To The Jkun.net

블로그 포스트 검색결과


DataBase 에 해당되는 글 66개가 검색 되었습니다.

  1. 2017.06.09 MariaDB - JSON 테이블
  2. 2017.02.02 MySQL 정규식으로 치환 함수
  3. 2017.02.02 UNIXTIME 관련 함수
  4. 2016.10.25 [ER-WIN] Names Option
  5. 2016.07.26 [펌] NoSQL 종류
  6. 2016.04.24 [펌] 커버링인덱스
  7. 2016.01.12 OPENQUERY 를 이용한 INSERT/SELECT/UPDATE
  8. 2016.01.12 excel linked server 메시지 7303, 수준 16, 상태 1, 줄 31
  9. 2016.01.12 MSSQL 메시지 7347 - 예상 데이터 길이와 일치하지 않는 데이터를 반환했습니다.
  10. 2015.09.22 [링크] MySQL에서 사용하는 Lock 이해
  11. 2015.09.21 MySQL Split - 문자열 자름 처리.
  12. 2015.06.03 참조키 강제 해제
  13. 2014.11.26 참조키 선언시 에러
  14. 2014.11.26 우분투에서 mysql 삭제 후 재설치
  15. 2014.03.28 MySQL Stored Procedure (저장프로시저) (2)
  16. 2014.03.26 임시테이블 - Temproray Table
  17. 2014.03.26 MySQL 에러처리
  18. 2014.03.26 저장 프로시저 관련 포스팅
  19. 2013.12.30 memsql
  20. 2013.12.04 윈도우에서 MySQL 설치하고1045 에러 발생
  21. 2013.11.27 몽고디비 - 초간단 가이드
  22. 2013.07.03 Code Formatter - 코드정렬
  23. 2013.05.29 링크드 서버로 업데이트(Update) 조인해서 다수의 데이터를 조건별로 수정할때
  24. 2013.05.29 [엑셀쿼리 오류] Microsoft.Jet.OLEDB.4.0 이(가) 오류
  25. 2013.05.29 자주 쓰이는 시스템 뷰
  26. 2013.05.29 MSSQL [@@IDENTITY, SCOPE_IDENTITY, IDENT_CURRENT]
  27. 2013.05.29 TRANSACTION[트랜잭션] - 롤백 처리에 대해서
  28. 2013.05.29 SQL MD5 함수
  29. 2013.05.29 OPENROWSET
  30. 2013.05.29 CHARINDEX 를 이용한 문자열 필터링

Blog

MariaDB - JSON 테이블

2017.06.09 10:07 DataBase/MariaDB


마리아 디비에서 보면 JSON 테이블 형태가 존재하는것 같다.

일단은 테스트를 해봐야하나 ㅋㅋ

차후 로 미루고 메모포스팅을.


Guide : https://mariadb.com/kb/en/mariadb/connect-json-table-type/

Blog Post : http://estenpark.tistory.com/350


위에 포스팅에서 꽤 상세하고 자세하게 포스팅되어있어 그대로 따라해보면 될듯.

저작자 표시
신고

'DataBase > MariaDB' 카테고리의 다른 글

MariaDB - JSON 테이블  (0) 2017.06.09
현재 0 개의 댓글이 있습니다.
Comment

Blog

MySQL 정규식으로 치환 함수

2017.02.02 15:41 DataBase/MySQL


MySQL 정규식으로 치환 함수

DELIMITER $$

CREATE FUNCTION  `regex_replace`(pattern VARCHAR(1000),replacement VARCHAR(1000),original VARCHAR(1000))
RETURNS VARCHAR(1000)
DETERMINISTIC
BEGIN 
 DECLARE temp VARCHAR(1000); 
 DECLARE ch VARCHAR(1); 
 DECLARE i INT;
 SET i = 1;
 SET temp = '';
 IF original REGEXP pattern THEN 
  loop_label: LOOP 
   IF i>CHAR_LENGTH(original) THEN
    LEAVE loop_label;  
   END IF;
   SET ch = SUBSTRING(original,i,1);
   IF NOT ch REGEXP pattern THEN
    SET temp = CONCAT(temp,ch);
   ELSE
    SET temp = CONCAT(temp,replacement);
   END IF;
   SET i=i+1;
  END LOOP;
 ELSE
  SET temp = original;
 END IF;
 RETURN temp;
END$$

DELIMITER ;

본문 : https://techras.wordpress.com/2011/06/02/regex-replace-for-mysql/

저작자 표시
신고

'DataBase > MySQL' 카테고리의 다른 글

MySQL 정규식으로 치환 함수  (0) 2017.02.02
UNIXTIME 관련 함수  (0) 2017.02.02
[펌] 커버링인덱스  (0) 2016.04.24
[링크] MySQL에서 사용하는 Lock 이해  (0) 2015.09.22
MySQL Split - 문자열 자름 처리.  (0) 2015.09.21
참조키 강제 해제  (0) 2015.06.03
현재 0 개의 댓글이 있습니다.
Comment

Blog

UNIXTIME 관련 함수

2017.02.02 15:39 DataBase/MySQL


1. UNIXTIME(타임스탬프) → DATE 

 FROM_UNIXTIME('1485874832', '%Y%m%d %H%i%s') 

2. DATE → UNIXTIME

UNIX_TIMESTAMP()
UNIX_TIMESTAMP('YYYY-MM-DD HH:mm:ss')


저작자 표시
신고

'DataBase > MySQL' 카테고리의 다른 글

MySQL 정규식으로 치환 함수  (0) 2017.02.02
UNIXTIME 관련 함수  (0) 2017.02.02
[펌] 커버링인덱스  (0) 2016.04.24
[링크] MySQL에서 사용하는 Lock 이해  (0) 2015.09.22
MySQL Split - 문자열 자름 처리.  (0) 2015.09.21
참조키 강제 해제  (0) 2015.06.03
현재 0 개의 댓글이 있습니다.
Comment

Blog

[ER-WIN] Names Option

2016.10.25 22:16 DataBase


ERWIN 을 쓰다보면 가끔 네이밍 설정을 안해줘서,

짜증에 직면할때가 있다.



여기서 해당하는 부분에 Macro Name 을 수정하면 된다.

특히 키 그룹은 반드시 변경 ㅡㅡ^;;


%KeyType_%TableName OR %KeyType_%TableName_%PK()

추가적인 설명은 Macro ToolBox 버튼을 누름 


이와 같이 자세히 확인할 수 있으나... 일단은 키 그룹 빼곤;;;

ㅋㅋ


아 그리고 유용하게 사용되는 엔티티명에 코멘트 적용시키는 스크립트.

Schema Generation 에서 Post-Script 옵션에 체크해준다.

%ForEachTable() {
	COMMENT ON TABLE %TableName IS '%EntityName';
	%ForEachColumn() {
		COMMENT ON COLUMN %TableName.%ColName IS '%AttName';
	}
}


구글링도중에 아주 나이스한 포스트 추가 링크겁니다

http://e2xist.tistory.com/468


더보기


저작자 표시
신고

'DataBase' 카테고리의 다른 글

[ER-WIN] Names Option  (0) 2016.10.25
memsql  (0) 2013.12.30
FreeSQLFormatter [SQL정렬]  (0) 2012.02.13
NoSQL  (0) 2011.01.14
ERStudio  (0) 2010.08.24
현재 0 개의 댓글이 있습니다.
Comment

Blog

[펌] NoSQL 종류

2016.07.26 11:45 DataBase/NoSQL



출처 : http://paraffa.tistory.com/47

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

1. MongoDB / C로작성 됨

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


1.1 MongoDB란?

  - MongoDB는 10gen 사에서 개발된 높은 성능과 확장성을 가지고 있는 데이터베이스 입니다.

    NoSQL 데이터베이스에서는 문서형 데이터베이스로 분류됩니다. C언어로 개발되었다.

    공식사이트 : http://www.mongodb.org


1.2 왜 MongoDB를 사용하는가?

  - 스키마를 고정하지않는다.

  - 시리얼라이즈 시키면 문제가 없어질까?

    - json등을 사용하여 시리얼라이즈시킨 데이터를 관계형 데이터베이스에 입력하면된다.

      > 가독성이 떨어진다.

      > 성능저하를 검토하여야한다.

  - 스키마 없는 데이터베이스

    - MongoDB는 스키마가없는 데이터베이스이다.

    - RDB와 마찬가지로 임의의 key값에대한 복잡한 검색이 가능하다.

    - RDB와 비교해 응답속도가 빠르고, 인덱스를 추가하여 처리속도를 더 빠르게 할 수 있다.


1.3 특징

  - MongoDB는 스키마를 정의할 필요가 없음.

  - 문서형 데이터베이스는 데이터를 입력할때 데이터 구조 정보를 포함하여 BSON(JSON을 바이너리화한것)

    형식으로 저장하고, 이것을 value로 key와 짝짓습니다.


1.4 장점

  - 스키마 없이사용이 가장 큰 장점입니다.

  - 스키마가 없기 때문에 프로그램 코드만 수정하면 됩니다.

  - 스키마와 프로그램 코드사이의정합성에 신경쓰지 않아도 된다.

  - 검색조건을 유연하게 지정할 수 있습니다. 

    > 정규표현을 통한 검색부터 배열 데이터에 특정 값이 포함되어 있는지등.


1.5 단점

  - MongoDB에서는 JOIN이나 트랜잭션성 처리가 불가능하다.

  - MongoDB에서는 데이터 갱신 및 입력시 바로 디스크에 쓰지 않는다는 것입니다.

    > 디스크에 쓰기가 비동기식으로 이루어진다. 때문에 경우에 따라 데이터가 유실될 가능성도 있다.

      이것과 트레이드오프로 빠른 응답속도가 가능한 것 입니다만 데이터가 사라질 수 있다는 점에 

      주의해야 한다.

1.6 도입사례

  - 해외의 도입사례

    > foursquare

    > preferred infrastructure

    > 아메바피아


1.7 구체적인 이용 예

1.7.1 샘플1

  - MongoDB의 구체적인 예로 앙케이트 응답 데이터를 다루는 경우를 생각해보겠습니다. 

    MongoMapper라는 라이브러리를 사용해서 구현하도록 하겠습니다. 먼저 앙케이트 응답 데이터를 다룰 answers콜렉션에 대한 모델을 정의합니다.

    클래스 정의 내부에 MongoMapper:Document를 include하고있는것 외에는 특별히 다른 부분은 없습니다.


  - 컬럼을 정의하지 않아도 MongoDB를 사용할 수 있습니다만 이번예에서는 user_id와 enquete_id를 명시적으로 정의해 두었습니다.

    컬럼을 정의하면 validation 가능(이번경우 user_id, enquete_id가 필수 항목이 됨), Accessor 설정, 대응클래서에 매핑됨

    이라는 잇점이 있기 때문입니다. 물론, 단순히 알기쉽고 관리가 편하다는 이유도 있습니다.


  - 여러 데이터 형식 입력 가능

  - 콜렉션을 다른 콜렉션에 추가

  - 응답 데이터를 저장한다.

  - 스키마 변경없이 대응 가능


1.7.2 샘플2

  - 다른 예로 분석 데이터 스토리지로 사용하는 경우에 대해 생각해 보겠습니다.로그 데이터를 분석하여 그 분석 결과를 MongoDB에 저장하는 케이스입니다.

    서비스이용 상태를 조사한다거나 서비스를 개선하기위해 로그데이터를 해서 PV나 UU, 그외 여러가지데이터를 만들어 내는 경우가 있을것 입니다만

    그 데이터를 어떻게 관리하면 좋을까요?

    

    > 관계형 데이터베이스에서의 운용

      - 단,로그 데이터 분석에서는 어떤 컬럼이 필요할지 알 수 없습니다. 이제까지 필요하지 않았던 컬럼도 어떤 분석에서는 필요해질 수 있습니다.

        그러므로 분석용 테이블을만들어서 해당 테이블에 모든 분석 테이터를 보존하고 필요할 경우 새로운 컬럼을 추가한다거나 아니면 다른 테이블을

만들어서 저장하는 방법이 있습니다.


      - 동일한 테이블에 모든 분석 데이터를 저장하고 필요할 때마다 새로운 컬럼을 추가한다면 운영이 번거로워지고 특정 분석에서만 사용하는 불필요한

        컬럼이 많아질 수 있습니다. 그렇다고 해서 분석 데이터만다 별도 테이블을 만든다면 테이블 수가 무척 많아지게 될 것 입니다.


    > MongoDB를 사용한 운용

      - 로그 데이터를 분석하면 여러가지 형식의 데이터가 얻어질 것이라고 생각합니다만, MongoDB라면 스키마에 신경쓰지 않고 여러 데이터를 저장 할 수

        있습니다. 새로운 데이터를 저장해야 할 경우에도 스키마 변경 없이 바로 추가해서 기록할 수 있는 유연함이 MongoDB의 가장 큰 장점입니다.

'이 데이터는 앞으로 이용 할 수도 있다'는 일시적으로 사용할 데이터도 가볍게 저장할 수 있어서 편리합니다.


1.7.3 Tip

  - MongoDB의 지리 공간 인덱스라고 불리는 인덱스를 사용하는 것이 가능합니다. (1.7.0 이상)위도와 경도정보를 인덱스로 사용하여 검색할 수 있습니다.

    최근 GPS를 사용한 서비스가 늘어나고 HTML5에서는 Geolocation  API를 제공하는 등 위치 정보가 점점 더 중요해질 것이라고 생각합니다. 

    

    # 지리 공간 인덱스를 이용하는 컬럼으로 "2d"를 지정

    # 복합 인덱스도 사용 가능

    > db.place.ensureIndex({location:"2d"})


    # 데이터 입력

    > db.place.find({location:{$near:[139.65,35.65]}}).limit(5)


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

2. Cassandra (key-value형 스토어) / 자바기반

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

2.1 Cassandra란?

  - Cassandra는 facebook에서개발하여 현재는 Apache프로젝트로 진행되고 있는 오픈소스 소프트웨어이다.

    NoSQL데이터베이스에서는 key-value형으로 분류된다. Google의 BigTable을 바탕으로 개발되고 

    컬럼 단위로 관리되어 컬럼형으로 분류하기도 한다.


2.2 왜 Cassandra를 사용하는가?

  - 대량의 데이터를 다루는데 효과적

    > 여러장소에 분산된 다수의 저가 서버를 이용하여 대량 데이터를 다루기 위해 만들어진 데이터 스토어로

      대량의데이터를 다루는 데특화되어 있습니다.다량의데이터를 다수의 서버에 분산시키며 분산된 데이터를 여러

      서버에 복제해 두는 방식으로, 읽기와 쓰기가 모두 뛰어나다. 또한 데이터를 메모리에 보관해 두고 일정 조건 후

      디스크에 입력하는 영속성과 휘발성 key-value가 혼합된 방식으로 관계형 데이터베이스에 비해 속도가 크게 빠릅니다.


    > memcached처럼 관계형 데이터베이스의 cache로 사용할 수 있지만, 다수가 이용하는 대랴의 데이터에 특화되어 개발된

      만큼 관계형 데이터베이스와 대등하게 단독 데이터베이스로 사용하는 경우가 많습니다.


2.3 특징과 사용케이스

  - Cassandra는 Row key를 인덱스로가지는 key-value형 스토어입니다. 또한 컬럼을 기본으로 데이터를 다루는 컬럼형 NoSQL

    데이터베이스로 행 중심인 관계형 데이터베이스와는 달리 디스크에 데이터를 컬럼 단위로 연속하여 저장한다.

    컬럼(열)단위로 관리되기 때문에 동일한 데이터라도 행단위로 관리하는 것보다 디스크에 많이 저장할수 있습니다


  - 컬럼이 기본 단위로 컬럼에는 컬럼 이름과 값, time stamp가 포합니다. Row key로 식별되는 한 행에는 여러 개의 

    컬럼이 포함될 수 있으며 한 Row에서 저장할 수 있는 컬럼 개수는 20억개 , 각 Row key의 최대 크기는 64KB이다.

    각 컬럼은 Column family에  속하며 Column family는 Keyspace에 포함됩니다. Column family 중 Super Column family는

    Column family를 자식 column으로 가질 수 있습니다. Keyspace는 관계형 데이터베이스에서 스키마나 테이블 스페이스라

    불리는 것과 유사합니다. Keyspace단위로 복제 및 관련 정책을 관리하여보통 어플리케이션 하나 당 Keyspace를 하나씩 

    생성합니다.


  - 어플리케이션에서 Column family의 정렬 기준을 시간이나 이름으로 지정할 수 있습니다.

    Cassandra의 또다른 특징은 분산된 환경에 적합하며 확장성이 뛰어나다는 것입니다.

    앞에서도 이야기했듯이 동일한 데이터가 여러 서버에 복제되어 있어 단위 서버에 문제가 발생하더라도 가용성이 보장됩니다.

    하지만 확장성과 가용성이 좋은 대신 관계형 데이터베이스에 비해 데이터 신뢰도는 떨어지는 편입니다.

    기본 구성에서는 데이터에 대한 입력이나 변경이 비동기식으로이루어지고 중앙에서 관리하는 서버가 별도로 없기 때문에

    분산된 데이터사이에 정합성이 맞지 않는 경우가 발생할 수 있습니다.

    이를 보완하기 위해 데이터 읽기 요청이 발생한 경우 해당 데이터를가지고 있는 여러 서버에 요청을 발행하여 결과값을 비교해 보고 time stamp가

    가장 최신인 데이터를 반환하는 등의 로직을 제공하고 있습니다. 이때 time stamp가 오래된 응답을 보낸 서버는 최신의 데이터로 갱신하도록 합니다.


  - 데이터의 신뢰도를 높이기 위해 동일한 데이터를 가지고 잇는 여러 서버에서 데이터를 가져와서 비교하다 보면 성능에영향을 미칠 수 있습니다.

    따라서 Cassandra에서는 읽기 및 쓰기에대한 각각의 Consistency Level을 지정하여 성능과 신뢰도 수준을 조정하도록 하고 있습니다.

    Consistency Level이 All인 경우에는 읽기 및 쓰기 요청이 발생할 경우 복제된 데이터를가진 모든 서버에서 응답을 보내와야 완료됩니다.

    이경우 데이터베이스의 유연성 및 성능은 떨어지지만 데이터 신뢰도는 높아지게 됩니다.

    Consistency Level이 One일경우에는 읽기 및 쓰기 요청이 발생하였을 때 해당 데이터를 가지고 있는 하나의 서버를 대상으로 해당 연산을

    처리하고 완료하게됩니다. 데이터 신뢰성은 떨어지게되지만 분산에 대한 유연도와 응답 성능은 높아집니다.

    마지막으로QUORUM으로 설정해 두면 읽기 및 쓰기 요청이 들어온 데이터를 복제하여 가지고 있는 일정 대술의 서버에서 응답을 보낼 경우 완료하게 됩니다.

    참고로 Facebook에서 권장하는 Consistency Level은 One이나 replication factor(복제 서버수)를 3으로 둔 QUORUM입니다.

    

    ※ consistency level

    > Level           Write                                    Read

    > ANY | 요청한 내용이 적어도 한 node에 저장됨 |             - 

    > ONE | 요청한 내용이 적어도 한 node의 commit log 및 table에 저장된 후 요청자에게 응답함 | 가장 가까운 고의 replica에서 응답을 받아서 반환한다. Read repair 설정이 되어 있으면 Cassandra는 백그라운드 스레드에서 신뢰도 체크를 실시.

    > QUORUM | 요청자에게 응답하기 전에 quorum of replicas에 저장됨 | quorum of replicas의 응답 중 가장 최근 time stamp의 응답을 반환 |

    > LOCAL_QUORUM |요청자에게 응답하기 전에 local데이터 센터 내의 quorum of replicas에 저장됨. 데이터 센터 사이의latency로 인한 지연을 줄이기위한 설정 | 단일 데이터 센터의quorum of replicas의 응답중 가장 최근 time stamp의 응답을 반환. 데이터센터 사이의 latency를 줄이기 위함 |

    > EACH_QUORUM | 각 데이터센터의 quorum of replicas에 저장한 후 요청자에게 완료를 알림.| 각 데이터 센터의 quorum of replicas의 응답중 가장 최근 time stamp의 응답을 반환|

    > ALL | 모든 replica가 저장해야 함. 그러지않으면 해당 연산은 실패 | 모든 replaica에서 준 응답중 가장 최근 time stamp 값을 반환.하나라도 응답이 오지 않으면 실패 | 


  - key-value형 스토어 데이터 분산에는 memcached 등과 마찬가지로 Consistent Hashing 방식을 이용하고 있습니다.


2.5 장점

  - 대량의 데이터를 다수의분산된 서버에서관리해야 할 경우 적합합니다. 특히 많은 사람들이 이용하며 대량으로 쓰기가 발생하는 서비스에 좋습니다.

    데이터는 일단 메모리에 쓰여지며 데이터가 일정 크기가 되면 디스크로옮겨지게 됩니다.


  - Consistent Hashing 방식을 이용하여 데이터를 분산한다. Consistent Hashing방식에 로드 밸런싱을 위한 알고리즘을 더하여 요청이 적은 서버를

    요청이 많은 서버 구간으로 옮기는 방식으로 로드 밸런싱을 구현하고 있습니다. 따라서 대량의 요청이 소수의 서버에 몰리는 것을 막아 장애를방지하고

    성능을 높일 수 있습니다. 또한 신규로 서버가 추가되는 경우 로드 밸런싱을 고려하여 요청이 많은 구간에 우선 추가되어 부하 관리가 효율적으로 

    이루어지게 됩니다.


  - 신규 서버를 분산 시스템에 추가할 경우 서비스 중단없이 손쉽게 추가할 수 있는 것도 큰장점 입니다. 서비스 요청이 많아져서 신규로 서버를 추가하는경우,

    중앙에서 관리하는 별도 서버가 없기 때문에 새로 추가되는 서버만 기동하면 서비스에 해당서버가 추가되게 됩니다. 즉, 기존에 서비스를 제공하던 서버를

    재기동해야 하는 등의 서비스 중단이 필요 없습니다.


  - 아마존 다이나모 방식을 구현하여 데이터 일관성 대신 연속적인 서비스제공에 중점을 둔 구조로 가용성이 굉장히 뛰어납니다. 데이터 복제 설정도 동일한

    서버 랙을 사용하지 않는 서버에 복제본을 둔다거나 다른 데이터 센터에 복제본을두는 등 다양하게 구현할 수 있습니다.중앙에서관리하는 별도 서버가 없고

    데이터 복제를 기본으로 하고 있기 때문에 단일 노드의 장애 발생시 서비스에미치는 영향이 거의없습니다. Consistency Level을 통해 업무 특성에 맞춰 가용성과

    신뢰도의 정도를 조정할 수 있습니다.


  - Apache Foundation에서개발하고 있으며 여러 사이트에서 활용하고 있어 커뮤니티가 활발하며 사용 사례가 많습니다.따라서우녕ㅇ시 참고할 만한 자료가 다른 

    NoSQL데이터베이스에 비해 풍부한 편입니다. 커뮤니티가활발하여 문제발생시 유사 사례를 찾거나 의견을 구하는 것도 비교적 쉬운 편입니다.


2.6 단점

  - 컬럼형 데이터베이스로 Row형 데이터베이스인 관계형 데이터베이스와는 다른생소한 개념이라 진입장벽이 높습니다. 따라서많은 사용자를 대상으로 대량 데이터를

    다루는 서비스가 아닐 경우 굳이 Cassandra를 고집할 필요는 없을 것입니다.

  

  - 복잡한 조건의 검색이 불가능 합니다. Row key와 컬럼 두가지에대한 인덱스만 가능하기 때문에 데이터는 대량이지만 검색 조건은 단순한 서비스에 적합니다.

  

  - Super Column family의하위 컬럼에 대한 인덱싱은 불가능합니다.

    key 값을 토한 범위 검색은 데이터 분산 방식을 OrderPresservingPartitioner로 설정하여 key값을 통해 데이터를 서버에분배했을 때문 가능하는 등의

    검색 관련 제약사항이 있습니다.


  - 데이터에 대한 갱신 및 입력시 Atomic한 처리가 어렵습니다. 데이터에 대한Lock을 사용하려면 Zookeeper와 같은 전체분산 서버를 관리하는 프로그램을 추가해서

    별도로 설정해야 합니다. 데이터에 대한 동시 갱신 요청이 발생할 가능성이 높거나 Atomic한 트랜잭션이 필요한 서비스에서는다른 데이터베이스를 고려하는 것이 

    좋을 겁니다.


  - 지금 버전 1이 정식으로 나오지 않은 안정적이지 않은 시스템이라느 것도 불안요소가 될수 있습니다.

    커뮤니티가 매우 활발하여 계속해서새로운 기능을 추가하고이슈를 해결하고 있지만 그만큼 새로운 내용에 항상 촉각을 세우고 있어야한다.


2.7 도입사례

  - Facebook을 비롯하여 여러 유명 해외 서비스에서 사용하고 있습니다.

    > Facebook

    > Twitter

    > Digg

  또한 대량 데이터를 다루는 많은 사이트에서 도입을 검토하고 있습니다.


  - 사용케이스 : 시작은 Facebook에 최적화 되어 개발되었기 때문에 다수의 쓰기가 발생하는 대형 웹서비스에 적합합니다.

    앞서 이야기했듯이 Atomic한 처리가필요한 서비스보다는 동일 row에 대한 동시 갱신 요청이 적은 경우나 높은 데이터 신뢰도가 필요하지 않은 서비스에

    적합할 것입니다. 대량 데이터의 입력 성능이 뛰어나기 때문에 실시간 입력 요청이 많은 서비스에 좋습니다. 또한 대량의 데이터의 실시간 분석에도 적합니다.

    Twitter에서는 실시간 분석에 활용하고 있습니다.

    > 사용자가 많으며 사용자에의한 데이터입력이 빈번하게 발생하는 대량의데이터를 다루는 시스템

    > 빈번하게 변경되는 데이터에대한 실시간 분석용 시스템

    > 대량의데이터를 다루며 신뢰성보다 가용성이 중요한 시스템


  - 다른 key-value형 NoSQL 데이터베이스와는 달리 Cassandra는 관계형 데이터베이스를 대체하는 대량 데이터용 스토어로 사용되는 경우가 많습니다. 

    대량의 데이터를 다수 서버에 분산하여 많은 사용자가접속하여 쓰는 구성은 관계형 데이터베이스를 통해서는 효율적으로 지원하기 어렵습니다.

    대량 데이터 분산 처리용으로 나온 NoSQL데이터베이스에서는 HBase와 함께 Cassandra가 가장 앞서나가고 있습니다.


2.8 구체적인 이용 예

2.8.1 사용자 검색 정보 스토리지

  - 많은사용자가 이용하는 대규모 검색 사이트의 경우를 생각해 보겠습니다. 사용자가 많고 실시간으로 기록되눈 데이터(검색시도)가 많으며 데이터는 대부분

    텍스트 데이터로 이루어집니다. 검색 사이트에서 검색 정보를 기록하여 활용한다면 어떤 데이터베이스를 이용하는 것이 좋을까요?


  - 관계형 데이터베이스에서의 운용

    물론 관계형 데이터베이스로 관리하는 방법도 생각할 수 있습니다. 하지만 1000만명의 사용자가 하루 12시간, 시간당 20만건만 검색한다고해도

    1000000x20x12, 즉 24억 행의 데이터가 매일 추가됩니다. 매일 24억 행씩 증가하는 데이터라면 입력하려는 프로세스 간 경합으로 성능이 많이 떨어지게 될것입니다.

    뿐만 아니라 관계형 데이터베이스 응답 시간과 데이터 규모를 고려한다면 고가의 장비를 도입해야 할 것입니다.


    고가의 장비를 도입해서 관계형 데이터베이스로 해당 데이터를 관리한다고해도테이블 구조가 간단할 뿐더러 높은 실시간 데이터 일관성이 필요하거나 join등의 복잡한

    연산이 필요한 서비스가 아니기 때문에 낭비라는 생각이 자꾸 듭니다.

  

  - Cassandra를 사용한 운용

    이런 경우에는 Cassandra가 좋은 대안이 될 것입니다. 실시간으로 정확하게 제공하는 서비스가 아니기 때문에 높은 신뢰도를 제공하는 데이터베이스일 필요가 없습니다.

    검색 정보 데이터를 활용할 때도 데이터 구조가 간단하기 때문에 JOIN이나 복잡한 연산보다 통계성 분석이 주를 이룹니다. 대량의중요도가 높지 않은 데이터를 모두 저장해

    서 의미있는 비지니스 데이터로 활용하기 위해서는 저비용으로 대량의 데이터를 관리하며 고가용성과 유연성을 제공하는 Cassandra가 좋을 것입니다.



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

3. HBase (컬럼형 스토어) / 자바기반

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

3.1 HBase란

  - HBase란 2006년 차드 월터스와 짐 캘러만에 의해 시작되어 현재는 Apache 프로젝트로 개발이 진행되고 있는 오픈소스 소프트웨어입니다.

    NoSQL 데이터베이스에서는 컬럼형 데이터베이스라고 분류됩니다.

    공식 사이트 : http://hbase.apache.org


3.2 왜 HBase를 사용하는가?

  - 대용량 데이터를 안정적으로다루는 데 효과적

    > HBase는 Cassandra와 마찬가지로 Bigtable의 영향을받은, 대량 데이터를 효율적으로 다루기 위한 목적으로 개발된  NoSQL 데이터베이스

      입니다. 대용량 데이터를 다루는 NoSQL 데이터베이스중 Cassandra와 함께 가장 많이 사용되고 있습니다만, Cassandra와는 구별되는 뚜렷한

      특징을 가지고 있습니다. Cassandra는 성능을 우선시 할 경우 데이터 일관성이 보장되지 않을 수 있다고 말씀 드렸습니다. 대량 데이터를

      우수한 성능으로 데이터 일관성을 보장하면서 다뤄야 할 때는 어떻게 해야 할까요? 이부분에서 장점으로 가지고 있는 것이 HBase입니다.

      

      HBase는 중앙에 전체 분산 시스템을 통제하는 마스터를 두고 복제된 전체 데이터의 일관성을 관리 하기때문에 분산된 복제 데이터 사이의

      일관성을 보장하며 제약이 있지만 트랜잭셔성 처리도 지원이 가능합니다.


  - 대량 데이터분석 처리지원에 적합

    > 대량 데이터 분석 및 처리를 위해 사용되는 Hadoop의 산하 프로젝트로 시작된 데이터베이스로 HDFS 및 MapReduce등과 함께 사용하기에

      최적화 되어 있습니다. MapReduce를 지원하는 다른 데이터베이스도 있지만 별도로 개발되었기 때문에 HBase처럼 HDFS를 사용하며 

      MapReduce의 기능을 적합하게 사용하는 예는 없습니다.


      대량 데이터를 분삭하여 의미 있는 값을 만드는 데 있어 널리 사용되고 있는 MapReduce와 함께 효율적으로 이용할 수 있다는 것이 큰 

      장점 입니다.


3.3 특징과 사용 케이스

3.3.1 특징

  - 컬럼형 NoSQL 데이터베이스로기본 단위는 컬럼입니다. 여러 컬럼이 Row Key에 할당되고 이러한 Row key가 모여 테이블을 이룹니다.

    테이블 내의 Row key는 정렬되어 저장되며 해당 데이터베이스 내에서단일한 값을 가져 index와 비슷한 역할을 수행하게 됩니다.


    컬럼이 모여 Column family를 이룹니다. Column family 내의 모든 컬럼은 동일한 스토리지 파일에저장되고 데이터 압축 등 성능 개선을 위한 튜닝은

    Column family단위로 이루어 집니다. Column family내의 컬럼수에 대한제한은 없으며, 컬럼 값의 데이터 타입이나 길이에대한 제약도 없습니다. 앞서

    이야기한 것처럼 컬럼 단위로 디스크에 저장하기 때문에 행중심 데이터베이스에 비해 동일한 데이터라도 사용하는 디스크가 적습니다.


    데이터가업데이트되면 우선 commit log에 해당 내용을 저장하고 다음으로 HBase에서 사용하고 있는 메모리 상의데이터베이스(memstore)에 데이터를

    저장합니다. 이 때 commit log는 여러 무리적인 서버에 복제되기 때문에 변경된 데이터가 사라질 확률이 낮습니다. memstroe의 데이터가 미리 지정한

    크기를 넘어서면 디스크에 저장되며 저장 된 데이터에 대한 commit log는 삭제됩니다.


    분산 구성시 Master-Region 구조를 이룹니다. Region은 분산을 이루고있는기본 단위로, 연속한 row데이터를 가지고 있습니다. 구성파일에 정의해둔

    maximum size 값을 초과하면 자동으로 해당 region에서관리하고 있는 데이터의 절반을 key값을 기준으로 새 region에 분배합니다.

    참고로 현재 하나의 물리적인 서버에서 관리하는 region은 10~1000개, region 당 데이터는 1~2GB를 권고 하고 있습니다.


    HBase에서 Region의 정보를 관리하는 Master(HMaster)를 별도로 두고 있습니다. 데이터에 대한 읽기나 쓰기 요청이 발생하면 Master에서 어느 region에서

    해당 Rwo key를 관리하는지에 대한 기초 정보를 제공해 줍니다. Maste는 Region에 할당된 Row key값을 재분배 해줍니다. 장애를 예방하기 위해 Master는

    여러 대로 구성할 수 있습니다.


3.3.2 장점

  - HBase의 가장 큰 장점은 대량의데이터를 분산된 환경에서관리함녀서도 데이터일관성을 보장해 준다는 점입니다. 대량 데이터를 다루면서 일관성이 필요한

    환경에서 일관성이 완벽하게 보장되지 않는 데이터베이스를 사용한다면 프로그램 코드를 통해 데이터의 일관성을 보장해야 하므로 코딩의 복잡도가 크게

    올라가게 될것이다. HBase에서는 데이터의 일관성 보장에 초점을 맞추고 있으므로 이러한 경우에는 HBase를 사용함으로써 수고를 많이 줄일 수 있을것이다.


  - 데이터를 효율적으로 압축 할 수 있습니다. 행 기반에 비해 컬럼 기반으로 데이터를 저장하는 것이 데이터 압축을 더 효율적으로 할 수 있습니다. 일반적으로

    사용되는 행 기반으로 데이터를 입력하는 경우, 행에서 가지고 있는여러 컬럼 값은 서로 다른 데이터 타입의 차이가 큰 값일 가능성이 높습니다. 하지만

    가지고 있는 여러 컬럼 값은 서로다른 데이터 타입의 차이가 튼 값일 가능성이 높습니다. 하지만 컬럼 기반의 경우컬럼을 기준으로 데이터가 함께 저장되기

    때문에 근접 데이터 사이의 값의 차이가 크지 않아행 기반에 비해 데이터 압축률이 높습니다. 따라서 대량 데이터를 보다 경제적으로 관리할 수 있고, 대량

    조회가 발생할 경우 압축된 데이터를 가져오기 때문에 bandwidth 측면에서도 득을 볼 수 있습니다.


  - 이전 버전의 데이터 값도 관리가가능하다는 것도 장점 입니다.각기 다른 버전의 값을 통해 변경 빈도 등의데이트럴 분석 할 수 있습니다. 어느 버전까지 데이터를

    유지 할 것인지는 설정 파일을 통해 지정할 수 있브니다. 지난 버전 데이터를 통한 통계나 변경내용에 대한 분석도 가능합니다.


  - 한 행에 대한 Atomic한 처리가 가능합니다. 즉, 단일 행에 대해서는 트랜잭션성 처리가 가능하다는 장점을 가지고 있습니다. 대량 데이터를 다루면서 트랜잭션성

    처리가 필요할 경우 매우 요긴한 기능입니다. 또한 웹 콘솔을 통해 관리 및 모니터링 할 수 있는 기능을 제공하고 있습니다.


3.3.3 단점

  - 다수의 프로그램으로 이루어진 데이터베이스로다른 NoSQL 데이터베이스에 비해 이해하기가 복잡합니다. 효율적으로 관리하기 위해서는 HDFS, Zookeeper등 HBase뿐만

    아니라 다른 시스템에 대해서도 알아두어야 합니다. 단일 구조에 비해 설치 및 운영 시 시스템들의 연계로 인한 문제가 발생할 가능성이 높습니다. 뿐만 아니라 아직

    생소한 컬럼형 구조를 사용하고 있어 조기 진입에 벽이 높습니다.


  - 특정 범위의 key 값에 저장 요청이 집중되는 경우에도 문제가 발생할 수 있습니다.

    Region별로 저장되는 데이터는 Row key값에 따라 정해집니다. 즉, 일정 범위의 Row key가 Region에 함께 저장되는 구조로, 연속된 Row key를 가진 요청이 들어올 경우

    모든요청이 한두 Region에 집중되어응답 속도가 느려지는 등의 문제가 생길 수 있습니다.


  - HDFS를 파일시스템으로사용하기 때문에 HDFS의 파일 정보를 관리하는 Namenode에서 장애가 발생하거나, Namenode가 구동되어 있는 서버가 다운될 경우 HBase에도 문제가

    생기게 됩니다. 아직 Namenode는 이중화솔류션을 완벽하게 제공하지 않기때문에 전체 HDFS에서 Namenode는 하나뿐입니다. 따라서 Namenode가 중단되면 전체 서비스 중단이

    발생하게 됩니다.


  - Cassandra와 마찬가지로 현재 0.9.4로 아직 버전 1이 나오지 않은 안정적이지 않은 시스템입니다.

    신규 버전이 기존 버전에서 많이 변경되어 불편이 생길수도 있습니다.


3.3.4 도입사례

  - 최근 Facebook에서 데이터 일관성 보장을 이유를 들어 MySQL을대신하는 주 데이터베이스로 도입하기도 하였습니다.

    > Facebook

    > eBay

    > WorldLingo

  이외에도 Adobe 등에서 분석등의 용도로 HBase를 사용 하고 있습니다.


3.3.5 사용 케이스

  - 대량 데이터를 다루면서 데이터 일관성이 요구되는 서비스에서사용하는 것을 권장하고 있습니다. 또한 hadoop을 사용하여 대량 데이터를 분석하는 서비스의 대용량

    데이터베이스로 사용하는 경우도 많습니다.

    > 대량 데이터를 관리하는 사이트 중에서도 쓰기보다는 읽기 요청이 많은 사이트에 적합

    > 대량 데이터를 관리하면서 데이터 일관성 및 트랜잭션성 처리가 필요한 사이트

    > Hadoop을 사용하여 대량 데이터를 분석해야 하는 경우

  

  - HBase에서는 적어도 5대 이상의 서버에서 수백만행 이상의 데이터를 다루는데 사용 할 것을 권고 하고 있습니다.

    대량 데이터 중에서도 동시에 다수의 쓰기가 발생하는 성격의 업무보다는 DW성 데이터 처리에 적합하다고 합니다.


4.1 구체적인 이용 예

4.1.1 대형 SNS서비스의 주 스토리지

  - 대규모 SNS 서비스의 주 스토리지로 사용하는 것도 좋을것입니다. 이미 Facebook에서 주 스토리지로 도입하여 사용하고 있습니다.


  - 대량의 쓰기/읽기 요청

    > Twitter나 Faceboo, 카카오톡에서 제공하는 주 서비스를 생각해 보면 수천만 사용자가 실시간으로 데이터를 입력하고 검색하는 요청이

      계속해서 들어오게 됩니다. 하지만 데이터의 구조는 매우 간단하며 사용자와 키워드 검색이 주를 이룹니다. 새로 업데이트된 데이터에 대한

      읽기 요청이 계속해서 발생하기 때문에 데이터 일관성은 보장되어야 하며 쓰기 성능뿐아니라 검색 성능도 매우 중요합니다.


  - 관계형 데이터베이스를 사용한 운용

    > 수백,수천만의데이터 쓰기가 계속해서 요청되는 상황에서는 계속해서 Lock이 발생하여 데이터 읽기와 쓰기 모두 적합한 성능을 보이기 어려울

      뿐더러 관계형 데이터베이스를 이용해서 데이터의 급속한 증가를 관리하는 데는한계가 있습니다. 또한 이러한 대량 데이터를 조회하여 대량의 

      결과가 나와야 하는 경우, 분산에 한계가 있는 관계형 데이터베이스에서는 소수의 서버의 적은 자원으로 대량 요청을 처리해야 하므로 속도와

      성능이 좋지 못하고, 다른 요청을 처리하기도 어려울 것으로 보입니다.


  - HBase를 사용한 운용

    > 다수의 저가 서버(PC)를 분산해서 사용할 수 있는 HBase를 통해 관계형 데이터베이스에서 나타나는 이러한 이슈를 대부분 해결할 수 있습니다.

      테이블의 데이터 입력에 대한 Lock이 발생하지 않으며 데이터가 급속히 증가하더라도 단일 데이터 입력의 비용이 저렴할 뿐 아니라 많은 수의

      서버로 분산되어 부담을 줄일 수 있습니다. 데이터의 일관성이 실시간으로 필요하며 대량 데이터를 다룬다면 HBase를 도입해서 사용하는 것이

      좋을 것입니다.



저작자 표시
신고
현재 0 개의 댓글이 있습니다.
Comment

Blog

[펌] 커버링인덱스

2016.04.24 23:44 DataBase/MySQL


본문 : http://gywn.net/2012/04/mysql-covering-index/


MySQL에서 커버링 인덱스로 쿼리 성능을 높여보자!!

안녕하세요.  오늘 짧지만 재미있는 내용을 하나 공유할까 합니다.

커버링 인덱스(Covering Index)라는 내용인데, 대용량 데이터 처리 시 적절하게 커버링 인덱스를 활용하여 쿼리를 작성하면 성능을 상당 부분 높일 수 있습니다.

커버링 인덱스란?

커버링 인덱스란 원하는 데이터를 인덱스에서만 추출할 수 있는 인덱스를 의미합니다. B-Tree 스캔만으로 원하는 데이터를 가져올 수 있으며, 칼럼을 읽기 위해 굳이 데이터 블록을 보지 않아도 됩니다.

인덱스는 행 전체 크기보다 훨씬 작으며, 인덱스 값에 따라 정렬이 되기 때문에 Sequential Read 접근할 수 있기 때문에, 커버링 인덱스를 사용하면 결과적으로 쿼리 성능을 비약적으로 올릴 수 있습니다.

백문이 불여일견! 아래 테스트를 보시죠.

테이블 생성

먼저 다음과 같이 테이블을 생성합니다.

create table usertest (
 userno int(11) not null auto_increment,
 userid varchar(20) not null default '',
 nickname varchar(20) not null default '',
 .. 중략 ..
 chgdate varchar(15) not null default '',
 primary key (userno),
 key chgdate (chgdate)
) engine=innodb;

약 1,000만 건 데이터를 무작위로 넣고 몇가지 테스트를 해봅니다.

커버링 인덱스(SELECT)

select chgdate , userno
from usertest
limit 100000, 100
************* 1. row *************
           id: 1
  select_type: SIMPLE
        table: usertest
         type: index
possible_keys: NULL
          key: CHGDATE
      key_len: 47
          ref: NULL
         rows: 9228802
        Extra: Using index
1 row in set (0.00 sec)

쿼리 실행 계획의 Extra 필드에 “Using Index” 결과를 볼 수 있는데, 이는 인덱스만으로 원하는 데이터 추출을 하였음을 알 수 있습니다.

이처럼 데이터 추출을 인덱스에서만 수행하는 것을 커버링 인덱스라고 합니다. 아시겠죠? ^^

그렇다면 일반 쿼리와 성능 테스트를 해볼까요?

커버링 인덱스(WHERE)

1) 일반 쿼리

select *
from usertest
where chgdate like '2010%'
limit 100000, 100

쿼리 수행 속도는 30.37초이며, 쿼리 실행 계획은 다음과 같습니다.

************* 1. row *************
           id: 1
  select_type: SIMPLE
        table: usertest
         type: range
possible_keys: CHGDATE
          key: CHGDATE
      key_len: 47
          ref: NULL
         rows: 4352950
        Extra: Using where

Extra 항목에서 “Using where” 내용은, Range 검색 이후 데이터는 직접 데이터 필드에 접근하여 추출한 것으로 보면 됩니다.

2) 커버링 인덱스 쿼리

select a.*
from (
      select userno
      from usertest
      where chgdate like '2012%'
      limit 100000, 100
) b join usertest a on b.userno = a.userno

쿼리 수행 시간은 0.16초이며 실행 계획은 다음과 같습니다.

************* 1. row *************
           id: 1
  select_type: PRIMARY
        table:
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 100
        Extra:
************* 2. row *************
           id: 1
  select_type: PRIMARY
        table: a
         type: eq_ref
possible_keys: PRIMARY
          key: PRIMARY
      key_len: 4
          ref: b.userno
         rows: 1
        Extra:
************* 3. row *************
           id: 2
  select_type: DERIVED
        table: usertest
         type: range
possible_keys: CHGDATE
          key: CHGDATE
      key_len: 47
          ref: NULL
         rows: 4352950
        Extra: Using where; Using index

Extra 에서 “Using Index”를 확인할 수 있습니다.

그렇다면 30초 넘게 수행되는 쿼리가 0.16초로 단축됐습니다. 왜 이렇게 큰 차이가 발생했을까요?

첫 번째 쿼리는 Where에서 부분 처리된 결과 셋을 Limit 구문에서 일정 범위를 추출하고, 추출된 값을 데이터 블록에 접근하여 원하는 필드를 가져오기 때문에 수행 속도가 느립니다.

두 번째 쿼리에서도 동일하게 Where에서 부분 처리된 결과 셋이 Limit 구문에서 일정 범위 추출되나, 정작 필요한 값은 테이블의 Primary Key인 userno 값입니다. InnoDB에서 모든 인덱스 Value에는 Primary Key를 값으로 가지기 때문에, 결과적으로 인덱스 접근만으로 원하는 데이터를 가져올 수 있게 됩니다. 최종적으로 조회할 데이터 추출을 위해서 데이터 블록에 접근하는 건 수는 서브 쿼리 안에 있는 결과 갯수, 즉 100건이기 때문에 첫 번째 쿼리 대비 월등하게 좋은 성능이 나온 것입니다.

커버링 인덱스(ORDER BY)

커버링 인덱스를 잘 사용하면 Full Scan 또한 방지할 수 있습니다. 대부분 RDBMS에는 테이블에 대한 통계 정보가 있고, 통계 정보를 활용해서 쿼리 실행을 최적화 합니다.

다음 재미있는 테스트 결과를 보여드리겠습니다. 전체 테이블에서 chgdate 역순으로 400000번째 데이터부터 10 건만 가져오는 쿼리입니다.

1) 일반 쿼리

select *
from usertest
order by chgdate
limit 400000, 100
************* 1. row *************
           id: 1
  select_type: SIMPLE
        table: usertest
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 9228802
        Extra: Using filesort
1 row in set (0.00 sec)

분명 인덱스가 있음에도, Full Scan 및 File Sorting이 발생합니다. 인덱스를 태웠을 때 인덱스 블록을 읽어들이면서 발생하는 비용보다 단순 Full Scan이 더 빠르다고 통계 정보로부터 판단했기 때문이죠. 인덱스도 데이터라는 것은 항상 기억하고 있어야 합니다^^

결과 시간은 책정 불가입니다. (안끝나요~!)

2) 커버링 인덱스 쿼리

위 결과와 다르게 커버링 인덱스는 조금 더 재미있는 결과를 보여줍니다.

select a.*
from (
      select userno
      from usertest
      order by chgdate
      limit 400000, 100
) b join usertest a on b.userno = a.userno
************* 1. row *************
           id: 1
  select_type: PRIMARY
        table:
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 100
        Extra:
************* 2. row *************
           id: 1
  select_type: PRIMARY
        table: a
         type: eq_ref
possible_keys: PRIMARY
          key: PRIMARY
      key_len: 4
          ref: b.userno
         rows: 1
        Extra:
************* 3. row *************
           id: 2
  select_type: DERIVED
        table: usertest
         type: index
possible_keys: NULL
          key: CHGDATE
      key_len: 47
          ref: NULL
         rows: 400100
        Extra: Using index

File Sorting이 발생하지 않고 커버링 인덱스가 사용되었으며, 실행 시간 또한 0.24초로 빠르게 나왔습니다.^^

Conclusion

커버링 인덱스는 InnoDB와 같이 인덱스와 데이터 모두 메모리에 올라와 있는 경우에 유용하게 쓰일 수 있습니다. 물론 커버링 인덱스가 좋기는 하지만, 커버링 인덱스를 사용하기 위해 사용하지 않는 인덱스를 주구장창 만드는 것은 최대한 피해야 하겠죠^^

잊지마세요. 인덱스도 데이터라는 사실을..


저작자 표시
신고

'DataBase > MySQL' 카테고리의 다른 글

MySQL 정규식으로 치환 함수  (0) 2017.02.02
UNIXTIME 관련 함수  (0) 2017.02.02
[펌] 커버링인덱스  (0) 2016.04.24
[링크] MySQL에서 사용하는 Lock 이해  (0) 2015.09.22
MySQL Split - 문자열 자름 처리.  (0) 2015.09.21
참조키 강제 해제  (0) 2015.06.03
현재 0 개의 댓글이 있습니다.
Comment

Blog

OPENQUERY 를 이용한 INSERT/SELECT/UPDATE

2016.01.12 18:54 DataBase/MS-SQL



INSERT INTO OPENQUERY([LINKED SERVER], '  SELECT [COLUMNS] FROM [TABLE]')
VALUES ~ SELECT [ '이건 입맛대로~' ]

* INSERT, UPDATE, DELETE, SELECT 모두 OPENQUERY(연결된 서버, 'SQL문자열') 로
동일합니다.

저작자 표시
신고
현재 0 개의 댓글이 있습니다.
Comment

Blog

excel linked server 메시지 7303, 수준 16, 상태 1, 줄 31

2016.01.12 18:46 DataBase/MS-SQL


출처 : http://sqlsql.tistory.com/391



64bit sql server 에 excel 2013을 링크드 서버나 직접쿼리를 할 때 

일단 드라이버를 깔아야 한다. http://www.microsoft.com/en-us/download/details.aspx?id=13255


그런 후, 드라이버의 inprocess 설정을 한다. 

USE [master]

GO

EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'AllowInProcess' , 1

GO

EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'DynamicParameters' , 1

GO


계정설정 

혹시 NT Service\MSSQL$SQL2012 이런식으로 되어 있으면 -> 로컬시스템으로 바꾼다. ㅠ.,ㅠ

아니면 해당 폴더에 위 계정이 액세스 가능하게 하면 될 듯 하다. appdata\local\temp 역시 권한이 필요한듯 

이런거 다 귀찮으면 로컬 시스템으로 변경~


NT Service\MSSQL$SQL2012 였을때 에러 메시지 

연결된 서버 "(null)"의 OLE DB 공급자 "Microsoft.ACE.OLEDB.12.0"이(가) 메시지 "지정되지 않은 오류입니다."을(를) 반환했습니다.

메시지 7303, 수준 16, 상태 1, 줄 31

연결된 서버 "(null)"에 대한 OLE DB 공급자 "Microsoft.ACE.OLEDB.12.0"의 데이터 원본 개체를 초기화할 수 없습니다.


링크드 서버 연결 명령어 

/****** Object:  LinkedServer [bb]    Script Date: 2015-04-23 오전 11:08:34 ******/

EXEC master.dbo.sp_addlinkedserver @server = N'bb', @srvproduct=N'ACE', @provider=N'Microsoft.ACE.OLEDB.12.0', @datasrc=N'c:\sqltag\Book1.xlsx', @provstr=N'Excel 12.0; HDR=Yes'

 /* For security reasons the linked server remote logins password is changed with ######## */

EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'bb',@useself=N'True',@locallogin=NULL,@rmtuser=NULL,@rmtpassword=NULL

GO


인프로세스 쿼리 방법 

SELECT * FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0', 'Data Source=c:\sqltag\Book1.xlsx;Extended Properties=Excel 12.0')...[Sheet1$]


SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0; HDR=YES; IMEX=1; Database=F:\cmdb\fault티켓\Book1.xlsx', 'SELECT * FROM [Sheet1$]')


SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0; 

HDR=YES; IMEX=1; Database=\\127.0.0.1\f$\cmdb\fault티켓\FQ261_2011.xlsx', 'SELECT * FROM [sheet1$]')


SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0; 
HDR=NO; IMEX=1; Database=c:\sqltag\Book1.xlsx', 'SELECT * FROM [Sheet1$]')

SELECT * FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0', 'Data Source=\\127.0.0.1\c$\sqltag\Book1.xlsx;Extended Properties=EXCEL 12.0')...[Sheet1$] ;


-- 읽어보기 귀찮다.

-- 스타트 계정 로컬시스템으로 변경 후
exec sp_configure 'Ad Hoc Distributed Queries', 1
reconfigure with override

USE [master]
GO
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'AllowInProcess' , 1
GO
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'DynamicParameters' , 1
GO

SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0; HDR=YES; IMEX=1; Database=C:\event\faultPrco_2010q1.xls', 'SELECT * FROM [data$]')

저작자 표시
신고
현재 0 개의 댓글이 있습니다.
Comment

Blog

MSSQL 메시지 7347 - 예상 데이터 길이와 일치하지 않는 데이터를 반환했습니다.

2016.01.12 18:44 DataBase/MS-SQL


메시지 7347, 수준 16

LINKED SERVER (연결된 서버) 를 통하여 쿼리시 (OPENROWSET, OPENQUERY)


오라클이나 MySQL 에서  "예상 데이터 길이와 일치하지 않는 데이터를 반환했습니다." 라는

메세지는 지금까지의 경험(짧은^^;;) 으로는 숫자형의 데이터를 문자형으로 전환하면

되었던 것 같다.

저작자 표시
신고
현재 0 개의 댓글이 있습니다.
Comment

Blog

[링크] MySQL에서 사용하는 Lock 이해

2015.09.22 17:21 DataBase/MySQL


참 깔끔하게 포스팅 되어 있습니다. 블로그도 깔끔하구요~

http://blog.saltfactory.net/database/introduce-mysql-lock.html

저작자 표시
신고

'DataBase > MySQL' 카테고리의 다른 글

UNIXTIME 관련 함수  (0) 2017.02.02
[펌] 커버링인덱스  (0) 2016.04.24
[링크] MySQL에서 사용하는 Lock 이해  (0) 2015.09.22
MySQL Split - 문자열 자름 처리.  (0) 2015.09.21
참조키 강제 해제  (0) 2015.06.03
참조키 선언시 에러  (0) 2014.11.26
현재 0 개의 댓글이 있습니다.
Comment

Blog

MySQL Split - 문자열 자름 처리.

2015.09.21 19:21 DataBase/MySQL


MySQL 에도 split 이 있다.

SUBSTRING_INDEX


1. 대상 예제 쿼리 및 결과


SELECT *
FROM (
	SELECT
		1                        AS seq,
		'Welcome To JKUN.NET|^^' AS message
	UNION ALL
	SELECT
		2                        AS seq,
		'Welcome To JKUN.NET|^^' AS message
	UNION ALL
	SELECT
		3 AS seq,
		'Welcome To JKUN.NET|^^' AS message
) AS EX;



2. SUBSTRING_INDEX 적용 쿼리 및 결과


SELECT 
	seq,
	message,
	SUBSTRING_INDEX(message, '|', 1) as first,
	SUBSTRING_INDEX(message, '|', -1) as second
FROM (
	SELECT
		*
	FROM (
		     SELECT
			     1                        AS seq,
			     'Welcome To JKUN.NET|^^' AS message
		     UNION ALL
		     SELECT
			     2                        AS seq,
			     'Welcome To JKUN.NET|^^' AS message
		     UNION ALL
		     SELECT
			     3                        AS seq,
			     'Welcome To JKUN.NET|^^' AS message
	     ) AS EX

) AS EX_SPLIT;



대단한건 아니지만 까먹으니 포스팅을 할 수밖에;;

저작자 표시
신고

'DataBase > MySQL' 카테고리의 다른 글

[펌] 커버링인덱스  (0) 2016.04.24
[링크] MySQL에서 사용하는 Lock 이해  (0) 2015.09.22
MySQL Split - 문자열 자름 처리.  (0) 2015.09.21
참조키 강제 해제  (0) 2015.06.03
참조키 선언시 에러  (0) 2014.11.26
우분투에서 mysql 삭제 후 재설치  (0) 2014.11.26
현재 0 개의 댓글이 있습니다.
Comment

Blog

참조키 강제 해제

2015.06.03 22:33 DataBase/MySQL


후;; 데이터베이스 스키마 일괄생성 스크립트를 모르고 mysql 데이터베이스에 돌렸다;;

아;;;;; 했는데

지우는게 있드만;;

#관계 체크 해제
SET foreign_key_checks = 0;

#관계 체크 설정
SET foreign_key_checks = 1;


저작자 표시
신고
현재 0 개의 댓글이 있습니다.
Comment

Blog

참조키 선언시 에러

2014.11.26 11:15 DataBase/MySQL


ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)


참조키를 생성하는데 위와 같은 에러가 발생한다.

확인한 바 발생한 이유는 


테이블 생성시 참조하는 원본 테이블에는 INT UNSIGNED 가 되있는데

참조하는 테이블에서는 그냥 INT 가 되있었다. 해서 다시 수정하니 정상적으로 작동을 했는데,

구글링을 하다보니 깔끔하게 포스팅 해주신 분이 있어 링크 올립니다.^^


http://opentutorials.org/module/894/6653


어?? 오픈튜토리얼이네? ㅎㅎㅎ

저작자 표시
신고

'DataBase > MySQL' 카테고리의 다른 글

MySQL Split - 문자열 자름 처리.  (0) 2015.09.21
참조키 강제 해제  (0) 2015.06.03
참조키 선언시 에러  (0) 2014.11.26
우분투에서 mysql 삭제 후 재설치  (0) 2014.11.26
MySQL Stored Procedure (저장프로시저)  (2) 2014.03.28
임시테이블 - Temproray Table  (0) 2014.03.26
현재 0 개의 댓글이 있습니다.
Comment

Blog

우분투에서 mysql 삭제 후 재설치

2014.11.26 11:12 DataBase/MySQL


apt-get purge mysql-server
apt-get purge mysql-common
rm -rf /var/log/mysql
rm -rf /var/log/mysql.*
rm -rf /var/lib/mysql
rm -rf /etc/mysql
# and then:
apt-get install mysql-server --fix-missing --fix-broken

출처 : http://ykcho.tistory.com/20

저작자 표시
신고

'DataBase > MySQL' 카테고리의 다른 글

참조키 강제 해제  (0) 2015.06.03
참조키 선언시 에러  (0) 2014.11.26
우분투에서 mysql 삭제 후 재설치  (0) 2014.11.26
MySQL Stored Procedure (저장프로시저)  (2) 2014.03.28
임시테이블 - Temproray Table  (0) 2014.03.26
MySQL 에러처리  (0) 2014.03.26
현재 0 개의 댓글이 있습니다.
Comment

Blog

MySQL Stored Procedure (저장프로시저)

2014.03.28 12:41 DataBase/MySQL


MySQL 저장프로시저

내가 익숙치 않거나 못해서 그런걸수도 있지만 정말로 쓰다보니.. 많이 부족함과 불편함이 이만 저만이 아니다.

그리고 너무 많은 구글링 필요하다;;

MySQL 저장프로시저를 만들고 사용하다 보면 MS-SQL Server 와 오라클의 저장프로시저가 너무나 그리워

진다. 역시.. 돈들여서 안좋은건 없다고.. 다시한번 또..새삼스럽게..ㅎㅎ

일단 샘플로 간단하게 MySQL 저장프로시저 올린다.



DELIMITER $$

DROP PROCEDURE IF EXISTS SP_EMP_DPT_UPDATE $$
CREATE PROCEDURE SP_EMP_DPT_UPDATE(
	IN_UNION_QUERY_TEXT VARCHAR(1500),
	IN_EMP_NO INT,
	OUT OUT_RETURN_VALUE TINYINT
)
BEGIN
	DECLARE INSERT_QUERY_STRING VARCHAR(1500);
	DECLARE CATCH_ERROR TINYINT;	
	DECLARE EXIT HANDLER FOR SQLEXCEPTION SET CATCH_ERROR = -1;

	SET AUTOCOMMIT = 0;
	SET SQL_SAFE_UPDATES = 0;

	START TRANSACTION;

	DROP TEMPORARY TABLE IF EXISTS TEMP_MEMBER_EMP_DPT;
	CREATE TEMPORARY TABLE TEMP_MEMBER_EMP_DPT (
		EMP_DPT_NO INT,
		EMP_NO INT,
		DPT_NAME VARCHAR(100),
		DPT_AUTH TINYINT
	) engine = memory;

	SET @INSERT_QUERY_STRING = CONCAT("INSERT INTO TEMP_MEMBER_EMP_DPT (EMP_DPT_NO, EMP_NO, DPT_NAME, DPT_AUTH) ", IN_UNION_QUERY_TEXT);

	PREPARE STMT FROM @INSERT_QUERY_STRING;	
	EXECUTE STMT;
	DEALLOCATE PREPARE STMT;	

	UPDATE MEMBER_EMP_DPT AS A INNER JOIN TEMP_MEMBER_EMP_DPT AS B
		ON A.EMP_DPT_NO = B.EMP_DPT_NO
	SET A.DPT_NAME = B.DPT_NAME
	WHERE A.EMP_NO = IN_EMP_NO;

	INSERT INTO MEMBER_EMP_DPT (EMP_NO, DPT_NAME, DPT_AUTH)
	SELECT EMP_NO, DPT_NAME, DPT_AUTH
		FROM TEMP_MEMBER_EMP_DPT
	WHERE EMP_DPT_NO NOT IN (SELECT DISTINCT EMP_DPT_NO
							 FROM MEMBER_EMP_DPT
							 WHERE EMP_NO = IN_EMP_NO)
		AND EMP_NO = IN_EMP_NO;

	IF CATCH_ERROR < 0 THEN
		ROLLBACK;
		SET OUT_RETURN_VALUE = 0;
	ELSE
		COMMIT;
		SET OUT_RETURN_VALUE = 1;
	END IF;


	DROP TEMPORARY TABLE IF EXISTS TEMP_MEMBER_EMP_DPT;
	
	SELECT OUT_RETURN_VALUE;
END$$

#DELIMITER ;
저작자 표시
신고

'DataBase > MySQL' 카테고리의 다른 글

참조키 선언시 에러  (0) 2014.11.26
우분투에서 mysql 삭제 후 재설치  (0) 2014.11.26
MySQL Stored Procedure (저장프로시저)  (2) 2014.03.28
임시테이블 - Temproray Table  (0) 2014.03.26
MySQL 에러처리  (0) 2014.03.26
저장 프로시저 관련 포스팅  (0) 2014.03.26
현재 2 개의 댓글이 있습니다.

자바맨 2014.06.18 00:52 신고

감사합니다. 여태껏 mysql sp 땜시 개고생중이었어요.
잘 배우고 갑니다.^^


Comment

Blog

임시테이블 - Temproray Table

2014.03.26 15:14 DataBase/MySQL


참고링크

MySQL에서 Temporary Table을 활용한 데이터 질의..그 효과는?

java + temporary table. 임시테이블 사용하기. MYSQL


CREATE TEMPORARY TABLE IF NOT EXISTS TEMP_TABLE (

       ID BIGINT(20) NOT NULL 

)

저작자 표시
신고
현재 0 개의 댓글이 있습니다.
Comment

Blog

MySQL 에러처리

2014.03.26 15:09 DataBase/MySQL


임의의 호스트 언어로 MySQL 를 호출했을 때에 발생할 가능성이 있는 에러 코드의 리스트를 이하에 나타냅니다.

이름에러 코드의 열은 ,MySQL 원시 코드 파일 include/mysqld_error.h 의 정의에 대응합니다.

SQLSTATE 의 열은 ,MySQL 원시 코드 파일 include/sql_state.h 의 정의에 대응합니다.

SQLSTATE 에러 코드는 ,MySQL 버젼 4.1 을 사용하는 경우에게만 표시됩니다. SQLSTATE (은)는 ,X/Open/ANSI/ODBC 의 동작과 호환성을 갖게하기 위해서(때문에) 추가되었습니다.

각 에러 코드에 대한 설명 텍스트는 , 에러 메세지 파일 share/english/errmsg.sys 에 기술되고 있습니다.

갱신은 빈번하게 행해지므로 , 상기의 소스에 에러 코드가 추가될 가능성이 있습니다.

  • Error: 1000 SQLSTATE: HY000 (ER_HASHCHK)

    Message: hashchk

  • Error: 1001 SQLSTATE: HY000 (ER_NISAMCHK)

    Message: isamchk

  • Error: 1002 SQLSTATE: HY000 (ER_NO)

    Message: NO

  • Error: 1003 SQLSTATE: HY000 (ER_YES)

    Message: YES

  • Error: 1004 SQLSTATE: HY000 (ER_CANT_CREATE_FILE)

    Message: '%s' 파일을 만들 수 없습니다 (errno: %d)

  • Error: 1005 SQLSTATE: HY000 (ER_CANT_CREATE_TABLE)

    Message: '%s' 테이블을 만들 수 없습니다.(errno: %d)

  • Error: 1006 SQLSTATE: HY000 (ER_CANT_CREATE_DB)

    Message: '%s' 데이타베이스를 만들 수 없습니다 (errno: %d)

  • Error: 1007 SQLSTATE: HY000 (ER_DB_CREATE_EXISTS)

    Message: '%s' 데이타베이스를 만들 수 없습니다.이미 그 데이타베이스가 존재하는

  • Error: 1008 SQLSTATE: HY000 (ER_DB_DROP_EXISTS)

    Message: '%s' 데이타베이스를 파기할 수 없습니다. 그 데이타베이스가 없습니다.

  • Error: 1009 SQLSTATE: HY000 (ER_DB_DROP_DELETE)

    Message: 데이타베이스 파기 에러 ('%s' 를 삭제할 수 없습니다, errno: %d)

  • Error: 1010 SQLSTATE: HY000 (ER_DB_DROP_RMDIR)

    Message: 데이타베이스 파기 에러 ('%s' 를 rmdir 할 수 없습니다, errno: %d)

  • Error: 1011 SQLSTATE: HY000 (ER_CANT_DELETE_FILE)

    Message: '%s' 의 삭제가 에러 (errno: %d)

  • Error: 1012 SQLSTATE: HY000 (ER_CANT_FIND_SYSTEM_REC)

    Message: system table 의 레코드를 읽을 수가 없었습니다

  • Error: 1013 SQLSTATE: HY000 (ER_CANT_GET_STAT)

    Message: '%s' 의 스테이타스를 얻을 수 없습니다. (errno: %d)

  • Error: 1014 SQLSTATE: HY000 (ER_CANT_GET_WD)

    Message: working directory 를 얻을 수가 없었습니다 (errno: %d)

  • Error: 1015 SQLSTATE: HY000 (ER_CANT_LOCK)

    Message: 파일을 잠글 수 없습니다 (errno: %d)

  • Error: 1016 SQLSTATE: HY000 (ER_CANT_OPEN_FILE)

    Message: '%s' 파일을 열 수가 없습니다 (errno: %d)

  • Error: 1017 SQLSTATE: HY000 (ER_FILE_NOT_FOUND)

    Message: '%s' 파일을 찾아낼 수가 없습니다.(errno: %d)

  • Error: 1018 SQLSTATE: HY000 (ER_CANT_READ_DIR)

    Message: '%s' 디렉토리를 읽을 수 없습니다.(errno: %d)

  • Error: 1019 SQLSTATE: HY000 (ER_CANT_SET_WD)

    Message: '%s' 디렉토리에 chdir 할 수 없습니다.(errno: %d)

  • Error: 1020 SQLSTATE: HY000 (ER_CHECKREAD)

    Message: Record has changed since last read in table '%s'

  • Error: 1021 SQLSTATE: HY000 (ER_DISK_FULL)

    Message: Disk full (%s). 누군가가 무엇인가를 줄일 때까지 기다려 주세요...

  • Error: 1022 SQLSTATE: 23000 (ER_DUP_KEY)

    Message: table '%s' 에 key 가 중복 하고 있어 써 넣을 수 없습니다

  • Error: 1023 SQLSTATE: HY000 (ER_ERROR_ON_CLOSE)

    Message: Error on close of '%s' (errno: %d)

  • Error: 1024 SQLSTATE: HY000 (ER_ERROR_ON_READ)

    Message: '%s' 파일의 read error (errno: %d)

  • Error: 1025 SQLSTATE: HY000 (ER_ERROR_ON_RENAME)

    Message: '%s' 를 '%s' 에 rename 할 수 없습니다 (errno: %d)

  • Error: 1026 SQLSTATE: HY000 (ER_ERROR_ON_WRITE)

    Message: '%s' 파일을 쓸 수가 없습니다 (errno: %d)

  • Error: 1027 SQLSTATE: HY000 (ER_FILE_USED)

    Message: '%s' 는 락 되고 있습니다

  • Error: 1028 SQLSTATE: HY000 (ER_FILSORT_ABORT)

    Message: Sort 중단

  • Error: 1029 SQLSTATE: HY000 (ER_FORM_NOT_FOUND)

    Message: View '%s' 이 '%s' 에 정의되고 있지 않습니다

  • Error: 1030 SQLSTATE: HY000 (ER_GET_ERRNO)

    Message: Got error %d from table handler

  • Error: 1031 SQLSTATE: HY000 (ER_ILLEGAL_HA)

    Message: Table handler for '%s' doesn't have this option

  • Error: 1032 SQLSTATE: HY000 (ER_KEY_NOT_FOUND)

    Message: '%s'속 에 레코드가 발견되지 않습니다

  • Error: 1033 SQLSTATE: HY000 (ER_NOT_FORM_FILE)

    Message: 파일 '%s' 의 것 info 이 잘못되어 있는 것 같습니다

  • Error: 1034 SQLSTATE: HY000 (ER_NOT_KEYFILE)

    Message: '%s' 테이블의 것 key file 이 잘못되어 있는 것 같습니다. 수복을 해 주세요

  • Error: 1035 SQLSTATE: HY000 (ER_OLD_KEYFILE)

    Message: '%s' 테이블은 낡은 형식의 것 key file 의 같습니다; 수복을 해 주세요

  • Error: 1036 SQLSTATE: HY000 (ER_OPEN_AS_READONLY)

    Message: '%s' 는 읽기 전용입니다

  • Error: 1037 SQLSTATE: HY001 (ER_OUTOFMEMORY)

    Message: Out of memory. demon를 restart 해 보세요 (%d bytes 필요)

  • Error: 1038 SQLSTATE: HY001 (ER_OUT_OF_SORTMEMORY)

    Message: Out of sort memory. sort buffer size 가 부족한 것 같습니다.

  • Error: 1039 SQLSTATE: HY000 (ER_UNEXPECTED_EOF)

    Message: '%s' 파일을 읽어들여 안에 EOF 가 예기치 못한 곳에서 나타났던. (errno: %d)

  • Error: 1040 SQLSTATE: 08004 (ER_CON_COUNT_ERROR)

    Message: 접속이 너무 많은

  • Error: 1041 SQLSTATE: HY000 (ER_OUT_OF_RESOURCES)

    Message: Out of memory; mysqld 과소의 다른 프로세스가 메모리를 모두 사용하고 있든가 확인해 주세요. 메모리를 다 사용하지 않은 경우 ,'ulimit' 를 설정해 mysqld 의 메모리 사용 한계량을 많이 하는지 ,swap space 를 늘려 보세요

  • Error: 1042 SQLSTATE: 08S01 (ER_BAD_HOST_ERROR)

    Message: 그 address 의 hostname 가 파하지 않습니다.

  • Error: 1043 SQLSTATE: 08S01 (ER_HANDSHAKE_ERROR)

    Message: Bad handshake

  • Error: 1044 SQLSTATE: 42000 (ER_DBACCESS_DENIED_ERROR)

    Message: 유저 '%s'@'%s' 의 '%s' 데이타베이스에의 액세스를 거부하는

  • Error: 1045 SQLSTATE: 28000 (ER_ACCESS_DENIED_ERROR)

    Message: 유저 '%s'@'%s' 를 거부하는.uUsing password: %s)

  • Error: 1046 SQLSTATE: 3D000 (ER_NO_DB_ERROR)

    Message: 데이타베이스가 선택되고 있지 않습니다.

  • Error: 1047 SQLSTATE: 08S01 (ER_UNKNOWN_COM_ERROR)

    Message: 그 커멘드는 뭐야?

  • Error: 1048 SQLSTATE: 23000 (ER_BAD_NULL_ERROR)

    Message: Column '%s' (은)는 null 에는 할 수 없습니다

  • Error: 1049 SQLSTATE: 42000 (ER_BAD_DB_ERROR)

    Message: '%s' 는 데이타베이스는 모릅니다.

  • Error: 1050 SQLSTATE: 42S01 (ER_TABLE_EXISTS_ERROR)

    Message: Table '%s' 는 이미 있습니다

  • Error: 1051 SQLSTATE: 42S02 (ER_BAD_TABLE_ERROR)

    Message: table '%s' 는 없습니다.

  • Error: 1052 SQLSTATE: 23000 (ER_NON_UNIQ_ERROR)

    Message: Column: '%s' in %s is ambiguous

  • Error: 1053 SQLSTATE: 08S01 (ER_SERVER_SHUTDOWN)

    Message: Server 를 shutdown 안...

  • Error: 1054 SQLSTATE: 42S22 (ER_BAD_FIELD_ERROR)

    Message: '%s' column 은 '%s' 에는 없습니다.

  • Error: 1055 SQLSTATE: 42000 (ER_WRONG_FIELD_WITH_GROUP)

    Message: '%s' isn't in GROUP BY

  • Error: 1056 SQLSTATE: 42000 (ER_WRONG_GROUP_FIELD)

    Message: Can't group on '%s'

  • Error: 1057 SQLSTATE: 42000 (ER_WRONG_SUM_SELECT)

    Message: Statement has sum functions and columns in same statement

  • Error: 1058 SQLSTATE: 21S01 (ER_WRONG_VALUE_COUNT)

    Message: Column count doesn't match value count

  • Error: 1059 SQLSTATE: 42000 (ER_TOO_LONG_IDENT)

    Message: Identifier name '%s' 는 너무 깁니다

  • Error: 1060 SQLSTATE: 42S21 (ER_DUP_FIELDNAME)

    Message: '%s' 라고 하는 column 이름은 중복 하고 있습니다

  • Error: 1061 SQLSTATE: 42000 (ER_DUP_KEYNAME)

    Message: '%s' 라고 하는 key 의 이름은 중복 하고 있습니다

  • Error: 1062 SQLSTATE: 23000 (ER_DUP_ENTRY)

    Message: '%s' 는 key %d 에 두어 중복 하고 있는

  • Error: 1063 SQLSTATE: 42000 (ER_WRONG_FIELD_SPEC)

    Message: Incorrect column specifier for column '%s'

  • Error: 1064 SQLSTATE: 42000 (ER_PARSE_ERROR)

    Message: %s : '%s' 부근 : %d 행 눈

  • Error: 1065 SQLSTATE: HY000 (ER_EMPTY_QUERY)

    Message: Query 이 하늘입니다.

  • Error: 1066 SQLSTATE: 42000 (ER_NONUNIQ_TABLE)

    Message: '%s' 는 일의의 table/alias 이름이 아닙니다

  • Error: 1067 SQLSTATE: 42000 (ER_INVALID_DEFAULT)

    Message: Invalid default value for '%s'

  • Error: 1068 SQLSTATE: 42000 (ER_MULTIPLE_PRI_KEY)

    Message: 복수의 것 primary key 이 정의되었던

  • Error: 1069 SQLSTATE: 42000 (ER_TOO_MANY_KEYS)

    Message: key 의 지정이 너무 많습니다. key 는 최대 %d 까지 입니다

  • Error: 1070 SQLSTATE: 42000 (ER_TOO_MANY_KEY_PARTS)

    Message: Too many key parts specified; max %d parts allowed

  • Error: 1071 SQLSTATE: 42000 (ER_TOO_LONG_KEY)

    Message: key 가 너무 깁니다. key 의 길이는 최대 %d 입니다

  • Error: 1072 SQLSTATE: 42000 (ER_KEY_COLUMN_DOES_NOT_EXITS)

    Message: Key column '%s' 가 테이블에 없습니다.

  • Error: 1073 SQLSTATE: 42000 (ER_BLOB_USED_AS_KEY)

    Message: BLOB column '%s' can't be used in key specification with the used table type

  • Error: 1074 SQLSTATE: 42000 (ER_TOO_BIG_FIELDLENGTH)

    Message: column '%s' 는,확보하는 column 의 크기가 너무 많은. (최대 %d 까지). BLOB 를 대신에 사용해 주세요.

  • Error: 1075 SQLSTATE: 42000 (ER_WRONG_AUTO_KEY)

    Message: 테이블의 정의가 다른; there can be only one auto column and it must be defined as a key

  • Error: 1076 SQLSTATE: HY000 (ER_READY)

    Message: %s: 준비 완료

  • Error: 1077 SQLSTATE: HY000 (ER_NORMAL_SHUTDOWN)

    Message: %s: Normal shutdown

  • Error: 1078 SQLSTATE: HY000 (ER_GOT_SIGNAL)

    Message: %s: Got signal %d. 중단!

  • Error: 1079 SQLSTATE: HY000 (ER_SHUTDOWN_COMPLETE)

    Message: %s: Shutdown 완료

  • Error: 1080 SQLSTATE: 08S01 (ER_FORCING_CLOSE)

    Message: %s: thread %ld 강제 종료 user: '%s'

  • Error: 1081 SQLSTATE: 08S01 (ER_IPSOCK_ERROR)

    Message: IP socket 를 만들 수 없습니다

  • Error: 1082 SQLSTATE: 42S12 (ER_NO_SUCH_INDEX)

    Message: Table '%s' 는 그러한 index 을 가지고 있지 않습니다(CREATE INDEX 실행시로 지정되어 있지 않습니다). 테이블을 다시 만들어 주세요

  • Error: 1083 SQLSTATE: 42000 (ER_WRONG_FIELD_TERMINATORS)

    Message: Field separator argument is not what is expected; check the manual

  • Error: 1084 SQLSTATE: 42000 (ER_BLOBS_AND_NO_TERMINATED)

    Message: You can't use fixed rowlength with BLOBs; please use 'fields terminated by'.

  • Error: 1085 SQLSTATE: HY000 (ER_TEXTFILE_NOT_READABLE)

    Message: 파일 '%s' 은 databse 의 directory 에 있을까 모든 유저가 읽을 수 있도록(듯이) 허가되어 있지 않으면 안됩니다.

  • Error: 1086 SQLSTATE: HY000 (ER_FILE_EXISTS_ERROR)

    Message: File '%s' 는 이미 존재하는

  • Error: 1087 SQLSTATE: HY000 (ER_LOAD_INFO)

    Message: 레코드수: %ld 삭제: %ld Skipped: %ld Warnings: %ld

  • Error: 1088 SQLSTATE: HY000 (ER_ALTER_INFO)

    Message: 레코드수: %ld 중복: %ld

  • Error: 1089 SQLSTATE: HY000 (ER_WRONG_SUB_KEY)

    Message: Incorrect sub part key; the used key part isn't a string or the used length is longer than the key part

  • Error: 1090 SQLSTATE: 42000 (ER_CANT_REMOVE_ALL_FIELDS)

    Message: ALTER TABLE 으로 모든 column 은 삭제할 수 없습니다. DROP TABLE 를 사용해 주세요

  • Error: 1091 SQLSTATE: 42000 (ER_CANT_DROP_FIELD_OR_KEY)

    Message: '%s' 를 파기할 수 없었습니다; check that column/key exists

  • Error: 1092 SQLSTATE: HY000 (ER_INSERT_INFO)

    Message: 레코드수: %ld 중복수: %ld Warnings: %ld

  • Error: 1093 SQLSTATE: HY000 (ER_UPDATE_TABLE_USED)

    Message: You can't specify target table '%s' for update in FROM clause

  • Error: 1094 SQLSTATE: HY000 (ER_NO_SUCH_THREAD)

    Message: thread id: %lu 는 없습니다

  • Error: 1095 SQLSTATE: HY000 (ER_KILL_DENIED_ERROR)

    Message: thread %lu 의 오너가 아닙니다

  • Error: 1096 SQLSTATE: HY000 (ER_NO_TABLES_USED)

    Message: No tables used

  • Error: 1097 SQLSTATE: HY000 (ER_TOO_BIG_SET)

    Message: Too many strings for column %s and SET

  • Error: 1098 SQLSTATE: HY000 (ER_NO_UNIQUE_LOGFILE)

    Message: Can't generate a unique log-filename %s.(1-999)

  • Error: 1099 SQLSTATE: HY000 (ER_TABLE_NOT_LOCKED_FOR_WRITE)

    Message: Table '%s' 는 READ lock 이 되어 있어 , 갱신은 할 수 없습니다

  • Error: 1100 SQLSTATE: HY000 (ER_TABLE_NOT_LOCKED)

    Message: Table '%s' 는 LOCK TABLES 에 의해 락 되고 있지 않습니다

  • Error: 1101 SQLSTATE: 42000 (ER_BLOB_CANT_HAVE_DEFAULT)

    Message: BLOB column '%s' can't have a default value

  • Error: 1102 SQLSTATE: 42000 (ER_WRONG_DB_NAME)

    Message: 지정한 database 이름 '%s' 이 잘못되어 있는

  • Error: 1103 SQLSTATE: 42000 (ER_WRONG_TABLE_NAME)

    Message: 지정한 table 이름 '%s' 은 잘못하고 있습니다

  • Error: 1104 SQLSTATE: 42000 (ER_TOO_BIG_SELECT)

    Message: The SELECT would examine more than MAX_JOIN_SIZE rows; check your WHERE and use SET SQL_BIG_SELECTS=1 or SET SQL_MAX_JOIN_SIZE=# if the SELECT is okay

  • Error: 1105 SQLSTATE: HY000 (ER_UNKNOWN_ERROR)

    Message: Unknown error

  • Error: 1106 SQLSTATE: 42000 (ER_UNKNOWN_PROCEDURE)

    Message: Unknown procedure '%s'

  • Error: 1107 SQLSTATE: 42000 (ER_WRONG_PARAMCOUNT_TO_PROCEDURE)

    Message: Incorrect parameter count to procedure '%s'

  • Error: 1108 SQLSTATE: HY000 (ER_WRONG_PARAMETERS_TO_PROCEDURE)

    Message: Incorrect parameters to procedure '%s'

  • Error: 1109 SQLSTATE: 42S02 (ER_UNKNOWN_TABLE)

    Message: Unknown table '%s' in %s

  • Error: 1110 SQLSTATE: 42000 (ER_FIELD_SPECIFIED_TWICE)

    Message: Column '%s' specified twice

  • Error: 1111 SQLSTATE: HY000 (ER_INVALID_GROUP_FUNC_USE)

    Message: Invalid use of group function

  • Error: 1112 SQLSTATE: 42000 (ER_UNSUPPORTED_EXTENSION)

    Message: Table '%s' uses an extension that doesn't exist in this MySQL version

  • Error: 1113 SQLSTATE: 42000 (ER_TABLE_MUST_HAVE_COLUMNS)

    Message: 테이블은 최저 1 개의 것 column 이 필요합니다

  • Error: 1114 SQLSTATE: HY000 (ER_RECORD_FILE_FULL)

    Message: table '%s' 는 가득합니다

  • Error: 1115 SQLSTATE: 42000 (ER_UNKNOWN_CHARACTER_SET)

    Message: character set '%s' 는 서포트하고 있지 않습니다

  • Error: 1116 SQLSTATE: HY000 (ER_TOO_MANY_TABLES)

    Message: 테이블이 너무 많습니다; MySQL can only use %d tables in a join

  • Error: 1117 SQLSTATE: HY000 (ER_TOO_MANY_FIELDS)

    Message: column 가 너무 많습니다

  • Error: 1118 SQLSTATE: 42000 (ER_TOO_BIG_ROWSIZE)

    Message: row size 가 너무 큽니다. BLOB 를 포함하지 않는 경우의 것 row size 의 최대는 %d 입니다. 몇개의 field 를 BLOB 에 바꾸어 주세요.

  • Error: 1119 SQLSTATE: HY000 (ER_STACK_OVERRUN)

    Message: Thread stack overrun: Used: %ld of a %ld stack. 스택 영역을 많이 취하고 싶은 경우 ,'mysqld -O thread_stack=#' 라고 지정해 주세요

  • Error: 1120 SQLSTATE: 42000 (ER_WRONG_OUTER_JOIN)

    Message: Cross dependency found in OUTER JOIN; examine your ON conditions

  • Error: 1121 SQLSTATE: 42000 (ER_NULL_COLUMN_IN_INDEX)

    Message: Column '%s' 가 UNIQUE 인가 INDEX 로 사용되었던. 이 컬럼은 NOT NULL 이라고 정의되고 있지 않습니다.

  • Error: 1122 SQLSTATE: HY000 (ER_CANT_FIND_UDF)

    Message: function '%s' 를 로드할 수 없습니다

  • Error: 1123 SQLSTATE: HY000 (ER_CANT_INITIALIZE_UDF)

    Message: function '%s' 를 초기화할 수 없습니다; %s

  • Error: 1124 SQLSTATE: HY000 (ER_UDF_NO_PATHS)

    Message: shared library 에의 패스가 다니고 있지 않습니다

  • Error: 1125 SQLSTATE: HY000 (ER_UDF_EXISTS)

    Message: Function '%s' 는 이미 정의되고 있습니다

  • Error: 1126 SQLSTATE: HY000 (ER_CANT_OPEN_LIBRARY)

    Message: shared library '%s' 를 열 수가 없습니다 (errno: %d %s)

  • Error: 1127 SQLSTATE: HY000 (ER_CANT_FIND_DL_ENTRY)

    Message: function '%s' 를 도서관안에 찾아낼 수가 없습니다

  • Error: 1128 SQLSTATE: HY000 (ER_FUNCTION_NOT_DEFINED)

    Message: Function '%s' 는 정의되고 있지 않습니다

  • Error: 1129 SQLSTATE: HY000 (ER_HOST_IS_BLOCKED)

    Message: Host '%s' 는 many connection error 때문에 , 거부되었던. 'mysqladmin flush-hosts' 으로 해제해 주세요

  • Error: 1130 SQLSTATE: HY000 (ER_HOST_NOT_PRIVILEGED)

    Message: Host '%s' 는 MySQL server 에 접속이 허가되고 있지 않습니다

  • Error: 1131 SQLSTATE: 42000 (ER_PASSWORD_ANONYMOUS_USER)

    Message: MySQL 를 anonymous users 로 사용하고 있는 상태에서는 , 패스워드의 변경은 할 수 없습니다

  • Error: 1132 SQLSTATE: 42000 (ER_PASSWORD_NOT_ALLOWED)

    Message: 다른 유저의 패스워드를 변경하기 위해서는, mysql 데이타베이스에 대해서 update 의 허가가 없으면 안됩니다.

  • Error: 1133 SQLSTATE: 42000 (ER_PASSWORD_NO_MATCH)

    Message: Can't find any matching row in the user table

  • Error: 1134 SQLSTATE: HY000 (ER_UPDATE_INFO)

    Message: 일치수(Rows matched): %ld 변경: %ld Warnings: %ld

  • Error: 1135 SQLSTATE: HY000 (ER_CANT_CREATE_THREAD)

    Message: 신규에 thread를 만들 수 없하고 (errno %d). 최대 사용 허가 메모리수를 넘지 않았는데 에러가 발생하고 있다면, 메뉴얼중에서 'possible OS-dependent bug' 라고 하는 문자를 찾아 쌍이라고야 차이.

  • Error: 1136 SQLSTATE: 21S01 (ER_WRONG_VALUE_COUNT_ON_ROW)

    Message: Column count doesn't match value count at row %ld

  • Error: 1137 SQLSTATE: HY000 (ER_CANT_REOPEN_TABLE)

    Message: Can't reopen table: '%s'

  • Error: 1138 SQLSTATE: 42000 (ER_INVALID_USE_OF_NULL)

    Message: NULL 치의 사용 방법이 부적절합니다

  • Error: 1139 SQLSTATE: 42000 (ER_REGEXP_ERROR)

    Message: Got error '%s' from regexp

  • Error: 1140 SQLSTATE: 42000 (ER_MIX_OF_GROUP_FUNC_AND_FIELDS)

    Message: Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause

  • Error: 1141 SQLSTATE: 42000 (ER_NONEXISTING_GRANT)

    Message: 유저 '%s' (호스트 '%s' 의 유저) 는 허가되고 있지 않습니다

  • Error: 1142 SQLSTATE: 42000 (ER_TABLEACCESS_DENIED_ERROR)

    Message: 커멘드 %s 는 유저 '%s'@'%s' ,테이블 '%s' 에 대해서 허가되고 있지 않습니다

  • Error: 1143 SQLSTATE: 42000 (ER_COLUMNACCESS_DENIED_ERROR)

    Message: 커멘드 %s 는 유저 '%s'@'%s' 컬럼 '%s' 테이블 '%s' 에 대해서 허가되고 있지 않습니다

  • Error: 1144 SQLSTATE: 42000 (ER_ILLEGAL_GRANT_FOR_TABLE)

    Message: Illegal GRANT/REVOKE command; please consult the manual to see which privleges can be used.

  • Error: 1145 SQLSTATE: 42000 (ER_GRANT_WRONG_HOST_OR_USER)

    Message: The host or user argument to GRANT is too long

  • Error: 1146 SQLSTATE: 42S02 (ER_NO_SUCH_TABLE)

    Message: Table '%s.%s' doesn't exist

  • Error: 1147 SQLSTATE: 42000 (ER_NONEXISTING_TABLE_GRANT)

    Message: There is no such grant defined for user '%s' on host '%s' on table '%s'

  • Error: 1148 SQLSTATE: 42000 (ER_NOT_ALLOWED_COMMAND)

    Message: The used command is not allowed with this MySQL version

  • Error: 1149 SQLSTATE: 42000 (ER_SYNTAX_ERROR)

    Message: Something is wrong in your syntax

  • Error: 1150 SQLSTATE: HY000 (ER_DELAYED_CANT_CHANGE_LOCK)

    Message: Delayed insert thread couldn't get requested lock for table %s

  • Error: 1151 SQLSTATE: HY000 (ER_TOO_MANY_DELAYED_THREADS)

    Message: Too many delayed threads in use

  • Error: 1152 SQLSTATE: 08S01 (ER_ABORTING_CONNECTION)

    Message: Aborted connection %ld to db: '%s' user: '%s' (%s)

  • Error: 1153 SQLSTATE: 08S01 (ER_NET_PACKET_TOO_LARGE)

    Message: Got a packet bigger than 'max_allowed_packet' bytes

  • Error: 1154 SQLSTATE: 08S01 (ER_NET_READ_ERROR_FROM_PIPE)

    Message: Got a read error from the connection pipe

  • Error: 1155 SQLSTATE: 08S01 (ER_NET_FCNTL_ERROR)

    Message: Got an error from fcntl()

  • Error: 1156 SQLSTATE: 08S01 (ER_NET_PACKETS_OUT_OF_ORDER)

    Message: Got packets out of order

  • Error: 1157 SQLSTATE: 08S01 (ER_NET_UNCOMPRESS_ERROR)

    Message: Couldn't uncompress communication packet

  • Error: 1158 SQLSTATE: 08S01 (ER_NET_READ_ERROR)

    Message: Got an error reading communication packets

  • Error: 1159 SQLSTATE: 08S01 (ER_NET_READ_INTERRUPTED)

    Message: Got timeout reading communication packets

  • Error: 1160 SQLSTATE: 08S01 (ER_NET_ERROR_ON_WRITE)

    Message: Got an error writing communication packets

  • Error: 1161 SQLSTATE: 08S01 (ER_NET_WRITE_INTERRUPTED)

    Message: Got timeout writing communication packets

  • Error: 1162 SQLSTATE: 42000 (ER_TOO_LONG_STRING)

    Message: Result string is longer than 'max_allowed_packet' bytes

  • Error: 1163 SQLSTATE: 42000 (ER_TABLE_CANT_HANDLE_BLOB)

    Message: The used table type doesn't support BLOB/TEXT columns

  • Error: 1164 SQLSTATE: 42000 (ER_TABLE_CANT_HANDLE_AUTO_INCREMENT)

    Message: The used table type doesn't support AUTO_INCREMENT columns

  • Error: 1165 SQLSTATE: HY000 (ER_DELAYED_INSERT_TABLE_LOCKED)

    Message: INSERT DELAYED can't be used with table '%s', because it is locked with LOCK TABLES

  • Error: 1166 SQLSTATE: 42000 (ER_WRONG_COLUMN_NAME)

    Message: Incorrect column name '%s'

  • Error: 1167 SQLSTATE: 42000 (ER_WRONG_KEY_COLUMN)

    Message: The used table handler can't index column '%s'

  • Error: 1168 SQLSTATE: HY000 (ER_WRONG_MRG_TABLE)

    Message: All tables in the MERGE table are not defined identically

  • Error: 1169 SQLSTATE: 23000 (ER_DUP_UNIQUE)

    Message: Can't write, because of unique constraint, to table '%s'

  • Error: 1170 SQLSTATE: 42000 (ER_BLOB_KEY_WITHOUT_LENGTH)

    Message: BLOB column '%s' used in key specification without a key length

  • Error: 1171 SQLSTATE: 42000 (ER_PRIMARY_CANT_HAVE_NULL)

    Message: All parts of a PRIMARY KEY must be NOT NULL; if you need NULL in a key, use UNIQUE instead

  • Error: 1172 SQLSTATE: 42000 (ER_TOO_MANY_ROWS)

    Message: Result consisted of more than one row

  • Error: 1173 SQLSTATE: 42000 (ER_REQUIRES_PRIMARY_KEY)

    Message: This table type requires a primary key

  • Error: 1174 SQLSTATE: HY000 (ER_NO_RAID_COMPILED)

    Message: This version of MySQL is not compiled with RAID support

  • Error: 1175 SQLSTATE: HY000 (ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE)

    Message: You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column

  • Error: 1176 SQLSTATE: HY000 (ER_KEY_DOES_NOT_EXITS)

    Message: Key '%s' doesn't exist in table '%s'

  • Error: 1177 SQLSTATE: 42000 (ER_CHECK_NO_SUCH_TABLE)

    Message: Can't open table

  • Error: 1178 SQLSTATE: 42000 (ER_CHECK_NOT_IMPLEMENTED)

    Message: The handler for the table doesn't support %s

  • Error: 1179 SQLSTATE: 25000 (ER_CANT_DO_THIS_DURING_AN_TRANSACTION)

    Message: You are not allowed to execute this command in a transaction

  • Error: 1180 SQLSTATE: HY000 (ER_ERROR_DURING_COMMIT)

    Message: Got error %d during COMMIT

  • Error: 1181 SQLSTATE: HY000 (ER_ERROR_DURING_ROLLBACK)

    Message: Got error %d during ROLLBACK

  • Error: 1182 SQLSTATE: HY000 (ER_ERROR_DURING_FLUSH_LOGS)

    Message: Got error %d during FLUSH_LOGS

  • Error: 1183 SQLSTATE: HY000 (ER_ERROR_DURING_CHECKPOINT)

    Message: Got error %d during CHECKPOINT

  • Error: 1184 SQLSTATE: 08S01 (ER_NEW_ABORTING_CONNECTION)

    Message: Aborted connection %ld to db: '%s' user: '%s' host: `%s' (%s)

  • Error: 1185 SQLSTATE: HY000 (ER_DUMP_NOT_IMPLEMENTED)

    Message: The handler for the table does not support binary table dump

  • Error: 1186 SQLSTATE: HY000 (ER_FLUSH_MASTER_BINLOG_CLOSED)

    Message: Binlog closed while trying to FLUSH MASTER

  • Error: 1187 SQLSTATE: HY000 (ER_INDEX_REBUILD)

    Message: Failed rebuilding the index of dumped table '%s'

  • Error: 1188 SQLSTATE: HY000 (ER_MASTER)

    Message: Error from master: '%s'

  • Error: 1189 SQLSTATE: 08S01 (ER_MASTER_NET_READ)

    Message: Net error reading from master

  • Error: 1190 SQLSTATE: 08S01 (ER_MASTER_NET_WRITE)

    Message: Net error writing to master

  • Error: 1191 SQLSTATE: HY000 (ER_FT_MATCHING_KEY_NOT_FOUND)

    Message: Can't find FULLTEXT index matching the column list

  • Error: 1192 SQLSTATE: HY000 (ER_LOCK_OR_ACTIVE_TRANSACTION)

    Message: Can't execute the given command because you have active locked tables or an active transaction

  • Error: 1193 SQLSTATE: HY000 (ER_UNKNOWN_SYSTEM_VARIABLE)

    Message: Unknown system variable '%s'

  • Error: 1194 SQLSTATE: HY000 (ER_CRASHED_ON_USAGE)

    Message: Table '%s' is marked as crashed and should be repaired

  • Error: 1195 SQLSTATE: HY000 (ER_CRASHED_ON_REPAIR)

    Message: Table '%s' is marked as crashed and last (automatic?) repair failed

  • Error: 1196 SQLSTATE: HY000 (ER_WARNING_NOT_COMPLETE_ROLLBACK)

    Message: Some non-transactional changed tables couldn't be rolled back

  • Error: 1197 SQLSTATE: HY000 (ER_TRANS_CACHE_FULL)

    Message: Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage; increase this mysqld variable and try again

  • Error: 1198 SQLSTATE: HY000 (ER_SLAVE_MUST_STOP)

    Message: This operation cannot be performed with a running slave; run STOP SLAVE first

  • Error: 1199 SQLSTATE: HY000 (ER_SLAVE_NOT_RUNNING)

    Message: This operation requires a running slave; configure slave and do START SLAVE

  • Error: 1200 SQLSTATE: HY000 (ER_BAD_SLAVE)

    Message: The server is not configured as slave; fix in config file or with CHANGE MASTER TO

  • Error: 1201 SQLSTATE: HY000 (ER_MASTER_INFO)

    Message: Could not initialize master info structure; more error messages can be found in the MySQL error log

  • Error: 1202 SQLSTATE: HY000 (ER_SLAVE_THREAD)

    Message: Could not create slave thread; check system resources

  • Error: 1203 SQLSTATE: 42000 (ER_TOO_MANY_USER_CONNECTIONS)

    Message: User %s has already more than 'max_user_connections' active connections

  • Error: 1204 SQLSTATE: HY000 (ER_SET_CONSTANTS_ONLY)

    Message: You may only use constant expressions with SET

  • Error: 1205 SQLSTATE: HY000 (ER_LOCK_WAIT_TIMEOUT)

    Message: Lock wait timeout exceeded; try restarting transaction

  • Error: 1206 SQLSTATE: HY000 (ER_LOCK_TABLE_FULL)

    Message: The total number of locks exceeds the lock table size

  • Error: 1207 SQLSTATE: 25000 (ER_READ_ONLY_TRANSACTION)

    Message: Update locks cannot be acquired during a READ UNCOMMITTED transaction

  • Error: 1208 SQLSTATE: HY000 (ER_DROP_DB_WITH_READ_LOCK)

    Message: DROP DATABASE not allowed while thread is holding global read lock

  • Error: 1209 SQLSTATE: HY000 (ER_CREATE_DB_WITH_READ_LOCK)

    Message: CREATE DATABASE not allowed while thread is holding global read lock

  • Error: 1210 SQLSTATE: HY000 (ER_WRONG_ARGUMENTS)

    Message: Incorrect arguments to %s

  • Error: 1211 SQLSTATE: 42000 (ER_NO_PERMISSION_TO_CREATE_USER)

    Message: '%s'@'%s' is not allowed to create new users

  • Error: 1212 SQLSTATE: HY000 (ER_UNION_TABLES_IN_DIFFERENT_DIR)

    Message: Incorrect table definition; all MERGE tables must be in the same database

  • Error: 1213 SQLSTATE: 40001 (ER_LOCK_DEADLOCK)

    Message: Deadlock found when trying to get lock; try restarting transaction

  • Error: 1214 SQLSTATE: HY000 (ER_TABLE_CANT_HANDLE_FT)

    Message: The used table type doesn't support FULLTEXT indexes

  • Error: 1215 SQLSTATE: HY000 (ER_CANNOT_ADD_FOREIGN)

    Message: Cannot add foreign key constraint

  • Error: 1216 SQLSTATE: 23000 (ER_NO_REFERENCED_ROW)

    Message: Cannot add a child row: a foreign key constraint fails

  • Error: 1217 SQLSTATE: 23000 (ER_ROW_IS_REFERENCED)

    Message: Cannot delete a parent row: a foreign key constraint fails

  • Error: 1218 SQLSTATE: 08S01 (ER_CONNECT_TO_MASTER)

    Message: Error connecting to master: %s

  • Error: 1219 SQLSTATE: HY000 (ER_QUERY_ON_MASTER)

    Message: Error running query on master: %s

  • Error: 1220 SQLSTATE: HY000 (ER_ERROR_WHEN_EXECUTING_COMMAND)

    Message: Error when executing command %s: %s

  • Error: 1221 SQLSTATE: HY000 (ER_WRONG_USAGE)

    Message: Incorrect usage of %s and %s

  • Error: 1222 SQLSTATE: 21000 (ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT)

    Message: The used SELECT statements have a different number of columns

  • Error: 1223 SQLSTATE: HY000 (ER_CANT_UPDATE_WITH_READLOCK)

    Message: Can't execute the query because you have a conflicting read lock

  • Error: 1224 SQLSTATE: HY000 (ER_MIXING_NOT_ALLOWED)

    Message: Mixing of transactional and non-transactional tables is disabled

  • Error: 1225 SQLSTATE: HY000 (ER_DUP_ARGUMENT)

    Message: Option '%s' used twice in statement

  • Error: 1226 SQLSTATE: 42000 (ER_USER_LIMIT_REACHED)

    Message: User '%s' has exceeded the '%s' resource (current value: %ld)

  • Error: 1227 SQLSTATE: HY000 (ER_SPECIFIC_ACCESS_DENIED_ERROR)

    Message: Access denied; you need the %s privilege for this operation

  • Error: 1228 SQLSTATE: HY000 (ER_LOCAL_VARIABLE)

    Message: Variable '%s' is a SESSION variable and can't be used with SET GLOBAL

  • Error: 1229 SQLSTATE: HY000 (ER_GLOBAL_VARIABLE)

    Message: Variable '%s' is a GLOBAL variable and should be set with SET GLOBAL

  • Error: 1230 SQLSTATE: 42000 (ER_NO_DEFAULT)

    Message: Variable '%s' doesn't have a default value

  • Error: 1231 SQLSTATE: 42000 (ER_WRONG_VALUE_FOR_VAR)

    Message: Variable '%s' can't be set to the value of '%s'

  • Error: 1232 SQLSTATE: 42000 (ER_WRONG_TYPE_FOR_VAR)

    Message: Incorrect argument type to variable '%s'

  • Error: 1233 SQLSTATE: HY000 (ER_VAR_CANT_BE_READ)

    Message: Variable '%s' can only be set, not read

  • Error: 1234 SQLSTATE: 42000 (ER_CANT_USE_OPTION_HERE)

    Message: Incorrect usage/placement of '%s'

  • Error: 1235 SQLSTATE: 42000 (ER_NOT_SUPPORTED_YET)

    Message: This version of MySQL doesn't yet support '%s'

  • Error: 1236 SQLSTATE: HY000 (ER_MASTER_FATAL_ERROR_READING_BINLOG)

    Message: Got fatal error %d: '%s' from master when reading data from binary log

  • Error: 1237 SQLSTATE: HY000 (ER_SLAVE_IGNORED_TABLE)

    Message: Slave SQL thread ignored the query because of replicate-*-table rules

  • Error: 1238 SQLSTATE: HY000 (ER_INCORRECT_GLOBAL_LOCAL_VAR)

    Message: Variable '%s' is a %s variable

  • Error: 1239 SQLSTATE: 42000 (ER_WRONG_FK_DEF)

    Message: Incorrect foreign key definition for '%s': %s

  • Error: 1240 SQLSTATE: HY000 (ER_KEY_REF_DO_NOT_MATCH_TABLE_REF)

    Message: Key reference and table reference don't match

  • Error: 1241 SQLSTATE: 21000 (ER_OPERAND_COLUMNS)

    Message: Operand should contain %d column(s)

  • Error: 1242 SQLSTATE: 21000 (ER_SUBQUERY_NO_1_ROW)

    Message: Subquery returns more than 1 row

  • Error: 1243 SQLSTATE: HY000 (ER_UNKNOWN_STMT_HANDLER)

    Message: Unknown prepared statement handler (%.*s) given to %s

  • Error: 1244 SQLSTATE: HY000 (ER_CORRUPT_HELP_DB)

    Message: Help database is corrupt or does not exist

  • Error: 1245 SQLSTATE: HY000 (ER_CYCLIC_REFERENCE)

    Message: Cyclic reference on subqueries

  • Error: 1246 SQLSTATE: HY000 (ER_AUTO_CONVERT)

    Message: Converting column '%s' from %s to %s

  • Error: 1247 SQLSTATE: 42S22 (ER_ILLEGAL_REFERENCE)

    Message: Reference '%s' not supported (%s)

  • Error: 1248 SQLSTATE: 42000 (ER_DERIVED_MUST_HAVE_ALIAS)

    Message: Every derived table must have its own alias

  • Error: 1249 SQLSTATE: 01000 (ER_SELECT_REDUCED)

    Message: Select %u was reduced during optimization

  • Error: 1250 SQLSTATE: 42000 (ER_TABLENAME_NOT_ALLOWED_HERE)

    Message: Table '%s' from one of the SELECTs cannot be used in %s

  • Error: 1251 SQLSTATE: 08004 (ER_NOT_SUPPORTED_AUTH_MODE)

    Message: Client does not support authentication protocol requested by server; consider upgrading MySQL client

  • Error: 1252 SQLSTATE: 42000 (ER_SPATIAL_CANT_HAVE_NULL)

    Message: All parts of a SPATIAL index must be NOT NULL

  • Error: 1253 SQLSTATE: 42000 (ER_COLLATION_CHARSET_MISMATCH)

    Message: COLLATION '%s' is not valid for CHARACTER SET '%s'

  • Error: 1254 SQLSTATE: HY000 (ER_SLAVE_WAS_RUNNING)

    Message: Slave is already running

  • Error: 1255 SQLSTATE: HY000 (ER_SLAVE_WAS_NOT_RUNNING)

    Message: Slave has already been stopped

  • Error: 1256 SQLSTATE: HY000 (ER_TOO_BIG_FOR_UNCOMPRESS)

    Message: Uncompressed data size too large; the maximum size is %d (probably, length of uncompressed data was corrupted)

  • Error: 1257 SQLSTATE: HY000 (ER_ZLIB_Z_MEM_ERROR)

    Message: ZLIB: Not enough memory

  • Error: 1258 SQLSTATE: HY000 (ER_ZLIB_Z_BUF_ERROR)

    Message: ZLIB: Not enough room in the output buffer (probably, length of uncompressed data was corrupted)

  • Error: 1259 SQLSTATE: HY000 (ER_ZLIB_Z_DATA_ERROR)

    Message: ZLIB: Input data corrupted

  • Error: 1260 SQLSTATE: HY000 (ER_CUT_VALUE_GROUP_CONCAT)

    Message: %d line(s) were cut by GROUP_CONCAT()

  • Error: 1261 SQLSTATE: 01000 (ER_WARN_TOO_FEW_RECORDS)

    Message: Row %ld doesn't contain data for all columns

  • Error: 1262 SQLSTATE: 01000 (ER_WARN_TOO_MANY_RECORDS)

    Message: Row %ld was truncated; it contained more data than there were input columns

  • Error: 1263 SQLSTATE: 01000 (ER_WARN_NULL_TO_NOTNULL)

    Message: Data truncated; NULL supplied to NOT NULL column '%s' at row %ld

  • Error: 1264 SQLSTATE: 01000 (ER_WARN_DATA_OUT_OF_RANGE)

    Message: Data truncated; out of range for column '%s' at row %ld

  • Error: 1265 SQLSTATE: 01000 (ER_WARN_DATA_TRUNCATED)

    Message: Data truncated for column '%s' at row %ld

  • Error: 1266 SQLSTATE: HY000 (ER_WARN_USING_OTHER_HANDLER)

    Message: Using storage engine %s for table '%s'

  • Error: 1267 SQLSTATE: HY000 (ER_CANT_AGGREGATE_2COLLATIONS)

    Message: Illegal mix of collations (%s,%s) and (%s,%s) for operation '%s'

  • Error: 1268 SQLSTATE: HY000 (ER_DROP_USER)

    Message: Can't drop one or more of the requested users

  • Error: 1269 SQLSTATE: HY000 (ER_REVOKE_GRANTS)

    Message: Can't revoke all privileges, grant for one or more of the requested users

  • Error: 1270 SQLSTATE: HY000 (ER_CANT_AGGREGATE_3COLLATIONS)

    Message: Illegal mix of collations (%s,%s), (%s,%s), (%s,%s) for operation '%s'

  • Error: 1271 SQLSTATE: HY000 (ER_CANT_AGGREGATE_NCOLLATIONS)

    Message: Illegal mix of collations for operation '%s'

  • Error: 1272 SQLSTATE: HY000 (ER_VARIABLE_IS_NOT_STRUCT)

    Message: Variable '%s' is not a variable component (can't be used as XXXX.variable_name)

  • Error: 1273 SQLSTATE: HY000 (ER_UNKNOWN_COLLATION)

    Message: Unknown collation: '%s'

  • Error: 1274 SQLSTATE: HY000 (ER_SLAVE_IGNORED_SSL_PARAMS)

    Message: SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support; they can be used later if MySQL slave with SSL is started

  • Error: 1275 SQLSTATE: HY000 (ER_SERVER_IS_IN_SECURE_AUTH_MODE)

    Message: Server is running in --secure-auth mode, but '%s'@'%s' has a password in the old format; please change the password to the new format

  • Error: 1276 SQLSTATE: HY000 (ER_WARN_FIELD_RESOLVED)

    Message: Field or reference '%s%s%s%s%s' of SELECT #%d was resolved in SELECT #%d

  • Error: 1277 SQLSTATE: HY000 (ER_BAD_SLAVE_UNTIL_COND)

    Message: Incorrect parameter or combination of parameters for START SLAVE UNTIL

  • Error: 1278 SQLSTATE: HY000 (ER_MISSING_SKIP_SLAVE)

    Message: It is recommended to run with --skip-slave-start when doing step-by-step replication with START SLAVE UNTIL; otherwise, you are not safe in case of unexpected slave's mysqld restart

  • Error: 1279 SQLSTATE: HY000 (ER_UNTIL_COND_IGNORED)

    Message: SQL thread is not to be started so UNTIL options are ignored

  • Error: 1280 SQLSTATE: 42000 (ER_WRONG_NAME_FOR_INDEX)

    Message: Incorrect index name '%s'

  • Error: 1281 SQLSTATE: 42000 (ER_WRONG_NAME_FOR_CATALOG)

    Message: Incorrect catalog name '%s'

  • Error: 1282 SQLSTATE: HY000 (ER_WARN_QC_RESIZE)

    Message: Query cache failed to set size %lu, new query cache size is %lu

  • Error: 1283 SQLSTATE: HY000 (ER_BAD_FT_COLUMN)

    Message: Column '%s' cannot be part of FULLTEXT index

  • Error: 1284 SQLSTATE: HY000 (ER_UNKNOWN_KEY_CACHE)

    Message: Unknown key cache '%s'

  • Error: 1285 SQLSTATE: HY000 (ER_WARN_HOSTNAME_WONT_WORK)

    Message: MySQL is started in --skip-name-resolve mode. You need to restart it without this switch for this grant to work

  • Error: 1286 SQLSTATE: 42000 (ER_UNKNOWN_STORAGE_ENGINE)

    Message: Unknown table engine '%s'

  • Error: 1287 SQLSTATE: HY000 (ER_WARN_DEPRECATED_SYNTAX)

    Message: '%s' is deprecated, use '%s' instead

  • Error: 1288 SQLSTATE: HY000 (ER_NON_UPDATABLE_TABLE)

    Message: The target table %s of the %s is not updateable

  • Error: 1289 SQLSTATE: HY000 (ER_FEATURE_DISABLED)

    Message: The '%s' feature was disabled; you need MySQL built with '%s' to have it working

  • Error: 1290 SQLSTATE: HY000 (ER_OPTION_PREVENTS_STATEMENT)

    Message: The MySQL server is running with the %s option so it cannot execute this statement

  • Error: 1291 SQLSTATE: HY000 (ER_DUPLICATED_VALUE_IN_TYPE)

    Message: Column '%s' has duplicated value '%s' in %s

  • Error: 1292 SQLSTATE: HY000 (ER_TRUNCATED_WRONG_VALUE)

    Message: Truncated wrong %s value: '%s'

  • Error: 1293 SQLSTATE: HY000 (ER_TOO_MUCH_AUTO_TIMESTAMP_COLS)

    Message: Incorrect table definition; There can only be one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause

  • Error: 1294 SQLSTATE: HY000 (ER_INVALID_ON_UPDATE)

    Message: Invalid ON UPDATE clause for '%s' column

  • Error: 1295 SQLSTATE: HY000 (ER_UNSUPPORTED_PS)

    Message: This command is not supported in the prepared statement protocol yet

  • Error: 1296 SQLSTATE: HY000 (ER_GET_ERRMSG)

    Message: Got NDB error %d '%s'

  • Error: 1297 SQLSTATE: HY000 (ER_GET_TEMPORARY_ERRMSG)

    Message: Got temporary NDB error %d '%s'

  • Error: 1298 SQLSTATE: HY000 (ER_UNKNOWN_TIME_ZONE)

    Message: Unknown or incorrect time zone: '%s'

  • Error: 1299 SQLSTATE: HY000 (ER_WARN_INVALID_TIMESTAMP)

    Message: Invalid TIMESTAMP value in column '%s' at row %ld

  • Error: 1300 SQLSTATE: HY000 (ER_INVALID_CHARACTER_STRING)

    Message: Invalid %s character string: '%s'

  • Error: 1301 SQLSTATE: HY000 (ER_WARN_ALLOWED_PACKET_OVERFLOWED)

    Message: Result of %s() was larger than max_allowed_packet (%ld) - truncated

  • Error: 1302 SQLSTATE: HY000 (ER_CONFLICTING_DECLARATIONS)

    Message: Conflicting declarations: '%s%s' and '%s%s'

Client error information comes from the following files:

  • The Error values and the symbols in parentheses correspond to definitions in the include/errmsg.h MySQL source file.

  • The Message values correspond to the error messages that are listed in the libmysql/errmsg.c file. %d or %s represent numbers or strings that are substituted into the messages %when they are displayed.

Because updates are frequent, it is possible that these files contain additional error information not listed here.

  • Error: 2000 (CR_UNKNOWN_ERROR)

    Message: Unknown MySQL error

  • Error: 2001 (CR_SOCKET_CREATE_ERROR)

    Message: Can't create UNIX socket (%d)

  • Error: 2002 (CR_CONNECTION_ERROR)

    Message: Can't connect to local MySQL server through socket '%s' (%d)

  • Error: 2003 (CR_CONN_HOST_ERROR)

    Message: Can't connect to MySQL server on '%s' (%d)

  • Error: 2004 (CR_IPSOCK_ERROR)

    Message: Can't create TCP/IP socket (%d)

  • Error: 2005 (CR_UNKNOWN_HOST)

    Message: Unknown MySQL server host '%s' (%d)

  • Error: 2006 (CR_SERVER_GONE_ERROR)

    Message: MySQL server has gone away

  • Error: 2007 (CR_VERSION_ERROR)

    Message: Protocol mismatch; server version = %d, client version = %d

  • Error: 2008 (CR_OUT_OF_MEMORY)

    Message: MySQL client ran out of memory

  • Error: 2009 (CR_WRONG_HOST_INFO)

    Message: Wrong host info

  • Error: 2010 (CR_LOCALHOST_CONNECTION)

    Message: Localhost via UNIX socket

  • Error: 2011 (CR_TCP_CONNECTION)

    Message: %s via TCP/IP

  • Error: 2012 (CR_SERVER_HANDSHAKE_ERR)

    Message: Error in server handshake

  • Error: 2013 (CR_SERVER_LOST)

    Message: Lost connection to MySQL server during query

  • Error: 2014 (CR_COMMANDS_OUT_OF_SYNC)

    Message: Commands out of sync; you can't run this command now

  • Error: 2015 (CR_NAMEDPIPE_CONNECTION)

    Message: Named pipe: %s

  • Error: 2016 (CR_NAMEDPIPEWAIT_ERROR)

    Message: Can't wait for named pipe to host: %s pipe: %s (%lu)

  • Error: 2017 (CR_NAMEDPIPEOPEN_ERROR)

    Message: Can't open named pipe to host: %s pipe: %s (%lu)

  • Error: 2018 (CR_NAMEDPIPESETSTATE_ERROR)

    Message: Can't set state of named pipe to host: %s pipe: %s (%lu)

  • Error: 2019 (CR_CANT_READ_CHARSET)

    Message: Can't initialize character set %s (path: %s)

  • Error: 2020 (CR_NET_PACKET_TOO_LARGE)

    Message: Got packet bigger than 'max_allowed_packet' bytes

  • Error: 2021 (CR_EMBEDDED_CONNECTION)

    Message: Embedded server

  • Error: 2022 (CR_PROBE_SLAVE_STATUS)

    Message: Error on SHOW SLAVE STATUS:

  • Error: 2023 (CR_PROBE_SLAVE_HOSTS)

    Message: Error on SHOW SLAVE HOSTS:

  • Error: 2024 (CR_PROBE_SLAVE_CONNECT)

    Message: Error connecting to slave:

  • Error: 2025 (CR_PROBE_MASTER_CONNECT)

    Message: Error connecting to master:

  • Error: 2026 (CR_SSL_CONNECTION_ERROR)

    Message: SSL connection error

  • Error: 2027 (CR_MALFORMED_PACKET)

    Message: Malformed packet

  • Error: 2028 (CR_WRONG_LICENSE)

    Message: This client library is licensed only for use with MySQL servers having '%s' license

  • Error: 2029 (CR_NULL_POINTER)

    Message: Invalid use of null pointer

  • Error: 2030 (CR_NO_PREPARE_STMT)

    Message: Statement not prepared

  • Error: 2031 (CR_PARAMS_NOT_BOUND)

    Message: No data supplied for parameters in prepared statement

  • Error: 2032 (CR_DATA_TRUNCATED)

    Message: Data truncated

  • Error: 2033 (CR_NO_PARAMETERS_EXISTS)

    Message: No parameters exist in the statement

  • Error: 2034 (CR_INVALID_PARAMETER_NO)

    Message: Invalid parameter number

  • Error: 2035 (CR_INVALID_BUFFER_USE)

    Message: Can't send long data for non-string/non-binary data types (parameter: %d)

  • Error: 2036 (CR_UNSUPPORTED_PARAM_TYPE)

    Message: Using unsupported buffer type: %d (parameter: %d)

  • Error: 2037 (CR_SHARED_MEMORY_CONNECTION)

    Message: Shared memory: %s

  • Error: 2038 (CR_SHARED_MEMORY_CONNECT_REQUEST_ERROR)

    Message: Can't open shared memory; client could not create request event (%lu)

  • Error: 2039 (CR_SHARED_MEMORY_CONNECT_ANSWER_ERROR)

    Message: Can't open shared memory; no answer event received from server (%lu)

  • Error: 2040 (CR_SHARED_MEMORY_CONNECT_FILE_MAP_ERROR)

    Message: Can't open shared memory; server could not allocate file mapping (%lu)

  • Error: 2041 (CR_SHARED_MEMORY_CONNECT_MAP_ERROR)

    Message: Can't open shared memory; server could not get pointer to file mapping (%lu)

  • Error: 2042 (CR_SHARED_MEMORY_FILE_MAP_ERROR)

    Message: Can't open shared memory; client could not allocate file mapping (%lu)

  • Error: 2043 (CR_SHARED_MEMORY_MAP_ERROR)

    Message: Can't open shared memory; client could not get pointer to file mapping (%lu)

  • Error: 2044 (CR_SHARED_MEMORY_EVENT_ERROR)

    Message: Can't open shared memory; client could not create %s event (%lu)

  • Error: 2045 (CR_SHARED_MEMORY_CONNECT_ABANDONED_ERROR)

    Message: Can't open shared memory; no answer from server (%lu)

  • Error: 2046 (CR_SHARED_MEMORY_CONNECT_SET_ERROR)

    Message: Can't open shared memory; cannot send request event to server (%lu)

  • Error: 2047 (CR_CONN_UNKNOW_PROTOCOL)

    Message: Wrong or unknown protocol

  • Error: 2048 (CR_INVALID_CONN_HANDLE)

    Message: Invalid connection handle

  • Error: 2049 (CR_SECURE_AUTH)

    Message: Connection using old (pre-4.1.1) authentication protocol refused (client option 'secure_auth' enabled)

  • Error: 2050 (CR_FETCH_CANCELED)

    Message: Row retrieval was canceled by mysql_stmt_close() call

  • Error: 2051 (CR_NO_DATA)

    Message: Attempt to read column without prior row fetch

  • Error: 2052 (CR_NO_STMT_METADATA)

    Message: Prepared statement contains no metadata


저작자 표시
신고

'DataBase > MySQL' 카테고리의 다른 글

MySQL Stored Procedure (저장프로시저)  (2) 2014.03.28
임시테이블 - Temproray Table  (0) 2014.03.26
MySQL 에러처리  (0) 2014.03.26
저장 프로시저 관련 포스팅  (0) 2014.03.26
윈도우에서 MySQL 설치하고1045 에러 발생  (0) 2013.12.04
문법 - MySQL 조건문  (0) 2013.03.26
현재 0 개의 댓글이 있습니다.
Comment

Blog

저장 프로시저 관련 포스팅

2014.03.26 15:08 DataBase/MySQL


MySQLStored Procedure 개요

파라미터를 사용한 동적쿼리 프로시저 예제

MySQL 저장 프로시져 내에서 발생한 에러 처리 (Error Handling)


MySQL 저장프로시저.. 아 MS-SQL 저장프로시저가 그립다

저작자 표시
신고

'DataBase > MySQL' 카테고리의 다른 글

임시테이블 - Temproray Table  (0) 2014.03.26
MySQL 에러처리  (0) 2014.03.26
저장 프로시저 관련 포스팅  (0) 2014.03.26
윈도우에서 MySQL 설치하고1045 에러 발생  (0) 2013.12.04
문법 - MySQL 조건문  (0) 2013.03.26
MEMO - MySQL 원격접속 권한 설정  (0) 2013.03.25
현재 0 개의 댓글이 있습니다.
Comment

Blog

memsql

2013.12.30 15:32 DataBase


페이스북 출신 개발자가 만들었다는 데이터베이스. 일단 까먹을까봐 급히 메모함. ㅋㅋ



참고 URL

http://www.memsql.com/
http://dev.kthcorp.com/2012/07/04/memory-based-rdbms-memsql/

http://thdev.net/239

http://techit.kr/6478

http://coffeenix.net/bbs/viewtopic.php?p=7271




저작자 표시
신고

'DataBase' 카테고리의 다른 글

[ER-WIN] Names Option  (0) 2016.10.25
memsql  (0) 2013.12.30
FreeSQLFormatter [SQL정렬]  (0) 2012.02.13
NoSQL  (0) 2011.01.14
ERStudio  (0) 2010.08.24
현재 0 개의 댓글이 있습니다.
Comment

Blog

윈도우에서 MySQL 설치하고1045 에러 발생

2013.12.04 09:38 DataBase/MySQL


1. 먼저 MySQL 서비스를 중지

2. 비인증 로그인이 가능하도록 설정 후, MySQL 재실행.
    - 콘솔창에서 다음과 같이 입력한다.

mysqld --skip-grant
mysql -uroot mysql


이제 비밀번호가 없어도 root 권한으로 MySQL 이 사용가능합니다. 

MySQL DB 를 오픈하고 암호를 재설정 하고, 권한을 부여합니다.

>> use mysql;
>> update user set password=PASSWORD('1111') where user='root';
>> flush privileges;
>> grant all on *.* to 'root'@'localhost' identified by '1111' with grant option;
>> flush privileges;
>> exit


저작자 표시
신고

'DataBase > MySQL' 카테고리의 다른 글

MySQL 에러처리  (0) 2014.03.26
저장 프로시저 관련 포스팅  (0) 2014.03.26
윈도우에서 MySQL 설치하고1045 에러 발생  (0) 2013.12.04
문법 - MySQL 조건문  (0) 2013.03.26
MEMO - MySQL 원격접속 권한 설정  (0) 2013.03.25
ERROR - 사용자 등록시 오류  (0) 2013.03.25
현재 0 개의 댓글이 있습니다.
Comment

Blog

몽고디비 - 초간단 가이드

2013.11.27 13:09 DataBase/NoSQL


출처 : http://bcho.tistory.com/742


초간단 Mongo DB Quick Start Guide

조대협 (http://bcho.tistory.com)

 

Mongo DB는 NoSQL 중에서 가장 널리 사용되는 인기있는 제품이다. 사용과 운영이 다른 시스템에 비해서 매우 쉽고, JSON 기반의 Document를 제공하기 때문에, 데이타 구조에 대한 이해 및 사용이 쉽다. 또한 index나 search와 같은 feature를 제공하고 있고, 근래에는 Text Search와 GridFS를 이용한 파일 저장 그리고, 위치 정보 저장 및 쿼리등 다양한 기능을 제공하고 있다.

 

Mongo DB는 10gen이라는 회사에서 개발되어서, 현재 오픈소스로와 상용 버전으로 공급되고 있다.

이 글에서는 Mongo DB에 대한 이해를 돕기 위해서 간단한 설치에서 부터, 자바 기반의 프로그래밍 샘플까지 소개하도록 한다.

 

1.설치

1) 다운로드 하기

mongodb는 http://www.mongodb.org/downloads 에서 다운로드 받을 수 있다. 여기서는 Windows 64-bit Production Release 버전을 기준으로 한다.

zip 파일을 다운로드 받은 후에 C:\dev\mongodb-win32-x86_64-2.4.3 디렉토리에 압축을 풀었다.

2) Mongodb 구동

C:\dev\mongodb-win32-x86_64-2.4.3 에서 다음과 같은 명령어를 이용하여 구동한다.

.\bin\mongod --dbpath C:\dev\mongodb-win32-x86_64-2.4.3\data

3) 콘솔 확인

구동후에, http://localhost:28017 을 접속하면 아래와 같이 mongodb의 기본 관리 화면을 접속할 수 있다.



2.간단한 테스팅

인스톨이 끝났으면 간단한 테스트를 해보자, ./bin/mongo.exe를 수행하면 Java Script 기반의 쉘이 수행된다. 이해를 돕기 위해서 하나의 테이블에 Insert , select, delete, update를 수행하는 명령을 SQL 문장과 비교해서 소개한다.

 

Insert

SQL              : insert into users ("name","city") values("terry","seoul")

Mongo DB     : db.users.insert({_id:"terry",city:"seoul"})

 

Select

SQL              : select * from users where id="terry"

Mongo DB     : db.users.find({_id:"terry"})

 

Update

SQL              : update users set city="busan" where _id="terry"

Mongo DB     : db.users.update( {_id:"terry"}, {$set :{ city:"Busan" } } )

 

Delete

SQL              : delete from users where _id="terry"

Mongo DB     : db.users.remove({_id:"terry"})

 

간단하게 나마, mongodb query에 대해서 설명하였다.

조금 더 자세한 쿼리에 대한 설명은 http://docs.mongodb.org/manual/crud/ 를 참고하기 바란다.

 

3. 자바로 간단한 프로그램 작성하기

지금까지 설치와 간단한 쿼리 수행을 해봤다. 그러면 이번에는 다음 단계로 간단한 자바 클라이언트를 구현해보자, RDBMS를 이용하기 위해서 JDBC 드라이버를 사용한다면, mongodb는 전용 드라이버 mongo-java-driver 를 제공한다.

이 예제에서는 별도로 설치하기 보다는 아래와 같이 maven 빌드 스크립트에 dependency를 추가하여, 빌드시에 자동으로 라이브러리가 로딩 되도록 한다.

 

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

  <modelVersion>4.0.0</modelVersion>

 

  <groupId>mongodb</groupId>

  <artifactId>simplemongo</artifactId>

  <version>0.0.1-SNAPSHOT</version>

  <packaging>jar</packaging>

 

  <name>simplemongo</name>

  <url>http://maven.apache.org</url>

 

  <properties>

    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

  </properties>

 

  <dependencies>

        <dependency>

               <groupId>org.mongodb</groupId>

               <artifactId>mongo-java-driver</artifactId>

               <version>2.10.1</version>

        </dependency>

  </dependencies>

    <build>

        <plugins>

               <plugin>

                       <groupId>org.apache.maven.plugins</groupId>

                       <artifactId>maven-compiler-plugin</artifactId>

                       <version>2.3.1</version>

                       <configuration>

                              <source>1.6</source>

                              <target>1.6</target>

                       </configuration>

               </plugin>

                <plugin>

                       <groupId>org.apache.maven.plugins</groupId>

                       <artifactId>maven-eclipse-plugin</artifactId>

                       <configuration>

                              <downloadSources>true</downloadSources>

                              <downloadJavadocs>true</downloadJavadocs>

                       </configuration>

               </plugin>

 

        </plugins>

  </build>

</project>

 

 

다음은 localhost에 있는 mongodb instance에 하나의 document(RDBMS로 치면 row)를 insert하는 클라이언트 프로그램 예제이다.

package com.terry;

import com.mongodb.BasicDBObject;

import com.mongodb.DB;

import com.mongodb.DBCollection;

import com.mongodb.MongoClient;

import com.mongodb.ServerAddress;

 

public class SimpleMongo {

       

        MongoClient mongoClient = null;

        DB db=null;

       

        public void mongoTest(String ip,int port,String dbname) throws Exception{

              

               mongoClient = new MongoClient(new ServerAddress(ip,port));

               db = mongoClient.getDB(dbname);

              

               DBCollection userTable = db.getCollection("userTable");

               BasicDBObject doc = new BasicDBObject("name""MongoDB").

                append("type""database").

                append("count", 1).

                append("info"new BasicDBObject("x", 203).append("y", 102));

 

               userTable.insert(doc);

        }

       

        public static void main(String args[]) throws Exception{

               SimpleMongo testRunner = new SimpleMongo();

               testRunner.mongoTest("localhost", 27017, "testdb");

        }

}

 

간단한 예제이기 때문에 몇가지만 설명을 하면

com.mongodb.DB는 mySQL의 DB등과 같이, RDBMS의 DB의 개념을 표현한다. 그래서 mongoDB에 연결한후에, db를 getDB를 통해서 연결한다.

mongoDB에서 테이블은 collection이라는 개념으로 존재한다. Table에 insert를 하기 위해서는 getCollection 메서드를 사용해서 해당 테이블 객체를 가지고 온후, Json Object를 만들어서 Table (Collection)에 insert를 하면 된다.

저작자 표시
신고
현재 0 개의 댓글이 있습니다.
Comment

Blog

Code Formatter - 코드정렬

2013.07.03 10:08 DataBase/MS-SQL




SQL Server 2008 R2.


SQL Server Management Studio 쿼리를 작성하다 보면, 토드나 SQL Gate 등 코드정렬(포맷) 기능이 너무

아쉽다. 이에 구글링해서 좋은 툴을 찾았다. MSI 파일 형태로 제공된다.

아래 파일로 다운로드 받아도 됩니다. 확장자 zip 를 지워주시고 msi 파일형태로 바꿔 실행시키시면 됩니다.



SqlFormatterSSMSAddIn.Setup.1.4.4.msi.zip



링크 : http://architectshack.com/PoorMansTSqlFormatter.ashx

그런데.. SQLER 에.. 이미 윤선식님이 깔끔하게 정리를 해놓으셨었음.ㅡㅡ;;


링크 : http://www.sqler.com/504675

저작자 표시
신고
현재 0 개의 댓글이 있습니다.
Comment

Blog

링크드 서버로 업데이트(Update) 조인해서 다수의 데이터를 조건별로 수정할때

2013.05.29 17:25 DataBase/MS-SQL


졸다가 업데이트를 조건을 안걸고 F5 키를 눌러버리고 말았다..

그래서 다행히도 관계형이 아닌 테이블이어서 원본 테이블에는 지장이 없는 테이블이었기에 (운좋았다~ㅋㅋ)

조인을 걸어서 수정을 할 수 있게 했는데 까먹으니까 써놓자~

 

  UPDATE MemberInfor
  
SET MemberInfor.member_id = b.member_id

  FROM

  -- 실제 조인 연동 (링크드 서버와)
   MemberInfor a INNER JOIN 
(
    SELECT * FROM OPENQUERY(LinkedServerName, '
       SELECT member_id, member_name FROM TestDB.dbo.MemberInfor a, TestDB.dbo.MemberInfor b
       WHERE a.member_id = b.member_id

    ')) b
    
ON  a.member_id = b.member_id

    AND a.server_id = b.server_id
  
WHERE a.server_id = 24
  AND a.server_id NOT IN ('51','52','54','61','62','63','67','68','69','70')

 

반드시 링크드 서버가 활성화(연결)되어있어야만 구동이 가능하다.

저작자 표시
신고
현재 0 개의 댓글이 있습니다.
Comment

Blog

[엑셀쿼리 오류] Microsoft.Jet.OLEDB.4.0 이(가) 오류

2013.05.29 17:24 DataBase/MS-SQL


** 오류메시지

서버: 메시지 7399, 수준 16, 상태 1, 줄 1

OLE DB 공급자 'Microsoft.Jet.OLEDB.4.0'이(가) 오류를 보고했습니다. 공급자에서 오류에 관한 정보를 주지 않았습니다.

OLE DB 오류 추적 [OLE/DB Provider 'Microsoft.Jet.OLEDB.4.0' IDBInitialize::Initialize returned 0x80004005:  공급자에서 오류에 관한 정보를 주지 않았습니다.].

 

SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',    'Excel 5.0;Database=c:\SampleCode.xls', Sheet1$) 

 

정상적으로 위 코드를 작동시키기 위해서는 반드시 아래의 조건을 지켜준다.

1. 데이터베이스 서버가 작동하는 드라이브에 파일이 존재해야 한다.

2. 시트명뒤에 $ 표시를 반드시 해준다.

====================================================================================================

** 로컬테스트 **

나같은 경우에는 정상적으로 MSSQL 도 설치하고 파일에도 이상이 없고 시트명도 Sheet1$ 로 지정하였다.

하지만 파티션을 나누어서 C 와 D 로 사용을 하고 있는 문서폴더가 D 드라이브에 존재했다.

그래서 쿼리를 날려야 하는 파일이 D 드라이브에 있었는데 혹시나 하는 마음에 C 드라이브로

옮기고 쿼리를 날렸더니.. 정상작동. D 드라이브에 있었을때는 위와 같은 ** 오류.

 

INSERT INTO SAMPLE_ENTITY (CODE1, CODE2, CODE3, DESCRIPTION )

SELECT a.*  FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0','excel 8.0;database=c:\SampleCode.xls;sa;', Sheet1$)

 AS a

====================================================================================================

저작자 표시
신고
현재 0 개의 댓글이 있습니다.
Comment

Blog

자주 쓰이는 시스템 뷰

2013.05.29 17:23 DataBase/MS-SQL


모두 셀렉트절 (SELECT) 을 이용할것.

 

INFORMATION_SCHEMA.COLUMNS

[ 데이터베이스명, 테이블스키마명, 테이블명 각테이블에 있는 컬럼명, 각 컬럼타입등의 데이터등 ]

 

INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE

[ 데이터베이스의 테이블명과 해당 테이블에 PK가 걸려있는 필드명과 PK 이름 ]

 

INFORMATION_SCHEMA.ROUNTINES

[ 데이터베이스의 모든 PL/SQL CREATE  ]

 

SYS.DATABASE_FILES

[ 데이터베이스 파일정보 ]

저작자 표시
신고
현재 0 개의 댓글이 있습니다.
Comment

Blog

MSSQL [@@IDENTITY, SCOPE_IDENTITY, IDENT_CURRENT]

2013.05.29 17:22 DataBase/MS-SQL


출처 : http://mcpicdtl.blogspot.com/2009/12/mssql-identity-scopeidentity.html

 

@@IDENTITY

--> @@의 의미는 세션을 뜻한다 즉 해당 세션에서 테이블에 INSERT된 최종값을 의미한다

어느 정도의 부하가 있는 시스템에선 사용가능하나 멀티스레팅이 구현된 환경에서는 

원하는 최종값이 아닌 엉뚱한 값이 들어갈 확률이 높다

해당 테이블에 대한 여러 접속자가 값을 반영하고 있는 경우 사용하면 안된다. 

싱글 스레드 전용(중규모 사이트 용)


IDENT_CURRENT('테이블명')

--> 함수에서 알수 있듯이 세션에 상관 없이 해당 테이블에 대한 최종값 또는 들어갈 값을 의미한다

다른 IDENTITY와 다르게 데이터 입력전에 그 값을 알 수 있다 

하지만 테이블 전체에 대한 값을 의미 하므로 1인용 시스템에 적합하다.

VB로 개인용 비디오 관리 시스템 같은거 이왼 쓰면 안된다.

즉 실시간으로 IDENTITY를 알아야 환경에서는 이런 함수는 없다고 생각하는 편이 낳다.

하지만 필요할 때가 있는데 실시간 통계등 어떤 고정된 시간을 두고 데이터를 추측해야 하는 시스템

예를 들면 실시간 광고시스템에서 1분 단위의 디피에 들어온 큐수치를 계산하고 싶을 경우 

1분에 해당하는 레코드수를 구하기 위해서 COUNT를 하는 것은 매우 비효율적이다 

즉 현재 테이블의 IDENTITY를 테이블 단위로 정확히 숫자를 가져오고 그 전값에서 

차감하면 실시간 통계 계산에 편리해 진다.

바로 이럴때 사용하는 것이 IDENT_CURRENT('테이블') 함수이다.


SCOPE_IDENTITY()

--> 마지막으로 해당 프로세스 + 해당 세션의 최종 IDENTITY를 가져오고자 할때 필요하다 

주로 대규모 사이트나 멀티스레드 환경에서 많이 쓰인다 

예를 들어 이 함수가 실행되는 곳이 SP이거나 FN이거나 TRRIGER일수도 있다 

그렇다면 해당 프로세스+세션으로 제한을 걸고 IDENTITY를 가져오기 때문에 

실시간 키코드를 리턴해야 하는 상황에선 가장 신뢰할 수 있는 함수가 된다



비교하는 차원에서 오라클과 MYSQL을 보자면 


오라클에선 IDENTITY라는 개념 보다 시퀀스라는 개념을 사용한다 

일종에 자동증분 전용 테이블이라고 생각하면 되는데 

생성은 CREATE SEQUENCE ..... 로 시작한다 

시작값과 증가값 그리고 마지막 값을 지정할 수 있고 

그 마지막 값에 도달했을때 1부터 다시 발행할지 아닐지 정할 수 있다

이외 자동키값 반환의 ROWID 같은 것들이 있으나 별로 권장하고 싶지는 않다 

오라클의 경우 시퀀스라는 개념에 최적화 되어 있기 때문에 테이블을 생성할때 

자동증분값이 필요하다면 항상 시퀀스고 같이 CREATE해야 한다 

귀찮을 수 있지만 멀티스레드이든 싱글스레드이건 부정확한 값이 담기는 부작용이 없다

시퀀스의 이름이 CREATE SEQUENCE NEWKEY .... 라고 할때 이름은 NEWKEY가 되고 

현제 시퀀스 : NEWKEY.CURRVAL

다음 시퀀스 : NEWKEY.NEXTVAL 이 된다

더 상세한 설명은 검색해 보길 바란다. 



마지막으로 MYSQL이다 


LAST_INSERT_ID() 함수를 제공한다 MSSQL에 비하면 @@IDENTITY 같은 개념이다 

그 이외 추가적인 설명은 필요 하지 않다

저작자 표시
신고
현재 0 개의 댓글이 있습니다.
Comment

Blog

TRANSACTION[트랜잭션] - 롤백 처리에 대해서

2013.05.29 17:21 DataBase/MS-SQL


1. 글로벌 변수 @@ERROR 를 이용한

  BEGIN TRAN

      INSERT INTO TEST1 (T1, T2, T3) VALUES ('AA','BB','CC')

      INSERT INTO TEST2 (T1, T2, T3) VALUES ('AA','BB','CC')

      INSERT INTO TEST3 (T1, T2, T3) VALUES ('AA','BB','CC'

    IF (@@ERROR <> 0)

      COMMIT

   ELSE

      ROLLBACK

  ROLLBACK TRAN

 

2. TRY / CATCH & EXCEPTION 을 이용한

  BEGIN TRY

   BEGIN TRAN

      INSERT INTO TEST1 (T1, T2, T3) VALUES ('AA','BB','CC')

      INSERT INTO TEST2 (T1, T2, T3) VALUES ('AA','BB','CC')

      INSERT INTO TEST3 (T1, T2, T3) VALUES ('AA','BB','CC') 

   COMMIT TRAN

  END TRY

  BEGIN CATCH

    PRINT '오류번호는 ' + CAST (ERROR_NUMBER() AS VARCHAR)

    PRINT '오류심각도는 ' + CAST (ERROR_SEVERITY() AS VARCHAR)

    PRINT '오류상태번호는 ' + CAST (ERROR_STATE() AS VARCHAR)

    PRINT '오류발생프로시저명은 ' + CAST (ERROR_PROCEDURE() AS VARCHAR)

    PRINT '오류발생구문의라인은 ' + CAST (ERROR_LINE() AS VARCHAR)

  END CATCH;

 

3. SET XACT_ABORT ON  를 이용한

   SET XACT_ABORT ON -- 오류시 모두 롤백
   BEGIN TRAN
      INSERT INTO TEST1 (T1, T2, T3) VALUES ('AA','BB','CC')

      INSERT INTO TEST2 (T1, T2, T3) VALUES ('AA','BB','CC')

      INSERT INTO TEST3 (T1, T2, T3) VALUES ('AA','BB','CC') 
   COMMIT TRAN
   SET XACT_ABORT OFF

 

그 외에 암시적인 트랜잭션도 있는데, 나도 이 카페 를 보고 찾아가서 테스트를 해본 것이다.

좀 더 세부적인 무결성을 원할때는 3번째 방법에 대해서는 다시 한번 고려를 권장하고 있었다.

반드시 3개의 기능을 테스트 하여, 적재적소를 찾아야 겠다.

제일 좋은 테스트는.. 아무리 생각해봐도 대용량데이터 예제 삼아 날려보는게.ㅋㅋ

저작자 표시
신고

'DataBase > MS-SQL' 카테고리의 다른 글

자주 쓰이는 시스템 뷰  (0) 2013.05.29
MSSQL [@@IDENTITY, SCOPE_IDENTITY, IDENT_CURRENT]  (0) 2013.05.29
TRANSACTION[트랜잭션] - 롤백 처리에 대해서  (0) 2013.05.29
SQL MD5 함수  (0) 2013.05.29
OPENROWSET  (0) 2013.05.29
CHARINDEX 를 이용한 문자열 필터링  (0) 2013.05.29
현재 0 개의 댓글이 있습니다.
Comment

Blog

SQL MD5 함수

2013.05.29 17:19 DataBase/MS-SQL


주목할 요소는 파라메터 데이터 타입

 

CREATE FUNCTION SQL_MD5 (@MD5_HASH_FIELDS VARCHAR(32))
 RETURNS VARCHAR(32)
AS
BEGIN
  RETURN SubString(master.dbo.fn_varbintohexstr (HashBytes ('MD5', @MD5_HASH_FIELDS)), 3, 32)
END

저작자 표시
신고

'DataBase > MS-SQL' 카테고리의 다른 글

MSSQL [@@IDENTITY, SCOPE_IDENTITY, IDENT_CURRENT]  (0) 2013.05.29
TRANSACTION[트랜잭션] - 롤백 처리에 대해서  (0) 2013.05.29
SQL MD5 함수  (0) 2013.05.29
OPENROWSET  (0) 2013.05.29
CHARINDEX 를 이용한 문자열 필터링  (0) 2013.05.29
스키마 바인딩시 에러;;;  (0) 2012.10.31
현재 0 개의 댓글이 있습니다.
Comment

Blog

OPENROWSET

2013.05.29 17:17 DataBase/MS-SQL


어느날 SQL Server 2000보다 SQL Server 2005가 좋은것이 무엇무엇이 있지? 누군가가 나에게 "왜 SQL Server 2000보다 SQL Server 2005가 좋아요?" 라고 물으면 어떻게 대답해야 하지? "그래 아직 내 머릿속에 이런것들이 정리가 되어 있지 않는구나" 라는 생각에 회사 팀원들과 하나하나 정리하면서 간략한 세미나형식으로 발표를 하기로 하였다. 그 첫번재 주제가 OPENROWSET 이다.

OPENROWSET이란?
첫번째, 링크드서버로 연결되어 있지 않은 SQL Server에서 데이터를 읽을 때 사용한다.
두번째, 특정 파일의 데이터를 Table로 로드시키지 않고 내용을 읽는다.

여기서 잠깐!! 무작정 OPENROWSET을 사용하면 에러가 발생을 한다.
메시지 15281, 수준 16, 상태 1, 줄 1
구성 요소 'Ad Hoc Distributed Queries'이(가) SQL Server 보안 구성의 일부로 해제되었으므로 이 구성 요소의 문 'OpenRowset/OpenDatasource'에 대한 액세스가 차단되었습니다. 시스템 관리자는 sp_configure를 사용하여 'Ad Hoc Distributed Queries'의 사용을 활성화할 수 있습니다. 'Ad Hoc Distributed Queries' 활성화 방법은 SQL Server 온라인 설명서의 "노출 영역 구성"을 참조하십시오.

이와 같은 에러이다. OPENROWSET을 사용하기 전에 SQL Server 서버 구성을 살짝 바꾸자.

exec sp_configure 'show advanced options', 1
RECONFIGURE

exec sp_configure 'Ad Hoc Distributed Queries', 1
RECONFIGURE

이렇게 구성요서를 바꾸면 일딴 OPENROWSET을 사용하기 위한 준비가 된것이다. 여기서 우리는 MSDASQL provider을 사용해서 연결해 보자.

SELECT o.* 
FROM OPENROWSET(
	'MSDASQL'
,	'DRIVER={SQL Server};SERVER=192.168.*.*;UID=****;PWD=****'
,	'select * from TESTDB.dbo.test') o

이렇게 하면 링크드서버를 연결하지 않고도 원격서버의 데이터를 읽을 수 있다. 하지만, 해당 데이터를 빈번하게 참조해야한다면 링크드서버로 연결하는게 당연히 좋겠다.

다음으로 어떠한 File Data을 Table에 로드시키지 않고 바로 읽는것을 보겠다. 우리는 2가지 방법을 통해서 볼 것이다. 첫번째 방법은 OLE DB을 사용해서 읽는 방법과 두번째 방법은 BULK 옵션으로 보는 방법이다.
먼저, OLE DB를 사용하는 방법 부터 보자. 방법을 보기전에 TEST용 File먼저 만들자. *^^* 메모장을 열고 "이승연","1" 이렇게 적고 .txt파일로 저장을 하자 그리고 아래와 같은 Query문을 실행시키자.

select * from
OPENROWSET('Microsoft.Jet.OLEDB.4.0'
,	'text;Database=C:\;HDR=NO'
, 'select * from test.txt')

select * from
OPENROWSET('Microsoft.Jet.OLEDB.4.0'
,	'text;Database=C:\;HDR=YES'
,	'select * from test.txt')

이렇게 위와 같이 실행을 하고 윗 Query와 아래 Query을 비교하여 보자. HDR=NO와 HDR=YES 차이다. HDR=NO을 하면 첫번째 행부터 ROW에 출력이 되고, HDR=YES을 하면 첫번째 행은 필드명으롤 올라간다.

덤으로 MSDASQL문도 보자.

SELECT a.* FROM
OPENROWSET('MSDASQL', 
'Driver={Microsoft Text Driver (*.txt; *.csv)};  DefaultDir=C:\;',
'SELECT * FROM test.txt') a

이제 마지막으로 BULK문을 보도록하자. MSDN에서는 OPENROWSET(BULK..) 와 INSERT을 같이 사용할 경우 BULK절에 테이블 힌트를 사용할수 있다고 기술되어 있다. 또한 TABLOCK과 같은 일반적인 힌트 외에도 IGNORE_CONSTRAINTS, IGNORE_TRIGGERS, KEEPDEFAULTS, KEEPIDENTITY와 같은 특수 힌트도 사용할수 있다고는 하지만, 여기에서는 언급하지 않겠다. (나도 잘 모르니깐요 -0-;;) BULK문을 사용하기 전에 FORMAT형식의 XML을 만들자.

<?xml version="1.0"?>

<BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <RECORD>
  <FIELD ID="1" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="100" COLLATION="Korean_Wansung_CI_AS"/>

  <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="100" COLLATION="Korean_Wansung_CI_AS"/>  </RECORD>

 <ROW>
  <COLUMN SOURCE="1" NAME="Col1" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="2" NAME="Col2" xsi:type="SQLNVARCHAR"/>
 </ROW>
</BCPFORMAT>해당 XML코드를 설명해주지 않아도 다들 알고 있을거라 믿어 의심치 않는다. (나도 잘 모른다. -0-;;) 아무튼 해당 XML코드를 TEST.xml로 저장하고 다음 Query을 실행시키면 된다.

SELECT Col1, Col2
	FROM  OPENROWSET(BULK  'C:\test.txt',
	FORMATFILE='C:\test.Xml'  
) AS t1;


다음에는 향상된 분산쿼리에 대해서 포스팅을 할것이다. 음.. 확장된 분산쿼리는 도대체 멀까나 -0-;;

 

추처 :: http://ddoung2.tistory.com/155

저작자 표시
신고

'DataBase > MS-SQL' 카테고리의 다른 글

TRANSACTION[트랜잭션] - 롤백 처리에 대해서  (0) 2013.05.29
SQL MD5 함수  (0) 2013.05.29
OPENROWSET  (0) 2013.05.29
CHARINDEX 를 이용한 문자열 필터링  (0) 2013.05.29
스키마 바인딩시 에러;;;  (0) 2012.10.31
VIEW 인덱스 생성시 스키마바인딩  (0) 2012.10.31
현재 0 개의 댓글이 있습니다.
Comment

Blog

CHARINDEX 를 이용한 문자열 필터링

2013.05.29 17:15 DataBase/MS-SQL


/* 예) 회원가입자들의 중복제거된 이메일주소 */

 

SELECT DISTINCT
       substring (email_add, (charindex ('@', email_add) + 1), 20)
          AS email_address
  FROM TABLE_NAME
 WHERE substring (email_add, (charindex ('@', email_add) + 1), 20) LIKE '%.%'

저작자 표시
신고

'DataBase > MS-SQL' 카테고리의 다른 글

SQL MD5 함수  (0) 2013.05.29
OPENROWSET  (0) 2013.05.29
CHARINDEX 를 이용한 문자열 필터링  (0) 2013.05.29
스키마 바인딩시 에러;;;  (0) 2012.10.31
VIEW 인덱스 생성시 스키마바인딩  (0) 2012.10.31
실행된 쿼리내역 조회  (0) 2012.10.24
현재 0 개의 댓글이 있습니다.
Comment