설치 경로에 한글 경로가 있으면 안된다...

그걸 3달동안 작업하면서 오늘에야 알았다...

실무자 PC에 설치해 주는 도중에 참...부끄럽소...
Posted by 철냄비짱
,

설명 : DB 유형별 게시판 리스트 화면에서의 페이지 분할 쿼리문
한 page당 출력되는 레코드 수를 page size라 한다면 아래 쿼리를 사용하여 항상 page size 만큼만 불러와서 테이블에 많은 레코드가 쌓여 있더라도 안정된 성능을 보장할 수 있다 단 오라클의 경우엔 생각해 볼 여지가 있다

 

변수 설명

page_size - page당 출력되는 레코드 수
current_page - 현재 페이지

 

 

Oracle :

 

start_num = (current_page - 1) * page_size + 1
end_num = current_page * page_size

 

select seq,title,wr_date from
   (select rownum no, ma.seq,ma.title,ma.wr_date from
     (select seq,title,wr_date from bbs order by seq desc) ma
   where rownum <= end_num)
where no >= start_num order by seq desc


 

MS-SQL :

 

start_num = (current_page - 1) * page_size

 

select top page_size seq,title,wr_date from bbs where seq not in
    (select top start_num seq from bbs order by seq desc) order by seq desc


 

MySql :

 

start_num = (current_page - 1) * page_size


select seq,title,wr_date from bbs order by seq desc limit start_num, page_size    

 

덧붙여서 :

가장 외부의 order by는 불필요할 수 있으나 인덱스 컬럼 이외의 정렬이 있을수 있으므로 그냥 두기로 한다

 

ceil 함수가 없는 언어에서 page_count 구하기

page_count = int((record_count + record_count - 1) / page_size)

 

 

그즈음 : 잘 짜여진 소스를 보다보면 한편의 아름다운 시를 읽는 듯한 코딩 미학을 발견할 때가 있다 갖은 기교와 현란함으로 자랑하지 않는 가운데 간결하면서도 함축된 깊이를 느끼게 해주는 코드들이다

더하지도 덜하지도 않은 단순함과 간결함 그러면서도 깊이를 잃지 않은 정확성은 나를 포함한 내 직업 전체의 품격을 높여주는 것 같다

이처럼 뭐든지 열심히 하면 예술의 경지에 다다를 수 있다는데 이 바닥에서 예술을 추구한다면 자기 이름도 생각 안날때까지 맞던가 아니면 신용불량자로 굶어 죽은 후에 후대에 가서 하드디스크가 복원되면 그때 추앙 받을 수 있을 것이다


Posted by 철냄비짱
,


음.....일단 올려서 추후에 사용을 대비하긴 하는데...
안되는 것도 있고..정리가 영~

암튼 맘에 안들어....
Posted by 철냄비짱
,



Cubrid 의 페이징 공식 기술문서
Posted by 철냄비짱
,
사용자 삽입 이미지


CWD 특성상 순간순간 접속자 수의 폭증으로 인해 Oracle -> Cubrid DB 교체작업 일정이 모두 잡혔다.

마이그레이션 작업,

PHP 소스변경,

Apache 통합 버전업,

임의 테스트

이 까지.. 8월 말까지 작업이 가능하련지 모르겠다.

이제 껏 Mysql 에만 빠져 살다가 CWD에 와서 Oracle로 허우적 댄지 이제 한달밖에 안되었는데

DB 교체라니!!!

생소한 이름의 Cubrid...

나 같은 찌끄래기가 명함 내밀 짬밥이 아닌데...ㅜㅜ

부러버요~

Posted by 철냄비짱
,

Commit. Rollback

DataBase/Oracle 2008. 7. 31. 14:32

테이블에 insert, update, delete 문으로 지시하고, COMMIT을 실행하면 모든 변경 사항이 영구히 데이터베이스에 저장되며, ROLLBACK은 마지막 commit이나 Rollback 이후의 변경 사항을 취소하고 데이터베이스를 원래의 상태로 되돌려 준다. 이를 트랜잭션(transaction)이라 하며, 트랜잭션에서 데이터베이스를 변경하라는 명령이 commit이고, commit 전까지 변경된 것을 되돌리는 것이 rollback이다.

SAVEPOINT는 트랜잭션 내에 세이브포인트를 만들 수 있게 해준다. 하나의 트랜잭션 내에 여러 개의 세이브포인트를 만들 수 있으며, ROLLBACK TO <세이브포인트> 문을 이용하여 큰 규모의 트랜잭션 내에서 명령들의 특정한 그룹만 롤백 할 수 있다.

SET TRANSACTION 명령으로 고립도 레벨이나 트랜잭션의 읽기 전용 혹은 읽기 쓰기 모드, 그리고 특정한 롤백 세그먼트를 이용하도록 하는 등의 다양한 트랜잭션 속성을 지정하는데 이용된다.

    SET TRANSACTION READ ONLY
    SET TRANSACTION READ WRITE
    SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
    SET TRANSACTION ISOLATION READ COMMITTED

 또한 SET CONSTRAINTS 문은 트랜잭션 내의 연기 가능 제약조건의 강제 모드를 지정한다. 

【형식】ROLLBACK 문
ROLLBACK [WORK] [{TO [SAVEPOINT] savepoint}|{FORCE 'text'} ];

【형식】COMMIT 문
COMMIT [WORK] [{COMMENT 'text'} | {FORCE 'text' [,integer]} ];
기존 8i까지는 작업을 취소한다는 의미로 rollback이라는 용어를 사용했지만, 9i부터는 undo라는 용어를 사용한다. 기존에 사용하던 용어인 롤백 데이터, 롤백 세그먼트 등을 모두 언두 데이터, 언두 세그먼트라고 지칭한다.
단, 작업을 취소할 때 사용하는 rollback 명령어는 유효하다.


::::::::::::::::::::::::::::::::::::::
어디선가 퍼온 자료. commit 과 rollback의 정의를 이해하기에 좋다.

CWD에서 파견 근무를 하며 서버에서 Auto Commit 설정이 되어 있는 지 모르고, Toad 에서 Commit을

시키지 않은 채 작업종료, 또는 다른 추가  작업을 하다 Table Lock이 걸려 왜그런지 한참을 고민했다...

무식하긴....

CWD 특성상 세션타임이 짧아 DB 작업을 여유있게 하지 못하는 것이 힘들지만, 뭐 나름 재밌다. ^^ 스릴있고..

이번만큼은 사내 별명인 DB Cracker의 능력을 보여선 안되겠다...ㅠㅠ
Posted by 철냄비짱
,