본문 바로가기

IT 실무/데이터베이스9

데이터베이스 병행제어 실패 현상 다수의 사람이 동시에 이용하는 데이터베이스에서 일관성을 유지하기 위해선 병행제어 기법이 필수이다. 하지만 수많은 경우의 수 속에서 완벽한 병행제어란 쉬운 것이 아닌데, 병행제어를 엄격하게 하려고 하면 할수록 병행성이 나빠진다. 그 말인 즉슨 속도가 느려지거나(지연시간이 길어짐) 불편해지게 되는 것이다. 그래서 흔히 사용되는 고신뢰 기업용 데이터베이스(Oracle 등)도 완벽한 병행제어를 제공하진 않는다. 옵션으로 제공하긴 하지만 대부분의 default 값은 조금 완화된 수준이다. 그렇다면 병행제어를 좀 덜 엄격하게 하면 발생되는 현상이 무엇일까? 예를 들면 한 트랜잭션 내에서 데이터를 여러번 읽는데 값이 바뀐다던가 하는 문제가 생길 수 있는데, 이런 현상들을 가리키는 말이 여러가지라는 것이 문제이다. 내.. 2019. 12. 29.
데이터베이스 회복 기법 정리 Database Recovery트랜잭션들을 수행하는 도중 장애로 인해 손상 된 데이터베이스를 손상되기 이전의 정상적인 상태로 복구시키는 작업 1. 장애의 유형 트랜잭션 장애: 트랜잭션의 실행 시 논리적인 오류로 발생할 수 있는 에러 상황 시스템 장애: H/W 시스템 자체에서 발생할 수 있는 에러 상황 미디어 장애: 디스크 자체의 손상으로 발생할 수 있는 에러 상황 2. Undo와 Redo Undo: 트랜잭션 로그를 이용하여 오류와 관련된 모든 변경을 취소하여 복구 수행 Redo: 트랜잭션 로그를 이용하여 오류가 발생한 트랜잭션을 재실행하여 복구 수행 3. 로그 파일 트랜잭션이 반영한 모든 데이터의 변경사항을 데이터베이스에 기록하기 전에 미리 기록해두는 별도의 데이터베이스 안전한 하드디스크에 저장되며 전원.. 2019. 12. 7.
숫자형과 문자형이 섞여 있을 때 order by 방법 MySQL이든 MariaDB든 Oracle이든 마찬가지일 것 같다. 1,2,3,4,5,6,7,8,9,10,11,12 가 string 형태의 필드에 저장되어 있을 때 order by를 하면1,11,12,2,3,4,5,6.. 이런식으로 정렬이 되어 버린다. 숫자가 아닌 문자를 기준으로 보자면 11보다 2가 더 크기 때문이다. 이럴 때 형변환(CAST)을 하여 사용하는 경우가 많은데 문제는 아래와 같은 경우이다. 1,2,3,4,5A1, A2, A3A1, B1, B2 이런 숫자와 문자들이 섞여 있는 경우. 예를어 앨범의 '트랙넘버' 필드 같은 경우가 저렇게 생겨먹을 수 있다. (CD는 1,2,3,4로 가지만 테잎이나 LP는 앞뒤면을 나누기 위해 문자가 붙음) 이럴때 조금 복잡한 방법으로, zero padding.. 2019. 3. 17.
mysql db를 전부 백업해서 옮기기(서버 이전 등) # mysql -uroot -p; mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || bb231 || bu222 || cy333 || los324234 || lov123222 || mid2131 || mid123122 || mysql || performance_schema || pos || test || test_shop |+--------------------+13 rows in set (0.17 sec) mysql로 들어가서 목록을 본다. phpmyadmin같은 툴을 사용한다면 거기서 봐도 무방하다. 애초에 거기서 덤프까지 떠도 무방하지만, 필자의 경우 DB용량이 너무 크.. 2018. 1. 28.
[MySQL] Your password does not satisfy the current policy requirements MySQL의 특정 버전 이상부터는 Password validation 옵션이 default로 들어간다. MySQL을 새로 설치하고 간단한 패스워드로 테스트를 하려고 하다 보면 이와 같은 에러가 나서 막히는 경우가 생긴다. 이럴 땐 적당히 대소문자, 영어, 특수문자를 섞어서 패스워드를 설정하면 되긴 하지만 테스트를 하는 동안 이 패스워드 설정이 성가시다면 수정 할 수도 있다. mysql> show global variables like '%vali%'; +--------------------------------------+--------+ | Variable_name | Value | +--------------------------------------+--------+ | query_cache_wlo.. 2017. 1. 1.
MySQL 여러개의 필드를 묶어서 하나의 Primary Key로 만들기 ALTER TABLE table ADD PRIMARY KEY(field1,field2,field3); 만약 이미 키가 지정되어 있는 경우 아래와 같이 한다. ALTER TABLE table DROP PRIMARY KEY, ADD PRIMARY KEY(field1,field2,field3); 2015. 7. 19.