일단 질문 본문 싸지르기전에 어떤 툴인지 설명좀 할게
작년에 어디 프로젝트를 나갔는데
해당 프로젝트 내에선 오라클을 쓰고있고 본사 유지보수 해줘야될 서버는 MS-SQL이고
프로젝트 내에서 PDA를 사용해서 연동을 하는데 PDA는 MDB를 쓰는데
이걸 씨발 SQL 매니져먼트랑 토드랑 MS ACCESS랑 다켜두고 하려니 미치겠는거야
존나 화딱지 나서 이걸 한방에 다 쓰는 툴은 없을까?
하다가 씨발 좆같은데 없으면 만들어서 쓰지 뭐 하면서 툴을 하나 만들었어
PDA개발할때 졸라 유용하게 쓰다가 필요할때마다 기능을 하나씩 추가해서 쓰고 있거든
추가된 기능이 일단
1. 기본 쿼리 수행 / 결과 보여주기
관리툴이니 이건 기본중에 기능인거고
2. 디비 골라 쓰기 / 현재 지원하는게 오라클은 9i이하까지만이고 SQLITE랑 MS-SQL은 버전에 관계없이 다되고 MDB까진 구현해뒀는데 쓰질 않아서 잘 돌아가는진 몰겠다. 현재는 하나만 로그인해서 쓰게 막아뒀어
오라클 10g 이상은 써글 구해놓은 DLL이 라이센스를 요구하는 코드가 있더라 뜯어서 제거하고 구현하던가 다른 DLL 참조해서 구현할 예정이야
3. 전체 사용자 대상으로 특정테이블을 검색해서 그 테이블에 특정 쿼리를 가하는것
(뭐 컬럼 추가나 삭제나 혹은 전체 사용자 대상으로 특정테이블 드롭이나 등등)
작년 연말정산 프로그램 짜는데 모든 사용자들의 테이블에 컬럼을 추가해줘야 되는데 씨발 업체가 500개가 넘는거야
그걸 언제 디비마다 로그인하거나 쿼리수정해서 사용자명 찾고 매핑해서 컬럼을 추가해? 아오 짱나 하다가 걍 만들자 해서 만들었더니
2시간만에 끝나더라구, 그래서 추가했던 기능이고
4.테이블 복제
이건 만들다 말았는데
특정업체는 오라클인데 이걸 다른 ms-sql서버에 똑같이 테이블이랑 데이터를 만들어줘야해
흔히 실제 쓰고있는 디비 데이터를 다른 디비로 옮기는 데이터 컨버전 작업중 하나인데
왜 개발자한테 이걸 시켰는지 짜증나서리....참 어쨌든 만들어야겠구나 했어
헐? 씨발 그런데 특정 테이블은 다 옮기는것도 아니고 웨어절 쓴것처럼 특정 데이터만 옮기라네?
아놔 좆 되따...했는데 걍 만드니까 만들던 툴이 생각나서 걍 기능 추가했어, 되드라
동시에 2개의 디비 로그인해서 한쪽 디비불러오고 원하는 데이터 선택하거나 쿼리로 웨어절 주고 이동시키고 커밋시키면 적용 되는 형식이야
그런데 이것도 현재 한번쓰고 막아둔 기능이야
여튼 뭐 이런저런 기능들을 달고있는데
여기서 질문 2가지
특정 디비에 있는 모든 테이블중에 특정 컬럼이 몇개나 존재 하는지와
그 컬럼에 특정데이터가 몇개나 들어있는지 알아내는 탭을 구현하려고 해
실제로 구현했고 정상 동작되는걸 확인했어
예를들어 ms-sql 특정 서버에 테이블 뭐 이름 이것저것 있는게 천개가량 되는데
갑자기 전체테이블 상대로 특정 컬럼명에 특정값이 있는걸 전부 찾아야 된다는거야
그래서 기능을 구현햇지
검색할 디비를 지정하고 검색할 컬럼명을 입력하고 검색을 누르면 조회를 싹 해서 쿼리편집기 창에 어느테이블에 어떤 컬럼이 존재하는지 알려주고
거기에 조건을 값 입력해주면 그 컬럼에 몇개나 해당값을 가지고있는지 보여줘
그런데 오라클 내가 뭔가 로직을 잘못 썼는지
이게 전체 테이블 전체 컬럼 대상으로 검색하면서 데이터리스트를 뽑아내다 말고 데드락에 걸리는경우가 있더라구
전체 테이블 대상이니까 인덱스 라던가 그런거에 따라서 그런 문제가 발생할 가능성은 있는데 유력한 가능성을 생각하자면
혹시 디비 트렌젝션이 동시에 여러번 걸리는것 때문에 문제가 발생하지 않을까 하는 생각을 하게됬어
그래서 디비 연결메소드가 있는 코어 부분을 수정했지
중간에 뻑날경우 혹시 모르니 입셉션 부분에 롤백트렌젝션 걸어주고
정상적으로 다 돌고나서 커밋을 때리게 해뒀어
셀렉트만 하는게 아니라 ALTER를 쓰는경우도 할수 있게
이러니까 매번 루프 돌면서 테이블 검색하는것보다 몇배는 빨라졌는데 데드락은 한두번 하다보면 여전히 걸리더라
뭔가 해결책 없을까?
두번째로
너네가 디비툴을 만든다면 여기에 어떤기능이 더 추가되면 좋을까?
존나 심플하지 질문?
아 똥마렵네..
똥마려워서 화장실가도 자동으로 코딩하는 기능요
스압으로 읽는거 포기
씨발 정상댓글이 안달릴줄은 알았지만 존나 패기들 없다 ㅋㅋ 어찌 디비관련 글 싸지르면 제대로 글 달줄 아는인간 하나도 없어 ㅋㅋ
잘 모르니깐 그런거지. SQL상에 문제가 없다면 데드락 걸리는건 프로그램 문제이지 싶다
4년차 따위의 댓글에 자극받아서 읽어봤는데... 데드락이면 니가 한 디비설계에 문제가 있는 것임. 혹은 로직상에서 말도 안되는 쿼리를 쓰고 있거나..
존나 한심한 종자를 위해 개발아찌 내 멘토좀 해줄래요?ㅋㅋㅋ
ㄴ 소스 코드 써도 정상 댓글 달애들이 거의 없어보인다 내가 봤을땐 애들 이미 만들어진 그냥 커넥션이나 가져다 쓰고 프로그램과 디비상에 트렌젝션이 어떤식으로 일어나는지 제대로 생각한번 안해본 애들같다. 댓글 괜찮으면 디비 프로시져상의 디비 암호화 팁 하나랑 질문글 하나 더 싸질러 보려 했는데 걍 직접 해결하는게 빠르겠다
ㄴ 뭔말인지 모르겠다 젠장.. 난 언재 저렇게 씨부려보지 ㅠㅠ
알렉산더야 디비 설계문제가 왜나오니 ㅋㅋ 내가 테스트를 디비 하나로만 했겠냐 ㅋ 이디비 저디비 다 왔다리 갔다리 하면서 한두번 하면 괜찮은데 두세번 거치면서 데드락 걸려 즉 트렌젝션을 일으키면서 문제가 일어나는건데 졸라 로직이랄것도 없는 내용을 굴린다
로직 알려주리? 1. 전체테이블 셀렉트 -> dt에 리스트 담아둠 / 2. 서버에 부담 안가게 하기위해 코드상에서 루프문을 돌림 -> 기존에 한 테이블당 한번씩 트렌젝션 발생시키던걸 코어 수정하면서 다 돌고나서 막판에 한번만 트렌젝션 발생하도록 수정 / 3. 3단계에 거쳐서 디비 액세스 -> 1) 특정 디비 하나 접속정보를 들고 디비오픈 2) 코드상에서 졸라 반복문 돌면서 쿼리 수행 입셉션 처리에서 쿼리돌다 뻑나면 롤백세규먼트 호출 / 코드상에서 돌때마다 dt로 데이터값 받아옴 / 3) 정상적으로 다 돌면 쿼리 디비 적용 , 트렌젝션 발생
그냥 로그 발생시키게 해놓은 다음에 어디서 문제일어나는지 확인하는게 더 빠를듯 하다. 4년차 횽 말대로 트랜잭션에서 왔다 갔다 할때 문제가 일어나는것 같은데.. 접속정보 들고 올때 삑싸리 나는거 아님?
그리고 저 프로그램 만든 계기가 하나의 디비만 연결 하고자 하는게 아니라 여러 디비 동시 액세스 하려고 만든건데 설계 문제면 그 디비에서만 문제가 나와야 정상이지 / 이건 100퍼 내가 만든 프로그램 코어 딴에서 전체테이블 대상으로 무리하게 쿼리를 반복적으로 수행하니까 문제가 발생하는건데 아마 전체 테이블 대상의 전체컬럼 대상이니 시간이 오래걸릴테고 그와중에 다른 트렌젝션이 또 일어나면 데드락에 빠질 가능성이 가장 높지 하지만 그거 외에도 여러 이유가 있을것 같아서 질문글 싸지른거야
아리힌 / 로그찍는건 고려해봤는데 어짜피 데드락에 빠진거면 코드상에서의 로그는 의미가 없어 아마 트렌젝션 일으키는 부분에서 리턴 기다리고 멈춰있겠지 허옇게 화면 죽으면서, 그럼 디비에서 로그를 받아야 하는데 아마 디비 로그도 별반 차이 없을거야 오라클은 잘 모르겠고 ms-sql은 프로파일러에서 로그 찍어 볼수 있는데 별차이 없을걸 어느순간 그냥 이유없이 뻗을꺼야. 그럼 세션죽이고 다시 봐야 할꺼고....세션에 쿼리 수행 내용 가지고 있으려나??
데몬상에 설정 건드려야 쿼리 수행내용 로그 찍히지 않남? 거기까지는 잘 모르겠네.. 도움 안되서 ㅈㅅ
캐꼬꼬닭 // 그거 보니까 생각났는데 아는 차장급이 이런 쿼리를 짠적이 있었어 특정 테이블 선택하면 그 테이블 전체 조회하는 쿼리문 업데이트 쿼리문 인설트 쿼리문이 txt 형식으로 조회되고, 그리고 당시 우리가 쓰던 프로그램 코드에 적용될 형식으로 쭉 생성되는 쿼리.....내용은 좀 다르지만 이런것처럼 테이블, 프로시져, 뷰 생성할때 기본 디자인 뿌려주면 괜찮을까? 나쁘진 않은 기능같은데 그냥 기본 디자인을 문서화해서 가지고있다가 불러와도 될것 같기도 한데
내용이 읽기 어려운가? 그냥 테이블 선택하면 그 테이블 조회, 인설트,업데이트 쿼리문이 자동생성되는 프로그램 같은걸 만들어주더라 당시엔 오라클 전용이었지만...스크립트 형으로 조회되게 하는것도 괜찮을것 같네
my-sql은 내가 테스트 디비로 만들어 둔게 없어 접속리스트 콤보박스에도 이름은 넣었는데 커넥션부분도 없어 mysql은...뭐 접속테스트할 디비가 있어야 해볼텐데 ㅋㅋㅋ
그리고 실제로 사용하는 디비에 mysql 쓰는 경우가 많이 드물던데 캐꼬꼬닭 주변에 mysql 쓰는 업체 많아?
데드락인거 알면 니가 고칠수 있지 않냐
니가 짠 코드고 니가 만든 시스템이잖아. 지금 문제를 제일 잘 알고 있는 새끼는 너라고 생각하지 않냐
c // 내가 짠 코드니까 내가 짠 부분에 대해선 내가 잘알고 있는 새끼겠지 그런데 나도 이런 다중 디비를 다루는 툴을 만들어본 경험이 없어서 여러 디비액세스 프로그램 건든 사람한테 조언좀 얻으려고 글올린거야 새꺄
캐꼬꼬닭 // mysql도 고려해봐야겠다 땡큐 ㅋㅋ