Windows internal database как удалить
Вопрос
У меня проблема. Как бы это можно было удалить эту внутреннюю базу для того что бы переставить коректно мой WSUS. МОжет поделитесь опытом как бы это красиво сделать?
Я удалил CleanupTool записб про WSUS. Тут конечно он стартанул, все ок. потом началась беда с этой базой. ее я тоже этой утилой почистил. но все равно при установке WSUS он пише что мол при установке внтуренней базы произошла очень сильная непоравимая ошибка, и что далее нельзя. кароче помогите как быть, что сделать что бы грохнуть базу и что бы поднять мой WSUS по новой. у меня кампутер вне досягаемости, могу только удаленно делать, так что по поводу как бы это переустановить даже не предлагайте.
Ответы
MS SQL Express Edition- фриварная версия MS SQL, имеющая некоторые ограничения по функциональности по сравнению, скажем, со Standard Edition, а именно- отсутствие Analysis Service, ограничение на размер каждой базы в 4Г, и еще чего-то. Для нужд ВСУС-а более чем достаточно. Ограничения на число коннектов нет (точнее, оно такое же, как у Standard, кажется, около 32К соединений). Рулить им можно тем же Management Studio. Возможна работа по сети (правда, по умолчанию эта возможность отключена, но легко включается штатными средствами).
На самом деле, Internal Database- это MS SQL Embedded Edition, еще более урезанная версия от Express Edition: нет доступа из сети, управляется только скриптами, и т.д.
Скачать можно в центре загрузки Микрософта.
Windows internal database как удалить
Вопрос
У меня проблема. Как бы это можно было удалить эту внутреннюю базу для того что бы переставить коректно мой WSUS. МОжет поделитесь опытом как бы это красиво сделать?
Я удалил CleanupTool записб про WSUS. Тут конечно он стартанул, все ок. потом началась беда с этой базой. ее я тоже этой утилой почистил. но все равно при установке WSUS он пише что мол при установке внтуренней базы произошла очень сильная непоравимая ошибка, и что далее нельзя. кароче помогите как быть, что сделать что бы грохнуть базу и что бы поднять мой WSUS по новой. у меня кампутер вне досягаемости, могу только удаленно делать, так что по поводу как бы это переустановить даже не предлагайте.
Ответы
MS SQL Express Edition- фриварная версия MS SQL, имеющая некоторые ограничения по функциональности по сравнению, скажем, со Standard Edition, а именно- отсутствие Analysis Service, ограничение на размер каждой базы в 4Г, и еще чего-то. Для нужд ВСУС-а более чем достаточно. Ограничения на число коннектов нет (точнее, оно такое же, как у Standard, кажется, около 32К соединений). Рулить им можно тем же Management Studio. Возможна работа по сети (правда, по умолчанию эта возможность отключена, но легко включается штатными средствами).
На самом деле, Internal Database- это MS SQL Embedded Edition, еще более урезанная версия от Express Edition: нет доступа из сети, управляется только скриптами, и т.д.
Скачать можно в центре загрузки Микрософта.
Blog of Khlebalin Dmitriy
(Дорогу осилит идущий…)
Очистка и индексация базы WSUS (troubleshooting).
Место на нашем WSUS сервере ежедневно таяло на глазах. Решили зачистить старые обновления для Windows 7, 2008 и прочих уже почти отсутствующих у нас операционок.
Для начала стоит попробовать традиционный метод: «Чистка базы WSUS через Server Cleanup Wizard».
Нашли интересный баг, когда проставляем все галки, то сервер наглухо зависает (у нас «провисел» почти сутки) но так ничего не очистилось. А самое интересное, свободные 20 гиг, которые ранее были свободны на диске, тоже куда-то делись 😦
Если галки выставлять поочередно, то что-то очищается.
Но когда ставим галку «Неиспользуемые обновления и редакции обновлений», вылетает: «Ошибка базы данных».
Попробовали сделать PowerShell скриптом (можно поочередно вбивать команды, можно вставить в cmd файл и запустить его):
PS1:
[reflection.assembly]::LoadWithPartialName(«Microsoft.UpdateServices.Administration») | out-null
$wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::GetUpdateServer();
$cleanupScope = new-object Microsoft.UpdateServices.Administration.CleanupScope;
$cleanupScope.DeclineSupersededUpdates = $true
$cleanupScope.DeclineExpiredUpdates = $true
$cleanupScope.CleanupObsoleteUpdates = $true
$cleanupScope.CompressUpdates = $true
$cleanupScope.CleanupObsoleteComputers = $true
$cleanupScope.CleanupUnneededContentFiles = $true
$cleanupManager = $wsus.GetCleanupManager();
$cleanupManager.PerformCleanup($cleanupScope);
DeclineSupersededUpdates — Отклонить замененные обновления.
DeclineExpiredUpdates — Отклонить просроченные обновления.
CleanupObsoleteUpdates — Удалить из базы неиспользуемые обновления.
CompressUpdates — Удалить из базы устаревшие ревизии обновлений.
CleanupObsoleteComputers — удалить компьютеры которые не соединялись за последние 30 дней.
CleanupUnneededContentFiles — Удаляет файлы отклоненных обновлений из папки WSUS.
или CMD:
@echo off
@echo Starting cleanup: %date% %time% >> d:\scripts\WSUS_Cleanup.log
powershell.exe d:\scripts\WSUS_Cleanup.ps1 >> d:\scripts\WSUS_Cleanup.log
@echo Finished cleanup: %date% %time% >> d:\scripts\WSUS_Cleanup.log
Но в итоге после некоторых раздумий сервер выдал:
Как поправить ошибку пока не понятно…
Вот здесь как раз человек объясняет ситуацию:
Процедура запуска сценария будет разной для разных вариантов установки SUSDB (Windows Internal Database или SQL Server). Для того, чтобы определить, где развёрнута база данных WSUS необходимо на сервере WSUS проверить значение реестра SQLServerName в разделе HKLM\Software\Microsoft\Update Services\Server\Setup. Если в значении присутствуют ##SSEE или ##WID, то база данных развёрнута на WID, а если вы видите в этом значении имя хоста или имя_сервера\экземпляр, то база данных развёрнута на SQL Server:
В нашем случае видим, что база WID:
Далее, в случае, если база данных развёрнута на WID нам необходимо использовать утилиту sqlcmd и планировщик задач Windows. Если SQL Server — можно запланировать выполнение сценария с помощью планов обслуживания (Maintenance Plans).
Windows Internal Database
Чтобы установить sqlcmd можно скачать и установить SQL Server Management Studio (SSMS) для версии вашей WID. Версию можно определить в лог-файле:
- В Windows Server 2012 — C:\Windows\WID\Log — открываем error.log, где в самом начале файла указана используемая версия SQL, для которой нам нужно скачать SSMS Express.
- В Windows Server 2008 R2 и ниже — C:\Windows\SYSMSI\SSEE\MSSQL.2005\MSSQL\LOG — также открываем error.log и в самом начале файла смотрим версию.
Пытаюсь понять какая версия SQL у меня установлена:
Но ничего не понятно, и в файле ничего нет, хотя вроде должно быть.
В итоге устанавливаю консоль SQL Server Management Studio Express 2016 (она благополучно установилась):
Запускаем консоль Management Studio с правами администратора.
Подключаемся к базе, указав следующее имя сервера:
- в Windows Server 2008 / R2 — \\.\pipe\mssql$microsoft##ssee\sql\query
- в Windows Server 2012 / R2 — \\.\pipe\MICROSOFT##WID\tsql\query
Запустил пару скриптов из этого поста, но мне это никак не помогло:
Еще раз запустил мастер очистки, оставил его на ночь и тут случилось чудо:
Самое печальное, что очистка прошла, а места больше на диске так и не стало.
Попробовал сделать через PowerShell:
$wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::GetUpdateServer();
$cleanupScope = new-object Microsoft.UpdateServices.Administration.CleanupScope;
$cleanupScope.DeclineSupersededUpdates = $true
$cleanupScope.DeclineExpiredUpdates = $true
$cleanupScope.CleanupObsoleteUpdates = $true
$cleanupScope.CompressUpdates = $true
$cleanupScope.CleanupObsoleteComputers = $true
$cleanupScope.CleanupUnneededContentFiles = $true
$cleanupManager = $wsus.GetCleanupManager();
$cleanupManager.PerformCleanup($cleanupScope);
Вероятно необходима реиндексация базы.
Попробовал реиндексировать вот таким скриптом:
— Rebuild or reorganize indexes based on their fragmentation levels
DECLARE @work_to_do TABLE (
DECLARE @objectid int;
DECLARE @indexid int;
DECLARE @schemaname nvarchar(130);
DECLARE @objectname nvarchar(130);
DECLARE @indexname nvarchar(130);
DECLARE @numrows int
DECLARE @density float;
DECLARE @fragmentation float;
DECLARE @command nvarchar(4000);
DECLARE @fillfactorset bit
DECLARE @numpages int
— Select indexes that need to be defragmented based on the following
— * Page density is low
— * External fragmentation is high in relation to index size
PRINT ‘Estimating fragmentation: Begin. ‘ + convert(nvarchar, getdate(), 121)
sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL , NULL, ‘SAMPLED’) AS f
(f.avg_page_space_used_in_percent 50 and f.avg_fragmentation_in_percent > 15.0)
or (f.page_count > 10 and f.avg_fragmentation_in_percent > 80.0)
PRINT ‘Number of indexes to rebuild: ‘ + cast(@@ROWCOUNT as nvarchar(20))
PRINT ‘Estimating fragmentation: End. ‘ + convert(nvarchar, getdate(), 121)
SELECT @numpages = sum(ps.used_page_count)
@work_to_do AS fi
INNER JOIN sys.indexes AS i ON fi.objectid = i.object_id and fi.indexid = i.index_id
INNER JOIN sys.dm_db_partition_stats AS ps on i.object_id = ps.object_id and i.index_id = ps.index_id
— Declare the cursor for the list of indexes to be processed.
DECLARE curIndexes CURSOR FOR SELECT * FROM @work_to_do
— Open the cursor.
— Loop through the indexes
FETCH NEXT FROM curIndexes
INTO @objectid, @indexid, @density, @fragmentation, @numrows;
IF @@FETCH_STATUS = 5000 AND @fillfactorset = 0
SET @command = N’ALTER INDEX ‘ + @indexname + N’ ON ‘ + @schemaname + N’.’ + @objectname + N’ REBUILD WITH (FILLFACTOR = 90)’;
SET @command = N’ALTER INDEX ‘ + @indexname + N’ ON ‘ + @schemaname + N’.’ + @objectname + N’ REBUILD’;
PRINT convert(nvarchar, getdate(), 121) + N’ Executing: ‘ + @command;
PRINT convert(nvarchar, getdate(), 121) + N’ Done.’;
— Close and deallocate the cursor.
IF EXISTS (SELECT * FROM @work_to_do)
PRINT ‘Estimated number of pages in fragmented indexes: ‘ + cast(@numpages as nvarchar(20))
SELECT @numpages = @numpages — sum(ps.used_page_count)
@work_to_do AS fi
INNER JOIN sys.indexes AS i ON fi.objectid = i.object_id and fi.indexid = i.index_id
INNER JOIN sys.dm_db_partition_stats AS ps on i.object_id = ps.object_id and i.index_id = ps.index_id
PRINT ‘Estimated number of pages freed: ‘ + cast(@numpages as nvarchar(20))
—Update all statistics
PRINT ‘Updating all statistics.’ + convert(nvarchar, getdate(), 121)
PRINT ‘Done updating statistics.’ + convert(nvarchar, getdate(), 121)
Но снова место на диске так и не появилось.
Попробовал еще один скрипт:
DECLARE IndexCursor CURSOR FOR
SELECT sys.indexes.name AS IndexName
,sys.objects.name AS TableName
INNER JOIN sys.objects
ON sys.indexes.object_id = sys.objects.object_id
WHERE sys.objects.type = ‘U’
AND sys.indexes.is_disabled = 0
AND NOT sys.indexes.name IS NULL
ORDER BY TableName ASC
DECLARE @IndexName nvarchar(max), @TableName nvarchar(max);
DECLARE @ExecSql nvarchar(max);
FETCH NEXT FROM IndexCursor INTO @IndexName, @TableName;
WHILE @@FETCH_STATUS = 0
PRINT @TableName + ‘.’ + @IndexName;
SET @ExecSql = ‘ALTER INDEX [‘ + @IndexName + ‘] ON [‘ + @TableName + ‘] REBUILD;’;
FETCH NEXT FROM IndexCursor INTO @IndexName, @TableName;
Но все это добавило лишь несколько мегабайт свободного места.
Скорее всего больше нечего реиндексировать.
ЭТО ВСЕ, ЧТО УДАЛОСЬ ПОЧЕРПНУТЬ ПО ДАННОМУ ВОПРОСУ.
P.S.
Если правил на WSUS не много и можно их потом быстро настроить, то можно переставить WSUS с нуля или резать по живому, это уже кому как виднее и удобнее…
Попробуем резать по живому.
Как корректно и правильно «зачистить» папку WSUSContent я так не нашел, а именно она сейчас занимает все место на диске.
Останавливаем службу в IIS.
Удаляем все, что есть в папке WSUSContent, сразу видим, что диск опустел:
Запускаем службу
Нажимаем Синхронизировать сейчас, но ничего не происходит, так как в базе осталась информация что все обновления на месте, хотя по факту их уже нет.
Чтобы повторно установить WSUS с чистой базой данных, то есть предыдущей конфигурации:
Запустите Windows Powershell в качестве администратора и используйте следующие команды:
- Uninstall-WindowsFeature -Name UpdateServices,Windows-Internal-Database -Restart
- Повторите перезагрузку, удалите ВСЕ в C:\Windows\WID\(для Win 2012 r2).
- Затем запустите следующую команду для повторной установки WSUS:
Install-WindowsFeature UpdateServices -Restart
Кажется, что удаление WSUS а также WID Database опция фактически не удаляет базу данных WID.
- База данных WID можно удалить, удалив Windows Internal Database особенность.
- Вам также потребуется вручную удалить файл C:\windows\WID\Data\susdb.mdf перед повторной установкой все снова.
Надеемся WSUS 4.0 не за горами и версия без подобных «багов» все же появится в продакшине, хотя, как мне показалось, Microsoft почему-то уже давно «забил» на WSUS.