라벨이 DB인 게시물 표시

mysql, mariadb 채번 방법 또는 auto increment field -> LAST_INSERT_ID의 thread(concurrent) safe 여부

채번할때, last_insert_id 로 select되는 값은 connection basis라는... ** 즉, 해당 connection에서 증가된 값으로 select 된다는... * 단, 같은 connection에서 여러번 insert를 해도 첫번째 insert시 증가한 auto_increment 값만 select한다는.... ** commit 시점이 중요한듯(?) from : https://dev.mysql.com/doc/refman/5.0/en//information-functions.html#function_last-insert-id The ID that was generated is maintained in the server on a per-connection basis. This means that the value returned by the function to a given client is the first AUTO_INCREMENT value generated for most recent statement affecting an AUTO_INCREMENT column by that client. This value cannot be affected by other clients, even if they generate AUTO_INCREMENT values of their own. This behavior ensures that each client can retrieve its own ID without concern for the activity of other clients, and without the need for locks or transactions. The value of LAST_INSERT_ID() is not changed if you set the AUTO_INCREMENT column of a row to a non-“magic” value (that is, a value that is not NULL and no...

Mysql Decimal 컬럼에 insert시 발생하는 Data truncation 오류 (Out of range value for column)

experience decimal(10, 2)에 특정 double형 data를 insert 시도시 아래와 같은 상황 발생.   com.mysql.jdbc.MysqlDataTruncation: Data truncation: Out of range value for column 'column_name' at row 65  at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3564)  at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3498)  at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1959)  at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2113)   값이 1억보다 큰 data를 넣으려 할때 발생하는 듯...   * 대충 찾아보니, decimal 앞 10은 전체 자리수이고, 뒤에 2는 소수점 하위 자리수라는... ** 즉, 소수점 자리수가 2개를 차지하기 때문에 0보다 큰 정수부분은 8개만 허용이 된다는... ** 1억보다 큰 경우, 8개보다 더큰 number를 필요로 하기 때문에 발생하는 것으로 보임.    ** 소수점 자리수도 3자리이상 자리수를 넣으려하면 같은 오류 발생가능한 듯...(?)   from : http://stackoverflow.com/questions/12057695/mysqldatatruncation-out-of-range-value-for-column

MMM으로 묶인 MYSQL DB 장비가 Master인지 Slave인지 구분하는 방법(Master 장비 찾는 방법(?))

* 각 장비에 들어가서 아래 명령어 실행후, 값이 ON이면 slave, OFF면 master라는...   show variables like 'read_only'     * 단, 롤 체인지(role change) 과정에서 해당 값을 DBA(?) 또는 관리자가 수동으로 변경을 해줘야 하는데, 이를 빠뜨리면 ON으로 유지될 수 있다는....

오라클(ORACLE) 계정간의 데이터베이스 이관(복사, 이동) Tip

 experience 개발중인 서비스의 대규모 개편으로 DB 스키마등이 많이 바뀔 예정인 상태. 오라클 DB 성능이 좋은건지, 뭐가 좋은 건지 파티션(?), 샤딩(?) 없이 한대로 서비스 중(부하가 그리 크지는 않은 상태)이라서 오픈 시점에(서비스 영향이 없는 한에서..)  한꺼번에 마이그레이션 등등 작업을 계획함.. 이에 대한 검증 등의 목적으로 실 DB -> 개발 DB로 이관을 고려하게 됨.   - SQLDeveloper의 도구(tool) > 데이터베이스 복사(?) 메뉴를 이용  여러 우여곡절 끝에 오라클에서 DB 복사 및 이관시에는 다음과 같은 선작업이 필요함을 알게됨.(데이터 크기에 따라 복사에 시간이 많이 소요되므로 알고 이관하는 것이 시간낭비를 줄일 수 있는 듯.)   * 복사될 계정(또는 DB)에 넉넉한 TableSpace가 있어야함. 그렇지 않을 경우, 복사 및 인덱스 생성등이 제대로 되지 않음.. (동적으로 tablespace가 증가하는 설정이 미리 안되어 있는 경우에는, 복사된 테이블 삭제후 새로운 tablespace에 이관을 해야하는 번거로움 존재)  ** SQLDeveloper 만을 이용할 경우, tablespace 설정이 고정인 경우가 있음(즉, 모든 작업이 하나의 tablespace에서만 수행됨). 이런 경우에는 테이블 1개만 복사를 수행한 뒤, 결과로 생성된 쿼리에서 tablespace부분만 원하는 tablespace 변경한 쿼리를 이용하여 해결하는 방법도 가능.(전체 테이블 적용시에는 생성된 쿼리의 테이블 부분등등 일부만 변경하여 일괄적으로 수행)  * 실 데이터는 가장 나중으로 미룬 뒤, 스키마 및 시퀀스, 인덱스 등을 먼저 이관  ** 인덱스를 미리 생성하지 않고 데이터 복제부터 한뒤, 인덱스 생성시 인덱스 생성에도 시간이 많이 소요됨. * 데이터까지 복사 후, 각 테이블별 통계정보 샘플링 작업이 필요함. 인덱스가 있더라도 통계정보가 제대로...

오라클(ORACLE) Unable to translate SQLException with Error code '932', will now try the fallback translator 오류

experience oracle, ibatis 연동과정중에 위와 같은 오류 발생과 함께 업데이트(update)가 실패하는 이슈   * 대충확인 결과, sql devleloper와 같은 툴을 이용할때는 문제가 없으나 application 단에서 동작할 때에는 형변환이 정상적이지 않은 듯..    - 문제의 쿼리 bb와 c는 date type  update rr  set a = (#bb# - c) * 60 where ~~~   - 해결 쿼리 update rr  set a = ( cast (#bb# as date ) - c) * 60 where ~~~