(Возврат на основную страницу)

 

Содержание номера за Июль 2013 год

SQL Server

Июль 2013 07 (37)

 

  1. Использование команд Optimizer_WhatIF и StatsStream для моделирования рабочей среды

  2. Принудительное завершение пользовательских процессов

  3. Создание файла с разделителями из любой таблицы\представления с возможностью отладки

  4. Удаление всех пользователей, привязанных к определенной учетной записи

  5. Как разобрать XML в таблицу


Использование команд Optimizer_WhatIF и StatsStream для моделирования рабочей среды
Фабиано Аморим (Fabiano Amorim)


Решая, какой план выполнения запроса считать наилучшим, реализованный в SQL Server оптимизатор запросов исходит из данных, хранящихся в соответствующих таблицах, а также учитывает, что собой представляет аппаратура сервера. Как вам, в таком случае, проанализировать планы выполнения, сгенерированные для запросов, которые медленно выполняются на рабочем сервере пользователя, если у вас нет ни доступа к этому серверу, ни возможности воссоздать базу данных из резервной копии?
Работая консультантом по SQL Server, я неоднократно сталкивался с просьбами воспроизвести локально конкретный план выполнения запроса, полученный в рабочей среде заказчика, и затем отладить его. Вы, может быть, думаете, что достаточно восстановить резервную копию рабочей базы данных на компьютере, используемом для разработки, и после этого мы должны быть готовы приступить к тестированию запроса. К сожалению, вы редко можете поступить именно так, потому что:

 

Оптимизатор запросов воспользуется несколькими факторами, чтобы предложить наилучший план выполнения запроса. Если вы измените какой-либо из них, не будет никакой гарантии, что вам удастся воспроизвести конкретный план выполнения запроса.
 


Принудительное завершение пользовательских процессов
Пол Эндрю (Paul Andrew)

 

Это еще один полезный скрипт, который я часто использую при работе с нашими хранилищами данных.

Примечание; процессы, исполняемые от имени sa не удаляются.
 


Создание файла с разделителями из любой таблицы\представления с возможностью отладки
Пол Эндрю (Paul Andrew)

 

Стандартное применение:

 

Необязательные параметры:

Примечание; если в таблице используются сложные типы, которые SQL Server не может преобразовать неявным образом, например sql_variant, создайте представление, которое будет отображать эти таблицы.
 

От редакции, при попытке исполнить приведенный код мы получили несколько ошибок. Не вдаваясь в подробности работы самой BCP, мы попробовали исправить код, чтобы получить хотя бы корректный вызов. Вроде бы это удалось. Наш вариант в файле 02_2013_06a.sql, исходный - в 02_2013_06.sql.
 


Удаление всех пользователей, привязанных к определенной учетной записи
Хаким Али (Hakim Ali)

 

Возникала ли когда-нибудь у вас необходимость удаления всех пользователей уровня базы данных, ассоциированных с определенной учетной записью уровня сервера? И что, приходилось удалять их вручную? Например, увольняется сотрудник и нужно убрать его изо всех баз данных. Или вы использовали графический интерфейс студии, А может быть пытались создать скрипт? А как быть, если имена пользователя и учетной записи отличаются? Или если пользователи названы по разному в каждой базе данных, а самих баз несколько сотен? В итоге, несложная задача вырастает в большую проблему
Но, прочь уныние! Вот скрипт, который удалит всех пользователей в базе данных, привязанных к определенной учетной записи. Я хочу высказать благодарность Джейсону Страте (Jason Strate), чья статья (http://www.jasonstrate.com/2013/07/security-questions-removing-logins-from-databases/) вдохновила меня на написание приведенного ниже кода. Просто присвойте переменной @LoginName значение учетной записи и выполните код.
 


Как разобрать XML в таблицу
Стивен Уиллис (Steven Willis)

 

Не так давно мне довелось читать множество запросов в форумах, где были запросы на средства разбора XML в таблицу. Я написал процедуру, которая принимает в качестве параметра XML строку, выполняет проверку средствами процедуры 'sp_xml_preparedocument' затем рекурсивно копирует все узлы в табличный формат.

От редакции, мы первым делом решили проверить как процедура справится с разбором плана SQL запроса в формате XML. Ну, и получили.
Msg 217, Level 16, State 1, Procedure ParseXMLtoTable, Line 62
Maximum stored procedure, function, trigger, or view nesting level exceeded (limit 32).
Так что сильно сложный XML ей не по силам.
 


(Возврат на основную страницу)