2011-03-17 37 views
1

我在兩個不同的服務器上有兩個相同的數據庫:一個主數據庫和一個備份數據庫。用戶目前在兩個服務器中。我們在tblOrder中有一個OrderId列作爲自動遞增主鍵。現在,當我將orderid發佈到我們的amazon服務器時,它有時會顯示錯誤,因爲兩個數據庫上的orderid都是相同的數字,並且系統不接受重複的orderid。通過比較兩個不同的數據庫獲取最大ID

我想從兩個服務器獲取最大的orderid,然後將新的orderid賦給當前工作的數據庫。我將從中刪除自動遞增的種子,以便在插入命令中手動插入orderid。

+0

是SQL-Server還是Oracle? – CloudyMarble 2011-03-17 06:28:46

+0

謝謝你們這麼棒的主意。我一定會執行它。 :-D – 2011-03-17 09:06:26

+0

這裏的解決方案是讓您的生產用戶退出備份數據庫。 – 2012-03-24 01:37:37

回答

4

解決方案:

  1. 如前所述,您可以更改每個標識字段設置爲2的增量,並有一個服務器的1和種子其他的種子爲2.

  2. 假設您沒有預見到在每臺服務器上處理超過10億個訂單,只需將第二臺服務器上的種子設置爲1,000,000,000。無需改變增量。

  3. 使用uniqueidentifier(GUID)作爲主鍵而不是整數。對於SQL Server 2005及更高版本,可以將缺省約束設置爲NEWSEQUENTIALID(),以防止插入不斷創建頁面拆分。

+0

我同意你的意見,但我們的服務器每天做約5,000,000每天的交易。它會正常工作。但這不是一個永久的解決方案。但我會執行你的觀點3,確實非常有用。感謝: - 分享它。 – 2011-03-17 09:08:29

1

在MS-SQL中,您可以爲自動編號字段指定種子和增量。 使種子不同,選擇的增量= 2

+0

可能值得一提的是兩個種子之間的差異必須是奇數:) – 2011-03-17 06:42:37