powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Сжатие данных. Нарушение целостности.
6 сообщений из 6, страница 1 из 1
Сжатие данных. Нарушение целостности.
    #39898168
Georgie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
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. Проверка базы
Код: sql
1.
DBCC CHECKDB (N'vs05_tv_test') WITH NO_INFOMSGS



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




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

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
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. Шринк файла базы
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
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




Код: sql
1.
2.
DbId	FileId	CurrentSize	MinimumSize	UsedPages	EstimatedPages
37	1	             149384	1024	                    88736	88688



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



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
Сообщение 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
Код: sql
1.
2.
3.
4.
5.
Сообщение 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



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

Спасибо.
...
Рейтинг: 0 / 0
Сжатие данных. Нарушение целостности.
    #39898175
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У вас sp1 вообще без CU, а уже выпущено 15 CU на sp1 и 10 CU на sp2
...
Рейтинг: 0 / 0
Сжатие данных. Нарушение целостности.
    #39898178
Georgie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msLex
У вас sp1 вообще без CU, а уже выпущено 15 CU на sp1 и 10 CU на sp2


Принято. Пробую. По факту отпишусь.
...
Рейтинг: 0 / 0
Сжатие данных. Нарушение целостности.
    #39898182
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Georgie,

Всё таки это больше на диски похоже, хотя версию в любом случае стоит поднять
...
Рейтинг: 0 / 0
Сжатие данных. Нарушение целостности.
    #39898206
Georgie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaK
Georgie,

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


Sp2 поставил.

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

По факту дам обратную связь. Спасибо.
...
Рейтинг: 0 / 0
Сжатие данных. Нарушение целостности.
    #39898451
Georgie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msLex, спасибо огромное!

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

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


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