본문 바로가기

MSSQL

[MSSQL] SSIS에서 트랜젝션 처리 안녕하세요 마푸입니다. 오늘은 오랜만에 데이터베이스 이야기를 해보려합니다. 요즘 게임할 시간이 없네요 ㅠ.ㅠ 이번에 이직한 회사에서는 SSIS를 이용해서 ETL작업을 주로 처리하고 있습니다. 그래서 관련해서 공부도 하고 정리를 했었는데 언젠가 블로그를 통해서 스터디를 해볼까합니다. ^^ 그전에 SSIS에서 처리되는 트랜젝션에 대해서 잠깐 정리 했었던 자료가 있어서 공유차 올려봅니다. 들어가기 전에 SSIS에서의 트랜젝션 옵션에 대해서 알아보겠습니다. 먼저 옵션은 총 3가지가 있는데요 아래와 같습니다. * Required 선택한 개체가 트랜젝션을 생성합니다. 개체란 패키지 또는 컨테이너, 개별 작업 개체를 말합니다.(툴박스에 있는것들이죠!) 만약 선택한 개체가 부모 컨테이너에 포함되어있으며, 부모 컨테이너.. 더보기
[MSSQL] 재귀 CTE를 이용한 계층구조 조회하기 안녕하세요 마푸입니다. 오늘도 "하루 1 포스트"를 달성하기 위해서 늦은시간에 포스트를 작성합니다 데이터베이스를 설계를 하거나 시스템을 분석하다보면 가끔씩 재미있는 상황에 도달하게 됩니다. 바로 테이블 자체의 sequence number가 같은 테이블에서 다른 필드에 참조 되는 경우입니다. 데이터베이스를 학습할때 가장 많이 배우는 테이블 중 하나인 employee 관계에서 쉽게 접할 수 있는 현상인데요 바로 각 점원마다 등급이 있고 각 상급자가 하급자에게 멘티와 멘토 관계에 있는 경우입니다. 멘티와 멘토가 아니더라도 관리자와 사원등의 관계도 해당이 되겠지요 이러한 경우 도출 대상의 결과 테이블과 상급자의 테이블을 조인하기 위해서는 상당히 복잡한 쿼리가 생성이 되는데요 MSSQL에서는 정통적으로 두가지 방.. 더보기
[MSSQL] HashBYTES 함수를 이용한 암호화 안녕하세요 마푸입니다. 오늘은 결혼식을 다녀와서 몸이 많이 피곤하네요 ㅋ; 1일 1회 이상 블로그 포스트를 다짐한터라 포스트를 작성하러구 이것저것 뒤져봤는데 마침 예전에 정리했던 자료 중에 재미 있는게 있어 옮겨 적어 보려합니다. MySQL에서는 password()라는 문자열 함수가 있습니다. 단방향성 암호라서 보호화가 안되지요... 그러나 오픈소스의 한계로 암호화하는 방식이 공개되어있어서 디코딩이 가능합니다. (* 암호화 방식이 지금은 기억이 안나네요 ㅋ;; 한참 공부할때는 외웠었는데 ㅁ...ㅠ.ㅠ) 어쨋든 MSSQL에도 이것과 비슷한 함수가 있습니다. hashbytes 함수인데요 이것과 관련해서 예전에 정리한 글을 올려보겠습니다. -- HashBYTES 함수를 이용한 암호화 장점 : 1. 암호화를 위.. 더보기
[MSSQL] temp DB설정 Temp DB는 MSSQL에서 많은일을 수행합니다. MSDN에서 보면 아래와 같은 역할을 합니다. tempdb 시스템 데이터베이스는 SQL Server 인스턴스에 연결된 모든 사용자가 사용할 수 있는 전역 리소스로서 다음 항목을 보관하는 데 사용됩니다 전역 또는 로컬 임시 테이블, 임시 저장 프로시저, 테이블 변수, 커서 등 명시적으로 생성된 임시 사용자 개체스풀 또는 정렬의 중간 결과를 저장하기 위한 작업 테이블 등 SQL Server 데이터베이스 엔진에서 만든 내부 개체행 버전 관리 격리를 사용하여 커밋된 읽기 또는 스냅숏 격리 트랜잭션을 사용하는 데이터베이스의 데이터 수정 트랜잭션에서 생성된 행 버전온라인 인덱스 작업, MARS(Multiple Active Result Sets) 및 AFTER 트리.. 더보기
[MSSQL] Merge join에 대한 고찰 안녕하세요 마푸입니다. 개인적으로 저는 DATABASE를 배우다보면 제일 재미있고 흥미로운게 집합이라고 생각합니다. 집합 그 중에서 가장 핵심적인 부분이 JOIN이지용 각 집합에 대해서 이리저리 붙여보고 돌려보고 덧대어 볼 수 있기 때문에 재미 지다는 표현이 더 좋을 지 모르겠네요 사실 어렵긴합니다. INNER JOIN이니 OUTER JOIN이니 그런 것들... 위에 언급한 두가지는 대부분의 사람들은 바로 이해가 안되지만 두어번 읽어보면 감이 오긴합니다. 자세히는 모르지만 말이죠 ^^;; 저역시 그래왔고 가끔씩 헛깔릴 때가 많지요 문제는 그 다음에 등장하는 녀석 때문입니다. Merge Join이라는 녀석인데요.마치 프로그램 랭귀지에서 포인터 역할을 하는 녀석이지요 ㅋ; 어렵지는 않으나 이해해야하는 기능인.. 더보기
[쿼리튜닝] 쿼리의 실행 횟수를 줄이자 안녕하세요 마푸입니다. 너무 게임만 올려서 디비 쪽 정리한거 좀 풀어보려합니다. 첫번째 이슈는 stored procedure(DB SP)를 작성할때 팁입니다. 대부분의 절차적 프로그램에서는 보통 쿼리를 실행하고 결과에 따라서 확인한다음에 업데이트를 하게 됩니다. 허나 디비에서는 그런식으로 처리하게되면 쿼리가 두번 날아가게 되는것이지요 만약, 정말 100% 확실한 데이터로 업데이터가 진행되는 거라고 가정을 한다면 먼저 업데이터를 하고 업데이트의 결과유무를 체크한다음 업데이트가 안되었다면 입력하는 식으로 만들 수 있는 것이지요 자세한 내용은 아래를 참고합시다 ^^ [정리]1. Type AIF(SELECT * FROM ~~) update ~~ELSE INSERT ~~ --> 테이블을 무조껀 두번 읽는다 Upd.. 더보기
[MSSQL] Cursor 사용법 안녕하세요 마푸입니다. 사실 MySQL을 다룰 때는 Cursor를 참 많이 작성했습니다. 그도 그럴것이 대부분의 업무가 Python을 이용한 Script로 DB를 제어하는 것이 였습니다. (당시에는 Procedure의 효율성 때문에 Addhoc을 사용했기 때문이지요..) 그러다보니 RcodeSet을 가져와서 Cursor로 일일이 데이터를 매칭시켜주거나 분류하는 작업이 주작업이 였습니다. 헌데 MSSQL을 하면서 Cursor라는 녀석을 거의 써본적이 없습니다. 물런, Cursor을 사용해야되는 경우가 있긴있습니다. 예를들면 결과집합의 데이터가 다시 모집단으로 포함이 되어야하는 경우이지요... 이런경우는 그냥 Cross Apply를 사용하면 되기 때문에 고비용의 Cursor를 쓸 일이 점점 없어지는 것 같습.. 더보기
[MSSQL] Try Catch의 고찰 아주 예전에 그라비티에서 근무했을 때당시 승연형님이 팀 블로그를 운영하자고 제안하셔서 이것저것 만들었던 적이 있습니다. 지금 생각해보면 손발이 오그라들지만... 이제 다시 블로그 활동을 하니 이쪽으로 옮겨 적습니다. ( Gravity Team Blog : http://gdbt.tistory.com/ ) 그러나...당시에 작성했던 계정이 먼지 모르겟네요 ㅠ.ㅠ 그냥 옮겨오면 될것을 다시 작성해야되는 불상사가... 그럼 아래는 당시 작성한 "Try Catch"의 내용입니다. 사실 이번 포스팅은 두근두근하네요 ^^; MSSQL의 파트에 첫글입니다. (사실은 쥐뿔도 모르지만서도..^^) 이리저래 하다가 Try-Catch문을 하게되었는데 보니.. 인터넷을 찾아서 여러가지 예문을 보다보니 "머야~ 예외처리잖아!!".. 더보기

반응형