Как вырастить файл базы данных? - PullRequest
1 голос
/ 27 февраля 2009

Я пытаюсь увеличить базу данных, используя следующий код ниже. Однако я получаю следующую ошибку. Как проверить размер (3600 МБ) и при необходимости увеличить его?

USING MyDatabase

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

Ошибка: ошибка MODIFY FILE. Указанный размер меньше или равен текущему размеру.

ОБНОВЛЕНИЕ: я не использую Auto Grow из-за интенсивного трафика. Из-за настроек, которые у меня есть (длинная несвязанная история), мне нужно внести изменения, используя код. Однако, если этот код выполняется несколько раз, я получаю ошибку, описанную выше. Мне нужно сначала проверить размер, прежде чем пытаться изменить снова.

Ответы [ 4 ]

4 голосов
/ 27 февраля 2009

Размер БД будет показан как

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 голосов
/ 27 февраля 2009

База данных будет автоматически расти. Если вы (MS SQL Server в любом случае) щелкните правой кнопкой мыши на базе данных, свойства. Вы можете установить его рост в процентах, скажем, на 10%, или на фиксированный размер, скажем, 100 МБ.

Вам не нужно самостоятельно поддерживать размер базы данных.

1 голос
/ 27 февраля 2009

Чтобы получить размер (и другую информацию) всех файлов базы данных на сервере (очевидно, вы можете отфильтровать это):

select * from sys.database_files 
1 голос
/ 27 февраля 2009

MS SQL выделяет больше места, чем нужно. Таким образом, ваш фактический используемый размер базы данных часто намного меньше, чем выделенный размер.

MS SQL выделяет больше места, чем нужно, потому что выделение большего количества данных довольно дорого, и более эффективно делать это периодически, а не при каждой записи в БД.

Если вы хотите изменить объем выделенного пространства за раз, вы можете использовать параметр FILEGROWTH , чтобы установить тип роста файла, который вы хотите использовать в своей базе данных.

Значение:

  • 0 означает, что рост не разрешен
  • [X] МБ или [X] ГБ означает значительный рост при достижении текущего размера БД
  • [X]% означает рост на столько процентов при достижении текущего размера БД

.

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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...