2009-02-26 65 views
1

我想使用下面的代碼來增長數據庫。但是,我收到以下錯誤。如何檢查大小(3600MB)並在必要時增加它?如何增長數據庫文件?

USING MyDatabase 

ALTER DATABASE MyDatabase 
MODIFY FILE (NAME = MyDatabase_data, SIZE = 3600MB) 

錯誤:修改文件失敗。指定的大小小於或等於當前大小。

更新:由於交通繁忙,我沒有使用Auto Grow。由於我在這裏的設置(很長的無關故事),我需要使用代碼進行更改。但是,如果此代碼運行不止一次,則會出現上述錯誤。我需要在再次嘗試更改之前先檢查大小。

回答

4

數據庫的大小將通過

USE MyDatabase 
EXEC sp_spaceused 

顯示看的註釋sp_spaceused代碼(我碰巧要尋找一個SQL 2000服務器,但相同/相似的將是SQL2005/SQL2008真)

USE master 
EXEC sp_helptext 'sp_spaceused' 

和相關代碼:

declare @dbsize dec(15,0) 
declare @logsize dec(15) 
declare @bytesperpage dec(15,0) 
declare @pagesperMB  dec(15,0) 

    select @dbsize = sum(convert(dec(15),size)) 
     from dbo.sysfiles 
     where (status & 64 = 0) 

    select @logsize = sum(convert(dec(15),size)) 
     from dbo.sysfiles 
     where (status & 64 <> 0) 

    select @bytesperpage = low 
     from master.dbo.spt_values 
     where number = 1 
      and type = 'E' 
    select @pagesperMB = 1048576/@bytesperpage 

    select database_name = db_name(), 
     database_size = 
      ltrim(str((@dbsize + @logsize)/@pagesperMB,15,2) + ' MB') 

所以從您可以在大小保存到一個變量,再比較你試圖設置大小:

DECLARE @database_size bigint 
SELECT @database_size = (@dbsize + @logsize)/@pagesperMB 
IF @database_size < 3600 
BEGIN 
    PRINT 'Expanding MyDatabase ...' 
    ALTER DATABASE MyDatabase 
    MODIFY FILE (NAME = MyDatabase_data, SIZE = 3600MB) 
    PRINT 'Expanding MyDatabase DONE' 
END 
ELSE 
BEGIN 
    PRINT 'No expansion of MyDatabase required' 
END 
2

數據庫將自動增長。 如果你(無論如何MS SQL Server)右鍵單擊數據庫,屬性。你可以設置它的增長百分比,比如說10%,或者固定大小,比如說100Mb。

您不應該自己維護數據庫大小。

+2

恆中密度纖維板的增長將導致分裂和稅收的服務器 - IIRC整個數據庫是在成長過程中鎖定。 當你知道它會增長時設置一個大尺寸是一個很好的做法。 – Sam 2009-02-27 02:15:34

1

MS SQL分配的空間比需要的多。所以你實際使用的數據庫大小通常比分配的大小要小得多。

MS SQL分配的空間比它需要的多,因爲更多數據的分配非常昂貴,而且定期執行而不是每次寫入數據庫時​​都更有效。

如果要一次更改分配多少空間,可以使用參數FILEGROWTH設置數據庫上您希望的文件增長類型。

的值:

  • 0意味着沒有增長允許
  • [X] MB或達到[X] GB指的是多,當您的數據庫目前的規模增長是
  • [ X]%意味着在達到DB當前大小時增長很多%

ALTER DATABASE [databasename] MODIFY FILE (NAME = N'databasename', FILEGROWTH = 1GB) 

要釋放您可以執行DBCC SHRINKDATABASE

額外分配的空間要獲得數據庫的實際大小,你可以執行此:

SELECT size FROM sys.database_files WHERE name = 'databasename' 

要獲得的實際大小您的數據庫日誌可以執行此操作:

SELECT size FROM sys.database_files WHERE name = 'databasename_log' 
1

要獲取大小(和其他呃服務器上的所有數據庫文件的信息)(很明顯,你可以過濾此):

select * from sys.database_files 
相關問題