2013-07-10 146 views
0

我正在處理一個擁有數十億行大量表的大型數據庫的應用程序。我有分佈在世界各地的開發團隊。他們需要爲各種目的訪問生產數據庫。他們已被授予數據庫只讀權限。 如果您使用查詢with (nolock),它工作正常。但是,如果您沒有使用nolock,則可以通過運行一些永不結束的查詢來降低整個應用程序。去年發生了幾次,所以現在我猶豫是否允許新開發者。在SQL Server中授予ReadOnly權限(nolock)

我知道爲每個表創建一個視圖with (nolock)並僅授予對這些視圖的權限是一個解決方案,但不知何故,我不想爲此創建200個視圖。在某種程度上,所有的查詢運行無鎖該用戶或

  • 強制用戶使用with (nolock)
  • 我們

    1. 授予權限:

      我正在尋找一種方式來使用SQL Server 2008 R2。 PS:我從來沒有遇到過這個問題,直到與另一個基於Oracle的應用程序相比,它是這個應用程序的50倍。

    +0

    http://msdn.microsoft.com/en-ca/library/ms189040%28v=sql.100%29.aspx? –

    +0

    重複的http://stackoverflow.com/questions/64208/how-to-force-nolock-hint-for-sql-server-logins – Vasanth

    +0

    @MarcB設置遠程查詢的時間限制不會幫助我。在這個數據庫中查詢必然需要很長時間。我想要的只是即使開發人員正在讀取數據,它也不應該阻止應用程序寫入同一個表。這可以通過在查詢中使用nolock或設置Isoloation Level來實現,但這取決於開發人員使用它們。我想強制這個。 – Pankaj

    回答

    0

    如果您使用的是Enterprice版本,則可以嘗試使用資源調控器。設置查詢執行的最大時間。這不是你要求的,但它可以解決永不停止的查詢問題。你可以看看here(場景2)。您也可以查看更改數據庫屬性的方向(Using Snapshot Isolation) - 這可能是您爲什麼在Oracle中沒有遇到過這樣的問題 - Oracle默認使用它,但對於SQL Server而言,它相對較新的功能(> = 2005)。應該小心,因爲它會影響tempdb。

    +0

    設置的最大時間已經設置,但其值太高,無法解決問題。 如果有任何方法強制它對特定用戶的所有查詢,快照隔離將會有所幫助。 Infact對於這個問題READ UNCOMMITTED模式對我來說同樣好。 – Pankaj

    +0

    @Pankaj *你可以設置讀取提交的快照數據庫的範圍,所以它被用來代替讀取提交 - 我想這對所有用戶都會更好,但是當然,你應該知道的更好。 *我不是在談論「最大執行時間」 - 它用於限制查詢可以使用的最大CPU時間。通過資源調控器,您可以爲特定的一組或多個用戶進行設置。 –

    +0

    謝謝@Jānis!這將解決問題。 – Pankaj