데이터베이스에 전문적인 지식이 없는 초보 C# 개발자입니다.
이번에 진행하는 프로젝트에서 C#으로 데이터 싱크하는 프로그램을 만들라는데 이해가 안가는점이 많아서요.
Master/Slave형식으로 진행을 하라는데 server와 portable을 실시간으로 동기화 하는게 목적입니다.
여기서 질문드리고 싶은점은 mssql을 사용하는데 이게 C#으로 데이터싱크 프로그램이 제작이 가능한건지 아무리 검색해봐도
도통 이해가 가는 자료가 없네요. 답변좀 부탁드리겠습니다. 감사합니다.
Comment 7
-
자리비움
2017.11.10 10:34
-
베로
2017.11.13 14:05
답변 감사드립니다.
먼저 데이터는 opc통신을 통해 server로 전송이 되고 서버에서 DB에 데이터를 추가삭제 관리하는 형태이며 그 수정된 데이터를
portable에 server와 같은 복제된 db에 보내고 portable에서 그 데이터를 읽고 DB에 동기화를 진행하는 형태이며 portable에서도 server와 마찬가지로 읽고쓰고가 진행이 되는 형태입니다.
-
자리비움
2017.11.13 15:55
1) opc -> server -> db1 -> C# -> db22) opc -> server -> db1 <-> db2저는 우선 DB쟁이라 2번으로 진행할 것 같습니다.MSSQL CLR 로 구글링 좀 하시면 아래 내용와 비슷한 내용들이 좀 있지 않을까 싶습니다.https://social.msdn.microsoft.com/Forums/sqlserver/en-US/cf007c8e-49ca-4881-ae41-058101ea8524/tcpclient-as-clr-stored-procedure?forum=sqlnetfx -
베로
2017.11.13 17:42
답변 감사드립니다.
저도 2번으로 진행을 하고 싶은데요. 자꾸 1번 형태로 진행을 하라고 하니 답답하지만 2번이 더좋다면 설득시키면 되는거니까
아래와 같은 질문을 좀 드려봅니다.
1. M/S형식으로 3티어 구조를 거치지 않고 직접적으로 DB1과 DB2를 동기화 진행이 가능한지.
2. MSSQL로 LOCAL로만 진행을 할 예정인데 정상적으로 작동이 되는지 궁금합니다.
3. 실시간 동기화를 목표로 삼고 있는데 클러스터와 리플리케이션 둘 중 어느게 효율적인지, 이 두개를 사용해서 구성하는게 맞는지 궁금합니다.
제가 디비와 통신에 대한 지식이 없다보니 궁금한게 많네요 죄송합니다.
-
자리비움
2017.11.13 18:41
1.가능합니다. 말씀하시는 클러스터나 복제가 그 구성이니까요.2.LOCAL 로만 진행하신다는 말씀이 정확히 무엇인지 잘 모르겠습니다만...장비(또는 인스턴스)가 다른 상태에서 실시간 동기화 작업을 진행하시려면 분산 트랜잭션이 제일 깔끔하긴 합니다.(분산 트랜잭션은 DB2 쓰다가 실패하면 DB1 도 실패라 원하시는 결과가 아닐 수도 있습니다.)만약 같은 인스턴스에 있다면 DB1, DB2간 로컬 트랜잭션만으로 해결할 수 있습니다. 이게 제일 쉽습니다.3.클러스터와 복제까지 고려하여 진행할 정도의 소중한(?) 정보인지부터 고려해봐야겠네요. 비용이 만만치 않을테니까요.이 부분은 제가 전문적인 지식이 다소 부족해서 도움을 드리기가 좀 어렵습니다. -
베로
2017.11.15 14:29
소중한 답변 감사합니다. 많은 도움이 됐습니다.
일단은 진행은 알려주신 분산 트랜잭션을 사용하려고 합니다. 장비가 따로 있기 때문에 server와 portable형태로 나눠집니다.
좀 큰 프로젝트라 이미 MSSQL 라이센스는 구매를 해놓은 상태입니다. OPC에서 server로 넘어오는 데이터는 매우 중요한 데이터입니다.
그래서 실시간 동기화가 필요로 하는거고요.
LOCAL로 진행한다고 말씀드린건 인터넷환경이 들어가지 못하는 곳이기 때문에 아이피주소로만 소켓통신을 하기위해서 LOCAL이라고 말씀드린겁니다. 그리고 DB2에서 쓰다가 실패하면 DB1도 실패한다는 말은 바꿔서 DB1에서 실패하면 DB2도 실패한다는 말과 같은거지요? 그럼 해결하기 위해선 실패가 발생한다면 반복처리를 진행해보거나 알람을 띄워주는 형태로 구성을 하면 된다고 생각합니다.
아 그리고 마지막으로 DB복제할 때 전부가 아닌 원하는 테이블만 복제가 가능한지요?
다시 한번 좋은 답변 감사드립니다.
-
자리비움
2017.11.15 16:16
도움 되셨다니 다행입니다.
분산 트랜잭션 환경에서 DB1 에 실패할 경우 DB2 도 실패가 맞습니다.
말씀하신대로 실패 발생 시에 대한 대처 방법도 따로 마련해야 하는게 좋겠고요.
실패 로그는 반드시 남기시기를 권해드립니다.
DB 복제시, 특정 테이블만 복제는 잘 모르겠습니다. ^^;
새 글로 다른분께 문의 부탁드립니다.
server 와 portable 이 정확히 어떤 형태의 데이터이고,
어떤 역활을 하는지에 대해 설명을 주시면 의견을 말씀드리는데 도움이 될 것 같습니다.
우선, 적어주신 이름만 가지고 유추를 해보면 불가능해 보이지는 않습니다.
물론 안정적인 서비스를 위해서 추가적인 룰 등이 필요할 것 같지만요.
추가로, 어플리케이션을 이용하는 방법보다
가능하다면(?) 데이터베이스 자체적으로 처리하는 방법을 찾아보시는걸 권해드립니다.