Биты и байты.

Биты и байты.

пятница, 31 июля 2015 г.

Создание библиотеки в Sharepoint.

Для создания такой библиотеки нужно совсем немного времени.
Сделаем это на Sharepoint 2013.


Для начала устанавливаем себе SharePoint Designer, он облегчит нам некоторые рутинные действия.
Запускаем дизайнер, открываем наш сайт,  
1. Создаем на сайте новую библиотеку документов.

Выставляем для нее необходимые параметры, обязательно ставим опцию, разрешить управление типами контента

2. Создаем тип контента (это набор столбцов и параметров который можно использовать многократно в разных списках), по умолчанию в типе 2 столбца имя и название.
Наследуемся от типа контента документ, можно наследоваться вообще от любого типа SharePoint и это плюс.
3. Далее создаем необходимые столбцы, которые будем использовать в нашем типе контента, доступны следующие типы столбцов.
Переводчики конечно отожгли, вариант тут имеется ввиду выбор.
У столбца так же есть значения по умолчанию, которые при желании можно определить.

среда, 15 июля 2015 г.

Панель, она и в SQL панель!

Для тех кто давно задумывался об удобном инструменте анализа производительности своего SQL сервера, есть хорошая новость!
Кроме стандартных отчетов в SSMS,  оказывается уже есть на базе отчётов SSRS от MS готовый пакет отчетов под шикарным названием «панель» производительности.
Что удобно, для выполнения этих отчетов не нужны права супер одмина.

Если внимательно присмотреться то не всегда этот отчет выдает адекватные цифры, так что будьте готовы к этому. Как говорится доверяй, но проверяй.
Ссылка на отчеты  и горячее видео!

После установки отчеты можно найти здесь


Сама панель выглядит как то так.
Установка проста  на сервер устанавливаем необходимые процедуры из файла setup.sql в базу msdb
В файле найдете все необходимые скрипты которые потом можно использовать по отдельности при желании.
При желании разворачиваем все отчеты на сервере отчетов.
И настраиваем подписки.


В общем как всегда у MS реализация получилась не айс, идея была на поверхности давно, но до ума довести так и не получилось.

P\S: Использование скриптов в анализе никто конечно не отменял

Основные сведения о переключении контекста

Как переключать контекст

Контекст выполнения определяет под каким пользователем или именем входа выполняется текущая команда. Детали см. в разделе Основные сведения о контексте выполнения.

Явное переключение контекста


Выполняется через инструкцию EXECUTE AS LOGIN. Олицетворение остается в силе до тех пор, пока не произойдет одно из следующих событий:
Сеанс удаляется.
Контекст переключен на другое имя входа или на другого пользователя.
Контекст восстановлен до контекста предыдущего выполнения.

Для возврата к предыдущему контексту используется инструкция REVERT. Вызывающий инструкцию REVERT должен находиться в базе данных, где произошло олицетворение.

Пример

В следующем примере Питер Коннели, сетевой администратор компании Adventure Works Cycles, хочет создать учетную запись имени входа SQL Server для нового сотрудника Цзинхао Люхаса. У имени входа Питера в SQL Server нет необходимых для создания имен входа SQL Server разрешений уровня сервера, но Питер обладает разрешением IMPERSONATE в adventure-works\dan1, имени входа SQL Server с нужным разрешением уровня сервера. Когда Питер подключается к экземпляру SQL Server, контекст выполнения сеанса образуется из его имени входа в SQL Server. Чтобы создать имя входа SQL Server, Питер временно принимает контекст выполнения adventure-works\dan1. Затем он создает имя входа. Наконец, он освобождает присвоенные разрешения.
-- Switch execution context to the adventure-works\dan1 login account.
EXECUTE AS LOGIN = 'adventure-works\dan1';
-- Create the new login account.
CREATE LOGIN Jinghao1 WITH PASSWORD = '3KHJ6dhx(0xVYsdf';
-- Revert to the previous execution context.
REVERT;


Для переключения контекста выполнения на уровне базы данных используйте инструкцию EXECUTE AS USER = 'user_name'. 

Пример

В следующем примере, Франсуа Аженста, администратор базы данных компании Adventure Works Cycles, хочет выполнить инструкцию DBCC CHECKDB в базе данных AdventureWorksDW, но не имеет для этого разрешений на уровне базы данных. Однако он обладает разрешениями IMPERSONATE пользователя dan1, учетной записи с нужным разрешением.
Когда Франсуа подключается к базе данных AdventureWorksDW, контекст выполнения сопоставляется с его маркером безопасности пользователя. Разрешения на выполнение инструкций проверяются у первичных и вторичных участников в его маркере пользователя. Из-за того, что он не обладает разрешениями, необходимыми для выполнения инструкции DBCC CHECKDB, он выполняет следующие инструкции.
-- EXECUTE AS USER = 'dan1';
-- Create a table in dan1's default schema
CREATE TABLE t_NewTable( data nvarchar(100) );
go
-- Revert to the previous execution context.
REVERT
go;

Неявное переключение контекста

Используется в триггерах, функциях, процедурах также с помощью инструкции  EXECUTE AS при создании объекта.
Определяет чьи разрешения будут использованы для доступа к объектам в теле  процедуры функции. 


Пример

В следующем примере Мэри является владельцем таблицы MyTable. Она хочет, чтобы пользователь Скотт имел возможность усекать таблицы, но у Скотта нет прямого разрешения на работу с таблицами. Поэтому она создает хранимую процедуруdbo.usp_TruncateMyTable и предоставляет Скотту разрешение EXECUTE для этой процедуры. Когда Скотт выполняет эту хранимую процедуру, компонент Database Engine проверяет разрешения на усечение таблицы, как если бы хранимую процедуру выполняла Мэри. Так как она является владельцем таблицы, то инструкция выполнится даже в том случае, если Скотт не обладает прямыми разрешениями на работу с таблицами.
CREATE PROCEDURE dbo.usp_TruncateMyTable
WITH EXECUTE AS SELF
AS TRUNCATE TABLE MyDB..MyTable;

четверг, 9 июля 2015 г.

Раздуло кэш SQL? Лечимся народными средствами.

Если при разработке приложений не пользоваться хранимыми процедурами и параметризованными запросами, чем грешат большинство разработчиков, посылая произвольные (Adhoc) запросы серверу
То рано или поздно можно столкнуться с проблемой раздутого процедурного кэша.
Подробнее о механизмах кэширования тут

1.Проверяем есть ли проблемы с процедурным кэшем.
Чтобы понять есть ли проблема с Adhoc запросами, достаточно запустить следующий запрос
SELECT T.*, cast(T.[Total Plans - USE Count 1]*1.0/nullif(t.[Total Plans],0) *100  AS decimal(5,2)) Percentage
FROM
(
       SELECT objtype AS [CacheType]
                    , count_big(*) AS [Total Plans]
                    , sum(cast(size_in_bytes as decimal(18,2)))/1024/1024 AS [Total MBs]
                    , sum(cast((CASE WHEN usecounts = 1 THEN size_in_bytes ELSE 0 END) as decimal(18,2)))/1024/1024 AS [Total MBs - USE Count 1]
                    , sum(CASE WHEN usecounts = 1 THEN 1 ELSE 0 END) AS [Total Plans - USE Count 1]
       FROM sys.dm_exec_cached_plans cp
       WHERE cp.cacheobjtype = N'Compiled Plan'
       AND cp.objtype IN (N'Adhoc', N'Prepared') -- adhoc (произвольный запрос), prepared (параметризованный)
       GROUP BY objtype
) T
ORDER BY [Total MBs - USE Count 1] DESC
OPTION (RECOMPILE);  --план не будет сохраняться, эту опцию желательно использовать для adhoc запросов

Из результатов запроса понятно что процент  Adhoc  запросов  которые выполнялись только 1 раз очень высокий 82%


среда, 1 июля 2015 г.

Импортируем VM ректально.

Захотелось вот себе виртуалку скопировать, а файла экспорта например под рукой нет.
К счастью существует способ импортировать существующую виртуальную машину без предварительного экспорта.
Это мистика но все работает…
Указываем путь  до  конфигурации xml
Import-VM –Path 'D:\Program Files\Microsoft Learning\20488\Drives\20488B-LON-SP-01\Virtual Machines\8B770C81-CEA8-4AC0-A532-A2FF40C082CD.xml'

Обязательно возникнет ошибка
Import-VM : Unable to import virtual machine due to configuration errors.

Посмотрим детально  в чем же ошибка
$compareResult = Compare-VM –Path 'D:\Program Files\Microsoft Learning\20488\Drives\20488B-LON-SP-01\Virtual Machines\8B770C81-CEA8-4AC0-A532-A2FF40C082CD.xml'

Судя из описания две ошибки 33012, связаны с некорректным сетевым адаптером
Message                                     MessageId Source
-------                                     --------- ------
Could not find Ethernet...                      33012 Microsoft.HyperV.Power...
Could not find Ethernet...                      33012 Microsoft.HyperV.Power...
$compareResult.Incompatibilities[0].Message
Could not find Ethernet switch 'VMs'.
Отключим первый сетевой адаптер
$compareResult.Incompatibilities[0].Source | Disconnect-VMNetworkAdapter

Для второго проставим правильный сетевой интерфейс
$compareResult.Incompatibilities[1].Source | Connect-VMNetworkAdapter -SwitchName "HP Ethernet 1Gb 2-port 332i Adapter #2 - Virtual Switch"

Проверим нашу конфигурацию
compare-VM -CompatibilityReport $compareResult

Теперь импортируем
Import-VM -CompatibilityReport $compareResult

Если не возникло никаких ошибок должна появиться наша виртуалка, и все работает!
А если ничего не помогает спросите у Гугла.


About