Перейти к содержимому

sql

Как найти и удалить дубликаты строк в таблице mssql

Select id, objectname from [ax_molniya].[dbo].[www_reindex_tablename]  where objectname in (
Select objectname from [ax_molniya].[dbo].[www_reindex_tablename] Group by objectname having Count(*) >1)
Delete from t from [ax_molniya].[dbo].[www_reindex_tablename]  t, [ax_molniya].[dbo].[www_reindex_tablename]  v
where t.objectname = v.objectname
and t.id > v.id

 

Как сформировать скрипт для реиндекса индексов mssql. Необходимо для каждого индекса с генерировать соответствующую ALTER INDEX команду

DECLARE @SQL NVARCHAR(MAX)

DECLARE cur CURSOR LOCAL READ_ONLY FORWARD_ONLY FOR
	SELECT '
	PRINT ''Перестройка  [' + i.name + N'] начато ''  + Cast(GETDATE() as varchar);
	
	ALTER INDEX [' + i.name + N'] ON [' + SCHEMA_NAME(o.[schema_id]) + '].[' + o.name + '] ' +
		CASE WHEN s.avg_fragmentation_in_percent > 30
			THEN 'REBUILD WITH (FILLFACTOR = 80, PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, SORT_IN_TEMPDB = OFF, ONLINE = ON)
			
	PRINT ''Перестройка  [' + i.name + N'] завершено '' + Cast(GETDATE() as varchar) '
ELSE 'REORGANIZE'
		END + ';'
		
		


	FROM (
		SELECT 
			  s.[object_id]
			, s.index_id
			, avg_fragmentation_in_percent 
Читать далее

Как узнать фрагментацию индексов во всех таблицах в базе MSSQL

SELECT  IndStat.database_id,
                IndStat.object_id,
                QUOTENAME(s.name) + '.' + QUOTENAME(o.name) AS [object_name],
                IndStat.index_id,
                QUOTENAME(i.name) AS index_name,
                IndStat.avg_fragmentation_in_percent,
                IndStat.partition_number,
                (SELECT count (*) FROM sys.partitions p
                        WHERE p.object_id = IndStat.object_id AND p.index_id = IndStat.index_id) AS partition_count
FROM sys.dm_db_index_physical_stats
    (DB_ID('ax_molniya'), OBJECT_ID(NULL), NULL, NULL , 'LIMITED') AS IndStat
        INNER JOIN sys.objects AS o ON (IndStat.object_id = o.object_id)
        INNER JOIN sys.schemas AS s ON s.schema_id = o.schema_id
        INNER JOIN sys.indexes i ON (i.object_id = IndStat.object_id AND i.index_id = IndStat.index_id)
WHERE IndStat.avg_fragmentation_in_percent > 10 AND IndStat.index_id > 0

 

Как узнать в какие таблицы чаше всего пишутся и читаются данные в mssql и в кокой файловой группе они состоят. И сразу размер таблиц

Задача была узнать в какую файловую группу чаше всего происходит запись и чтение данных. Что бы можно было перенести файловые группы на разные хранилки с разными скоростями. И так же размер таблиц


/************************************************************
 *  * k.moskvichev ©
 * Time: 18.08.2016 13:19:03
 ************************************************************/

/************************************************************
 * Code formatted by SoftTree SQL Assistant © v7.4.435
 * Time: 18.08.2016 13:18:52
 ************************************************************/

SELECT 		
      @@ServerName                  AS ServerName
           ,DB_NAME()                     AS DBName
           ,OBJECT_NAME(ddius.object_id)  AS TableName
           ,SUM(ddius.user_seeks + ddius.user_scans + ddius.user_lookups) AS Reads
           ,SUM(ddius.user_updates)       AS Writes
           ,SUM(
                ddius.user_seeks + ddius.user_scans + ddius.user_lookups
                + ddius.user_updates
            )                             AS [Reads&Writes] /* ( SELECT    DATEDIFF(s, create_date, GETDATE()) / 86400.0
            FROM      master.sys.databases
            WHERE     name 
Читать далее

Сбор статистики по заполнению фрагментации индекса на отдельных таблицах

Первым делом создадим табличку куда будет собираться статистика.

 CREATE TABLE kmosk.dbo.reindeks_SALESLINE
  ( [database_id] VARCHAR(max)
      ,[object_id] VARCHAR(max)
      ,[index_id] VARCHAR(max)
      ,[partition_number] VARCHAR(max)
      ,[index_type_desc] VARCHAR(max) 
      ,[alloc_unit_type_desc] VARCHAR(max) 
      ,[index_depth] VARCHAR(max) 
      ,[index_level] VARCHAR(max) 
      ,[avg_fragmentation_in_percent] VARCHAR(max) 
      ,[fragment_count] VARCHAR(max) 
      ,[avg_fragment_size_in_pages] VARCHAR(max) 
      ,[page_count] VARCHAR(max) 
      ,[avg_page_space_used_in_percent] VARCHAR(max) 
      ,[record_count] VARCHAR(max) 
      ,[ghost_record_count] VARCHAR(max) 
      ,[version_ghost_record_count] VARCHAR(max) 
      ,[min_record_size_in_bytes] VARCHAR(max) 
      ,[max_record_size_in_bytes] VARCHAR(max) 
      ,[avg_record_size_in_bytes] VARCHAR(max) 
      ,[forwarded_record_count] VARCHAR(max)
    , vreme datetime NOT NULL DEFAULT GETDATE())
   
       

После этого создадим задание которое будет наполнять табличьку

DECLARE @db_id SMALLINT;
DECLARE @object_id INT;

SET @db_id = DB_ID(N'ax_molniya');
SET @object_id = OBJECT_ID(N'ax_molniya.[dbo].[SALESLINE]');

IF @db_id IS NULL
BEGIN;
    PRINT N'Invalid database';
END;
ELSE IF @object_id IS NULL
BEGIN;
    PRINT N'Invalid object';
END;
Читать далее

Когда не работает монитор активности в MSSQL

ЗАГОЛОВОК: Microsoft SQL Server Management Studio
——————————
Монитору активности не удается выполнить запросы к серверу
Монитор активности для этого экземпляра будет приостановлен.
Возобновить его работу можно через контекстное меню панели просмотра.

Выполнить команду lodctr /r

Посмотреть информацию по файлам бекапа

RESTORE HEADERONLY 
FROM DISK = N'\\192.168.0.38\Backup\файлы с S0001\axapta2009\DAX2009_DEV.bak' 
WITH NOUNLOAD;
GO
RESTORE HEADERONLY 
FROM DISK = N'\\192.168.0.38\Backup\s0059\directum\directum_backup_2016_02_05_080003_9084073.bak' 
WITH NOUNLOAD;
GO
RESTORE HEADERONLY 
FROM DISK = N'\\192.168.0.38\Backup\s0031\бекапы с диска F за 13 год\backup from e(temp)\ReportServerData.bak' 
WITH NOUNLOAD;
GO

mRemoteNG - confCons22.04.2015.xml 2016-02-08 14.18.25

Аудит mssql 2005 с помощью SQL Server Profiler и создания задания в агенте.

Задание.

Не обходим аудит который отслеживал кто изменил , создал, удалил, задание или базу, а также кто менял настройки mssql.

Был выбран Profiler так как в нем уже есть шаблоны аудита.

Для на чала создаем трассировку в самом Profiler.

Аудит mssql 2005 с помощью SQL Server Profiler и создания задания в агенте.

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

Аудит mssql 2005 с помощью SQL Server Profiler и создания задания в агенте.

Получаем вот такой код

-- ======================================================================================================

-- Author: Константин Москвичёв

-- Create date: 13/04/2015

-- Description:    0.2b

-- Описание: Запускает трасировку для аудита. 

-- ======================================================================================================

declare @rc int
declare @TraceID int
declare @maxfilesize bigint
declare @filename nvarchar(128)
declare @filecount int

--указываем максимальный размер файла
set @maxfilesize = 99

--указываем путь и имя файла, к имени файла дописывается 
Читать далее