본문 바로가기

Databases

sql server 에서 특정 순위의 값만 추출 (limit N, N) SQL server 에서 result set를 추출 한다음 순위를 매겨 특정 부분만 별도로 추출 하고자고 한다.(예를 들면 100위부터 200위 까지의 목록 추출) mysql 에서는 limit N, N 과 같은 구문으로 간단하게 추출이 가능 하지만 sql server 에서는 limit와 비슷한 기능을 하는 top 구문으로는 top N, N과 같은 형태로 사용 할 수 없다. 그래서 아래와 같이 row_number() 함수를 사용하여 row 컬럼을 추가 하여 순위를 나열 한 후 그 순위에 대한 범위를 지정 하는 방법을 이용하면 동일한 효과를 얻을 수 있다. -- 을 order by 하여 100 ~ 200 까지의 순번 데이터 추출select * from (select *, row_number() over (o.. 더보기
slave에서 update 버그 ver.master : mysql 5.1.35slave : mysql 5.1.58 slave 에서 update 문이 들어 올때 (from master) 간단한 업데이트 문인데도 불구 하고 아래와 같은 에러가 발생하는 경우가 있다. [ERROR] 'Rowsize too large. The maximum row size for the used table type, not counting BLOBs, is 8126. Youhave to change some solumn to TEXT or BLOBs' on query. Default database: 'database_name'. Query: 'update database_name.table1 set column_name='가나다' where id=100', .. 더보기
character set 과 collation 의 차이 데이터베이스와 테이블의 character set 확인은 아래와 같이 한다.show create table {table_name};show create database {database_name}; 캐릭터셋 변경은 아래와 같이 한다.-- 데이터베이스 캐릭터셋 변경법alter database {database_name} character set={charset_name};-- 테이블의 캐릭터셋 변경법 alter table {table_name} character set={charset_name};-- 컬럼 캐릭터셋 변경법alter table {table_name} modify {column_name} {column_type} character set={charset_name}; 아래는 character se.. 더보기
mysql_upgrade 사용하여 테이블 repair 하기 데이터베이스 백업시 --all-databases 옵션을 이용하여 백업한 백업 파일을 다른 버전의 mysql에 restore 할 때 종종information_schema 데이터베이스 테이블이 깨지는 경우를 경험하였다. (주로 routines, triggers, events 테이블 등의 접근 불가 현상) 그럴 땐 mysql_upgrade client tool을 이용하여 해결 할 수 있다. # mysql_upgrade -p {PASSWORD} -u {USER} 단, 복제를 사용 중일때는 복제가 깨질 수도 있으므로 주의 해야 한다.해당 명령을 수행하면 phase 3/3 단계에서 datadir를 찾아 mysql_upgrade_info 파일을 생성하게 되는데, 실행 유저가 해당 폴더에 write 권한이 있어야 정상.. 더보기
sort aborted 에러 발생시 해결법 에러 로그에 보면 sort aborted 에러가 찍히는 경우가 있습니다그땐 아래의 내용을 점검해 보면 해결 되는 경우가 많습니다 There is at least few known things to cause this message:Insufficient disk space in tmpdir prevented tmpfile from being created.Insufficient memory for sort_buffer_size to be allocated.Somebody ran KILL in the middle of a filesort.The server was shutdown while some queries were sorting.A transaction got rolled back or aborte.. 더보기
MySQL 데이터베이스명 변경 MySQL 에서는 기본적으로 데이터베이스명 변경을 허용하지 않다가 5.1.7 이후 버전에서 rename database 구문을 업데이트 하여 사용 할 수 있게 하였으나 위험 가능성이 높은 구문으로 판단 하고 5.1.23 이후 버전 부터 다시 제거 됐다.(참고: http://dev.mysql.com/doc/refman/5.1/en/rename-database.html) 하지만 rename 구문이 제공되지 않는다고 해서 데이터베이스명을 변경 할 수 없는 것은 아니다.새로운 데이터베이스를 생성하고 기존의 테이블을 매핑 시켜 주는 방법이 있다.(데이터베이스 내의 테이블 리스트를 얻는 방법은 여러가지가 있으므로 생략한다) mysql> create database ;mysql> rename table to 이후 p.. 더보기
[MySQL] substring_index()으로 특정 문자열만 추출하는 SQL 구문 아래를 보면 fruit라는 컬럼에 다음과 같은 형태로 저장되고 있다. fruit k34ea23&tesdftest$name=apple&t34sest$te^Fdddgft34hjesjttest$name=banana&t325hukis2st567^%$ttest&rrt45ttest$name=strawberry&te3ktefdfghtttest 각 행마다 추출하고자 하는 과일 이름(apple, banana, strawbery)이 있고, 해당 문자열 전/후로 일정한 형태의 문자열($name=, &)도 같이 저장되고 있다고 가정한다.이 경우 substring_index() 로 $name= 앞의 모든 문자열을 삭제 하고 한번 더 substring_index()를 사용하여 & 뒤의 문자열을 모두 삭제하면 원하는 문자열만 추출.. 더보기
DBA의 업무 영억 DBA의 업무 영역 - 데이터 모델링 - 데이터 표준 및 품질 관리 - DB 관련 산출물 표준 및 관리 체계 확립 - DB 설계 지침 제공 및 준수 검수 - DB 통합 및 최적화 - DB 프로그래밍 표준 관리 및 검수 - DB 프로그래밍 성능 개선 및 최적화 더보기