Tag Archives: Database

H2 Database – 관련정보

인메모리로 실행시켰을 때 접속할 수 있도록 하는 빈
주소 : http://localhost:8080/console

그런데 in-memory 실행 시킬때는 콘솔접속 하지말고 그냥 stand alone 실행시켜서 접속하는게 낫지 않나

in-memory connection info

CQRS와 EventSourcing 기술을 보고

CQRS와 EventSourcing제대로 이해를 했나 모르겠는데

비슷한 생각을 하고 그런 설계를 잡으려고 했었는데,
당시에는 Hibernate ORM Envers라는게 있는줄 몰라서…
그 때의 설계는
ORM을 이용한 도메인 설계를 그대로 화면에 보여줄 수 있도록 하고 히스토리는 별도로 저장하는 구조였다.

)를 들어 회원정보 엔티티에서
level 변동, password 변경 등에 대한 히스토리 저장이 필요하다.

RDBMS에서는 다음 엔티티의 현재상태만 저장

UserEntity {
username : string
password : string
passwordChangeDate : date
email : ref EmailEntity
level : type { bronze, silver, gold, platinum, diamond, challenger }
lastLoginDate : date
}

로그는 별도 디비 또는 파일로 관리.
user-password-change-history (password, passwordChangeDate)
user-level-change-history
user-lastLoginDate-history

이런방식으로 현재상태와 변경상태를 저장한다.
변경히스토리를 저장하는 부분을 하나하나코딩하면 안되고,
하이버네이트 인터셉터라던가 해서 데이터변경을 확인하고 로그를 남기도록 하는 추가기능이 필요하다.

이렇게 하는 경우 RDBMS의 데이터가 메인이기 때문에 변경기록이 남지 않게 되는 상황이 생길수도 있다. 중요한 데이터는 트랜잭션을 걸면 느려
계좌 밸런스를 저장하는걸 예로들걸 그랬나

지금 CQRS컨셉으로 제시하는 것을 보면 현재상태는 메모리디비같은데 저장하는 것 같은데 소규모시스템에서 생각 해 보면
RDBMS에 현재상태를 몽땅저장하는게 괜찮아보인다.

이정도로 중규모까지는 사용가능 해 보인다.

RDBMS의 업데이트를 과도하게 사용하는 부분이 문제가 되긴 할텐데…

어쨌든.. envers쓰면 쉽게 된다.
http://hibernate.org/orm/envers/
….
잘도 만들어 놨다. 이걸 왜 못찾았을까 좀만 더 찾아볼걸

DatabaseMetaData 클래스로 메타데이터 확인

코드

 

 

오라클 12c 설치 후 재시작할 때 오류

기본설치 했는데 왜 자동실행이 안되는걸까

오라클DB 12c는 미완성품인가

init.ora 파일을 복사해서 설정파일을 만들어준다

그리고 다시 실행

주석을 원래 잘 안읽는데 갑자기 눈에 들어와서…

init.ora에 보면 다음내용이 보인다

Change ‘<ORACLE_BASE>’ to point to the oracle base (the one you specify at install time)

기본 경로대로 설치했다면

ORACLE_BASE = /u01/app/oracle

12버전을 깔았는데 왜 11.2.0이 나와있는걸까… 의아하지만 오류가 나진 않을테니 넘어감

또 오류발생

디렉토리를 수동으로 만들어줬다

그리고 실행

실행은 되었으나..

오류가 나는거 보면 제대로 실행될리가 없다.

찾아보니

http://database.sarang.net/?inc=read&aid=23564&criteria=oracle&subcrit=&id=&limit=&keyword=&page=

컨트롤파일 오류라는 것 같다.

아까 설정 아래쪽에

control_files = (ora_control1, ora_control2)

이부분 수정이 필요해보인다.

 

control_files = (“/u01/app/oracle/oradata/orcl/control01.ctl”, “/u01/app/oracle/oradata/orcl/control02.ctl”)

여기는 찾아서 추가는했는데 이걸로 해도 되는지 확신이 없다

11.2버전? 무슨소린지 모르겠다

자동설치로 그냥 클릭클릭만 했을 뿐인데…

initcdb1.ora > compatible = 12.1.0.2.0 으로 변경해봤더니

다음 오류

#db_name=’cdb1′
db_name=’orcl’

이거 다시 변경하고 서버 실행

에러확인

진짜 이것만 하면 되는건가

되네

 

오라클은 엔지니어 쓰게 만들라고 어렵게 해놓나보다

오라클 안 쓰는 회사나 SE있는 회사로 이직 해야겠다

오라클 11g 삭제

개발하다보면 이것저것 깔고 지우고 많이 하게 되는데 오라클은 자동으로 삭제가 안된다

지우면서 삭제순서 기록

1. 삭제 프로그램 실행 (프로그램-Oracle)

deinstall 버튼이 있으니 잘 찾아보면 된다.

바로 삭제되는건 아니고 bat파일 위치를 알려준다.
(윈도우 버전에 따라 그냥 삭제가 되는건 아니겠지? 확실히 윈10에서는 안된다)

<oracle_home>/deinstall/deinstall.bat

대충 설치한 경우 이 위치에 잡힌다
/product/11.2.0/dbhome_1/deinstall/deinsta.bat

이걸 관리자 권한으로 실행

[ENTER][ENTER][ENTER][ENTER][ENTER][ENTER][ENTER]

 

그 후

2. 서비스는 알아서 정지를

cmd관리자 권한으로 실행 후 아래 명령어 실행

 

글쓴이와 설치를 다르게 했다면 다를 수 있다.

 

3. 레지스트리 정리

regedit

Ora, ORACLE를 다 삭제하면 자바나 버추어박스 오류가 날 수 있으므로 찾아서 지워야한다

 

4. 파일삭제

삭제삭제

CentOS6 Postgresql 9.3 replication[현재안됨]

서버두개 Master Slave인 경우

대략적인 설정을 하고 확인한 것은.  pg의 레플리케이션은 파일을 Master서버에서 파일을 퍼와서 Slave서버에 바로 배치입력시키는 과정을 자동화해놓은 정도의 수준인 것처럼 보인다.

Master

ip : 192.168.0.101
username : testuser
password : testpass1234
권한 : replication

아이디 비밀번호가 같을 필요는 없지만 편의상 같ㄱ ㅔ한다

Slave
ip : 192.168.0.102
username : testuser
password : testpass1234

 

Master서버 설정

데이터 경로

자동설치의 경우 /etc/init.d/postgresql-0.3 스크립트에서 수정해야된다

 

pg_hba.conf

local trust, 외부접속설정. replication설정을 주의

postgresql.conf

pg인증방식

pg_hba.conf
host all all 127.0.0.1/32 trust
host all all 127.0.0.1/32 md5

local all postgres peer
local all postgres md5

Slave서버

pg_hba.conf

노예는 이것만 설정한다. 사용만 하면되니까… 마스터에서 접근은 안한다.

postgresql.conf

recoverty.conf

다른쪽들은 복제할 때 다 됐을테니 따로 안해도 된다… 이것만 새로 생성

주의할점

로그확인을 잘 하자.

 

 

참고한 페이지

http://mixellaneous.tistory.com/1007
https://www.digitalocean.com/community/articles/how-to-set-up-master-slave-replication-on-postgresql-on-an-ubuntu-12-04-vps
http://wiki.postgresql.org/wiki/Binary_Replication_Tutorial
http://histlinux.egloos.com/1227710
http://mixellaneous.tistory.com/1007
http://dba.stackexchange.com/questions/16781/postgresql-9-1-hot-backup-error-the-database-system-is-starting-up

 

Hibernate 복합키 사용하기

pk여러개 달아놓고 쓰는 방법

pk 순서를 정하는건 잘 안된다.

이 부분을 수정하려면 하이버네이트 코드 커스터마이징을 하던가 해야할듯하다.

위 코드로 생성을 하면 아래의 쿼리가 나온다.

pk순서가 time, code, name이면 좋겠는데… 이 부분이 조절이 잘 안된다. abc순서로 순서가 잡히는거라면 이름을 바꿔서 짓는것도 고려해봐야겠다.

특별히 제공하는 방법은 없는 것 같으니… 하이버네이트에서 어노테이션을 스캔하는 코드를 찾아서 상속받아서 수정하고 다시 쑤셔넣어주는게 좋을듯하다.

소스코드를 찾아서 재컴파일해서 lib폴더나 개인용 mavenrepo에 넣는것보다는… 낫지않을까 하는 생각이다.

MySql 백업Backup & 복구|복원Restore

백업의 대상

  1. 데이터베이스 파일
  2. 오류 로그 파일, 슬로쿼리 로그 파일
  3. 바이너리 로그 파일
  4. 설정파일 my.cnf
  5. 실행 파일
  6. 기타 공유 라이브러리, 지원 스크립트, 테스트 툴

 

콜드 백업

바이너리 로그 이용

온라인 백업 mysqldump

새로운 백업후 바이너리로그 삭제

 

기타 백업

lvm스냅샷

innodb의 경우 Xtrabackup

 

Mysql settings for Remote Accessing

mysql -u root
mysql> SET PASSWORD FOR 'ROOT'@'LOCALHOST"
> = PASSWORD('new_password');

Now while we’re still here, we’ll create a new HOST for root and allow root to login from anywhere.

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'
> IDENTIFIED BY 'password' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;
mysql> exit

 

Hibernate 구현상의 문제점 정리

1. 설계상의 문제

Object구조를 갖추기 위해서인지는 모르겠지만.. Long id를 거의 강제하는 (커스터마이징이 가능하지만 조금 불편…) 도메인 구조때문에 설계에 제약이 생기고 디비의 성능을 제대로 발휘하지 못한다.

 

2. Bulk Insert 동작시

postgresql의 경우 sequence를 가져오기 위해 select nextval(‘{sequencename}’)를 연속으로 호출한다. oracle에서도 마찬가지가 아닐까 싶다. transaction처리를 위해서인것같지만… 문제가 있어보인다. 왜 이렇게 구현되어있는지 찾아봐야할 것 같다.

 

3. SaveOrUpdate 구현상의 문제점

Save And Update 형태로 동작한다.

upsert 기능을 지원하는 디비에서 굳이 저런식으로 동작하는 것은 비효율적이다.