Как удалить windows internal database

Windows Internal Database (WID) представляет собой «облегченной» базу данных SQL, основанную на SQL Server Express. Windows Internal Database предлагается в качестве бесплатной базы данных SQL, которую можно использовать в различных продуктах Microsoft (или сторонних разработчиков) в качестве легкого и бесплатного SQL- решения для хранения данных. В частности, WID может использоваться SharePoint или таким ролями Windows Server, как WSUS, ADRMS, ADFS, Connection Broker и т.п.

Windows Internal Database включается в состав серверных ОС Window, начиная с версии Windows Server 2008. В Windows 2008 независимо от разрядности доступна только 32 битная версия WID (устанавливается в C:\Program Files (x86)\Microsoft SQL Server), в Windows Server 2012 версия WID — 64-битная (база находится в каталоге C:\Windows\WID). В качестве отдельного продукта Windows Internal Database пользователям не доступна.

Примечание. Для больших продуктивных сред Microsoft рекомендует размещать инфраструктурные БД на полноценном инстансе SQL. WID – рекомендуется использовать в небольших организациях, тестовых средах (или «от бедности», при высокой лицензионной нагрузкой «старших» версий SQL Server).

Основные особенности Windows Internal Database:

  • База данных WID предполагает только локально использование, удаленно к ней подключиться не получится
  • Отсутствуют ограничения на размер файлов БД (в отличии от той же редакции SQL Express)
  • Не требует для своего использования лицензии.

Управление базой Windows Internal Database

По задумке разработчиков база WID предназначена только для консольной или скриптовой установки, а все операции с ней должны выполняться через командную строку. Но к счастью базой WID можно управлять и через GUI с помощью SQL Management Studio.

Для этого нужно:

  1. Скачать и установить SQL Server Management Studio Express 2012 (входит в состав Microsoft SQL Server 2012 Express, но ее можно скачать и отдельно, выбрав ENU\x64\SQLManagementStudio_x64_ENU.exe)
  2. Запустить консоль Management Studio с правами администратора
  3. Подключится к базе, указав следующее имя сервера:
    • в Windows Server 2008 / R2 —
      \\.\pipe\mssql$microsoft##ssee\sql\query
    • в Windows Server 2012 / R2 —
      \\.\pipe\MICROSOFT##WID\tsql\query

    Управление windows internal database из Management Studio

Для подключения через sqlcmd.exe следует выполнить такую команду:

sqlcmd -S \\.\pipe\MICROSOFT##WID\tsql\query –E

Как удалить базу WID

После удаления роли Windows, которая использует базу Windows Internal Database, сам инстанс SQL с базой WID не удаляется, причем инструментов для ее удаление в системе нет. Деинсталлировать базу Windows Internal Database можно только при помощи Windows Installer.

Для удаления базы WID на Windows Server 2008 нужно:

  • на 32 битной системе:
    msiexec /x {CEB5780F-1A70-44A9-850F-DE6C4F6AA8FB} callerid=ocsetup.exe
  • на 64 битной системе:
    msiexec /x {BDD79957-5801-4A2D-B09E-852E7FA64D01} callerid=ocsetup.exe

В Windows Server 2012 базу WID можно удалить гораздо проще — с помощью Powershell:

Remove-WindowsFeature Windows-Internal-DB

Сами файлы базы данных (.mdb и .ldb) придется удалить вручную – пути к ним указаны в начале статьи.

Определить версию установленную версию WID можно по файлу:

  • Для Windows Server 2008: %WINDIR%\SYSMSI\SSEE\MSSQL.2005\MSSQL\LOG
  • Для Windows Server 2012: %WINDIR%\WID\Log\error.log

Содержит он примерно такую информацию:

2014-03-22 12:38:11.11 Server      Microsoft SQL Server 2012 - 11.0.2100.60 (X64)
Feb 10 2012 19:39:15
Copyright (c) Microsoft Corporation
Windows Internal Database (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor)
2014-03-22 12:38:11.12 Server      (c) Microsoft Corporation.
2014-03-22 12:38:11.12 Server      All rights reserved.
2014-03-22 12:38:11.12 Server      Server process ID is 1644.
2014-03-22 12:38:11.12 Server      System Manufacturer: 'VMware, Inc.', System Model: 'VMware Virtual Platform'.
2014-03-22 12:38:11.14 Server      Authentication mode is WINDOWS-ONLY.
2014-03-22 12:38:11.14 Server      Logging SQL Server messages in file 'C:\Windows\WID\Log\error.log'.
2014-03-22 12:38:11.14 Server      The service account is 'NT SERVICE\MSSQL$MICROSOFT##WID'. This is an informational message; no user action is required.
2014-03-22 12:38:11.14 Server      Registry startup parameters:
-w 65535
-T 1617
-K
-e C:\Windows\WID\Log\error.log
-l C:\Windows\WID\Data\mastlog.ldf
-d C:\Windows\WID\Data\master.mdf

Лог внутренней базы Windows Internal Database

It is not usually necessary to uninstall Windows Internal Database, which WSUS installs as the default SQL Server version. It is not possible to remove this application with Add or Remove Programs, and it will not be uninstalled automatically when WSUS is uninstalled. If you wish to do so, you will need to call the msiexec executable with the correct key for the operating system platform. 

Uninstalling Windows Internal Database is not recommended, because it may affect other applications that may be using the same database instance (such as Windows SharePoint Services). 

To uninstall Windows Internal Database

 1.  Open a command shell.
2.  Call msiexec with the correct key for the operating system platform.
    • On 32-bit platforms: msiexec /x {CEB5780F-1A70-44A9-850F-DE6C4F6AA8FB} callerid=ocsetup.exe
    • On 64-bit platforms: msiexec /x {BDD79957-5801-4A2D-B09E-852E7FA64D01} callerid=ocsetup.exe

 The removal of the application may not remove the default .mdb and .ldb files, which will cause a subsequent WSUS 3.0 installation to fail. These files can be deleted from the %windir%\SYSMSI\SSEE directory.

Место на нашем 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

Но в итоге после некоторых раздумий сервер выдал:

Печаль…

Как поправить ошибку пока не понятно…

Вот здесь как раз человек объясняет ситуацию:

http://zetslash.blogspot.com/2017/06/wsus.html

Процедура запуска сценария будет разной для разных вариантов установки 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

Запустил пару скриптов из этого поста, но мне это никак не помогло:

http://zetslash.blogspot.com/2017/06/wsus.html

https://itblog.ru.net/ws/wsus/wsus-cleanup-powershell/

Еще раз запустил мастер очистки, оставил его на ночь и тут случилось чудо:

Самое печальное, что очистка прошла, а места больше на диске так и не стало.

Попробовал сделать через PowerShell:

[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);

Вероятно необходима реиндексация базы.

Попробовал реиндексировать вот таким скриптом:

USE SUSDB;

GO

SET NOCOUNT ON;

— Rebuild or reorganize indexes based on their fragmentation levels

DECLARE @work_to_do TABLE (

objectid int

, indexid int

, pagedensity float

, fragmentation float

, numrows int

)

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)

INSERT @work_to_do

SELECT

f.object_id

, index_id

, avg_page_space_used_in_percent

, avg_fragmentation_in_percent

, record_count

FROM

sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL , NULL, ‘SAMPLED’) AS f

WHERE

(f.avg_page_space_used_in_percent < 85.0 and f.avg_page_space_used_in_percent/100.0 * page_count < page_count — 1)

or (f.page_count > 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)

FROM

@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.

OPEN curIndexes

— Loop through the indexes

WHILE (1=1)

BEGIN

FETCH NEXT FROM curIndexes

INTO @objectid, @indexid, @density, @fragmentation, @numrows;

IF @@FETCH_STATUS < 0 BREAK;

SELECT

@objectname = QUOTENAME(o.name)

, @schemaname = QUOTENAME(s.name)

FROM

sys.objects AS o

INNER JOIN sys.schemas as s ON s.schema_id = o.schema_id

WHERE

o.object_id = @objectid;

SELECT

@indexname = QUOTENAME(name)

, @fillfactorset = CASE fill_factor WHEN 0 THEN 0 ELSE 1 END

FROM

sys.indexes

WHERE

object_id = @objectid AND index_id = @indexid;

IF ((@density BETWEEN 75.0 AND 85.0) AND @fillfactorset = 1) OR (@fragmentation < 30.0)

SET @command = N’ALTER INDEX ‘ + @indexname + N’ ON ‘ + @schemaname + N’.’ + @objectname + N’ REORGANIZE’;

ELSE IF @numrows >= 5000 AND @fillfactorset = 0

SET @command = N’ALTER INDEX ‘ + @indexname + N’ ON ‘ + @schemaname + N’.’ + @objectname + N’ REBUILD WITH (FILLFACTOR = 90)’;

ELSE

SET @command = N’ALTER INDEX ‘ + @indexname + N’ ON ‘ + @schemaname + N’.’ + @objectname + N’ REBUILD’;

PRINT convert(nvarchar, getdate(), 121) + N’ Executing: ‘ + @command;

EXEC (@command);

PRINT convert(nvarchar, getdate(), 121) + N’ Done.’;

END

— Close and deallocate the cursor.

CLOSE curIndexes;

DEALLOCATE curIndexes;

IF EXISTS (SELECT * FROM @work_to_do)

BEGIN

PRINT ‘Estimated number of pages in fragmented indexes: ‘ + cast(@numpages as nvarchar(20))

SELECT @numpages = @numpages — sum(ps.used_page_count)

FROM

@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))

END

GO

—Update all statistics

PRINT ‘Updating all statistics.’ + convert(nvarchar, getdate(), 121)

EXEC sp_updatestats

PRINT ‘Done updating statistics.’ + convert(nvarchar, getdate(), 121)

GO

Но  снова место на диске так и не появилось.

Попробовал еще один скрипт:

DECLARE IndexCursor CURSOR FOR

SELECT sys.indexes.name AS IndexName

,sys.objects.name AS TableName

FROM sys.indexes

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

,IndexName ASC;

DECLARE @IndexName nvarchar(max), @TableName nvarchar(max);

DECLARE @ExecSql nvarchar(max);

OPEN IndexCursor;

FETCH NEXT FROM IndexCursor INTO @IndexName, @TableName;

WHILE @@FETCH_STATUS = 0

BEGIN

PRINT @TableName + ‘.’ + @IndexName;

SET @ExecSql = ‘ALTER INDEX [‘ + @IndexName + ‘] ON [‘ + @TableName + ‘] REBUILD;’;

EXEC (@ExecSql);

FETCH NEXT FROM IndexCursor INTO @IndexName, @TableName;

END

CLOSE IndexCursor;

DEALLOCATE IndexCursor;

Но все это добавило лишь несколько мегабайт свободного места.

Скорее всего больше нечего реиндексировать.

ЭТО ВСЕ, ЧТО УДАЛОСЬ ПОЧЕРПНУТЬ  ПО ДАННОМУ ВОПРОСУ.

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.

Всем хорошей работы!!!


13.02.2019 —


Опубликовал: |
ms windows server 2016

Sorry, the comment form is closed at this time.

Для полной переустановки WSUS нужно действовать следующим образом:

1. Выполнить удаление внутренней базы данных WID WSUSuninstall-windowsfeature -name windows-internal-database
2. Удалить Роль WSUS
3. Перезагрузить сервер полностью
4. Удалить остатки базы данных по адресу C:\Windows\WID
5. Удалить папки обновлений указанные во время предыдущей установки WSUS
6. Если нужно — установить WSUS заново — это будет «чистая» установка.

Рассказать:

Похожие статьи:

  • Windows Server Update Services PowerShell установка
  • Отключение слежения windows за пользователем
  • Запуск элементов Панели управления из командной строки
  • Direct Access Windows Server 2012
  • Сначала контент, потом sidebar. На всю ширину и…
  • Удаленная тихая установка и удаление Kaspersky…

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Лучшая виртуальная машина для windows 10 для игр
  • Как отключить пароль на windows 10 при входе в систему на ноутбуке леново
  • Canon 5730 драйвер windows 10 x64
  • Windows 10 проводник с двумя окнами
  • Onedrive bad image в windows 10 ошибка