powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Уменьшение БД
9 сообщений из 9, страница 1 из 1
Уменьшение БД
    #32017027
Вячеслав
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, подскажите, если не сложно,
как уменьшить размер БД.
База с данными ~500М, после удаления всех данных
размер меняется, но не слишком. Как вернуть ее
в исходное сосояние (по размеру)?

Спасибо.
...
Рейтинг: 0 / 0
Уменьшение БД
    #32017029
SergeK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shrink Database (из Enterprise Manager правой кнопочкой мыши на базу данных, затем All Tasks, Shrink Database).

мне известен этот способ...
...
Рейтинг: 0 / 0
Уменьшение БД
    #32017030
Вячеслав
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, это понятно,
но не слишком помогает
...
Рейтинг: 0 / 0
Уменьшение БД
    #32017032
SergeK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в интерфейсе от SQL 2000 есть ещё такие опции для Shrink... как "Move pages to beginning of file before shrinking" и "Maximum free space in files after shrinking". Плюс ещё помогает обрубить transactions log, а потом сделать шринк, но всё равно, сжимается не всё. У меня оставалось в худшем случае 25% неиспользуемого места для небольших баз (порядка 50 мег), для больших - меньше (в процентах)
...
Рейтинг: 0 / 0
Уменьшение БД
    #32017035
SergeK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
можно сделать ещё вот что:
Вариант 1. Если база нужна пустая. Отскриптовать все объекты, грохнуть базу, а затем создать её заново.
Вариант 2. Если база с данными. Сделать новую базу, затем туда через булк-копи перенести всю информацию (transaction log при этом не заполняется)
...
Рейтинг: 0 / 0
Уменьшение БД
    #32017036
SergeK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а ещё есть T-SQL:
DBCC SHRINKFILE, DBCC SHRINKDATABASE - параметры вызова можно посмотреть в Books Online
этого хватит?
...
Рейтинг: 0 / 0
Уменьшение БД
    #32017037
Вячеслав
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, всем спасибо!
...
Рейтинг: 0 / 0
Уменьшение БД
    #32017043
Фотография Александр Гладченко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поскольку база сжимается до первой заполненной страницы, её можно предварительно дефрагментировать, например, взяв идею из этого примера:

--**************************************
-- Name: SQL Database Defrag
-- Description:This code will organise the indexes on your database to improve speed. (Simple)
-- By: philip hannent
--
--
-- Inputs:None
--
-- Returns:None
--
--Assumes:When you run this code it will create a stored proc. Once you have done that just run
EXEC usp_DefragDatabase 'Test'
This will perform the defrag.
--
--Side Effects:While the defrag is in process you performace will take a dive.
--This code is copyrighted and has limited warranties.
--Please see http://www.Planet-Source-Code.com/xq/ASP/txtCodeId.275/lngWId.5/qx/vb/scripts/ShowCode.htm
--for details.
--**************************************

--Re-indexes the specified database
CREATE PROCEDURE usp_DefragDatabase
-- We don't use sysname because it might not be long enough.
-- sysname is 128 chars, so we use double that.
@dbname nvarchar(256)
AS


BEGIN
-- Quote the database name with brackets
DECLARE @quoteddbname nvarchar(256)
set @quoteddbname = quotename( @dbname )
-- The outer EXEC is so we can do USE, not allowed in stored procs
-- The inner EXEC does the actual reindex on each table in the
-- specified database
EXEC('USE'+ @quoteddbname +'
DECLARE @sTableName sysname
DECLARE PKMS_Tables CURSOR LOCAL FOR
select table_name from information_schema.tables
where table_type = ''base table'' order by 1
OPEN PKMS_Tables
FETCH NEXT FROM PKMS_Tables INTO @sTableName
WHILE @@FETCH_STATUS = 0


BEGIN
select @sTablename = quotename(@sTablename, ''[]'')
EXEC('' DBCC DBREINDEX ( ''+@sTableName+'') WITH NO_INFOMSGS'')
FETCH NEXT FROM PKMS_Tables INTO @sTableName
END
CLOSE PKMS_Tables')
END
GO
...
Рейтинг: 0 / 0
Уменьшение БД
    #32017048
dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделайте DBCC updateusage(dbname) и посмотрите в полученном результате, какие таблицы занимают больше всего диского пространства и на что (индексы, данные, резерв), а после этого можно делать какие то выводы. (Размер приводится в страницах. Каждая страница=8 Кб).

По каждой таблице информацию можно смотреть и sp_spaceused, но она может быть устаревшей
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Уменьшение БД
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]