設定資料庫可用空間為零,也就是沒有更多的空間容納新的資料了,已有資料佔據的空間還是這個資料庫的。那按我的理解,你把這個資料庫現有的空閒的空間shrink掉,然後把資料庫設定成read only,這樣資料庫裡滿滿的全是資料,沒有多餘的空間,別人無法插入新的資料,但是已有的資料是可以select的(前提你的log file要有空間),這樣是不是就達到樓主想要的效果了呢?具體演示如下:首先,檢視當前資料庫的data file和log file的size以及使用了多少空間,可以用下面的指令碼,後面每次我說類似“檢視一下檔案使用情況”時候,我們只有執行一下這個指令碼就可以了:
設定資料庫可用空間為零,也就是沒有更多的空間容納新的資料了,已有資料佔據的空間還是這個資料庫的。那按我的理解,你把這個資料庫現有的空閒的空間shrink掉,然後把資料庫設定成read only,這樣資料庫裡滿滿的全是資料,沒有多餘的空間,別人無法插入新的資料,但是已有的資料是可以select的(前提你的log file要有空間),這樣是不是就達到樓主想要的效果了呢?具體演示如下:首先,檢視當前資料庫的data file和log file的size以及使用了多少空間,可以用下面的指令碼,後面每次我說類似“檢視一下檔案使用情況”時候,我們只有執行一下這個指令碼就可以了:
首先我們建立一個數據庫Test:可以看到我們制定資料檔案初始為100MB,增長為20MB,日誌檔案初始為50MB,增長為50MB。為了減小資料庫自己的一些background thread對我們測試的影響,我們設定資料庫為simple recovery mode,並且不自動建立statistics:下面我們建立一個table然後插入一些資料:我們故意建立的這個table一個record剛好佔滿一個page,所以插入了6400行以後,總共有6400*8KB=50MB的資料被寫入資料庫了,我們可以用上面的指令碼看一下資料庫空間使用情況:可以看到log file已經自動增長了一次變成100MB了,現在使用了19.86MB。data file使用了52.50MB,基本上就是50MB。現在資料庫的狀態,資料檔案和日誌檔案都有空閒空間,為了達到樓主要求的狀態,我們要shrink這兩個檔案。經過shrink以後,再次檢視空間使用情況:可以看到,日誌檔案又變成初始大小50MB了,資料檔案是53MB,資料檔案使用率在99%以上。日誌檔案是需要留有空餘空間的,因為SQL Server本身也要用這個日誌檔案。現在我們只要把資料庫設定成read only的即可:現在應該已經基本上達到了樓主的要求。另外推薦一下我們的公眾微訊號,abitaboutmylife,專門討論資料庫以及相關技術。