MS SQL Server

  Все выпуски  

MS SQL Server - дело тонкое...


Информационный Канал Subscribe.Ru

#267<<  #268

СОДЕРЖАНИЕ

1.СТАТЬИ
1.1.Секционированные таблицы и индексы SQL Server 2005 (продолжение)
1.2.Использование статистики оптимизатором запросов Microsoft SQL Server 2005 (продолжение)
1.3.Описание технологии работы Log Shipping SQL Server 2000
2.ССЫЛКИ НА СТАТЬИ
2.1.Статьи на русском языке
2.2.Англоязычные статьи
3.ФОРУМ SQL.RU
3.1.Самые популярные темы недели
3.2.Вопросы остались без ответа

СТАТЬИ

Секционированные таблицы и индексы SQL Server 2005 (продолжение)

По материалам статьи Kimberly L. Tripp: SQL Server 2005. Partitioned Tables and Indexes
Перевод Алексея Сафонова

Шаги по созданию секционированных таблиц

Теперь, когда у Вас уже сложилось представление о том, для чего создаются и что предлагают секционированные таблицы, неплохо было бы проследить всю логическую цепочку процесса создания секционированной таблицы (см. Рисунок 11).


Рисунок 11: Шаги по Созданию Секционированной Таблицы или Индекса

[В начало]

Определите, НУЖНО ЛИ секционировать Объект

Как уже описано выше - это первый и самый важный шаг. Не каждая таблица нуждается в секционировании. Не смотря на то, что секционирование прозрачно с точки зрения приложения, оно усложняет администрирование и реализацию ваших объектов. В то время как секционирование может предложить значительные преимущества, Вы наверняка не станете к нему прибегать для маленьких таблиц. Так что же считать большим, а что маленьким? Ваши требования к производительности и обслуживанию, равно как и текущее состояние этих показателей - вот факторы, определяющие потребность в секционировании.
К примеру, архивирование диапазона данных отдельной таблицы продаж занимает существенное время - минуты (или более) при добавлении новых записей (с помощью INSERT … SELECT) или удалении старых данных (с помощью DELETE … WHERE). Если эти операции создают излишнюю нагрузку на системные ресурсы и производительность, тогда вам стоит рассмотреть возможность секционирования, в противном случае вы можете просто усложнить администрирование без существенной выгоды для себя.

[В начало]

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

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

За более подробной информацией вы можете обратиться к разделу BOL: Designing Partitioned Tables and Indexes.

[В начало]

Определите, СТОИТ ЛИ использовать несколько файловых групп

В целях улучшения производительности и упрощения обслуживания следует использовать файловые группы (filegroups) для разделения данных. Количество файловых групп частично продиктовано аппаратными ресурсами, находящимися в вашем распоряжении; наверняка вам захочется иметь такое же количество файловых групп, что и количество секций, и предпочтительно эти файловые группы будут располагаться на разных дисках. Однако, это в первую очередь относится к системам, где анализ имеет тенденцию быть проводимым по всему набору данных. Если в вашем распоряжении находится мультипроцессорная система, SQL Server может работать с несколькими секциями параллельно и поэтому значительно сокращать общую продолжительность обработки больших и сложных отчетов и аналитических данных. В этом случае, Вы можете получать выигрыш в производительности при параллельной обработке данных, а так же при переключении секций в секционированной таблице.

[В начало]

Создайте файловые группы

Если Вы хотите разместить секционированную таблицу в нескольких файлах для улучшения сбалансированности подсистемы ввода/вывода, тогда вам следует создать файловую(ые) группу(ы). Файловые группы могут состоять из одного или более файлов, и каждая секция должна отображаться на файловую группу. Одна файловая группа может использоваться несколькими секциями, однако для лучшего управления данными, например, для большей гранулированности резервного копирования, вы должны разрабатывать ваши секционированные таблицы продуманно, так чтобы только связанные или логически сгруппированные данные размещались в одной и той же файловой группе. Используя оператор ALTER DATABASE, Вы добавляете логическое имя файловой группы - той, к которой будут добавлены файлы. Чтобы создать файловую группу с именем "2003Q3" для учебной базы данных AdventureWorks используйте следующий оператор:

ALTER DATABASE AdventureWorks ADD FILEGROUP [2003Q3]

После того как вы создадите файловую группу, используйте оператор ALTER DATABASE чтобы добавить файлы в файловую группу.

ALTER DATABASE AdventureWorks ADD FILE (NAME = N'2003Q3', FILENAME = N'C:\AdventureWorks\2003Q3.ndf', SIZE = 5MB, MAXSIZE = 100MB, FILEGROWTH = 5MB) TO FILEGROUP [2003Q3]

Таблица создается в файле(ах), определяющем файловую группу; ее местоположение задается в разделе ON оператора CREATE TABLE. Однако без секционирования таблицу нельзя разместить в нескольких файловых группах. Чтобы создать таблицу на основе одной файловой группы, вы используете выражение ON оператора CREATE TABLE. Чтобы создать секционированную таблицу, Вы сначала должны определиться с логикой секционирования. Даже притом, что вы можете определять логические секции для конкретной отдельно взятой таблицы, SQL Server позволяет Вам повторно использовать определение секций и для других объектов. Чтобы отделить понятие "секция" от понятия "таблица" Вы создаете структуру секций посредством функции секционирования. Поэтому первый шаг в секционировании таблицы состоит в создании функции секционирования.

[В начало]

CREATE PARTITION FUNCTION для диапазонных секций

Диапазонные секции должны быть определены с граничными условиями. Кроме того, все границы должны быть включены; функция диапазонного секционирования должна включать все значения даже притом, что диапазон значений таблицы может быть (и должен быть) более ограниченным (посредством CHECK constraint). Никакие значения (с любого конца диапазона) не должны быть исключены. Кроме того, поскольку данные, вероятно, будут добавляться и удаляться из секции, вам потребуется последняя пустая секция, которую вы сможете постоянно "расщеплять", выделяя тем самым место для новой секции данных. Эта последняя секция будет всегда оставаться пустой, находясь в ожидании новых записей, которые вы будете периодически в нее включать.

При диапазонном секционировании вначале определяют граничные точки. Если Вы определяете пять секции, то потребуются только четыре граничные точки. Для того чтобы разделить данные на пять групп, Вы определяете четыре граничных значения для секций, а затем определяете, какой из секций будет принадлежать каждое из этих значений: первой (LEFT) или второй (RIGHT).
У Вас всегда будет одна секция (крайне правая для LEFT-функции, или крайне левая для RIGHT-функции), у которой не будет явно заданной граничной точки. Это объяснение может показаться несколько запутывающим, однако помните, что функция секционирования включает все значения данных (- бесконечность слева и бесконечность справа).
Определяя режим LEFT или RIGHT, Вы определяете, является ли граничное значение верхней границей первой секции (LEFT) или нижней границей второй секции (RIGHT). Другими словами, если первое значение (граничное условие) функции секционирования будет '20001001', тогда значения в пределах соседствующих секций распределятся так:

    Для LEFT:
    1-ая секция - диапазон данных <= '20001001'
    2-ая секция - диапазон данных > '20001001'
    Для RIGHT:
    1-ая секция - диапазон данных < '20001001'
    2-ая секция - диапазон данных => '20001001'

Поскольку Ваши диапазонные секции наверняка будут определяться по столбцам с типом данных datetime, то вам следует знать об импликациях (implication - "вовлечение").

Примечание: Импликация (от лат . implico - тесно связываю) - приблизительный логический эквивалент оборота "если..., то..."; операция, формализующая логические свойства этого оборота.

Применяя тип данных datetime, Вы всегда используете ОДНОВРЕМЕННО и дату и время. Дата без определенного значения времени подразумевает нулевое время - 12:00am. Если, к примеру, LEFT-функция базируется на этом типе данных, то тогда данные за 1 октября 12:00am попадут в 1-ую секцию, а остальная часть октября - во 2-ую. По логике, лучше всего использовать начальные значения (набора данных второй секции) с RIGHT-функцией и конечные значения (набора данных первой секции) с LEFT-функцией. Три следующих выражения создают логически идентичные структуры секционирования:

RANGE LEFT FOR VALUES ('20000930 23:59:59.997', '20001231 23:59:59.997', '20010331 23:59:59.997', '20010630 23:59:59.997') OR RANGE RIGHT FOR VALUES ('20001001 00:00:00.000', '20010101 00:00:00.000', '20010401 00:00:00.000', '20010701 00:00:00.000') OR RANGE RIGHT FOR VALUES ('20001001', '20010101', '20010401', '20010701')

Примечание: Использование типа данных datetime добавляет сложности, поскольку Вы должны будете удостовериться в том, что установили правильные граничные значения. В случае с RIGHT-функцией все предельно просто, т.к. время по умолчанию равняется 12:00:00.000am. Для LEFT дополнительная сложность обусловлена точностью типа данных datetime. Причина, по которой вы ДОЛЖНЫ выбирать в качестве граничного значения 23:59:59.997, состоит в том, что тип данных datetime не гарантирует точность в 1 миллисекунду. Вместо этого, datetime-данные абсолютно точны в пределах 3.33 миллисекунд. Значение такта таймера процессора (tick) равное 23:59:59.999 не доступно для SQL Server, вместо этого значение округляется до ближайшего такта, которым является 12:00:00.000am следующего дня. Из-за такого округления границы могут быть неверно определены. Проявляйте осмотрительность при задании значений в миллисекундах для типа данных datetime.

Примечание: Функции секционирования также позволяют в качестве определения использовать другие функции. Вы можете использовать функцию DATEADD (ms,-3, '20010101') вместо явного определения '20001231 23:59:59.997'.

За дополнительной информацией обратитесь к разделу BOL: "Date and Time" in the Transact-SQL Reference.

Для того чтобы хранить по одной четверти данных таблицы Orders в четырех активных секциях (представляющих календарные кварталы) и иметь пятую секцию для последующего использования (в качестве полигона для добавления/исключения данных из секционированной таблицы), используйте такую LEFT-функцию секционирования с четырьмя граничными условиями:

CREATE PARTITION FUNCTION OrderDateRangePFN(datetime) AS RANGE LEFT FOR VALUES ('20000930 23:59:59.997', '20001231 23:59:59.997', '20010331 23:59:59.997', '20010630 23:59:59.997')

Помните, что четыре граничные точки создают 5 секции - с одной пустой секцией справа, если функция секционирования определена как LEFT, и одной пустой секцией слева, если функция определена как RIGHT. Посмотрите какие наборы данных создаются этой функцией секционирования:

    Граничная точка '20000930 23:59:59.997' LEFT-ФУНКЦИИ (задает модель):
              КРАЙНЕ ЛЕВАЯ секция будет включать все значения <= '20000930 23:59:59.997'
    Граничная точка '20001231 23:59:59.997':
              ВТОРАЯ секция будет включать все значения > '20000930 23:59:59.997' и <= '20001231 23:59:59.997'
    Граничная точка '20010331 23:59:59.997':
              ТРЕТЬЯ секция будет включать все значения > '20001231 23:59:59.997' и <= '20010331 23:59:59.997'
    Граничная точка '20010630 23:59:59.997':
              ЧЕТВЕРТАЯ секция будет включать все значения > '20010331 23:59:59.997' и <= 20010630 23:59:59.997'
    Наконец, ПЯТАЯ секция будет включать все значения > '20010630 23:59:59.997'.

Независимо от модели (LEFT или RIGHT), функция диапазонного секционирования должна включать все значения: от бесконечно малого до бесконечно большого. Для функции LEFT последняя граничная точка определит последнее абсолютное значение секций, но поскольку функция должна охватывать всю область данных, то для значений, больших чем значение последней граничной точки, должна существовать заключительная секция. При использовании LEFT-функций всегда будет существовать одна дополнительная секция в конце, и одна дополнительная секция вначале - для RIGHT-функций.

[В начало]

CREATE PARTITION SCHEME

Как только Вы создали функцию секционирования, Вы должны связать ее со схемой секционирования, для того чтобы адресовать секции определенным файловым группам. Когда Вы определяете схему секционирования убедитесь, что Вы определили файловые группы для КАЖДОЙ секции, даже если несколько секций будут располагаться в одной и той же файловой группе. Созданная ранее функция OrderDateRangePFN формирует 5 секций, последняя (пустая) будет располагаться в файловой группе PRIMARY. Нет никакой необходимости в особом размещении этой секции, поскольку она никогда не будет содержать данных.

CREATE PARTITION SCHEME OrderDatePScheme AS PARTITION OrderDateRangePFN TO ([2000Q3], [2000Q4], [2001Q1], [2001Q2], [PRIMARY])

Примечание: Если все секции должны располагаться в одной и той же файловой группе, то в этом случае можно применять упрощенный синтаксис:

CREATE PARTITION SCHEME OrderDatePScheme AS PARTITION OrderDateRangePFN ALL TO ([PRIMARY])

[В начало]

Создайте секционированную таблицу

Теперь, когда логическая (функция секционирования) и физическая (схема секционирования) структуры определены, таблица может быть секционирована. Таблица определяет, какая "схема" должна использоваться, а схема определяет функцию. Для того чтобы связывать эти три понятия вместе, Вы должны определить столбец(ы) секционирования. Диапазонные секции всегда отображаются исключительно на один столбец таблицы, совместимый с типом данных граничных условий, определенных в функции секционирования. Кроме того, если в таблице необходимо специально ограничивать интервал допустимых значений (а не [- ;+ ]), то следует добавить ограничение целостности (check constraint).

CREATE TABLE [dbo].[OrdersRange] ( [PurchaseOrderID] [int] NOT NULL, [EmployeeID] [int] NULL, [VendorID] [int] NULL, [TaxAmt] [money] NULL, [Freight] [money] NULL, [SubTotal] [money] NULL, [Status] [tinyint] NOT NULL, [RevisionNumber] [tinyint] NULL, [ModifiedDate] [datetime] NULL, [ShipMethodID] [tinyint] NULL, [ShipDate] [datetime] NOT NULL, [OrderDate] [datetime] NOT NULL CONSTRAINT OrdersRangeYear CHECK ([OrderDate] >= '20030701' AND [OrderDate] <= '20040630 11:59:59.997'), [TotalDue] [money] NULL ) ON OrderDatePScheme (OrderDate) GO

[В начало]

Создайте индексы: секционированные либо обычные

По умолчанию индексы, создающиеся в секционированной таблице, будут использовать ту же самую схему секционирования и столбец секционирования, что и таблица. В этом случае индекс будет "выровнен" по отношению к таблице. Выравнивание не является обязательным условием, тем не менее, зачастую желательно, чтобы таблица и индексы были выровнены. Выравнивание таблицы и ее индексов обеспечивает более легкое управление и администрирование, особенно при работе по сценарию "скользящего окна". Не смотря на это, индексы не обязательно должны быть выровнены. Индексы могут быть основаны на других функциях секционирования или не быть секционированы вовсе.

Например, в случае, когда создаются уникальные индексы, столбец секционирования должен быть одним из ключевых столбцов; это будет гарантировать то, что для обеспечения уникальности потребуется проверить только подходящую секцию. Поэтому, если Вам необходимо секционировать таблицу по одному столбцу, а создать уникальный индекс по другому столбцу, то тогда они не смогут быть выровнены; индекс может быть либо секционирован по уникальному столбцу (если уникальный ключ основан на нескольких столбцах, то тогда это может быть любой из ключевых столбцов), либо вообще не секционирован. Запомните, что этот индекс должен быть удален и создан заново, если какие-то данные "включаются" или "исключаются" из секционированной таблицы.

Примечание: Если Вы планируете загрузить таблицу c существующими данными и затем добавить к ней индексы, то чаще всего наиболее эффективным способом будет загрузка данных в НЕ секционированную, НЕ индексированную таблицу с последующим созданием индексов и секционированием таблицы. Основывая кластерный индекс на схеме секционирования, вы тем самым эффективно секционируете таблицу. Это прекрасный способ секционирования таблиц. Для того чтобы создать таблицу как НЕ секционированную, а кластерный индекс как секционированный кластерный индекс, замените определение ON оператора CREATE TABLE на одну-единственную файловую группу и затем, после того как данные будут загружены, создайте кластерный индекс на основе схемы секционирования.

ПРОДОЛЖЕНИЕ СЛЕДУЕТ

[В начало]

Использование статистики оптимизатором запросов Microsoft SQL Server 2005 (продолжение)

По материалам статьи Eric N. Hanso: Statistics Used by the Query Optimizer in Microsoft SQL Server 2005

Создание статистики для SQL Server 2005

Вы можете создать статистику для SQL Server 2005 несколькими способами:

  • Оптимизатор автоматически создает статистику, как побочный эффект оптимизации инструкций SELECT, INSERT, UPDATE и DELETE, когда включена опция AUTO_CREATE_STATISTICS, которая задействована по умолчанию.

  • В SQL Server 2005 основными инструкциями, которые явно собирают статистическую информацию, являются: CREATE INDEX - создаёт объявленный индекс, а также создает для него набор статистики по его комбинации полей, составляющих индексный ключ (но не другие, входящие в индекс поля). CREATE STATISTICS - занимается только созданием статистики по заданному полю или комбинации полей.

  • Кроме предыдущего способа, есть несколько других способов создания статистики или индексов. В конечном счете, каждый из таких способов исполняет одну из указанных выше двух команд. Используйте sp_createstats для создания статистики по всем возможным полям (кроме полей с типом XML) во всех пользовательских таблицах текущей базы данных. При этом новые объекты статистики не будет создаваться для тех полей, которые уже имеют объекты статистики.

  • Используют dbcc dbreindex для восстановления одного или нескольких индексов у таблицы в указанной базе данных.

  • Можно воспользоваться Management Studio, развернув соответствующую папку под объектом Table, щёлкнуть правой кнопкой мыши по папке Statistics, и выбрав пункт New Statistics.

  • Можно использовать для создания индексов утилиту Database Tuning Advisor (DTA).

В качестве примера рассмотрите команду CREATE STATISTICS для таблицы AdventureWorks.Person.Contact:


CREATE STATISTICS FirstLast2 ON Person.Contact(FirstName,LastName)
WITH SAMPLE 50 PERCENT

Обычно, статистических данных, полученных по типовой выборке, достаточно, чтобы получился хороший план исполнения запроса. Однако, могут быть случаи, когда статистика по большой выборке может помочь лучше оптимизировать запрос, например, когда значения в выборке по данному столбцу не носят случайный характер. Не случайный характер выборки может быть, если данные отсортированы или кластеризованы. Сортировка или кластеризация может быть результатом создания индексов, или загрузки данных в хип, который уже отсортирован или кластеризован. Обычно, большая выборка с полным сканированием используется потому, что она дает самую точную статистику. Ценой этого становиться увеличение времени создания такой статистики.
Пример команды создает один статистический объект по двум полям. В этом случае, SAMPLE 50 PERCENT игнорируется, и будет просканирована вся таблица, потому что она слишком маленькая. Исполнение выборки нужно для предотвращения излишних сканирований данных и затрагивает только те таблицы и индексы, у которых более 1024 страниц (8 Мбайт).
В SQL Server 2005 статистические данные создаются для всех индексов во время их создания. При компиляции запросов SQL Server автоматически создает статистику по одному полю. Эта статистика создаётся по полям, для которых оптимизатор иначе должен был бы оценивать приблизительную плотность или распределение. Но есть и исключения из этого правила. Статистика не может быть создан автоматически, когда (1) база данных в режиме - read-only, (2) существует много не завершённых и исполняющихся компиляций, и (3) тип данных поля не поддерживается автоматической статистикой.
Функция автоматического создания статистики может быть заблокирована на уровне базы данных, для чего нужно выполнить:


ALTER DATABASE dbname SET AUTO_CREATE_STATISTICS OFF

Точно так же можно разрешить на уровне базы данных автоматическое создание статистики:


ALTER DATABASE dbname SET AUTO_CREATE_STATISTICS ON

Рекомендуется, чтобы Вы оставили значение ON. Отключать автоматическое создание статистики стоит, если Вы можете этим решить имеющиеся у Вас проблемы производительности, и нужно определить отличную от заданной по умолчанию частоту выборки для некоторых таблиц.
По умолчанию, статистические данные собираются по выборке из пробного набора данных, когда выполняется команда CREATE STATISTICS или когда статистика создаётся автоматически. CREATE INDEX, так или иначе, просматривает весь набор данных. Поэтому, первый набор статистических данных при создании индекса собирается не по пробному набору (эквивалентен сканированию всей таблицы). Команда CREATE STATISTICS позволяет задавать в предложении WITH размер пробной выборки, а также использовать сканирование всей таблицы или заданный процент от анализируемых данных или число сканируемых строк (которое интерпретируется приблизительно). Также можно унаследовать предыдущий размер пробного набора, если в команде UPDATE STATISTICS задать WITH RESAMPLE. Это особенно полезно, когда есть индексы по некоторым полям или наборам полей (с самого начала получивших статистику в результате полного сканирования), и если есть статистика по какому - нибудь другому полю или нескольким полям (изначально созданная по пробному набору). Тогда использование опции RESAMPLE в UPDATE STATISTICS соберёт статистику сканированием таблицы для индексов, а по пробной выборке для остальных полей.
Для маленьких таблиц пробная выборка составляет минимум 8 Мбайт данных. Если таблица в начале была маленькой, а выборка осуществлялась с заданной по умолчанию частотой, и после этого для обновления статистики используется опция RESAMPLE, Вы получите эквивалент полного сканирования таблицы, не смотря на то, что размер таблицы мог уже превысить 8 Мбайт. Поэтому, стоит избегать использования RESAMPLE, если Вы хотите наверняка использовать заданную по умолчанию частоту, и не зависеть от изменения размера таблицы.
Частота для RESAMPLE вычисляется, как функция от числа отобранных строк и общего числа строк в таблице, полученных во время предыдущего вычисления статистики. Так как реальное значение частоты выборки (sampling rate) может изменяться из-за случайного характера самой выборки, частота RESAMPLE является только приближением предшествующей частоты для выборок без полного сканирования. Для последовательно повторяющейся выборки лучше явно определить ту же самую частоту выборки, которая использовалась до этого в UPDATE STATISTICS, отказавшись, таким образом, от использования RESAMPLE.
Команда dbcc show_statistics показывает типичный размер, озаглавленный Rows Sampled. Автоматически созданная или обновлённая статистика (о которых мы поговорим в следующей главе) всегда генерируются с использованием заданной по умолчанию выборки. Заданная по умолчанию частота выборки является медленно возрастающей функцией от размера таблицы, что позволяет собирать статистику относительно быстро даже для очень больших таблиц.
Когда статистические данные созданы и обновлены, оптимизатор должен выбрать путь доступа для собора статистики. Путь доступа может включать хип, кластерный индекс или не кластерный индекс. Для статистической выборки, оптимизатор старается не выбирать те пути доступа, у которых данные физически отсортированы по первому ключевому полю статистики. Это делает выборку более случайной, а саму статистику более точной. Для тех путей доступа, которые не отсортированы по ключу статистики (если такой путь доступа существует), выбирается самый дешёвый по стоимости доступа путь. Это - самый короткий индекс или хип. Для статистики с полным сканированием, порядок сортировки присущий путям доступа не существенен, и не влияет на точность статистики, так что будет выбран путь доступа с самой маленькой стоимостью.
Автоматическое создание статистики можно контролировать с помощью SQL Server Profiler. Сообщение Auto Stats находится в группе событий трассировки: Performance. Также при определении трассы для сообщения Auto Stats стоит выбрать столбцы: IntegerData, Success и ObjectID. Когда будет получено сообщение AutoStats, в столбце Integer Data будет количество созданных или обновлённых статистик для данной таблицы, В ObjectID будет идентификатор таблицы, а в столбце TextData (включаемом в трассу по умолчанию) будут имена полей, для которых было выполнено создание или обновление статистики, дополненных соответствующими префиксами Created: или Updated:. В поле Success будет содержаться информация об успешности или отказе операции Auto Stats. Успешность имеет три возможных значения:

Наименование

Значение

Описание

FAILED

0

Неудачное создание или обновление Auto Stats, по каким - либо причинам, кроме THROTTLED (см. ниже).
Например, база данных была в режиме read-only.

SUCCESS

1

Успешное создание или обновление Auto Stats.

THROTTLED

2

Неудачное создание или обновление Auto Stats, потому что происходило слишком много оптимизаций.

В некоторых случаях можно наблюдать сообщения AutoStats, в которых не были созданы или обновлены никакие статистические данные. Такие сообщения получаются, когда выключена опция auto update statistics или когда было зафиксировано существенное количество изменений в таблице, к которой выполнялся запрос, и оптимизатор не смог удалить все ссылки к этой таблице из плана исполнения запроса из-за структуры этого запроса и воздействия ограничений внешнего ключа.
Команда DROP STATISTICS используется для удаления статистики, но не возможно удалить статистические данные, которые являются побочным продуктом создания индекса. Такие статистические данные удаляются только вместе с удалением индекса.

ПРОДОЛЖЕНИЕ СЛЕДУЕТ

[В начало]

Описание технологии работы Log Shipping SQL Server 2000

Автор: Ирина Наумова

В этой статье я расскажу, как работает Log Shipping, какие задания создаются при его на-стройке, как они функционируют, где хранится системная информация о передаче журналов, а также немного расскажу, как найти причину ошибки, возникающую в процессе работы.

1 Описание работы заданий Log Shipping

Log Shipping - это фактически некоторое множество заданий (SQL-job). Суть Log Shipping состоит в передачи копий журналов транзакций с одного сервера на другой, что при определенных дополнениях (например, таких, как перенос логинов и сопоставление SID-ов) позволяет создать и поддерживать в актуальном состоянии резервный сервер. При этом нужно помнить, что данные на резервный сервер попадают не сразу, а через некоторый промежуток времени, зависящий от на-строек Log Shipping: частоты создания резервных копий журнала; частоты переноса копий на вто-ричный сервер и их восстановления там и эту частоту нельзя установить меньше чем 1 минута. Т.о. нельзя заставить работать Log Shipping в непрерывном режиме, как например репликацию.
При настройке Log Shipping создаются четыре или пять (если предусмотрена смена ролей серверов) заданий.

[В начало]

1.1 Первичный сервер

1.1.1 Задание: "Transaction Log Backup Job for DB Maintenance Plan"

    На первичном сервере создается задание: "Transaction Log Backup Job for DB Maintenance Plan - <Имя плана обслуживания>".
    Основная функция этого задания - выполнение резервных копий журнала транзакций на первичном (основном) сервере в указанную при создании плана обслуживания папку. Поскольку при выполнении этого задания информация о последней копии журнала прописывается на сервер мониторинга, в таблицу msdb..log_shipping_primaries, у учетной записи, которая используется для подключения к серверу мониторинга, должны быть права на изменение этой таблицы. Отсут-ствие этих возможностей может привести к тому, что задания мониторинга будут завершаться с ошибкой. Это описано в следующей статье Базы знаний Microsoft (MSDN): PRB: Backup, Copy, and Load Job Information Is Not Updated on the Log Shipping Monitor

[В начало]

1.2 Вторичный сервер

На вторичном сервере создаются два задания, или их может быть три, если предусмотрена возможность смены ролей:

    1.2.1 Задание: "Log Shipping copy for <Имя первичного сервера>.<Имя БД_logshipping>"
    Это задание под учетной записью SQL Server Agent подключается к первичному серверу и последовательно, по одному файлу при каждом запуске, копирует файлы журналов транзакций на локальный диск вторичного сервера. Соответственно у учетной записи SQL Server Agent вто-ричного сервера должны быть права на чтение из той папки, в которую задание "Transaction Log Backup Job for DB Maintenance Plan <Имя плана обслуживания>" на первичном сервере со-храняет копии журналов транзакций. Кроме того, у неё должны быть права на запись в папку, где копии журналов транзакций будут храниться на вторичном сервере.

    1.2.2 Задание: "Log Shipping Restore for <Имя вторичного сервера>.<Имя БД_logshipping>"
    Это задание восстанавливает копии журналов транзакций на вторичном сервере.

    1.2.3 Задание: "Transaction Log Backup Job for DB Maintenance Plan <Имя плана об-служивания>"
    Это задание создается только в том случае, если предусмотрена необходимость смены ролей серверов. Функциональные возможности состоят в том, чтобы при смене ролей серверов создавать резервные копии журнала транзакций уже на вторичном сервере. У этого задания должен быть отключен статус "Enabled".

[В начало]

1.3 Сервер мониторинга

    1.3.1 Задание: "Log Shipping Alert Job Restore"
    Данное задание запускает хранимую процедуру msdb.dbo.sp_log_shipping_monitor_restore, которая и звлекает название файла последней резервной копии журнала из поля last_backup_filename таблицы msdb..log_shipping_primaries, и вытаскивает из названия файла дату его создания. Далее дата создания файла последней резервной копии журнала транзакций сравни-вает с датой, полученной из поля last_loaded_filename таблицы msdb..log_shipping_secondaries. Если разница в минутах между двумя этими значениями больше чем значение поля log_shipping_secondaries.out_of_sync_threshold, задание завершается с ошибкой.
    То есть проверяется, чтобы время, прошедшее между созданием последней резервной копией журнала и ее восстановлением на вторичном сервере не превышало заданного при настройке Log Shipping значения. И таким образом проверяется, что период рассинхронизации не превышает за-данный интервал.

    1.3.2 Задание: "Log Shipping Alert Job - Backup"
    Это задание запускает процедуру msdb.dbo.sp_log_shipping_monitor_backup. В процедуре сравнивается дата из поля last_updated таблицы log_shipping_primaries с текущей датой и если разница больше, чем значение поля backup_threthold таблицы log_shipping_primaries, задание за-вершается с ошибкой. То есть это задание поверяет, чтобы промежуток времени, прошедший с момента создания последней резервной копии, не превышает установленного значения. Следует также заметить что проверка производится в курсоре по всем строкам таблицы log_shipping_primaries, и если хоть одно значение поля last_updated отличается от текущей даты более чем задано в поле backup_threthold, задание завершится с ошибкой. Поэтому могут возникать такие ситуации, когда задание завершилось с ошибкой и помечено красным кружком, а на сервере мониторинга показано что пара первичный-резервный сервер находятся в синхронизации друг с другом.

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

Важно: Серверы должны быть синхронизированы по времени и формат времени должен быть одинаковым (то есть, например, на всех серверах использовать 24 часовой формат времени), иначе это может привести к тому, что задания передачи журналов будут завершаться с ошибками. Также к ошибкам могут приводить следующие причины:

  • Расписание выполнения заданий по переносу журналов имеет временнЫе промежутки больше установленных и допустимых.

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

Для того чтобы лучше понять, как функционируют задания передачи журналов, в Приложении к этой статье будет приведена схема работы Log Shipping.

[В начало]

2 Параметры Log Shipping, доступные уже после его настройки

2.1 Изменение параметров подключения к серверу мониторинга

Для того чтобы изменить учетную запись, под которой первичный и вторичный сервер под-ключаются к серверу мониторинга, необходимо открыть список объектов в Enterprise Manager, выбрать базу данных, для которой настроена передача журналов, и из контекстного меню выбрать пункт "Properties". Появится окно свойств базы данных, показанное на Рисунке 1.


Рисунок 1. Окно свойств базы данных

Из информации на вкладке "General", в окне свойств базы данных, можно увидеть, что данный сервер играет роль первичного, а также можно узнать имя плана обслуживания, время создания последней полной копии БД и последней копии журнала транзакций, и определить какой сервер является сервером мониторинга.
Для того чтобы изменить учетную запись подключения к серверу мониторинга, нужно на-жать кнопку "Details" и в появившемся окне (См.Рисунок 2. Log Shipping Details) задать использование учетной записи SQL Server log_shipping_monitor_probe или использовать Windows аутентификацию (при этом будет использоваться учетная запись, под которой запущен SQL Server Agent).


Рисунок 2. Log Shipping Details

[В начало]

2.2 Добавление возможности изменения роли серверов

Для этого в Enterprise Manager в дереве объектов необходимо выбрать <Имя Резервного Сервера> -> Management -> Database Maintenance Plan, в окне детализации выбрать план об-служивания, и в контекстном меню выбрать пункт "Properties". В открывшемся окне перейти на вкладку "Log Shipping". Выбрать нужный вторичный сервер и нажать кнопку "Edit".


Рисунок 3. Database Maintenance Plan

В окне "Edit Destination Database" в разделе "Future Primary Option" установить флаг "Allow Database to assume primary role", и задать путь к локальной папке вторичного сервера, в ко-торую в случае смены ролей SQL Server будет записывать копии журнала транзакций.

[В начало]

2.3 Изменение состояния базы данных на резервном сервере после восстановления; изменение поведения сервера при восстановлении журнала, когда имеются подключения к БД; изменение частоты копирования и восстановления

Все эти настройки доступны на следующей вкладке "Initialize" окна "Edit Destination Data-base" (Рисунок 4. Вкладка Initialize)


Рисунок 4. Вкладки General и Initialize

Раздел Secondary Load State:

Если выбран параметр "No Recovery Mode", после восстановления следующей копии журнала на резервном сервере база данных будет недоступна пользователям.
При выборе "Standby Mode" база данных будет доступна пользователям для чтения.
При установке флага "Terminate users in database", когда начинается процесс восстановления, все соединения пользователей с БД разрываются. Если снять этот флаг, то пользователи смо-гут продолжать работать с базой данных, но процесс восстановления не сможет начаться до тех пор, пока есть подключения к БД.

Раздел Schedules:

Параметр "Copy Frequency" задает частоту копирования файлов копий журналов из папки первичного сервера в папку на вторичном сервере.
Параметр "Load Frequency" задает частоту восстановления журналов на вторичном сервере.

[В начало]

2.4 Настройка допустимого времени, в течение которого сервера могут находиться в со-стоянии рассинхронизации; настройка времени задержки восстановления; настройка периода хранения копий журналов транзакций и истории

Все эти параметры также доступны в окне "Edit Destination Database" на вкладке "Threshold" (Рисунок 5. Вкладка "Thresholds").


Рисунок 5. Вкладка Thresholds

Параметр "Out Of Sync Threshold" задает максимальный промежуток времени, который может пройти между последним резервированием журнала транзакций на первичном сервере, и последним восстановлением журнала транзакций на вторичном сервере.
"Load Time Delay" - время задержки восстановления.
"File Retention Period" - если файлы копий журнала транзакций созданы ранее, чем это значение, они удаляются. Например, для значения, установленного на Рисунок 5, будут удаляться файлы, созданные более суток назад (1 Day).
"History Retention Period" - задает время хранения истории, до того как она будет удалена.

[В начало]

2.5 Параметры, которые можно изменить с сервера мониторинга

В дереве объектов Enterprise Manager нужно выбрать <Имя Сервера Мониторинга> -> Management -> Log Shipping Monitor. В окне детализации выбрать нужную пару серверов, участвующий в передаче журналов и из контекстного меню выбрать пункт "Properties". Откроется окно "Log Shipping Pair Properties". На вкладке "Status" нет значений, которые можно устано-вить, но можно почерпнуть некоторую информацию (Рисунок 6)


Рисунок 6. Окно Log Shipping Pair Properties

Перейдем на вкладку "Source" (Рисунок 7)


Рисунок 7. Вкладка "Source"

"Alert threshold" - время, которое может пройти с момента создания последней резервной копии журнала до того как сервер мониторинга выдаст сообщение об ошибке.
"Alert number" - номер сообщения.
Если снять флаг "Enabled", то проверка производиться будет, но сообщения об ошибках появляться не будет. Также эту возможность можно включить / отключить следующим образом: В дереве объектов Enterprise Manager нужно выбрать <Имя сервера Мониторинга> -> Manage-ment -> Log Shipping Monitor. В окне детализации выбрать нужную пару серверов, участвующий в передаче журналов и из контекстного меню выбрать пункт: "Enable / Disable Backup Alert"
В разделе "Supress Alert Generation Between" можно установить время, когда сообщения генерироваться не будут.
Если нажать кнопку "View Backup Schedule" можно посмотреть расписание резервного копирования журналов.
Теперь перейдем на следующую вкладку "Destination" (Рисунок 8)


Рисунок 8. Вкладка "Destination"

Здесь можно установить максимально возможное время рассинхронизации (Alert threshold) и номер сообщения об ошибке при рассинхронизации (Alert number).
Если снять флаг "Enabled", проверка производиться будет, но сообщения об ошибках появляться не будут. Также эту возможность можно включить / отключить следующим образом: В дереве объектов Enterprise Manager нужно выбрать <Имя Сервера Мониторинга> -> Management -> Log Shipping Monitor. В окне детализации выбрать нужную пару серверов, участвующий в передаче журналов и из контекстного меню выбрать пункт "Enable / Disable out-of-sync Alert".
В разделе "Supress Alert Generation Between" можно установить время, когда сообщение генерироваться не будет.
А также можно посмотреть расписание копирования файлов с первичного сервера на вторичный (View Copy Schedule), и расписание восстановления журналов (View Load Schedule).

ПРОДОЛЖЕНИЕ СЛЕДУЕТ

[В начало]

ССЫЛКИ НА СТАТЬИ

Статьи на русском языке


Вычислительные сети
Майкл Оти
MSSQLServer: Вам приходилось слышать модное словечко из сферы IT - grid computing (сетевые вычисления)? Эта технология известна также как utility computing (вычисления по запросу) или on-demand computing (вычисления по требованию). Она имеет столько же определений, сколько и названий. На базовом уровне grid computing призвана решать те же задачи, что и инициатива Microsoft Trustworthy Computing (доверенные вычисления) - сделать вычислительные ресурсы столь же доступными и надежными, как водопровод и электричество. Включая свет, вы ожидаете, что лампочка загорится - точно так же и при подключении к вычислительной среде вы сможете рассчитывать на доступность различных служб, предоставляемых данной средой...

Предложение, от которого невозможно отказаться
Майкл Оти
MSSQLServer: Службы отчетов SQL Server 2000 Reporting Services представляют собой дополнительный модуль SQL Server 2000, обеспечивающий возможность создания отчетов, управления и доставки...

Монопольные блокировки - некоторые практические соображения
AlexGaas
MSSQLServer: Эта статья посвящена монопольным блокировкам многопользовательских приложений...

Технологии XML в SQL Server 2005. Индексирование XML данных
Сергей Шишкин's Blog
MSSQLServer: Хранение структурированных данных в виде XML документов в SQL Server идея, конечно, хорошая, но если копнуть глубже в документацию, оказывается, что по умолчанию никакой структурированности нет. SQL Server хранит XML данные в виде BLOB'ов размером до двух гигабайт и для каждого запроса по ним, вынужден заново делать разбор каждого документа. Естественно, если в запросах XML данные выступают в роли критерия выборки, то о производительности можно забыть. Именно для таких случаев можно использовать, так называемый, первичный XML индекс, который занимается разбором XML данных сразу при их добавлении...

Как сделать эксперта предметной области союзником при разработке и поддержке баз данных
Точилкина Т.Е.
CASE: Взаимодействие разработчиков с экспертами предметной области в процессе проектирования базы данных позволяет повысить качество базы данных. Знания экспертов предметной области частично фиксируются в комментариях к таблицам и колонкам проектируемой базы данных...

Стандарты ISO 9000: Идентификация процессов системы менеджмента качества
А.Л. Новицкий, Т.Э. Болотина
CASE: С момента принятия и вступления в действие стандартов ISO серии 9000:2000 прошло немало времени. За четыре года накоплен опыт и отработаны методики внедрения процессного подхода при создании системы менеджмента качества (СМК). Тем не менее, встречаются методологические ошибки, приводящие к созданию СМК в виде искусственной надстройки, достаточной для получения сертификата, но имеющей крайне слабую связь с реальным управлением предприятием. Формальное соответствие СМК требованиям стандарта ISO 9001, безусловно, привносит некий порядок в деятельность. Но такая система слишком затратна и вряд ли приведет к увеличению объема продаж, производительности, улучшению качества и, следовательно, повышению конкурентоспособности продукции. Как и всякое искусственное образование, тол...

Windows - подъем!
Николай Ткаченко
А можно ли вернуть к жизни упавшую "двухтысячку"? За полчаса, без переустановки всей системы. Можно! Если только своевременно подготовиться к такой ситуации:...

Хранимые процедуры для автоматической модернизации Exchange
Дон Сир
MSSQLServer: Компания Logicom выпустила xp_sql2exchange, набор расширенных хранимых процедур SQL, которые позволяют администраторам баз данных использовать свои навыки программирования SQL для автоматической модернизации серверов Microsoft Exchange...

Как работает память SQL Server
Том Дэвидсон, Пракаш Сандерсан
MSSQLServer: Комментарии команды Customer Advisory Team...

Средства управления SQL Server 2005 - никаких тайн
osp.ru
MSSQLServer: Эксклюзивное интервью с Еном Гарденом...

Англоязычные статьи

Little Known SSIS Features
Kirk Haselden
Nick, our intrepid server and runtime tester, among other things, has gotten the blog bug and has written up some excellent information. I've posted it here for you folks. Please let us know if this is interesting to you

Top 20 Tips for OLAP Success
Nigel Pendse
Here are 20 quick tips, some obvious, but others counterintuitive, which are all based on real-world experience and research data

Measure Expressions
Chris Webb's BI Blog
I know this blog has been rather light on useful content (as opposed to links) recently, and I'm sorry - it's not that I'm not learning anything new, I am, but much of it is going into my chapters for MDX Solutions 2E rather than on here. I'll try to get round to blogging about stuff like the HAVING clause in MDX and the MemberValue() function sometime soon if I can do so without giving away all the juicy information that you'll want to buy the book for, and if Mosha (or even BOL) don't beat me to it...

Null and the colon operator
Chris Webb's BI Blog
I spotted another minor, but interesting new bit of functionality in AS2005 MDX while reading the new article on time intelligence that Mosha links to here - when using the colon operator to get a range of members, you can now use null on one side to denote either the first member or last member on the same level as the member explicity mentioned

MDX Scripts and Calculated Members
Chris Webb's BI Blog
The other thing that struck me about the Time Intelligence article that I was talking about in my last post (read it here) is the way that Rob and Mosha have used MDX Scripts and calculated members together to solve a problem that, traditionally, I would have solved using calculated members alone, and the fact that this new approach is more effecient

How to hide items in the HTML Toolbar control for SQL Server 2000 Reporting Services
Russell Christopher
This is kind of old news since the feature has been around since SP1, but I haven't really played around with it until now: You can control the look and feel of the HTML report toolbar by using a custom cascading stylesheet and URL Access

SQL Server 2005: A look at the master keys
Laurentiu Cristofor's blog
I'd like to go into this post over the service and database master keys and explain the basics of how these are used in SQL Server 2005

Enterprise Library 1.1 Application Blocks Due Late June
KAREN'S SQL BLOG
Microsoft's patterns & practices group released updated versions of their seven application blocks (data access, caching, configuration, exception handling, security, logging and instrumentation, and cryptography) in January 2005, packaged as the Enterprise Library 1.0. Later this month, we can expect 1.1, which will be compatible with .NET 2.0. And additional application blocks, notably the Composite UI application block (CAB) are in the works

A WAITFOR UNTIL implentation for T-SQL
Ken Henderson's WebLog
You've probably encountered situations where you needed to pause the execution of a stored procedure until some condition became true or needed to run some code when a condition became true. If the condition is time-based, WAITFOR TIME | DELAY can come in handy, but what if it's a logical condition? What if you needed to wait until an order was processed? What if you needed to wait until a given number of rows showed up in a staging table? What if you wanted to run some special code when blocking showed up on your system?

Database Geek of the Week - Bill Vaughn
Douglas Reilly
William Vaughn is a well-known author who writes about Visual Basic and database-related topics. Looking at a list of his books serves as a history of Microsoft software over the last decade or so, from VBSQL, to ADO, to ADO.NET and most recently, SQL Server reporting services

.NET 2.0 transaction model
Amirthalingam Prasanna
The Microsoft .NET 2.0 platform introduces a new namespace called System.Transactions that brings in a lightweight, simplified transaction model. This article discusses the shortcomings of current transaction models and introduces System.Transactions for .NET Framework 2.0 beta 2

Replacing Cursors and While Loops
Clinton Herring
Get some big performance gains by removing cursors from your code. New author Clinton Herring brings us a couple hints as he shows how two cursors were replaced in his code, resulting in 80 minutes of processing time dropping to 12!

SQLTeam.com: Five Fabulous Years
graz
The fifth anniversary of SQLTeam.com passed quietly last month. It was over five years ago that I posted a few paragraphs on Identity Columns and called it an "article". After the first year I put up an article that talked about how SQLTeam.com started. This year I want to say Thank You

How impersonation fixes everything with (properly applied) dynamic SQL
The SQL Doctor is In
The doggone ownership chain. How I have loathed it for years and years. If you wrote in a stored procedure

Exceptions in ADO.Net 2.0
Siraj Lala
I’d like to briefly talk about some of the work we have done in ADO.NET 2.0, for improvement of Errors and Exception usage. In ADO.NET 1.1, several error messages were generic and didn’t have enough detail to make them actionable. An example of this is the infamous “General network error” that could occur in variety of cases. In ADO.NET 2.0, we now surface the exceptions that we get when making calls to the lower network layer (SNIX – the network transport layer used by SqlClient). These exceptions are encapsulated in the exception thrown by SqlClient, with additional information at the API level

The managed memory heap and its components
Raymond Lewallen
There are the Gen 0, Gen 1, and Gen 2 heaps and the large object heap. The GC acts on the "managed" or "GC" heap by collecting unreferenced objects, promoting objects to later generations, and altering the heap after a collection so memory is contiguous. In the implementation of .NET Version 1.0, the initial thresholds for generations 0, 1, and 2 are 256 kilobytes (KB), 2 megabytes (MB), and 10 MB, respectively. Note that the GC can adjust these thresholds dynamically based on an application's patterns of allocation

Microsoft's Hejlsberg touts .Net, C-Omega technologies
Paul Krill
InfoWorld: What was the intention with Visual C#? C++ and Visual Basic have been successful. What was the need for C#?

XSLT planning
Microsoft XML Team's WebLog
We are planning what features /improvements need to go in the next release for XSLT. We are making these decisions based on customer input and feedback. So I would like to hear your views on what you would like to see in the release of XSLT

Serialization and Concatenating String Values
XQuery Inside SQL Server 2005
A common requirement for an XML based application is the ability to do some form of simple string building. For example, the following query outputs a set of elements whose values are built up as a string, depending on some other value that is passed is as part of an iteration

Time Ranges in AS2005
Chris Webb's BI Blog
I had a mail at the beginning of last week from Mike Melnikov, who had been reading my blog entry on aggregating across a time range in AS2K. He told me he had a similar requirement which he'd implemented using a UDF in AS2K but was wondering if there was an easier way of doing what he wanted in AS2005. Basically he needs two Period dimensions in his cube, from which the user can select individual members or ranges, allowing the user to compare values for a measure across these two different Period selections. For example the user might want to compare Sales in January 1997 with Sales in February and March 1997 combined

DataJungle adds support for Microsoft BI Platform in Matrix 3.0
Mosha Pasumansky
New addition to already long list of Analysis Services clients at http://www.mosha.com/msolap/util.htm .Yesterday I saw press release from DataJungle, that they added support to the Microsoft BI stack - Analysis Services, Reporting Services, Sharepoint etc to their flagship product Matrix 3.0. Previously, DataJungle only supported Cognos, but now they extended the support to Microsoft platform. Here is the nice quote from their COO: “The Microsoft BI market is probably already the largest and fastest growing segment in the BI industry. Our entry into this market with such a compelling and unique offering takes DataJungle to a whole new level as a company”. Matrix - is a pure thin client Web browser based solution, but the quality of the UI in screenshots is really impressive. I don't know what technology did they use, but if it is pure DHTML - they've done great job. I probably saw only one more product which does comparable UI in DHTML, but this product is not released yet, and I cannot disclose which company implemented it. Example of screenshot is on the right. There were no trial download on the website, so I couldn't try it with Yukon

What is 'MDX Missing Members Mode' in Analysis Services 2005 ?
Mosha Pasumansky
There were many enhancements in Analysis Services 2000 to make MDX closer to SQL, both syntactically and semantically. After all, UDM is the model for both relational reporting and multidimensional analysis, and in order to support relational reporting style queries, UDM and MDX must be able to express relational semantics. One of the areas where MDX and SQL were very different was the question of how to treat missing or non-existing attribute values. Indeed, let's consider the following SQL query

Migration whitepaper from AS2000 to AS2005
Mosha Pasumansky
There is a new whitepaper titled "Analysis Services 2005 Migration" written by Michael Young for Proclarity. It really consists of three parts. First part is an overview of Analysis Services 2005 features such as attribute hierarchies, related attributes, data source views, measure groups, perspectives etc. While first part doesn't have any information not available from elsewhere, I still recommend to read through it, because it is written well and from perspective of the user who is familiar with AS2K. The second part desctibes the Migration Wizard. It takes you step by step through the wizard and describes the decisions of the wizard and what limitations it has. Unfortunatelly this part contains several technical inaccuracies, which I would like to point out to, and hopefully they will be fixed in the updated version

Strong Passwords and Options for the Aged and Addlepated
William (Bill) Vaughn's Blog
Since SQL Server 2005 now permits administrators to force (coerce?) users to set (and periodically reset) passwords, is there a way to change the Windows strong password schema to a custom design?

Orcas--A big marine mammal with sharp teeth? (Updated)
William (Bill) Vaughn's Blog
Focus on getting what you have already invented working better rather than inventing more classes to do things differently—making the existing classes redundant. Developers want clear choices not a Swiss army knife with 70 blades just to open an envelope

SQL Server Express Edition, the Profiler and User Instances
William (Bill) Vaughn's Blog
I was working with the new SQL Server Express Edition lately and was reminded that the Profiler is programmed to deny connections to this edition. Ah, I think this decision will unnecessarily challenge those who try to diagnose deployed SQL Express applications. Since you have to buy the SQL Server Workgroup (or better) edition to get the Profiler, I don’t see any reason what-so-ever to prevent its use against the Express edition. I can certainly see not including it (or some other tools) with the SSEE, but to disable the Profiler is not going to do anything but generate more PSS calls. If I had my way they would enable Profiler to access SSEE--at least to a point. It does not need all the bells and whistles, just enough to see what's getting executed T-SQL-wise

Is SQL Reporting Services 2000 / 2005 cluster aware?
Russell Christopher
I've asked this question myself, and seen lots of people do the same too...the answer is no. Neither version of SSRS is cluster aware. However, since SQL itself is cluster aware, you pretty much get what you need (as long as you are using a web/reporting farm) anyway. Basically, you install the reportserver database on a clustered instance of SQL, then point each of the nodes in your web/report farm to the clustered resource

What to do after renaming your Report Server
Russell Christopher
Nothing earth shaking here. Just posting this so I can point others to the steps quickly. If you rename the box/domain name that SQL Server 2000 was installed on, here's how you get RS up and running again: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/rsadmin/htm/drp_customizing_v1_476q.asp?frame=true

Using an authenticator to deter whole-value substitution
SQL_Bee's WebLog
The EncryptByKey built-in function takes an optional "authenticator" argument. What is an authenticator?

Q&A: Can you BCP out a #Temporary table?
Julian Kuiters
Q: If I create a temporary table with...

New concurrency and scheduling diagnostics have been added to SQL Server
Корпорация Microsoft
To remain highly dynamic, SQL Server contains several internal processes to ensure stability. One example is the lock monitor that you can use to identify and resolve deadlock situations. SQL Server 7.0 Service Pack 4 (SP4) and SQL Server 2000 Service Pack 3 (SP3) have added enhanced process health monitoring

SQL Server 2000 Management Pack for MOM 2005
Microsof
The Microsoft SQL Server 2000 Management Pack provides both proactive and reactive monitoring of SQL Server 2000 in an enterprise environment. Availability and configuration monitoring, performance data collection, and default thresholds are built for enterprise-level monitoring. Both local and remote connectivity checks help ensure database availability. With the embedded expertise in the SQL Server 2000 Management Pack, you can proactively manage SQL Server, and identify issues before they become critical. This Management Pack increases the security, availability, and performance of your SQL Server infrastructure. The Microsoft SQL Server 2000 Management Pack Guide describes the content of the management pack, and describes how to deploy it. You can download the management pack guide from the Microsoft Web site (http://www.microsoft.com/downloads/details.aspx?FamilyId=653D9FB9-B1C6-4702-A152-99852DCB2772).

Introduction to MSSQL Server Analysis Services: Mastering Enterprise BI: Relative Time Periods in an Analysis Services Cube, Part II
William Pearson
As we discussed in the last article of this series, one of the questions that I receive constantly is "how can I replicate the relative time periods that are automatically created via PowerPlay Transformer's Date Wizard (and which can, of course, be manually created as well)?" As most of us working within the BI (and peripheral) arenas – be it as an architect, designer / developer, or information consumer – are aware, the Time / Date dimension in an OLAP solution consists of levels typically made up of Year, Quarter and Month (less commonly continuing, as well, to Week, Day, sometimes even Hour, Minute, etc., levels – I've seen lots of possibilities). In Cognos PowerPlay Transformer, the Date Wizard assists in the building of the Time / Date dimension by prompting us for the levels we need, and then creating those levels and their members from the date field we designate as the source of the date information that we wish to capture within our cube structures. In addition to creating this basic dimension structure, we can create alternative time hierarchies, such as fiscal, etc., to supplement our standard (often referred to as "calendar" time) hierarchy

Where'd the Wizard go...
Kirk Haselden
Weather'ed DTS users will know it as _The_ Wizard and wonder from where it can be launched. The Import/Export Wizard is no longer on the main start menu. I don't know why, but for some reason the powers that be decided that it would be better to not have the Import/Export Wizard on the start menu

ForEach From Variable Enumerator... What's it good for?
Kirk Haselden
Someone on an internal alias asked this and I though it might be generally intersting

SSIS and SQL Server Instances
Kirk Haselden
This is something you may run into, especially if you're running Integration Services on a machine with multiple instances and at least one of them is a SQL 2K instance

Answer: Comparisons in XQuery vs T-SQL
John Gallardo's Weblog
Last week I threw out this simple little quiz. Here is the answer. The first query will return 1 or 0 rows, depending on what the default collation in your database is. On my machine, which uses the default out-of-the-box collation "SQL_Latin1_General_CP1_CI_AS" returned a single row. The second query should always return 0 rows. All string comparisons that we do in XQuery are done in what we call the "UNICODE_CODEPOINT" collation. This is an internal-only collation which essentially does a binary comparison of the two strings. It is accent-sensitive, case-sensitive, and trailing space sensitive. Basically it is everything sensitive. When the comparison is performed outside of the scope of the XQuery statement though, we use the regular collation rules that every other string comparison uses. So what is the lesson? If you need collation-sensitive comparisons then you will probably have to use the XML value() method in order to retrieve your data and perform your filtering using that value. However, if you don't need collation-sensitive comparisons, then I highly recommend you stick with using the exist() method as it will usually perform better

Substitution groups and their effects on type derivation
Typed XML in SQL Server 2005
If you’ve been playing with Xml schema collections in SQL Server 2005, you might have noticed that it is forbidden to expand substitution groups membership in ALTER XML SCHEMA COLLECTION statements

Namespace Nuances
XQuery Inside SQL Server 2005
XQuery uses the concept of a namespace, adopted from the XML 1.0 specification. But, due to the complex nature of the XQuery language and it's dual roles as both query and serialization/XML construction language, there are several nuances to the use of namespaces that may not be immediately obvious

Multi-column interactive sort in SQL Reporting Services 2005
Russell Christopher's Semi-Useful BI Musings
I've seen Brian Welcker (a group PM for SSRS - http://blogs.msdn.com/bwelcker/default.aspx) do a few demos in which he showed the new interactive sort capability of SQL Server Reporting Services 2005: It allows the user to sort columns in a report without having to round-trip back to the data source, which is a very good thing

Q&A: Can I use system procedures like sp_help with a schema bound object name ?
Julian Kuiters
When I run exec sp_help HumanResources.Resumes I get the error: Msg 102, Level 15, State 1, Line 1 Incorrect syntax near '.'. A: Yes you can. You need to quote the object name as in: exec sp_help 'HumanResources.Resumes'

SQL Server 2005 - SQL Server Integration Services - Loop Containers
Marcin Policht
As we briefly mentioned in the previous installment of this series, among features introduced in the SQL Server 2005 Integration Services there are For and ForEach loops, implemented in the form of containers that can be incorporated into the Control Flow part of a package design. (They are included in the list of package components listed in the Toolbox accessible from the Control Flow tab of the SSIS Designer interface of the SQL Server Business Intelligence Development Studio). Both of them serve the same generic purpose (familiar to anyone with even minimal exposure to programming languages), which is repetitive execution of a sequence of tasks, as long as an arbitrarily chosen condition is satisfied (status of the condition is checked at the end of each execution sequence). In the SQL Server 2000 (and 7.0) Data Transformation Services, such functionality was not available and emulating it required rather cumbersome workarounds

Scripted Server Snapshot
Roy Carlson
Users call and complain and by the time you get to the server, everything looks fine. Even running Profiler sometimes doesn't capture the information. Author Roy Carlson found a solution, a script that you can give to users to dump whatever information you need to an Excel file

SqlNotificationRequest changes
Bob Beauchemin's Blog
In the April CTP of .NET 2.0, I chanced upon some changes to SqlNotificationRequest, using my favorite tool, .NET Reflector and my one my favorite investigative techniques, called “follow the error message”.

How DO you change your SQL Login password?
Bob Beauchemin's Blog
SQL Server 2005 will, by default on Windows Server 2003 systems, enforce password policies for SQL Server logins as well as Windows logins. Nice feature, but this means that your SQL Server login password can expire. So how do you change it? Well certainly the DBA can change it as (s)he always has, but you'd hate to bother your DBA every 42 days. Never mind what the DBA would think of that... And the user interface programs, SSMS and SQLCMD don't yet provide that feature. Neither does Visual Studio 2005 Server Explorer

The SQL Server XML weblogs are blooming and other "news"
Michael Rys
While I have been a bit quiet over the last couple of weeks mainly due to presenting at two TechEd's, attending SIGMOD and still having to do my day jobs, we had quite an explosion of weblogs of the SQL Server XML and XQuery team members. Besides Shankar Pal and Mike Rorke, we now also have the following members of the test team providing useful postings

Drivers
Yukon BI by the Hitachi Consulting Yukon Team
Someone in the class was told that drivers for other db's than SQL Server (i.e. Oracle, DB2) would not be supported at RTM. Someone in the class form MSFT said this is not true. Do you know the answer off-hand?

Automatically refreshing your SQL Reporting Services reports with the AutoRefresh element
Russell Christopher's Semi-Useful BI Musings
If want your report to auto refresh every x seconds inside IE, take a look at the AutoRefresh RDL element: <AutoRefresh> is a child of and a peer or the element in your document. For example, if you want your report to autorefresh every 15 seconds, you'd add the AutoRefresh element to the RDL in your report like so

Kill specific bill pay sessions as scheduled task
Kevin Kline
I am a DBA supporting the development of a bill pay via telephone application. As it stands, after the call is done, the session remains. Is there a way to write a script to kill specific sessions as a scheduled task in our SQL 6.5 database? You can certainly kill specific sessions, as defined by a spid, using regularly scheduled tasks. The problem is -- how do you know if you're killing a truly dead spid instead of one in which the user is simply not very active?

ADO.NET Data Sets: Using partial classes to make intelligent datasets
Amirthalingam Prasanna
This article looks at how partial classes can be used to implement business logic into datasets so that they are more business aware and intelligent

SSIS Address clean up in 10 steps
SimonS' SQL Blog
So just started playing with SSIS to convert a legacy app. Data is in a bad state, lots of duplicates especially addresses

A First Look at Express Manager
Rick Dobson
Microsoft describes its new, free SQL Server 2005 Express Manager (XM) as a "lightweight" database management tool built on top of the .NET Framework 2.0. Better yet, not only can you use XM to manage SQL Server 2005 Developer and Express Edition databases on local and remote computers, you can also use it with SQL Server 2000 and SQL Server 2000 Desktop Engine (MSDE 2000) databases. In this article, Rick Dobson shows you what XM offers DBAs

CLR Integration
Christoffer Hedgate
One of the more controversial new features in SQL Server 2005 is the inclusion of the Common Language Runtime (CLR) inside the server. Whether you agree this is a good idea or not, the very knowledgable Chris Hedgate brings us the first article in a series looking at how the CLR fits into your database server

SQL Tip: Getting rid of identity value on select into
The SQL Doctor is In
Just a tiny tip today. We were trying to get rid of the identity property from a dimension table in our warehouse and I learned something kind of smallish, but it took me a few minutes to try and it will only take you a few seconds to file away in the gray matter

SSIS: The container hierarchy
Jamie Thomson's Blog
In the dim and distant past I wrote a blog entry that attempted to explain the concept of containers in an SSIS package. Following a post from Paul Pisarek this evening on the SSIS forum I thought it might be beneficial to expand on the concept a little

Contact Information and Robust Package Loading
Kirk Haselden
One of the new, less visible features of Integration Services is what we call robust package loading or graceful load failover

Some fluff you can delete
Kirk Haselden
During a recent SQL Server install, I noticed that a few files had been accumulating on my hard drive deep in the bowels of my SQL Server folder

[В начало]

ФОРУМ SQL.RU

Самые популярные темы недели

Ваше мнение об упражнениях SELECT на http://sql.ipps.ru
Кто на чем пишет клиентов под SQL Server?
Tool Вы знаете что твориться на ваших 10-30+ серверах ?
Префиксы типов таблиц(t_), хр. процедур(p_), функций(f_), вьюшек(v_)... Нафик они нужны?
Отлов select
Администраторы баз данных, защищайте свои сервера!
Как записать условие ?
SP4 - делитесь опытом
Соединение двух таблиц по неуникальным ключам
Сложный расчет разницы двух нарастающих итогов (расчет просрочки по платежам)
Прокомментируйте - ошибка при многопольз. работе возможна?
Каскадное удаление (выводы)
Помогите построить сложный SELECT
Удаление записей из большой таблицы
Help me, please! По поводу UDT
Проблемы с размером tempdb.mdf
Хотим сделать историю изменений в нашей базе по каждой записи в каждой таблице. Зацените.
Тригер на селект
Восстановление базы и бэкапа, лежащего в RAR архиве
Compare SQLOLEDB with DB-Library connection

[В начало]

Вопросы остались без ответа

снова linked server
Сервер на MS SQL 2К прилинковать к серверу MS SQL 70?
COM resolver на VB
DTC - LINKED
Как узнать тип лицензирования и кол-во CAL-ов в MS SQL 2000?
Установка SQL 2000 sp1
Чем отличается ограничение доменов от ограничения логических обьъектов?
How a Resource Manager Can Get XA Compliance Using MS DTC
Перенос реплицированной DB на другой сервер (+)
переключение QA на русскую раскладку если резалтсет в руск.кодировке
OPENROWSET - избежать аварийное окончание запроса
Как узнать сколько осталось места на ленте стримера?

[В начало]


Вопросы, предложения, коментарии, замечания, критику и т.п. оставляйте Виталию Степаненко и Александру Гладченко в форуме: Обсуждение рассылки

СЕМИНАРЫ  КОНФЕРЕНЦИИ

МИНИФОРМА
ПОДПИСКИ



ПУБЛИКАЦИИ  АРХИВ


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.winsoft.sqlhelpyouself
Отписаться
Вспомнить пароль

В избранное