[msde2000] Как уменьшить размер базы данных SQL Server? Sql уменьшить размер базы


[msde2000] Как уменьшить размер базы данных SQL Server? [shrink] [database]

ALTER DATABASE MyDatabase SET RECOVERY SIMPLE GO DBCC SHRINKFILE (MyDatabase_Log, 5) GO ALTER DATABASE MyDatabase SET RECOVERY FULL GO

DBCC SHRINKDATABASE работает для меня, но это полный синтаксис:

DBCC SHRINKDATABASE ( database_name, [target_percent], [truncate] )

где target_percent - это желаемый процент свободного места, оставшегося в файле базы данных после сокращения базы данных.

Параметр truncate может быть:

NOTRUNCATE

Заставляет освобожденное файловое пространство сохраняться в файлах базы данных. Если не указано, освобожденное файловое пространство будет выпущено в операционную систему.

TRUNCATEONLY

Вызывает любое неиспользуемое пространство в файлах данных, которые будут выпущены в операционную систему, и сжимает файл до последней выделенной области, уменьшая размер файла, не перемещая никаких данных. Не предпринимается попытка переместить строки на нераспределенные страницы. target_percent игнорируется при использовании TRUNCATEONLY.

... и да no_one прав, сокращение datbase не очень хорошая практика, например, например:

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

сжимающая база данных может иметь большое значение для базы данных, сервера ... много думайте об этом, прежде чем вы это сделаете!

в Интернете есть много блогов и статей об этом.

Вам также потребуется сжать отдельные файлы данных.

Однако не рекомендуется сокращать базы данных. Например, см. Здесь

Поздний ответ, но может быть полезен для кого-то другого

Если ни DBCC ShrinkDatabase / ShrinkFile, ни SSMS (Tasks / Shrink / Database) не помогают, есть инструменты из Quest и ApexSQL, которые могут выполнить эту работу и даже запланировать периодическое сокращение, если вам это нужно.

Я использовал последний в бесплатной пробной версии, чтобы сделать это некоторое время назад, следуя краткому описанию в конце этой статьи:

https://solutioncenter.apexsql.com/sql-server-database-shrink-how-and-when-to-schedule-and-perform-shrinking-of-database-files/

Все, что вам нужно сделать, это установить ApexSQL Backup, нажать кнопку «Shrink database» на главной ленте, выбрать базу данных в появившемся окне и нажать «Готово».

«Поэтому разумно предположить, что много места теперь должно быть восстановлено».

Извиняюсь, если я неправильно понял вопрос, но вы уверены, что это база данных, а не файлы журналов, которые используют пространство? Проверьте, какая модель восстановления находится в базе данных. Скорее всего, это полный файл, что означает, что файл журнала никогда не усекается. Если вам не нужна полная запись о каждой транзакции, вы должны иметь возможность изменить на «Простой», что приведет к усечению журналов. Вы можете сжать базу данных во время процесса. Предполагая, что все идет правильно, процесс выглядит так:

  1. Резервное копирование базы данных!
  2. Переход к простому восстановлению
  3. Shrink db (щелкните правой кнопкой мыши db, выберите все задачи> shrink db -> установите на 10% свободного места)
  4. Убедитесь, что пространство было исправлено, если вам не нужно выполнять полную резервную копию

Если это не сработает (или вы получите сообщение о том, что «файл журнала заполнен» при попытке переключения режимов восстановления), попробуйте следующее:

  1. Резервное копирование
  2. Убейте все соединения с db
  3. Отсоединить db (щелкните правой кнопкой мыши> Отсоединить или щелкнуть правой кнопкой мыши> Все задачи> Отсоединить)
  4. Удалить файл журнала (ldf)
  5. Повторно подключите db
  6. Изменение режима восстановления

и т.п.

Вы также должны изменить минимальный размер файлов данных и журналов. DBCC SHRINKDATABASE сократит данные внутри файлов, которые вы уже выделили. Чтобы уменьшить размер файла до его минимального размера, используйте DBCC SHRINKFILE и укажите новый размер.

Недавно я это сделал. Я пытался сделать компактную версию моей базы данных для тестирования на дороге, но я просто не мог ее сгладить, независимо от того, сколько строк я удалил. В конце концов, после многих других команд в этом потоке, я обнаружил, что мои кластерные индексы не восстанавливались после удаления строк. Восстановление моих индексов сделало так, что я мог бы сгладить должным образом.

Я думаю, вы можете удалить весь свой журнал с переходом от полного к простому восстановлению. Щелкните правой кнопкой мыши на своей базе данных и выберите « Properties и выберите « Options и измените

  • Recovery mode для Simple
  • Containment type None

code-examples.net

Уменьшение размера базы данных tempdb в SQL Server

В данной статье приведены три способа, которые можно использовать для уменьшения размера базы данных tempdb до значения, которое будет меньше последнего заданного размера. Первый способ предоставляет полный контроль над размером файлов базы данных tempdb, но требует перезапуска сервера SQL Server. Второй способ позволяет уменьшить размер базы данных tempdb в целом с некоторыми ограничениями, которые могут потребовать перезапуска сервера SQL Server. Третий способ позволяет уменьшить размер отдельных файлов базы данных tempdb. Последние два способа требуют, чтобы в процессе операции уменьшения размера с базой данных tempdb не производилось никаких действий.Примечание. Эти способы применимы также в случае использования SQL Server 2005. Однако для выполнения этих операций следует использовать среду SQL Server Management Studio, а не программы Enterprise Manager и Query Analyzer. Сведения о базе данных Tempdb

База данных tempdb является временной рабочей областью. Помимо прочего, сервер SQL Server использует базу данных tempdb в следующих целях:

·           хранение временных таблиц, созданных явным образом;

·           хранение рабочих таблиц, содержащих результаты, созданные в процессе обработки запросов и сортировки;

·           хранение материализованных статических курсоров.

Сервер SQL Server записывает в журнал транзакций базы данных tempdb сведения, необходимые только для отката транзакции, но недостаточные для воспроизведения транзакций в процессе восстановления базы данных. Это позволяет повысить производительность выражений INSERT в базе данных tempdb. Кроме того, сведения для воспроизведения каких-либо транзакций не требуется записывать в журнал, поскольку база данных tempdb создается заново каждый раз после перезапуска сервера SQL Server; таким образом, не требуется выполнять накат или откат каких-либо транзакций. При запуске сервера SQL Server база данных tempdb создается заново с помощью копии базы данных model, а ее размер устанавливается равным последнему заданному значению.

По умолчанию база данных tempdb настроена на автоматическое увеличение размера по мере необходимости; таким образом, со временем размер этой базы данных может превысить желаемый размер. Простой перезапуск сервера SQL Server устанавливает размер базы данных равным последнему заданному значению. Заданный размер является последним значением размера, установленным явным образом при выполнении операций, изменяющих размер файла, таких как ALTER DATABASE с параметром MODIFY FILE или выражение DBCC SHRINKFILE. В данной статье приведены три способа, которые можно использовать для уменьшения размера базы данных tempdb до значения меньше заданного размера.

Уменьшение размера базы данных Tempdb, способ 1

Этот способ требует перезапуска сервера SQL Server.Остановите сервер SQL Server. Откройте окно командной строки и запустите SQL Server, выполнив следующую команду:sqlservr -c -fПараметры -c и -f приводят к запуску SQL Server в режиме минимальной конфигурации, в котором размер файла данных базы данных tempdb составляет 1 МБ, а размер файла журнала составляет 0,5 МБ.Примечание. При использовании именованного экземпляра SQL Server необходимо изменить соответствующую папку (Program Files\Microsoft SQL Server\MSSQL$instance name\Binn) и использовать параметр -s (-s%имя_экземпляра%). Подключитесь к серверу SQL Server с помощью средства Query Analyzer и выполните следующие команды Transact-SQL:    ALTER DATABASE tempdb MODIFY FILE    (NAME = 'tempdev', SIZE = размер_в_МБ)    --Желаемый размер файла данных    ALTER DATABASE tempdb MODIFY FILE    (NAME = 'templog', SIZE = размер_в_МБ)    --Желаемый размер файла журнала Остановите сервер SQL Server путем нажатия в окне командной строки клавиш Ctrl-C, перезапустите SQL Server как службу и проверьте размер файлов Tempdb.mdf и Templog.ldf. Ограничение этого способа заключается в том, что он работает только с логическими файлами базы данныхtempdb по умолчанию, tempdev и templog. Если к базе данных tempdb были добавлены дополнительные файлы, их размер можно уменьшить после перезапуска сервера SQL Server как службы. Все файлы базы данных tempdb заново создаются в процессе запуска; таким образом, эти файлы пусты, и их можно удалить. Чтобы удалить дополнительные файлы в базе данных tempdb, выполните команду ALTER DATABASE с параметром REMOVE FILE. 

Уменьшение размера базы данных Tempdb, способ 2

Для уменьшения размера базы данных tempdb в целом выполните команду DBCC SHRINKDATABASE. Команда DBCC SHRINKDATABASE использует параметр target_percent, в котором указывается желаемый размер свободного места в процентах, который останется в файле базы данных после уменьшения размера базы данных. При использовании команды DBCC SHRINKDATABASE может потребоваться перезапуск сервера SQL Server.

Внимание! При выполнении команды DBCC SHRINKDATABASE необходимо, чтобы с базой данных tempdb не производились другие операции. Чтобы гарантировать, что другие процессы не смогут использовать базу данных tempdb при выполнении команды DBCC SHRINKDATABASE, необходимо запустить сервер SQL Server в однопользовательском режиме. Дополнительные сведения см. в разделе Последствия выполнения команды DBCC SHRINKDATABASE или DBCCSHRINKFILE в процессе использования базы данных Tempdbданной статьи.

1.                    Определите место на диске, используемое в настоящий момент базой данных tempdb, при помощи хранимой процедуры sp_spaceused. Затем рассчитайте долю в процентах свободного места на диске, доступную для использования, как значение параметра команды DBCC SHRINKDATABASE; этот расчет основан на желаемом размере базы данных.

Примечание. В некоторых случаях потребуется выполнить команду sp_spaceused @updateusage=true для повторного расчета используемого места на диске, чтобы получить обновленный отчет. Дополнительные сведения о хранимой процедуре sp_spaceused см. на веб-узле SQL Server Books Online.

Рассмотрим пример.

Предположим, что база данных tempdb содержит два файла: основной файл данных (Tempdb.mdf), размер которого составляет 100 МБ, и файл журнала (Tempdb.ldf), размер которого составляет 30 МБ. Предположим, что команда sp_spaceused сообщает, что основной файл данных содержит 60 МБ данных. Также предположим, что необходимо уменьшить размер основного файла данных до 80 МБ. Рассчитаем желаемую долю в процентах свободного места на диске, которое останется после уменьшения размера, 80 МБ - 60 МБ = 20 МБ. Теперь поделим 20 МБ на 80 МБ = 25 % и получим значение параметраtarget_percent. Размер файла журнала транзакций уменьшается соответствующим образом, оставляя 25 % или 20 МБ свободного места после уменьшения размера базы данных. 2.                    Подключитесь к серверу SQL Server с помощью средства Query Analyzer и выполните следующие команды Transact-SQL: 3.                    dbcc shrinkdatabase (tempdb, 'target percent') 4.          -- Эта команда уменьшает размер базы данных в целом Существуют определенные ограничения для использования команды DBCC SHRINKDATABASE для базы данных tempdb. Конечный размер файла данных и файла журнала не может быть меньше размера, указанного при создании базы данных, или последнего размера, явным образом установленного при выполнении операций, изменяющих размер файлов, например команды ALTER DATABASE с параметром MODIFY FILE или команды DBCC SHRINKFILE. Другим ограничением команды DBCC SHRINKDATABASE является расчет значения параметра target_percentage и его зависимость от текущего используемого места на диске.

Уменьшение размера базы данных Tempdb, способ 3

 Использование команды DBCC SHRINKFILE для уменьшения размера отдельных файлов базы данныхtempdb. Команда DBCC SHRINKFILE обеспечивает большую гибкость, чем команда DBCC SHRINKDATABASE, поскольку эту команду можно использовать для отдельного файла базы данных, не затрагивая другие файлы, относящиеся к той же базе данных. Команда DBCC SHRINKFILE использует параметр target size, который равен окончательному желаемому размеру файла базы данных.

1.                    Определите желаемый размер основного файла данных (tempdb.mdf), файла журнала (templog.ldf) и дополнительных файлов, добавленных к базе данных tempdb. Убедитесь в том, что используемое файлами место на диске меньше или равно желаемому размеру. 2.                    Подключитесь к серверу SQL Server с помощью средства Query Analyzer и выполните следующие команды Transact-SQL для конкретных файлов базы данных, размер которых необходимо уменьшить: 3.             use tempdb 4.             go 6.             dbcc shrinkfile (tempdev, 'размер в МБ') 7.             go 8.             -- эта команда уменьшает размер основного файла данных 10.           dbcc shrinkfile (templog, 'размер в МБ') 11.           go 12.           -- эта команда уменьшает размер файла журнала, см. последний абзац. Преимущество команды DBCC SHRINKFILE заключается в том, что она позволяет уменьшить размер файла до размера, меньшего, чем исходный размер. Команду DBCC SHRINKFILE можно выполнять для любых файлов данных и файлов журнала. Ограничение команды DBCC SHRINKFILE заключается в том, что размер базы данных нельзя сделать меньше, чем размер базы данных model.

В SQL Server 7.0 уменьшение размера файла журнала транзакций является отложенной операцией, поэтому для выполнения операции уменьшения базы данных необходимо выполнить операцию усечения журнала и резервного копирования. Тем не менее, по умолчанию для базы данных tempdb параметру trunc log on chkpt присвоено значение ON; следовательно, для данной базы данных не требуется выполнять операцию усечения журнала. Дополнительные сведения об уменьшении размера журнала транзакций базы данных в SQL Server 7.0 см. в следующей статье базы знаний Майкрософт:

256650  INF: Уменьшение размера журнала транзакций в SQL Server 7.0 (Эта ссылка может указывать на содержимое полностью или частично на английском языке) Последствия выполнения команды DBCC SHRINKDATABASE или DBCCSHRINKFILE в процессе использования базы данных Tempdb Если база данных tempdb используется и предпринимается попытка уменьшить ее размер с помощью команды DBCC SHRINKDATABASE или DBCC SHRINKFILE, может появиться множество сообщений об ошибках согласованности, подобных приведенным ниже, а операцию уменьшения размера выполнить не удастся: Server: Msg 2501, Level 16, State 1, Line 1 Could not find table named '1525580473'. Check sysobjects. Server: Msg 8909, Level 16, State 1, Line 0 Table Corrupt: Object ID 1, index ID 0, page ID %S_PGID. The PageId in the page header = %S_PGID. Хотя ошибка 2501 может не означать наличия повреждений в базе данных tempdb, она приводит к сбою операции уменьшения размера. С другой стороны, ошибка 8909 может быть признаком повреждения в базе данных tempdb. Перезапустите сервер SQL Server, чтобы заново создать базу данных tempdb и очистить ее от ошибок согласованности. Тем не менее, имейте в виду, что могут быть другие причины ошибок физического повреждения данных, таких как ошибка 8909, включая проблемы с подсистемой ввода-вывода.

www.bulygin.su

database - Как уменьшить размер базы данных SQL Server?

Это старый вопрос, но я только что на него набросился.

Действительно короткий и правильный ответ уже дан и имеет наибольшее количество голосов. Это как вы сокращаете журнал транзакций, и это, вероятно, проблема с OP. И когда журнал транзакций вышел из-под контроля, его часто нужно убирать назад, но следует позаботиться о том, чтобы предотвратить появление в будущем ситуаций, когда журнал выходит из-под контроля. Этот вопрос на dba.se объясняет это. В принципе - не позволяйте ему получить это в первую очередь благодаря правильной модели восстановления, обслуживанию журнала транзакций, управлению транзакциями и т.д.

Но большой вопрос, который возникает у меня при чтении этого вопроса о сжатии файла данных (или даже файла журнала), - почему? и , какие плохие вещи случаются при попытке? Похоже, что сжимаются операции. Теперь в этом случае это имеет смысл в некотором смысле - потому что выпуски MSDE/Express ограничены максимальным размером БД. Но правильным ответом может быть просмотр правильной версии для ваших нужд. И если вы наткнетесь на этот вопрос, пытаясь свернуть свою производственную базу данных, и это не причина, вы должны задать себе вопрос почему?.

Я не хочу, чтобы кто-то искал в Интернете, как "сжимать базу данных", сталкиваясь с этим и думая, что это круто или приемлемо.

Сокращение данных - это особая задача, которая должна быть зарезервирована для особых случаев. Учтите, что при сжатии базы данных вы эффективно фрагментируете свои индексы. Учтите, что когда вы сокращаете базу данных, вы убираете свободное пространство, которое база данных может когда-нибудь разрасти обратно - эффективно тратит ваше время и приносит удар производительности операции усадки только для того, чтобы увидеть, как DB снова растет.

Я написал об этой концепции в нескольких блогах о сокращении баз данных. Этот вызов называется " Не прикасайтесь к этой кнопке сжимания" сначала приходит на ум. Я говорю об этих концепциях, изложенных здесь, но также о концепции "правильной калибровки" вашей базы данных. Намного лучше решить, какой размер вашей базы данных должен быть, планировать будущий рост и распределять его на эту сумму. С моментальной инициализацией файлов, доступной в SQL Server 2005 и более поздних версиях для файлов данных, стоимость роста ниже - но я по-прежнему предпочитаю иметь правильное начальное приложение - и я гораздо менее боюсь пробелов в базе данных, чем я в целом, без мысли.:)

qaru.site

Уменьшить размер базы данных

Вопрос: Большой размер базы данных по сравнению с файлом Excel

Добрый день!

Есть база, 120 тысяч строк и 65 столбцов. Данные в одном столбце - дата. В паре других - числовые (двойное, с плавающей точкой). И прочие столбцы - текстовые (включено сжатие юникода).

Тем не менее, в экселе (xlsb) объем, допустим, 11 мегабайт. То же самое в Access - раз в 9 или даже 10 больше. То есть в среднем 100 мегабайт в лучшем случае, в Access.

Не понимаю, почему такая разница и как уменьшить объем базы. Сжатие и оптимизацию выполнял, не сильно помогло. Наименования столбцов длинные, на русском, например "Временный_признак_для_тестового_аккаунта" (то есть русские буквы только с подчеркиванием вместо пробелов).

Один столбец непрерывный, другие же могут иметь много пустых строчек или ячеек. При этом несколько столбцов содержат полностью повторяющиеся значения с первой по последнюю ячейку...

Странно, но даже если всего лишь один столбец заполнен, пусть и повторяющимися значениями, а все прочие столбцы пустые - то так же объем отнимается на диске.. Причем без разницы, импорт изэкселя, или просто создать в базе вручную..

Ответ: Да, в экселе все чудесно, особенно в формате xlsb. Очень компактный по объему файл. С Акцесс просто не так дано, не по свое воле выбрал, пытаюсь просто понять, как визуально выбрать нужные параметры для импортированных полей (текст произвольный вперемещку с пустыми строками).

Не могу разбить файл по нескольким таблицам в силу обстоятельств. Допустим, есть столбец из эксель. Допустим А. В нем счетчик от 1 до 120000 (Range A1:A120000), просто пронумерованы строки. Есть столбец B. В нем 120 тысяч раз повторено одно и то же слово с первой строки по последнюю. (Range D1:B120000). При этом некоторые строки в столбике B потом могли очистить, то есть появились пустые строки.

Импортирую все это дело в эксель. Для первого столбца понятно выбираю чисоловой формат. Но такой столбец один и он на вес сильно не повлияет. Вот для второго столбика визуально что нужно сделать в свойствах поля...? Сорри, я может и туплю, но разобраться бы раз...

forundex.ru

Уменьшение размера базы данных tempdb в SQL Server: iron_fr5

Статья конечно интересная, но в итоге выяснилось, что достаточно перезапустить SQL сервак и БД tempdb пересоздастся с новым размером в 8 мегабайт, и ни следа от страшныз 130 гигов!!!

А так, вот читаем, в принципе обычный шринк.

Источник: http://support.microsoft.com/kb/307487+ How To Move TEMPDB Files: http://www.youtube.com/watch?v=uf-ZWCx_EHU

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

Примечание. Эти способы применимы также в случае использования SQL Server 2005. Однако для выполнения этих операций следует использовать среду SQL Server Management Studio, а не программы Enterprise Manager и Query Analyzer.

Сведения о базе данных Tempdb

База данных tempdb является временной рабочей областью. Помимо прочего, сервер SQL Server использует базу данных tempdb в следующих целях:
  • хранение временных таблиц, созданных явным образом;
  • хранение рабочих таблиц, содержащих результаты, созданные в процессе обработки запросов и сортировки;
  • хранение материализованных статических курсоров.
Сервер SQL Server записывает в журнал транзакций базы данных tempdb сведения, необходимые только для отката транзакции, но недостаточные для воспроизведения транзакций в процессе восстановления базы данных. Это позволяет повысить производительность выражений INSERT в базе данных tempdb. Кроме того, сведения для воспроизведения каких-либо транзакций не требуется записывать в журнал, поскольку база данных tempdb создается заново каждый раз после перезапуска сервера SQL Server; таким образом, не требуется выполнять накат или откат каких-либо транзакций. При запуске сервера SQL Server база данных tempdb создается заново с помощью копии базы данных model, а ее размер устанавливается равным последнему заданному значению.

По умолчанию база данных tempdb настроена на автоматическое увеличение размера по мере необходимости; таким образом, со временем размер этой базы данных может превысить желаемый размер. Простой перезапуск сервера SQL Server устанавливает размер базы данных равным последнему заданному значению. Заданный размер является последним значением размера, установленным явным образом при выполнении операций, изменяющих размер файла, таких как ALTER DATABASE с параметром MODIFY FILE или выражение DBCC SHRINKFILE. В данной статье приведены три способа, которые можно использовать для уменьшения размера базы данных tempdb до значения меньше заданного размера....

iron-fr5.livejournal.com

Уменьшение размера базы данных tempdb в SQL Server

Tsql теория > Уменьшение размера базы данных tempdb в SQL Server 01.04.2013 14:11:45

Статья:

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

Примечание. Эти способы применимы также в случае использования SQL Server 2005. Однако для выполнения этих операций следует использовать среду SQL Server Management Studio, а не программы Enterprise Manager и Query Analyzer.

Сведения о базе данных Tempdb

База данных tempdb является временной рабочей областью. Помимо прочего, сервер SQL Server использует базу данных tempdb в следующих целях:
  • хранение временных таблиц, созданных явным образом;
  • хранение рабочих таблиц, содержащих результаты, созданные в процессе обработки запросов и сортировки;
  • хранение материализованных статических курсоров.
Сервер SQL Server записывает в журнал транзакций базы данных tempdb сведения, необходимые только для отката транзакции, но недостаточные для воспроизведения транзакций в процессе восстановления базы данных. Это позволяет повысить производительность выражений INSERT в базе данных tempdb. Кроме того, сведения для воспроизведения каких-либо транзакций не требуется записывать в журнал, поскольку база данных tempdb создается заново каждый раз после перезапуска сервера SQL Server; таким образом, не требуется выполнять накат или откат каких-либо транзакций. При запуске сервера SQL Server база данных tempdb создается заново с помощью копии базы данных model, а ее размер устанавливается равным последнему заданному значению. 

По умолчанию база данных tempdb настроена на автоматическое увеличение размера по мере необходимости; таким образом, со временем размер этой базы данных может превысить желаемый размер. Простой перезапуск сервера SQL Server устанавливает размер базы данных равным последнему заданному значению. Заданный размер является последним значением размера, установленным явным образом при выполнении операций, изменяющих размер файла, таких как ALTER DATABASE с параметром MODIFY FILE или выражение DBCC SHRINKFILE. В данной статье приведены три способа, которые можно использовать для уменьшения размера базы данных tempdb до значения меньше заданного размера.

Уменьшение размера базы данных Tempdb, способ 1

Этот способ требует перезапуска сервера SQL Server.
  1. Остановите сервер SQL Server. Откройте окно командной строки и запустите SQL Server, выполнив следующую команду:

    sqlservr -c -f

    Параметры -c и -f приводят к запуску SQL Server в режиме минимальной конфигурации, в котором размер файла данных базы данных tempdb составляет 1 МБ, а размер файла журнала составляет 0,5 МБ. 

    Примечание. При использовании именованного экземпляра SQL Server необходимо изменить соответствующую папку (Program Files\Microsoft SQL Server\MSSQL$instance name\Binn) и использовать параметр -s (-s%имя_экземпляра%).

  2. Подключитесь к серверу SQL Server с помощью средства Query Analyzer и выполните следующие команды Transact-SQL: ALTER DATABASE tempdb MODIFY FILE (NAME = 'tempdev', SIZE = размер_в_МБ) --Желаемый размер файла данных ALTER DATABASE tempdb MODIFY FILE (NAME = 'templog', SIZE = размер_в_МБ) --Желаемый размер файла журнала
  3. Остановите сервер SQL Server путем нажатия в окне командной строки клавиш Ctrl-C, перезапустите SQL Server как службу и проверьте размер файлов Tempdb.mdf и Templog.ldf.
Ограничение этого способа заключается в том, что он работает только с логическими файлами базы данных tempdb по умолчанию, tempdev и templog. Если к базе данных tempdb были добавлены дополнительные файлы, их размер можно уменьшить после перезапуска сервера SQL Server как службы. Все файлы базы данных tempdb заново создаются в процессе запуска; таким образом, эти файлы пусты, и их можно удалить. Чтобы удалить дополнительные файлы в базе данных tempdb, выполните команду ALTER DATABASE с параметром REMOVE FILE. 

Уменьшение размера базы данных Tempdb, способ 2

Для уменьшения размера базы данных tempdb в целом выполните команду DBCC SHRINKDATABASE. Команда DBCC SHRINKDATABASE использует параметр target_percent, в котором указывается желаемый размер свободного места в процентах, который останется в файле базы данных после уменьшения размера базы данных. При использовании команды DBCC SHRINKDATABASE может потребоваться перезапуск сервера SQL Server. 

Внимание! При выполнении команды DBCC SHRINKDATABASE необходимо, чтобы с базой данных tempdb не производились другие операции. Чтобы гарантировать, что другие процессы не смогут использовать базу данныхtempdb при выполнении команды DBCC SHRINKDATABASE, необходимо запустить сервер SQL Server в однопользовательском режиме. Дополнительные сведения см. в разделе Последствия выполнения команды DBCC SHRINKDATABASE или DBCCSHRINKFILE в процессе использования базы данных Tempdb данной статьи.

  1. Определите место на диске, используемое в настоящий момент базой данных tempdb, при помощи хранимой процедуры sp_spaceused. Затем рассчитайте долю в процентах свободного места на диске, доступную для использования, как значение параметра команды DBCC SHRINKDATABASE; этот расчет основан на желаемом размере базы данных.

    Примечание. В некоторых случаях потребуется выполнить команду sp_spaceused @updateusage=true для повторного расчета используемого места на диске, чтобы получить обновленный отчет. Дополнительные сведения о хранимой процедуре sp_spaceused см. на веб-узле SQL Server Books Online. 

    Рассмотрим пример.

    Предположим, что база данных tempdb содержит два файла: основной файл данных (Tempdb.mdf), размер которого составляет 100 МБ, и файл журнала (Tempdb.ldf), размер которого составляет 30 МБ. Предположим, что команда sp_spaceused сообщает, что основной файл данных содержит 60 МБ данных. Также предположим, что необходимо уменьшить размер основного файла данных до 80 МБ. Рассчитаем желаемую долю в процентах свободного места на диске, которое останется после уменьшения размера, 80 МБ - 60 МБ = 20 МБ. Теперь поделим 20 МБ на 80 МБ = 25 % и получим значение параметра target_percent. Размер файла журнала транзакций уменьшается соответствующим образом, оставляя 25 % или 20 МБ свободного места после уменьшения размера базы данных.

  2. Подключитесь к серверу SQL Server с помощью средства Query Analyzer и выполните следующие команды Transact-SQL: dbcc shrinkdatabase (tempdb, 'target percent') -- Эта команда уменьшает размер базы данных в целом
Существуют определенные ограничения для использования команды DBCC SHRINKDATABASE для базы данных tempdb. Конечный размер файла данных и файла журнала не может быть меньше размера, указанного при создании базы данных, или последнего размера, явным образом установленного при выполнении операций, изменяющих размер файлов, например команды ALTER DATABASE с параметром MODIFY FILE или команды DBCC SHRINKFILE. Другим ограничением команды DBCC SHRINKDATABASE является расчет значения параметра target_percentage и его зависимость от текущего используемого места на диске. 

Уменьшение размера базы данных Tempdb, способ 3

Использование команды DBCC SHRINKFILE для уменьшения размера отдельных файлов базы данных tempdb. Команда DBCC SHRINKFILE обеспечивает большую гибкость, чем команда DBCC SHRINKDATABASE, поскольку эту команду можно использовать для отдельного файла базы данных, не затрагивая другие файлы, относящиеся к той же базе данных. Команда DBCC SHRINKFILE использует параметр target size, который равен окончательному желаемому размеру файла базы данных. 

Внимание! Команду DBCC SHRINKFILE необходимо выполнять, когда с базой данных tempdb не выполняются другие операции. Чтобы гарантировать, что другие процессы не смогут использовать базу данных tempdb при выполнении команды DBCC SHRINKFILE, необходимо запустить сервер SQL Server в однопользовательском режиме. Дополнительные сведения о команде DBCC SHRINKFILE см. в разделе Последствия выполнения команды DBCC SHRINKDATABASE или DBCCSHRINKFILE в процессе использования базы данных Tempdb данной статьи.

  1. Определите желаемый размер основного файла данных (tempdb.mdf), файла журнала (templog.ldf) и дополнительных файлов, добавленных к базе данных tempdb. Убедитесь в том, что используемое файлами место на диске меньше или равно желаемому размеру.
  2. Подключитесь к серверу SQL Server с помощью средства Query Analyzer и выполните следующие команды Transact-SQL для конкретных файлов базы данных, размер которых необходимо уменьшить: use tempdb go dbcc shrinkfile (tempdev, 'размер в МБ') go -- эта команда уменьшает размер основного файла данных dbcc shrinkfile (templog, 'размер в МБ') go -- эта команда уменьшает размер файла журнала, см. последний абзац.
Преимущество команды DBCC SHRINKFILE заключается в том, что она позволяет уменьшить размер файла до размера, меньшего, чем исходный размер. Команду DBCC SHRINKFILE можно выполнять для любых файлов данных и файлов журнала. Ограничение команды DBCC SHRINKFILE заключается в том, что размер базы данных нельзя сделать меньше, чем размер базы данных model. 

В SQL Server 7.0 уменьшение размера файла журнала транзакций является отложенной операцией, поэтому для выполнения операции уменьшения базы данных необходимо выполнить операцию усечения журнала и резервного копирования. Тем не менее, по умолчанию для базы данных tempdb параметру trunc log on chkpt присвоено значение ON; следовательно, для данной базы данных не требуется выполнять операцию усечения журнала. Дополнительные сведения об уменьшении размера журнала транзакций базы данных в SQL Server 7.0 см. в следующей статье базы знаний Майкрософт:

256650 INF: Уменьшение размера журнала транзакций в SQL Server 7.0 (Эта ссылка может указывать на содержимое полностью или частично на английском языке)

Последствия выполнения команды DBCC SHRINKDATABASE или DBCCSHRINKFILE в процессе использования базы данных Tempdb

Если база данных tempdb используется и предпринимается попытка уменьшить ее размер с помощью команды DBCC SHRINKDATABASE или DBCC SHRINKFILE, может появиться множество сообщений об ошибках согласованности, подобных приведенным ниже, а операцию уменьшения размера выполнить не удастся:

Server: Msg 2501, Level 16, State 1, Line 1 Could not find table named '1525580473'. Check sysobjects.

-или-

Server: Msg 8909, Level 16, State 1, Line 0 Table Corrupt: Object ID 1, index ID 0, page ID %S_PGID. The PageId in the page header = %S_PGID.

Хотя ошибка 2501 может не означать наличия повреждений в базе данных tempdb, она приводит к сбою операции уменьшения размера. С другой стороны, ошибка 8909 может быть признаком повреждения в базе данных tempdb. Перезапустите сервер SQL Server, чтобы заново создать базу данных tempdb и очистить ее от ошибок согласованности. Тем не менее, имейте в виду, что могут быть другие причины ошибок физического повреждения данных, таких как ошибка 8909, включая проблемы с подсистемой ввода-вывода. 

iocsha.ddns.net

Как уменьшить размер базы данных сервера MS SQL

У меня есть веб-сайт, который работает на MS SQL Server 2014 Enterprise с двумя кластерными виртуальными машинами и AlwaysOn. Резервное копирование базы данных создается каждую ночь, а размер составляет 20 ГБ.

На моем ноутбуке я также установил MS SQL Server 2014 Enterprise. Я загрузил резервную копию базы данных 20G, а затем создал резервную копию. Интересно, размер этой резервной копии 3GB, Почему существует такая большая разница? Я очень надеюсь, что производственная установка также создает резервные копии с аналогичным размером.

Если я восстановил базу данных на производстве с резервной копией 3 ГБ с моего ноутбука, я что-нибудь потеряю? Какие-либо последствия? Смогу ли я снова получить 20 ГБ ночных резервных копий? У меня есть индексы по текстовым полям некоторых таблиц. Ничего особенного.

Обратите внимание, что мне не нужны журналы транзакций. Мне не нужно возвращать базу данных обратно в предыдущую точку данных. Я просто хочу уменьшить размер резервной копии на рабочем сервере.

Спасибо за любую информацию!

Процесс

На вашем «производственном» сервере изнутри SSMS идти к Свойства сервера> Параметры базы данных на этом примере SQL Server и обеспечить Сжатие базы данных вариант выбрано, Затем удалите или переименуйте файл резервной копии на 20 ГБ, а затем снова запустите полное задание резервного копирования.

ЗАМЕТКА:  Обязательно удалите файл BAK объемом 20 ГБ SQL или переименуйте его перед повторным запуском резервного копирования после проверки Сжатие базы данных вариант, хотя вы не увидите экономии пространства.

Ваши риски и корректировки модели восстановления

В зависимости от ваших потребностей и того, какие риски вы (или ваша компания) готовы взять с данными и что сможете восстановить, резервные копии журналов транзакций могут быть не важны, поскольку вы понимаете свои данные, риски и т. Д., Только если бы вы знайте это значение.

Рассмотрите возможность изменения БД модель восстановления в просто и делать только полные резервные копии БД и перезаписывать существующую резервную копию на каждый прогон и не присоединяться к существующей резервной копии.

Дополнительный ресурс

ityouth.ru