iT邦幫忙

0

關於MS SQL

  情境是這樣的 有一隻程式在client端同時會上傳一筆資料到兩台server上 為什麼會有兩台server呢? 因為其中一台掛掉另一台還是可以繼續接收,當然這種情況確實有發生,所以就產生了兩邊資料庫的資料表會有不對稱的情況。
  我會將兩邊資料表做個合併的動作,處理方式:透過SSMS 將兩邊資料表匯出成.CSV檔再匯到自己的電腦內的SQLserver,利用UNION的方式合併兩張資料表透過:
 **Select * from 資料表 Where 欄位A In (Select Max(欄位A) from 資料表 Group By 欄位B,欄位C) ** 篩選重複值,目的是將欄位B,C都相同 就視為同一筆,而欄位A是流水編號,所以當兩筆資料相同時但流水編號不同時,則選擇流水編號最大的那筆。
上述的語法在同一張資料表時結果正常(因為有時同一台server上也會遇到client程式重複上傳的狀況),但在UNION後的資料表結果卻還是無法group by。有高手能解惑嗎?

froce iT邦大師 4 級 ‧ 2018-05-31 22:41:59 檢舉
https://docs.microsoft.com/zh-tw/sql/sql-server/failover-clusters/high-availability-solutions-sql-server?view=sql-server-2017

...明明就有HA,幹嘛用笨方法來做。
大概無法打掉重弄HA吧..
必須照以前留下的程式(前人又很多手)繼續維護吧...
e0937557 iT邦新手 5 級 ‧ 2018-06-05 11:19:34 檢舉
謝謝各位先進的指點,其實大家碰到類似的狀況都可以猜到我的處境.確實不是大公司,一人工程師,前人技術債等等都是。針對HA/Cluster這類的知識學校真的沒教 ,沒教原因就不追究了 我會再精進自己的 謝謝大家

2 個回答

2
fuzzylee1688
iT邦新手 2 級 ‧ 2018-06-01 08:54:17
最佳解答

會建HA就一定會建BRS系統, 這一定要有相當規模的公司才辦得到.會問這個也是迫於無奈吧.試用這個Query語法看看.

WITH mQuery AS (
SELECT A.*,
ROW_NUMBER() OVER (PARTITION BY IP_ID ORDER BY SNAP_YM DESC) AS ROW_NUM
FROM DM..DM_CRM_CORP_M A
)
SELECT *
FROM mQuery
WHERE ROW_NUM = 1

9
raytracy
iT邦大神 1 級 ‧ 2018-06-01 00:02:29

不知道是否現在學校資訊科系的學程, 已經不教 HA/Cluster 之類的知識了? 我發現許多出來就業的朋友們, 對於 HA/Cluster 的原理和使用情境, 完全不熟悉, 也不懂得運用.

《萬一其中一台掛掉, 另外一台可以馬上接手》

這是標準的 Failover Cluster 情境, 現代的 DB 幾乎都可以支援設定出這種情境, 為何不使用原廠內建, 測試完整的功能來完成, 卻要自己搞一個半調子, 問題又多又難解, 沒有經過大規模驗證的架構? 似乎開發軟體的人, 很多都傾向自己悶著頭解決問題, 而不懂得去了解原廠為你提供了那些功能?

若採用原廠的 Failover Cluster 方案, 就不會發生這種狀況.
當然, 不能單怪樓主, 因為可能是前人遺留下來的技術債.

只不過, 看到這樣的架構, 就算想幫解也會解得很無力, 因為不知道這個解完之後, 哪邊又會冒出一個意想不到的問題, 又要求解...

我要發表回答

立即登入回答