IntelliSense не распознает новые объекты базы данных

Я создал несколько таблиц в базе данных, с которой работал, но редактор запросов, похоже, не распознает их. Запросы от IntelliSense отсутствуют, а редактор запросов отмечает их как ошибки. Известно, что таблицы существуют: они отображаются в обозревателе объектов. Я даже пытался восстановить их, но ничего не помогает.

Проблема связана с локальным кэшем IntelliSense редактора запросов. Локальный кэш должен быть обновлен, чтобы можно было увидеть новейшие объекты базы данных. Чтобы вручную обновить локальный кэш, перейдите в меню и откройте пункт Edit, IntelliSense. Затем выберите команду Refresh Local Cache (см. экран 1).

 

Обновите локальный кэш IntelliSense среды SSMS
Экран 1. Обновите локальный кэш IntelliSense среды SSMS

Запись данных Perfmon на SQL Server

Я пытаюсь организовать запись данных с монитора производительности Perfmon на SQL Server. В программе Perfmon я создал объект Data Collector и в качестве параметра Log format указал SQL. Кроме того, с помощью драйвера SQL Server Native я создал источник данных, но когда я пытаюсь запустить Perfmon, то получаю ошибку Call to SQLAllocConnect failed with%1.

Я обнаружил, что в системе SQL Server регистрация данных, поступивших от программы Perfmon с помощью SQL Server Native Client, невозможна. Успешно выполнить эту операцию мне удавалось лишь в тех случаях, когда в созданном мною источнике данных использовался драйвер ODBC — подобный тому, который показан на экране 2.

 

Выбор драйвера ODBC как источника данных Perfmon
Экран 2. Выбор драйвера ODBC как источника данных Perfmon

Нужно иметь в виду, что программа Perfmon выполняется с использованием учетной записи SYSTEM, которая не имеет учетного имени SQL Server, так что вам придется внести изменения в учетную запись, используемую набором Data Collector. Чтобы изменить учетную запись, используемую сборщиком данных Data Collector, откройте окно Perfmon и раскройте узел Data Collector Sets, за которым следует узел User Defined node. Правой кнопкой мыши щелкните на созданном объекте Data Collector и в открывшемся меню выберите пункт Properties. Появится диалоговое окно Properties (см. экран 3).

 

Изменение свойства Run As объекта Data Collector
Экран 3. Изменение свойства Run As объекта Data Collector

Первоначально в окне Run AS будет отображаться параметр SYSTEM. Нажмите кнопку Change, а затем введите доменную учетную запись с правами, позволяющими регистрироваться в SQL Server, а также обновлять базу данных, которую вы указали для своего набора данных Perfmon. Здесь следует использовать учетную запись с аутентификацией Windows. Аутентификация SQL Server в данном случае не сработает.

После внесения указанных изменений вы сможете запускать пользовательский сборщик данных, и он начнет регистрировать данные в вашей базе данных. Когда программа Perfmon переносит данные в SQL Server, она использует три таблицы: CounterData, CounterDetails и DisplayToID.

Сбор счетчиков производительности средствами PowerShell

Можно ли использовать PowerShell вместо Perfmon для сбора данных о производительности?

Да. С помощью команды PowerShell Get-Counter можно напрямую опросить все имеющиеся счетчики производительности в системе. Приведенная ниже команда иллюстрирует использование команды Get-Counter для вывода значения счетчика Processor (_Total)\% Processor Time, по которому можно судить об общей загрузке процессора.

Get-Counter -counter "\Processor (_Total)\% Processor Time”

Собирая данные для анализа, важно понимать, что Get-Counter выводит значения на текущий момент. Чтобы вывести несколько значений за данный интервал времени, к команде Get-Counter можно добавить параметры -SampleInterval и -MaxSamples. Ниже приведена команда вывода значения Processor (_Total)\% Processor Time каждые 10 секунд, пока не будет собрано 60 значений (за 10 минут).

Get-Counter -counter "\Processor (_Total)\% Processor Time”
   -SampleInterval 10 -MaxSamples 60

Следует отметить, что команда Get-Counter выводит несколько фрагментов данных, включая отметку времени (Timestamp) и экземпляр счетчика (CounterSample) — по сути, имя счетчика. Чтобы выводились только значения данного счетчика, из совокупности CounterSamples необходимо извлечь элемент CookedValue, как показано в примерах ниже.

$CPUTime = (Get-Counter -counter "\Processor (_Total)\%
   Processor Time”).CounterSamples.CookedValue
$AvailableMBytes = (Get-Counter -counter "\Memory\Available
   MBytes”).CounterSamples.CookedValue

Здесь значения счетчиков Processor (_Total)\% Processor Time и Memory\Available MBytes присваиваются переменным $CPUTime и $AvailableMBytes соответственно.

Определяем тип виртуальной машины

Как понять, относится виртуальная машина к поколению 1 или поколению 2?

Разработчики Microsoft при выпуске Windows Server 2012 R2 ввели новый тип виртуальных машин, который называется поколением 2 (Generation 2). Виртуальные машины типа Generation 2 более эффективны, чем Generation 1, так как из них исключены все устаревшие устройства. Кроме того, они более безопасны, так как поддерживают встроенную загрузку UEFI, а не BIOS. Вдобавок виртуальные машины типа Generation 2 могут осуществлять загрузку PXE- по стандартному сетевому адаптеру (не требуют устаревшего сетевого адаптера) и с виртуального жесткого диска SCSI с повышенной производительностью.

Чтобы определить тип виртуальной машины, вы можете запустить Hyper-V Manager и посмотреть, присутствуют ли устаревшие устройства или виртуальная машина поддерживает загрузку с контроллера SCSI. Однако PowerShell предоставляет более удобный способ установить тип поколения виртуальных машин. Вы можете вывести тип поколения виртуальной машины на экран, используя свойство Generation, которое содержится в VMObject, возвращаемом командой Get-VM. Ниже приведен пример, где вывод Get-VM передается команде Format-List. Вывод будет примерно такой:

PS C:\> Get-VM | Format-List Name,Generation
Name       : ORPORTvSQL01
Generation : 1
Name       : ORPORTvSQL02
Generation : 1
Name       : SQL2012Base
Generation : 1
Name       : WS2012Gen2
Generation : 2
Name       : XenDesktopWin7
Generation : 1

Используем PowerShell для определения версий операционной системы

Как с помощью PowerShell можно узнать версию операционной системы и пакета обновлений?

Вы можете применить PowerShell для того, чтобы быстро вывести на экран номера версий операционной системы и пакета обновлений. Приведенный ниже пример показывает, как использовать команду Get-WmiObject для определения имени вашего сервера, версии операционной системы, типа архитектуры процессора и версии пакета обновлений.

# Get Operating System Info
$sServer = "myserver"
$sOS =Get-WmiObject -class Win32_OperatingSystem
   -computername $sServer
foreach($sProperty in $sOS)
{
   write-host $sProperty.Description
   write-host $sProperty.Caption
   write-host $sProperty.OSArchitecture
   write-host $sProperty.ServicePackMajorVersion
}

Увеличение времени ожидания для конструктора таблиц в SSMS

Система выдает сообщение об ошибке при изменении схемы для таблицы с помощью конструктора таблиц в SQL Server Management Studio (SSMS). Я изменяю установку столбца c nulls allowed на not null (в таблице около 200 000 строк). При попытке сохранить изменение выдается предупреждение, что это может занять некоторое время. Я принимаю это предупреждение, но затем операция завершается ошибкой превышения времени ожидания. Можно ли решить эту проблему?

Да. У конструктора таблиц истекает время ожидания, установленное по умолчанию, и транзакция завершается, прежде чем может быть выполнена. Время ожидания, используемое конструктором таблиц SSMS, можно увеличить. В меню Tools выберите Option. Разверните узел Designers и выберите Table and Database Designers. Проблему должно решить изменение установки параметра Transaction time-out after c заданных по умолчанию 30 секунд на большее значение, например 300 секунд.

Размеры хеш-индексов OLTP в памяти

Как задать значение параметра bucket_count для хеш-индексов In-Memory OLTP в SQL Server 2014?

SQL Server 2014 имеет индексы, которые используются для целевого поиска отдельных строк. Если вы не знаете, сколько приблизительно строк будет в таблице, то лучше уставить более высокое значение bucket_count. Слишком маленькое значение снизит производительность. В первом выпуске вы не можете переопределить значение bucket_count без отбрасывания и повторного создания индекса.

Что необходимо знать об SQL Server 2014

Поддерживается ли технология выполнения OLTP в памяти в редакции SQL Server 2014 Standard?

Нет. Функция In-Memory OLTP есть только в редакции SQL Server 2014 Enterprise. Ее нет в редакциях SQL Server 2014 Standard и Business Intelligence.

Увеличен ли объем доступной памяти в редакции SQL Server 2014 Standard по сравнению с предшествующими версиями?

Да. В предыдущих версиях SQL Server доступная память для редакции Standard не превышала 64 Гбайт. С выходом SQL Server 2014 максимальная память редакции SQL Server 2014 Standard увеличена до 128 Гбайт.

Возможны ли сжатие и шифрование резервных копий в редакции SQL Server 2014 Standard?

Да. Как сжатие, так и шифрование резервных копий возможны во всех редакциях SQL Server 2014, в том числе SQL Server 2014 Standard.

Поддерживаются ли группы обеспечения доступности Always On в редакции SQL Server 2014 Standard?

Нет. Группы обеспечения доступности Always On (AG) — превосходная функция обеспечения высокой доступности и аварийного восстановления, но они имеются лишь в редакции SQL Server 2014 Enterprise. Группы Always On отсутствуют в SQL Server 2014 Standard и Business Intelligence. Однако редакции SQL Server 2014 Standard и Business Intelligence поддерживают двухузловые экземпляры отказоустойчивого кластера (FCI) AlwaysOn — в сущности, кластеризацию SQL Server. Несмотря на похожие названия, группы Always On и FCI — разные технологии. Предполагается, что в редакции SQL Server 2016 Standard появятся группы обеспечения доступности Always On.

Нужны ли лицензии для вторичной реплики группы обеспечения доступности Always On?

Не всегда. Лицензия SQL Server не требуется, если реплика AG AlwaysOn пассивна, то есть не используется, если не происходит этапа отработки отказа. Участие в программе Software Assurance (SA) не обязательно. Однако, если вторичная реплика используется для активной работы (подготовки отчетов или даже резервного копирования), то для реплики требуется лицензия SQL Server.

Может ли SQL Server 2014 работать на Server Core?

Да. Все редакции SQL Server 2014 функционируют с Windows Server Core для Windows Server 2008 R2 SP1 и Windows Server 2012 и R2.

Где в SQL Server 2014 среда Business Intelligence Development Studio (BIDS)? Как вести проекты Reporting Services, Integration Services или Analysis Services?

Среда BIDS в SQL Server 2014 отсутствует. Вместо нее следует использовать инструментарий SQL Server Data Tools — Business Intelligence (SSDT-BI), который, как ни странно, отсутствует на установочном носителе SQL Server 2014. SSDT-BI можно получить из центра загрузки Microsoft (http://www.microsoft.com/en-us/download/confirmation.aspx? id=42313).

Восстанавливаем пароль пользователя sa

Недавно в компании, с которой я работал, был потерян пароль пользователя sa. Как его восстановить? Нужно ли переустанавливать SQL Server?

Нет. В большинстве случаев переустанавливать SQL Server не требуется. Если у вас есть доступ к административному паролю Windows Server и включен режим проверки подлинности Windows, то не составит труда сменить пароль пользователя sa с помощью SSMS. Просто выполните регистрацию на Windows Server в качестве администратора, затем откройте SSMS и установите соединение с компонентом Database Engine с использованием проверки подлинности Windows (см. экран 4).

 

Регистрация с помощью Windows Authentication
Экран 4. Регистрация с помощью Windows Authentication

После подключения пароль пользователя sa можно изменить с помощью SSMS или T-SQL. При использовании SSMS перейдите к узлу Security, а затем разверните Logins и щелкните правой кнопкой мыши на имени регистрации sa, чтобы изменить свойства пароля, как показано на экране 5.

 

Изменение пароля sa с помощью SSMS
Экран 5. Изменение пароля sa с помощью SSMS

Или же можно выбрать New Query («Создать запрос») из меню SSMS, чтобы открыть редактор запросов, а затем выполнить следующий запрос T-SQL, чтобы сбросить пароль для пользователя sa.

GO
ALTER LOGIN [sa] WITH DEFAULT_DATABASE=[master]
GO
USE [master]
GO
ALTER LOGIN [sa] WITH PASSWORD=N'NewPassw0rd'
GO

Однако как быть, если нет доступа к учетной записи, которая не входит в роль sysadmin? Начиная с SQL Server 2005 члены группы администраторов Windows могут обращаться к SQL Server в однопользовательском режиме. Это позволит добавить имя регистрации к роли sysadmin, которую затем можно использовать для запуска SQL Server с административными правами. Учетная запись должна быть членом локальной административной группы.

Для запуска SQL Server в однопользовательском режиме добавьте параметр -m в командной строке. Проще всего это сделать с помощью диспетчера настроек. Остановите экземпляр SQL Server, который нужно изменить. Щелкните экземпляр правой кнопкой мыши, чтобы открыть диалоговое окно свойств, и перейдите на вкладку Startup Parameters («Параметры запуска»). Введите -m в параметрах запуска, как показано на экране 6.

 

Настройка SQL Server на запуск в однопользовательском режиме
Экран 6. Настройка SQL Server на запуск в однопользовательском режиме

Затем запустите экземпляр SQL Server. Откройте командную строку с повышенными привилегиями и введите sqlcmd. В окне sqlcmd введите команду, как показано ниже, чтобы добавить свое имя регистрации к группе sysadmin (см. экран 7).

EXEC sp_addsrvrolemember 'CONTOSO\mikeo2', 'sysadmin';
GO

 

Работа с sqlcmd
Экран 7. Работа с sqlcmd

В этом примере учетная запись CONTOSO\mikeo2 добавлена к роли sysadmin SQL Server. Воспользуйтесь диспетчером настроек, чтобы остановить службы SQL Server и удалить -m из параметров запуска. Затем перезапустите службу SQL Server. Вы сможете выполнить регистрацию с правами sysadmin из добавленной вами учетной записи. Далее измените пароль пользователя sa, применив один из методов, упомянутых выше.

Дополнительные сведения можно получить в публикации Connect to SQL Server When System Administrators Are Locked Out (https://msdn.microsoft.com/en-us/library/dd207004.aspx). Еще одно эффективное решение с использованием PSExec описано в материале Recover access to a SQL Server instance (http://www.mssqltips.com/sqlservertip/2682/recover-access-to-a-sql-server-instance/).