Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Сжатие данных. Нарушение целостности.  [new]
Georgie
Member

Откуда:
Сообщений: 92
SELECT @@VERSION


Microsoft SQL Server 2016 (SP1-GDR) (KB4505219) - 13.0.4259.0 (X64) Jun 15 2019 19:20:12 Copyright (c) Microsoft Corporation Enterprise Edition: Core-based Licensing (64-bit) on Windows Server 2019 Datacenter 6.3 <X64> (Build 17763: ) (Hypervisor)

Порядок действий.
1. Проверка базы
DBCC CHECKDB (N'vs05_tv_test') WITH NO_INFOMSGS


Результат:
Выполнение команд успешно завершено.



2. Сжатие данных.
Скрипт.
+

DECLARE @Dblist NVARCHAR(MAX);
DECLARE @Dbname NVARCHAR(1024);

DECLARE @Indexlist NVARCHAR(MAX);
DECLARE @Indexname NVARCHAR(1024);

DECLARE @Schemalist NVARCHAR(MAX);
DECLARE @Schemaname NVARCHAR(1024);

DECLARE @Objectlist NVARCHAR(MAX);
DECLARE @Objectname NVARCHAR(1024);

DECLARE @Script NVARCHAR(MAX);
DECLARE @Delimeter CHAR(1);

DECLARE @Paramdefinition NVARCHAR(1024);
DECLARE @Paraminit NVARCHAR(1024);

SET @Indexlist = '';
SET @Schemalist = '';
SET @Objectlist = '';

SET @Dblist = '';
SET @Delimeter = ',';

WITH DB_CTE([dbname])
AS
  (SELECT sysinfo.name
   FROM sys.databases AS sysinfo
   INNER JOIN [CompressionSettings].[dbo].[Databases] AS compressedb
   ON sysinfo.database_id = compressedb.dbid and compressedb.active = 1 and compressedb.must_compress = 1
   )

SELECT @Dblist = @Dblist + [dbname] + @Delimeter
FROM DB_CTE;

WHILE LEN(@Dblist) > 0

BEGIN

	SELECT @Dbname = SUBSTRING(@DbList, 1, CHARINDEX(@Delimeter, @Dblist, 1) - 1);
	SELECT @Dblist = REPLACE(@Dblist, @Dbname + @Delimeter,'');
	
	SELECT @Script = 'USE [' + @Dbname + '];'
	SELECT @Script = @Script + N'EXEC sp_MSforeachtable N''ALTER TABLE ? REBUILD PARTITION = ALL WITH (DATA_COMPRESSION = PAGE)''';
	
	-- Сжатие всех таблиц
	EXEC sp_executesql @Script;
	
	-- Сжатие индексов таблиц
	SELECT @Script = 'USE [' + @Dbname + '];	
	WITH INDEX_CTE([ind_name], [schema_name], [object_name])
	AS (SELECT IND.NAME, OBJECT_SCHEMA_NAME(OBJ.ID), OBJECT_NAME(OBJ.id)
		FROM sys.sysindexes IND INNER JOIN sys.sysobjects OBJ ON IND.id = OBJ.id
		WHERE OBJECTPROPERTY(OBJ.id, ''IsUserTable'') > 0 AND
			  INDEXPROPERTY(IND.id, IND.name, ''IsAutoStatistics'') = 0 AND
			  INDEXPROPERTY(IND.id, IND.name, ''IsStatistics'') = 0 AND
			  IND.NAME IS NOT NULL
		)
		SELECT @Indlist = @Indlist + [ind_name] + @Delim,
			   @Schlist = @Schlist + [schema_name] + @Delim,
		       @Objlist = @Objlist + [object_name] + @Delim
	    FROM INDEX_CTE;'
	
	SELECT @Paramdefinition = N'@Indlist NVARCHAR(MAX) OUTPUT, 
								@Schlist NVARCHAR(MAX) OUTPUT, 
								@Objlist NVARCHAR(MAX) OUTPUT, 
								@Delim CHAR(1)';
	
	EXEC sp_executesql @Script, 
					   @Paramdefinition, 
					   @Indlist = @Indexlist OUTPUT, 
					   @Schlist = @Schemalist OUTPUT, 
					   @Objlist = @Objectlist OUTPUT, 
					   @Delim = @Delimeter

	WHILE LEN(@Indexlist) > 0

	BEGIN

		SELECT @Indexname = SUBSTRING(@Indexlist, 1, CHARINDEX(@Delimeter, @Indexlist, 1) - 1);
		SELECT @Schemaname = SUBSTRING(@Schemalist, 1, CHARINDEX(@Delimeter, @Schemalist, 1) - 1);
		SELECT @Objectname = SUBSTRING(@Objectlist, 1, CHARINDEX(@Delimeter, @Objectlist, 1) - 1);
		
		PRINT('Processing index name..' + @Indexname);
		--PRINT('schema name ' + @Schemaname);
		--PRINT('object name ' + @Objectname);
		
		SELECT @Script = N'USE [' + @Dbname + '];
						   ALTER INDEX [' + @Indexname + '] ON 
						   [' + @Dbname + '].[' + @SchemaName + '].[' + @ObjectName + '] 
						   REBUILD PARTITION = ALL WITH (DATA_COMPRESSION = PAGE);';
		
		--PRINT(@Script);
		
		EXEC sp_executesql @Script;

		SELECT @Indexlist = REPLACE(@Indexlist, @Indexname + @Delimeter,'');
		SELECT @Schemalist = SUBSTRING(@Schemalist, CHARINDEX(@Delimeter, @Schemalist) + 1, LEN(@Schemalist) - CHARINDEX(@Delimeter, @Schemalist));
		SELECT @Objectlist = SUBSTRING(@Objectlist, CHARINDEX(@Delimeter, @Objectlist) + 1, LEN(@Objectlist) - CHARINDEX(@Delimeter, @Objectlist));


	END
	
	UPDATE [CompressionSettings].[dbo].[Databases]
	SET [must_compress] = 0
	WHERE [dbid] = DB_ID(@Dbname)	
	
END;


3. Шринк файла базы
USE [vs05_tv_test]

GO

ALTER DATABASE [vs05_tv_test] SET RECOVERY SIMPLE
GO

DBCC SHRINKFILE (vs05_tv_test, 10)

GO

ALTER DATABASE [vs05_tv_test] SET RECOVERY FULL



DbId	FileId	CurrentSize	MinimumSize	UsedPages	EstimatedPages
37	1	             149384	1024	                    88736	88688


4. Через некоторое время по неустановленной причине при проверке базы получаю
Скрипт
DBCC CHECKDB (N'vs05_tv_test') WITH NO_INFOMSGS


+
Сообщение 2533, уровень 16, состояние 1, строка 1
Ошибка в таблице. Не обнаружена страница (1:129336), выделенная идентификатору объекта 179128029, идентификатору индекса 1, идентификатору секции 72057602124218368, идентификатору единицы распределения 72057601768816640 (тип In-row data). Страница недопустима либо имеет неверный идентификатор единицы распределения в заголовке.
Сообщение 8977, уровень 16, состояние 1, строка 1
Ошибка в таблице. Идентификатор объекта 179128029, идентификатор индекса 1, идентификатор секции 72057602124218368, идентификатор единицы распределения 72057601768816640 (тип In-row data). Не обнаружен родительский узел для страницы (1:128697).
Сообщение 8977, уровень 16, состояние 1, строка 1
Ошибка в таблице. Идентификатор объекта 179128029, идентификатор индекса 1, идентификатор секции 72057602124218368, идентификатор единицы распределения 72057601768816640 (тип In-row data). Не обнаружен родительский узел для страницы (1:128693).
Сообщение 8977, уровень 16, состояние 1, строка 1
Ошибка в таблице. Идентификатор объекта 179128029, идентификатор индекса 1, идентификатор секции 72057602124218368, идентификатор единицы распределения 72057601768816640 (тип In-row data). Не обнаружен родительский узел для страницы (1:128703).


Тест со сжатием выполнялся несколько раз. В результате финальной проверки сообщения DBCC были различными. Думал, есть проблемы с дисками/памятью.

Администратор говорит, все нормально.
В частности, "Windows успешно проверила диск D (SSD, на нем лежат базы). Ошибок не обнаружено."
Память также проверялась - ошибок нет.

Из особенностей - было включено теневое копирование. Вчера отключили.

Сегодня выполнял свежий тест (восстановил базу из архива).
Вылетел на п.3
+
Сообщение 8959, уровень 16, состояние 1, строка 8
Ошибка в таблице. IAM-страница (1:148275) для объекта с идентификатором 0, идентификатором индекса -1, идентификатором секции 0, идентификатором единицы распределения 72057600150994944 (тип Unknown) связана в цепочку IAM для объекта с идентификатором 288316387, идентификатором индекса 3, идентификатором секции 72057600671547392, идентификатором единицы распределения 72057600350486528 (тип In-row data) по странице (0:0).
Сообщение 8959, уровень 16, состояние 1, строка 8
Ошибка в таблице. IAM-страница (1:149004) для объекта с идентификатором 0, идентификатором индекса -1, идентификатором секции 0, идентификатором единицы распределения 72057600153092096 (тип Unknown) связана в цепочку IAM для объекта с идентификатором 317504460, идентификатором индекса 4, идентификатором секции 72057600677183488, идентификатором единицы распределения 72057600356122624 (тип In-row data) по странице (0:0).
Сообщение 8959, уровень 16, состояние 1, строка 8


Подскажете хотя бы направления, куда копать?

Спасибо.

Сообщение было отредактировано: 4 дек 19, 15:51
4 дек 19, 15:43    [22032197]     Ответить | Цитировать Сообщить модератору
 Re: Сжатие данных. Нарушение целостности.  [new]
msLex
Member

Откуда:
Сообщений: 8091
У вас sp1 вообще без CU, а уже выпущено 15 CU на sp1 и 10 CU на sp2
4 дек 19, 15:51    [22032209]     Ответить | Цитировать Сообщить модератору
 Re: Сжатие данных. Нарушение целостности.  [new]
Georgie
Member

Откуда:
Сообщений: 92
msLex
У вас sp1 вообще без CU, а уже выпущено 15 CU на sp1 и 10 CU на sp2


Принято. Пробую. По факту отпишусь.
4 дек 19, 15:54    [22032215]     Ответить | Цитировать Сообщить модератору
 Re: Сжатие данных. Нарушение целостности.  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Georgie,

Всё таки это больше на диски похоже, хотя версию в любом случае стоит поднять
4 дек 19, 16:05    [22032221]     Ответить | Цитировать Сообщить модератору
 Re: Сжатие данных. Нарушение целостности.  [new]
Georgie
Member

Откуда:
Сообщений: 92
TaPaK
Georgie,

Всё таки это больше на диски похоже, хотя версию в любом случае стоит поднять


Sp2 поставил.

cu10 уже часа через 4, когда будет окно.

По факту дам обратную связь. Спасибо.
4 дек 19, 16:35    [22032282]     Ответить | Цитировать Сообщить модератору
 Re: Сжатие данных. Нарушение целостности.  [new]
Georgie
Member

Откуда:
Сообщений: 92
msLex, спасибо огромное!

Полёт нормальный.

TaPaK, благодарю за участие.
5 дек 19, 10:46    [22032853]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить