Отправляет email-рассылки с помощью сервиса Sendsay

MS SQL Server

  Все выпуски  

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


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

#249<<  #250

СОДЕРЖАНИЕ

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

СЕМИНАР

SQL Server 2005 & Повышение доступности данных & SQLiMail

Дата: 29.04.2005г. 18:30
Место: г. Москва. Чапаевский пер., 14. Представительство Microsoft в России и СНГ.
Доклады:

  1. Технологии повышения доступности данных. Андрей Синкин

  2. SQLiMail. SQL Server 2005 mail architecture. Алексей Ширшов

Для регистрации на семинар, необходимо заполнить РЕГИСТРАЦИОННУЮ ФОРМУ, с указанием Вашей фамилии, имени, отчества и адреса электронной почты

Количество мест в аудитории семинара ограничено, поэтому просим Вас не откладывать регистрацию.

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

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

Карта проезда в представительство Microsoft

[В начало]

СТАТЬИ

Основы I/O в SQL Server 2000 (продолжение)

По материалам статьи Bob Dorr: SQL Server 2000 I/O Basics
Перевод Александра Гладченко

Планирование I/O в Microsoft SQL Server

Для полного понимания дизайна ввода - вывода в SQL Server важно знать основные принципы операций I/O с файлами баз данных, журналами транзакций и последовательность обслуживания транзакций.
Дизайн I/O и транзакций в SQL Server гарантируют, что правила ACID будут полностью выполнены. Эта глава посвящена свойству "Неизменности" результатов исполнения транзакций и его поддержке средствами операционной системы и аппаратными средами.

Протокол Write-Ahead Logging (WAL)

Ключевым элементом обеспечения правил ACID является протокол WAL. Протокол WAL требует, чтобы все записи журнала транзакций, связанные с относящимися к ним страницами данных, были сброшены на диск долговременного носителя до того, как сами страницы данных будут сброшены на диск.
Microsoft SQL Server 2000 и Microsoft SQL Server 7.0 используют страницы данных размером 8 Кб и кратный размеру сектора диска размер буфера журнала транзакций. Более ранние версии SQL Server использовали страницы данных и журнала транзакций размером в 2 Кб.
Давайте рассмотрим пример кода, приведённый в статье Microsoft Knowledge Base:

SQL Server 7.0 and SQL Server 2000 Logging and Data Storage Algorithms Extend Data Reliability

Рассмотрим на примере, как SQL Server поддерживает протокол WAL для инструкции INSERT. В этом примере предполагается, что индексы не используются и страница, которая будет задействована, имеет номер 150.

BEGIN TRANSACTION
   INSERT INTO tblTest VALUES (1)
COMMIT TRANSACTION

Инструкция

Выполняемое действие

BEGIN TRANSACTION

Запись в журнале транзакций, относящаяся к BeginTran, помещается в кэш журнала, но пока нет надобности сбрасывать её на диск долговременного носителя, потому что SQL Server ещё не сделал никаких физических изменений.

INSERT INTO tblTest

1. Страница 150 не присутствует в этот момент в кэше SQL Server, поэтому страница данных с номером150 помещается в кэш данных SQL Server.
2. Выставляются соответствующие блокировки и страница подвергается краткой блокировке (latch).
3. Формируется запись в журнале транзакции о вставке значения в таблицу и эта запись попадает в кэш журнала.
4. Новая строка добавляется на страницу данных, и эта страница помечается, как "грязная" (dirty).
5. Снимается краткая блокировка.
6. Записи журнала, связанные с транзакцией, в этот момент не должны ещё быть сброшены на диск, потому что все изменения находятся в автономной, энергозависимой памяти.

COMMIT TRANSACTION

7. Генерируется запись о завершении транзакции. Записи в журнале, связанные с транзакцией (и все предыдущие записи журнала) должны быть сохранены на долговременном носителе. Транзакция не будет считаться завершённой, пока записи из журнала не будут без ошибок сброшены на диск долговременного носителя (журнал фиксируется).
8. Страница данных с номером 150 остается в кэше данных SQL Server и не будет немедленно сброшена на диск долговременного носителя. В сбрасывании её на диск нет необходимо, потому что после того, как записи журнала транзакций были успешно защищены, становиться возможным исполнение операции реорганизации (recovery), чтобы откатить назад транзакцию, на основании записей в журнале транзакций.
9. Снимается транзакционная блокировка, и блок кода считается исполненным.

Блокировка и краткая блокировка являются обособленными вопросами при поддержке протокола WAL. Блокировка поддерживает целостность данных в транзакциях, в то время как краткая блокировка поддерживает физическую целостность данных. В предыдущем примере, SQL Server 7.0 и SQL Server 2000 используют краткую блокировку страницы 150 только в течение того времени, которое необходимо для физических изменений на странице, а не на всё время исполнения транзакции. Соответствующий тип блокировки устанавливается по мере необходимости для защиты строки, блока строк, страницы или таблицы целиком.
Для подробного ознакомления с разными типами блокировок, посмотрите посвящённые им главы Microsoft SQL Server Books Online.
Рассматривая предыдущий пример работы протокола WAL более подробно, может возникнуть вопрос, что случается если процесс отложенной записи или процесс контрольной точки отработает раньше, чем будет иметь место COMMIT, но уже после изменения страницы данных? Давайте снова вернёмся к используемому нами примеру и рассмотрим поведение протокола WAL в этом случае:

Инструкция

Выполняемое действие

BEGIN TRANSACTION

Запись в журнале транзакций, относящаяся к BeginTran, помещается в кэш журнала, но пока нет надобности сбрасывать её на диск долговременного носителя, потому что SQL Server ещё не сделал никаких физических изменений.

INSERT INTO tblTest

1. Страница 150 не присутствует в этот момент в кэше SQL Server, поэтому страница данных с номером150 помещается в кэш данных SQL Server.
2. Выставляются соответствующие блокировки и страница подвергается краткой блокировке (latch).
3. Формируется запись в журнале транзакции о вставке значения в таблицу и эта запись попадает в кэш журнала.
4. Новая строка добавляется на страницу данных, и эта страница помечается, как "грязная" (dirty).
5. Снимается краткая блокировка.
6. Записи журнала, связанные с транзакцией, в этот момент не должны ещё быть сброшены на диск, потому что все изменения находятся в автономной, энергозависимой памяти.

Процесс отложенной записи или контрольной точки фиксирует нахождение страницы 150 в буферном пуле

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

  1. На страницу 150 накладывается краткая блокировка, чтобы предотвратить её дальнейшие изменения.

  2. Порождается запрос к менеджеру журнала для сброса на диск всех записей журнала транзакций, включая имеющее такое значение LSN, которое записано в заголовке страницы 150. (Журнал транзакций фиксируется).

  3. Ожидание того, пока все записи журнала регистрации транзакций не будут успешно сброшены на диск долговременного носителя.

Порождается запрос I/O на сброс страницы 150 в долговременный носитель.

Обратите внимание на то, что в последнем примере не исполняется команда COMMIT. Если страница помечена, как "грязная", записи журнала могут быть сброшены на диск, а за ними и соответствующая страница данных, как это положено по протоколу WAL. Блокировки защищают завершение транзакции и, если произойдёт откат операции, процесс recovery компенсирует эти действия, восстановив страницу в надлежащее состояние. Если бы всё это не работало описанным выше способом, SQL Server не смог бы выполнить больше изменений, чем позволила бы разместить его физическая память.
Отложенная записи и контрольная точка разрешают подобные проблемы путём сброса на долговременный носитель всех записей журнала транзакций, связанных с "грязной" страницей. Это позволяет поддержать требования протокола WAL, согласно которым страница данных никогда не может быть сохранена на долговременном носителе до связанных с ней записей журнала транзакций.
Почитать про журнал транзакций и об упреждающей записи можно в главе: "Write-Ahead Transaction Log" из SQL Server Books Online.
Дополнительную информацию можно найти сайте Microsoft в документе: SQL Server 7.0 and SQL Server 2000 Logging and Data Storage Algorithms Extend Data Reliability

Log Sequence Number

Значение порядкового номера журнала (LSN) состоит из трех частей и представляет собой уникальное инкрементальное возрастающее значение. Оно используется для организации последовательности записей журнала транзакций базы данных. Это позволяет SQL Server соблюдать правила ACID и правильно выполнять операцию recovery.
При изменениях в данных, в журнале транзакций создаются новые значения LSN. То же самое значение LSN сохраняется (заменяя предыдущее значение) в заголовке страницы данных, в котором храниться номер последней записи в журнале транзакций, и этим самым страница данных получает соответствие записи в журнале.
Чтобы узнать больше об архитектуре журнала транзакций, смотрите статью "Transaction Log Logical Architecture" в SQL Server Books Online.

Краткая блокировка

SQL Server использует краткие блокировки во время синхронизации данных. Блокировки такого типа создаются SQL Server в непривилегированном режиме, для выполнения операций записи или чтения. Каждая, находящаяся в памяти страница данных имеет идентифицирующую буфер структуру (BUF). Массив BUF структур содержит информацию о состоянии (Dirty, On LRU, In I/O), и так же о кратких блокировках.
Блокировка решает соответствующие задачи блокирования, а краткая блокировка контролирует физический доступ. Например, блокировка может налагаться на страницу, которая не находится в памяти. Краткая же блокировка возможна только тогда, когда страница данных находится в памяти.
На представленной ниже иллюстрации показано представление верхнего уровня буферного пула SQL Server 2000.


Рис. 1

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

[В начало]

Репликация таблиц с различной структурой

По материалам статьи Hilary Cotter : Replicating to Tables of Different Schemas
Перевод Маргариты Баскаковой

В данной статье рассмотрены вопросы тиражирования таблиц с различной структурой в SQL SERVER 2000. Рассмотрим четыре случая:

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


    Рис. 1

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


    Рис. 2

  3. Репликация одной таблицы издателя в две или более таблицы подписчика. Этот случай проиллюстрирован на рисунке 3:


    Рис. 3

  4. Репликация двух или более таблиц издателя в одну таблицу подписчика. Этот случай проиллюстрирован на рисунке 4:


    Рис. 4

Случай 1 - Репликация таблицы, в случае если в таблице подписчика меньше столбцов, чем в таблице издателя.
Этот случай наиболее тривиален из перечисленных выше и наиболее легко реализуем с помощью Мастера Создания Публикации (Create Publication Wizard). Создайте вашу публикацию, как Вы это обычно делаете, и затем, когда Вы дойдёте до диалогового окна "Customize the properties of the Publication", выберите чекбокс "Yes, I will define data filters, enable anonymous subscriptions, or customize other properties". Далее выберите "Vertical Filtering" и не отмечайте столбец, который Вы не хотите тиражировать подписчику.
Вы так же можете реализовать выполнение описанного выше случая, используя хранимые процедуры репликации. См. приложение 1 для краткой иллюстрации примера кода, с помощью которого Вы могли бы реализовать Случай 1.
Обратите внимание, что в этом примере кода, мы добавляем все столбцы (не указываем значение для параметра @column) в первом вызове хранимой процедуры sp_articlecolumn, и затем удаляем столбец contract вторым вызовом хранимой процедуры sp_articlecolumn.

Случай 2 - Репликация таблицы, в случае если в таблице подписчика больше столбцов, чем в таблице издателя.
Этот случай значительно интереснее, чем Случай 1. Вновь вернёмся к рисунку 2. Обратите внимание, что на подписчике, у таблицы authors есть дополнительный столбец с именем address1. Вы должны будете или установить значение по умолчанию для этого столбца в таблице authors на подписчике, если Вы хотите предсоздать его; или поставлять значение для него в хранимых процедурах репликации, используемых для применения транзакций, которые происходят на вашем издателе вашему подписчику. Тривиальное решение данного вопроса состоит в том, чтобы создать индексированное представление на издателе, которое содержало бы все столбцы, присутствующие в таблице authors на подписчике. По умолчанию индексированное представление тиражируется вашему подписчику как таблица. SQL Server 2000 позволяет Вам реплицировать индексированные представления и как индексированные представления, и как таблицы. Также Вы можете использовать подписки с преобразованием данных; однако, они являются высоко масштабируемыми, но не поддерживают неоднородных подписчиков.
Пример индексированного представления, которое Вы создали бы на вашем издателе для создания таблицы authors на подписчике см. в приложении 2. Этот пример соответствует рисунку 2.
Обратите внимание, что автор заполняет столбец address1 двадцатью пробелами. Если назначить этому столбцу значение NULL, то оно тиражируется как целое число.
Если Вы реплицируете индексированное представление, используя Мастер Создания Публикации, дойдя до диалогового окна Specify Articles, нажмите на кнопку обзора справа от вашего индексированного представления. И в General tab диалогового окна Article properties выберите A table as defined by the source indexed view в секции Destination object. Это опция выбрана по умолчанию, индексированное представление издателя будет реплицироваться таблице подписчика.
Проблемы с репликацией индексированного представления:

  1. индексированные представления не поддерживают модификации схемы при помощи хранимых процедур sp_repladdcolumn или sp_repldropcolumn.

  2. некоторые администраторы баз данных (DBA) не любят использовать индексированные представления, так как они понимают, что индексированные представления занимают пространство в базе данных, и влияют на производительность при использовании.

Другая опция (An indexed view) создает пользовательский синхронизирующий объект, который является просто представлением. Пользовательский синхронизирующий объект - просто представление, которое подсистема репликации использует, чтобы генерировать bcp и файлы схемы, необходимые для создания структуры таблицы и данных относительно подписчика. С помощью Мастера Создания Публикации Вы не можете создать пользовательские синхронизирующие объекты; они создаются, используя хранимые процедуры репликации. Хранимые процедуры, которые используются для репликации транзакций издателя подписчику, будут сформированы также, основываясь на этом пользовательском синхронизирующем объекте.
Чтобы применить это, Вы должны установить опции схемы, создать скрипт структуры, который предсоздаст таблицу на подписчике, и определит название вашего пользовательского синхронизирующего объекта в процедуре sp_addarticle.
Сценарий схемы для нашего примера см. в приложении 3.
Для иллюстрации выполнения описанного выше случая см. приложение 4.

Случай 3 - Репликация одной таблицы издателя к двум или более таблицам подписчика Бывают случаи, когда Вам нужно реплицировать таблицу издателя более чем одной таблице подписчика. Например, друг автора, который работает в инвестиционном банке, тиражировал таблицу на подписчике. Триггеры на таблице подписчика должны были писать во вторую таблицу на издателе. Эти триггеры вызывали проблемы со временем исполнения, поскольку транзакции реплицировались подписчику. Решение, которое предложила автор, состояло в том, чтобы реплицировать таблицу издателя в обе таблицы, и использовать стратегии, обсужденные ранее, чтобы обработать отличающиеся схемы.
Однако Вы не можете реализовать этот случай с помощью Мастера Создания Публикации. Вместо этого, Вам необходимо воспользоваться хранимыми процедурами репликации, определив параметры @article и @destination_table хранимой процедуры sp_addarticle. Параметр @article - имя таблицы или объекта, которые Вы реплицируете, а параметр destination_table - имя, которым Вы желаете назвать таблицу, в которую Вы реплицируете.
См. приложение 5 для краткого примера кода, с помощью которого Вы могли бы реплицировать таблицу authors в две различных таблицы на подписчике; первая таблица названа authors, а вторая названа NewAuthors. Обратите внимание, также, что статьи, которые мы добавляем, имеют разные имена; нет необходимости сохранять имена такими же, как у объекта-источника.

Случай 4 - Репликация двух и более таблиц на издателе в одну таблицу на подписчике Из всех ранее рассмотренных случаев, случай 4 - самый сложный случай. Тривиальное решение состоит в том, чтобы вновь использовать индексированное представление. Если Вы не можете использовать индексированное представление, то ваши варианты решения будут более сложными. Проблема состоит в том, что когда подкомпоненты репликации создают хранимые процедуры, используемые в репликации транзакций, происходящих на издателе, подписчику, они могут реплицировать только транзакции, происходящие на одной из базовых таблиц одновременно; другими словами, есть на таблице граница, которую компоненты репликации не могут переступить.
Рассмотрим таблицы на рисунке 4. Если транзакция применена к таблице authors, и затем к таблице titles log reader сначала считает транзакцию, которая была применена к таблице authors на издателе и реплицирует её. Эта транзакция будет представлена как ряд единичных и передана хранимым процедурам, чтобы применить транзакцию на подписчике. Только потом log reader считает транзакцию, которая произошла в таблице titles и реплицирует её.

Тогда как же добавить транзакции второй таблицы в репликацию при помощи хранимых процедур?

Когда Вы реплицируете две таблицы как одну, между ними должны быть реляционные отношения (то есть, таблицы присоединяются или являются перекрестными, или же между ними родительские/дочерние связи). Если Вы имеете дело с реляционными отношениями (связями таблиц), это подразумевает, что все строки одной таблицы требуют наличия записей в других. Например, в родительских/дочерних связях, дочерняя таблица определяет полную родительскую/дочернюю строку. Записи из пересечения или соединенные таблицы определят полную родитель/дочка - строку. Без дочерней или перекрестной строки, Вы не будете иметь целостных реляционных отношений.
Как только будут уяснены эти моменты, вопрос сводиться к выбору ключей таблиц, и репликация всех таблиц, которые формируют части этих реляционных отношений, становится простой. Вы можете создать пользовательские хранимые процедуры, которые заполнят строки на подписчике, используя связанные таблицы подписчика.
Давайте посмотрим на примере, как это работает. Для нашей демонстрации, Мы будем использовать пользовательский синхронизирующий объект и скрипт создания таблицы, представленные в приложении 6. Мы собираемся объединить таблицу titles и таблицу authors, чтобы получить количество всех книг, написанных автором:

Сохраните это как c:\test.sql

См. приложение 7, демонстрирующее пользовательский синхронизирующий объект.

А также, приложение 8 со скриптом публикации.

Затем необходимо создать свои реплицируемые хранимые процедуры, которые не представлены в этой статье из-за их очень большого размера.

Заключение

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

[В начало]

Приложение 1

--создание публикации
EXEC sp_addpublication @publication = 'pubs', @status = 'active'
GO
--создание публикации
EXEC sp_addpublication_snapshot @publication = 'pubs'
GO
EXEC sp_grant_publication_access @publication = 'pubs', 
                                 @login = 'BUILTIN\Administrators'
GO
-- добаление статей в репликацию транзакций
EXEC sp_addarticle @publication = 'pubs', 
                   @article = 'authors', 
                   @source_object = 'authors', 
                   @vertical_partition = 'true'
GO
-- добавление всех колонок 
EXEC sp_articlecolumn @publication = 'pubs', 
                      @article = 'authors', 
                      @operation = 'add'
GO
-- удаление столбца phone
EXEC sp_articlecolumn @publication = 'pubs', 
                      @article = 'authors', 
                      @column = 'contract', 
                      @operation = 'drop'
GO
-- Добавление объекта синхронизации статьи
EXEC sp_articleview @publication = 'pubs', 
                    @article = 'authors', 
                    @view_name = 'SYNC_pubs_authors'
GO

[В начало]

Приложение 2

CREATE VIEW dbo.Authors_Indexed_View WITH SCHEMABINDING 
AS
SELECT au_id, au_lname, au_fname, phone, address, 
       CONVERT(char(20), ' ') AS address1, 
    city, state, zip, contract 
FROM dbo.authors
GO
CREATE  UNIQUE  CLUSTERED  INDEX [IX_Authors_Indexed_View] ON
[dbo].[Authors_Indexed_View]([au_id]) ON [PRIMARY]
GO

[В начало]

Приложение 3

if exists (select * from dbo.sysobjects where id =
object_id(N'[dbo].[Authors]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[Authors]
GO
CREATE TABLE [dbo].[Authors] (
[au_id] [varchar] (11) NOT NULL ,
[au_lname] [varchar] (40) NOT NULL ,
[au_fname] [varchar] (20) NOT NULL ,
[phone] [char] (12) NOT NULL ,
[address] [varchar] (40) NULL ,
[address1] [char] (20) NULL ,
[city] [varchar] (20) NULL ,
[state] [char] (2) NULL ,
[zip] [char] (5) NULL ,
[contract] [bit] NOT NULL 
) ON [PRIMARY]
GO

[В начало]

Приложение 4

sp_addpublication 'pubs',@status='active'
go
sp_addpublication_snapshot 'pubs'
go
--создание пользовательского синхронизирующего объекта
CREATE VIEW Custom_Sync_Object
AS
SELECT au_id, au_lname, au_fname, phone, address, 
       CONVERT(char(20), ' ') AS address1, 
       city, state, zip, contract
FROM dbo.authors
GO
sp_addarticle @publication='pubs', 
              @article='test',
              @source_object='authors',
              @sync_object='Custom_Sync_object',
              @schema_option=0x00,
              @creation_script='c:\test.sql'

[В начало]

Приложение 5

--the default value for @destination_table is the same name as the @source_object
EXEC sp_addarticle @publication = 'pubs',
                   @article = 'authors',
                   @source_object = 'authors'
GO
--here our destination object is called authors1
EXEC sp_addarticle @publication = 'pubs',
                   @article = 'authors1',
                   @source_object = 'authors',
                   @destination_table= 'NewAuthors'
GO

[В начало]

Приложение 6

if exists (select * from dbo.sysobjects where id = object_id('authortitles') 
   and OBJECTPROPERTY(id, 'IsUserTable') = 1)
drop table authorstitles
GO
CREATE TABLE authorstitles (
au_id id NOT NULL ,
au_lname varchar(40) NOT NULL ,
au_fname varchar(20) NOT NULL ,
phone char(12) NOT NULL ,
address varchar(40) NULL ,
city varchar(20) NULL ,
state char(2) NULL ,
zip char(5) NULL ,
contract bit NOT NULL ,
author_titles int NULL
) 
GO

[В начало]

Приложение 7

Create View AuthorTitles_Sync_Object
as
select authors.au_id, au_lname, au_fname, phone, address, city, 
       state, zip, contract, author_titles =count(title_id)
From authors, titles
where authors.au_id=titleauthor.au_id
group by authors.au_id, au_lname, au_fname, phone, 
         address, city, state, zip, contract
GO

[В начало]

Приложение 8

use master
GO
sp_replicationdboption 'pubs','publish','true'
GO
use pubs
go
sp_addpublication 'authortitles', @status='active'
go
sp_addpublication_snapshot 'authortitles'
go
sp_addarticle 'authortitles','authors','authors'
go
sp_addarticle @publication='authortitles', 
              @article='authortitles',
              @source_table='titles', 
              @destination_table='authortitles',
              @sync_object='AuthorTitles_Sync_Object', 
              @schema_option=0x00, 
              @creation_script='c:\test.sql',
              @ins_cmd='CALL sp_MSins_authortitles', 
              @del_cmd='CALL sp_MSdel_authortitles', 
              @upd_cmd='MCALL sp_MSupd_authortitles'
GO

[В начало]

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

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

Как изменился рынок OLAP за прошедший год
Nigel Pendse
OLAP: В ходе исследования было опрошено почти три тысячи респондентов из 48 стран мира, причем практически одна тысяча из них предоставила подробную информацию о своем опыте в области покупки и использования инструментов OLAP. Отличительная особенность данной работы состоит в том, что на этот раз к участию были привлечены жители германоговорящих стран, что придало ей действительно интернациональный характер...

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

PRB: Additional SQL Server Diagnostics Added to Detect Unreported I/O Problems
Microsoft
If operating system, driver, or hardware problems cause lost write conditions or stale read conditions, you may see data integrity-related error messages such as Errors 605, 823, 3448. You may receive error messages that are similar to the following examples

A Peek Inside the Microsoft 'Whidbey' Ship Room
Darryl K. Taft
In a nondescript conference room at the heart of Microsoft Corp.'s campus here, 35 developers sit shoulder to shoulder and prepare for battle

Diagnosing setup problems with SQL Server 2005 April CTP
tfosorciM.org
This post is intended to set out the basic information needed to best be able to help questioners on the microsoft.private.sqlserver2005.* newsgroups who are having install problems with the April CTP of SQL Server 2005

Processing XML Showplans Using SQLCLR in SQL Server 2005
Arun Marathe, Boris Baryshnikov
Build an application to extract a query's estimated execution cost from its XML showplan. Users can submit only those queries costing less than a predetermined threshold to a server running SQL Server 2005, thereby ensuring it is not overloaded with costly, long-running queries. (12 printed pages)

Integration Services Editions
Donald Farmer
Earlier in the week anxious crowds gathered outside our imposing building, straining for that portentous plume of white smoke. Sure enough, a weary German (Matthias, for it is he), emerged from the genteel conclave that is SQL Server Shiproom (see http://www.eweek.com/article2/0,1759,1787462,00.asp ) to announce to the city and the world, Habemus CTP. The new CTP (or IDW the XIVth as it is known to the faithful) has it's work cut out. On the one hand it has to be conservative and not break the applications of our traditional supporters, while including enough new fixes to address pressing issues. I think it succeeds admirably and I really do recommend that MSDN subscribers and Beta users upgrade to this build

On "native" XML support in databases
Michael Rys
A couple of months ago, I provided feedback on an article on XML support in DB2 written by Philip Howard of Bloor Research. I invited him to comment on my analysis, so I am assuming his recent article can be taken as his response. In the new article, he claims that DB2 is the only relational database product to provide native XML support. He also states that SQL Server 2005 does not offer this support and alleges that Microsoft is abusing the term. Let me cite [reprinted claiming fair use]:

Learning SQL Server 2005
Steve Jones
Everyone wants to get ahead of the curve with SQL Server 2005, but many people don't have the time or desire to dig through a Google search. Steve Jones has gotten quite a few requests for resources, so here is a compiled list of some places that might help you get started. I've gotten a few emails and posts lately on how someone should go about learning SQL Server 2005. At first I'd start to point people to whatever current sources exist, but then I thought that perhaps it's worth a few minutes to list some places and ideas about how to tackle things

Creating Asynchronous Triggers with Service Broker
Michael G.
This script creates a number of objects that are necessary to illustrate how an asynchronous Service Broker trigger can be used. It can be executed all in one batch or in the proper and sequential order. There are times when you'll want to record updates made to a table by saving those updates to a historical table. The updates can later be reviewed from the historical table for whatever reason. Part of the problem with SQL Server 2000 and older triggers is that they run synchronously - they run in the same context as that of the executor. Accordingly, an update made to a table with an UPDATE trigger may take a long to finish, simply because it's waiting for the trigger to complete its work. With asynchronous triggers in SQL Server 2005 and Service Broker, this 'wait time' is greatly reduced. Now, you can simply send a Service Broker message containing the updated records to a queue, and have a seperate service program (in this case a stored procedure) that retrieves those records and saves them into a historical table

Problems Sending Messages with Service Broker
Michael G.
If you're having problems with not being able to send and receive Service Broker messages, there are a few things you can check and do to resolve the problem(s)

Service Broker - Basic Architecture
Michael G.
An overview of how SQL Server 2005 Service Broker works

Service Broker - Conversation Architecture
Michael G.
An explanation of how Service Broker communicates

Service Broker - Message Types
Michael G.
An explanation on types of messages allowed by Service Broker

Service Broker - Contracts
Michael G.
An explanation on how contracts regulate communication flows in Service Broker

Service Broker. Message Received
William Zack
The excited chatter about SQL Server 2005's Common Language Runtime (CLR) integration and other new features has all but eclipsed another very powerful component: SQL Server Service Broker. Service Broker, a database-application framework that lets internal or external database-related processes send messages to and receive them from each other, provides a great new way to implement database-oriented middleware and distributed database applications. It uses extensions to T-SQL and (through embedded CLR support) standard .NET programming languages to provide guaranteed, reliable, asynchronous message delivery and confirmation. Service Broker uses the SQL Server 2005 (formerly code-named Yukon) database engine and extensions to SQL Server triggers to implement this service. It also uses developer-defined message queues that are housed inside the databases. Using database-resident message queues provides several benefits, such as transactional integrity, which I cover later in the article

Learn How to Create CLR Stored Procedures for SQL Server 2005
Michael G.
A beginners guide to creating .Net 2.0 CLR Stored Procedures for SQL Server 2005

Adding Microsoft SQL Server 2000 (and later) XML Support via IIS 5 (and later)
Michael G.
Learn how to setup an IIS 5 and later virtual directory that serves as an MS SQL Server XML data extraction source for delivering XML content through the Web

Build Data-centric Windows Forms Apps. without MS SQL Server or MS Access Databases
Michael G.
Learn how to build Windows Forms Apps. with a MSDE Data Tier and Visual Studio .NET. If you need to build data-centric, transaction-based Windows Forms applications where a significant amount of data is to be manipulated then this is the tutorial for you

SQL Server 2000 Logging and Data Storage Algorithms Extend Data Reliability
Chunder Mohan
To learn more about the underlying concepts of the SQL Server 7.0 and SQL Server 2000 engines, see "ARIES (Algorithm for Recovery and Isolation Exploiting Semantics): A Transaction Recovery method Supporting Fine-Granularity Locking and Partial Rollbacks Using Write-Ahead Logging", of ACM Transactions on Database Systems

SSIS: Checkpoint clarification - Recovering failed packages
Jamie Thomson's Blog
SQL Server Integration Services (SSIS) contains a fantastic new feature called Checkpoints which enables us to restart a package from a previous point of failure rather than run the package from the start. Details about a package's execution are stored in a checkpoint file which will be read upon the next execution so that the package can determine which task it should start execution from

Excellent presentation on SQL Express!
The SQL Doctor is In
From Kent Tegels blog: Enjoy Every Sandwich (not the one on blogspot, it is much different!,) a SQL blog that if you are not reading it you should! He just had a presentation he gave at one of the SQL Server Summit's put up on Microsoft's site. It is a very good presentation, and the only reason it isn't great is that there are a couple of slides that say: "Demo Goes Here" that make me want to see what the demo was like, and that makes me sad

T-SQL Enhancements - Ranking - RANK(), DENSE_RANK() and NTILE()
The SQL Doctor is In
The other day, I introduced the first of the new ranking functions - ROW_NUMBER(). Today I want to touch on the other three of these

A first demo of the combined data provider
Bob Beauchemin's Blog
When I did my first demonstration with the combined SqlClient and SqlServer provider in the April CTP version of SQL Server, I was a bit surprised. I wrote a simple stored procedure to run in the server, exactly the way I've always written it to run on the client (modulo sending results back to the client

Do you see "Failed to load Msxmlsql.dll" when using the April CTP with OpenXML?
Michael Rys
As part of our improvements on OpenXML, we have changed the MSXML component from 2.6 to 3.0 (running in 2.6 backwards-compatibility mode) and moved to a private DLL (called MSXMLSQL.DLL) in order to avoid the reboot requirement when installing SQL Server 2005. This change has been released the first time in the April CTP and will also be included in SQL Server 2000 SP4 (yeah!)

SQL Server I/O: Using XML Control Mechanisms
Buck Woody
I'm pretty impressed with things that are extensible. I like Swiss Army knives, I like multiple-use tools, and I like basic things that connect to other basic things to make new things

Is XML the Answer?
Don Peterson
New Author! Don Peterson writes his first article for us and explores why he considers XML to be...bad! There are some interesting points made here and if you've haven't thought about what XML means to you as a DBA, it's a subject worth spending some time on

How to Attain SQL Server High Availability at Minimal Cost
Brad M. McGehee
You may find it hard to believe, but it is possible to maintain SQL Server high availability and not spend a fortune. In fact, you can spend a fortune and still not get SQL Server high availability. Sound like a paradox? Not really. SQL Server high availability is not a direct function of how much you spend. Instead, high availability is more about what you do right and what you do wrong

Creating databases in SQL Server 2000
Steven Warren
Creating databases in SQL Server 2000 can be an easy process if you understand the following terms

SQL Server: Tuning your SMO Application for great performance - PART 1 (featured at TechED)
Michiel Wories' WebLog
I'm ramping up for TechED 2005 (Both USA and Europe) and will be giving a couple of talks on SMO. This is a repost of an article from SqlJunkies, as I am still moving these blog entries to MSDN. Ping me if you are visiting TechED and are interested in certain SMO topics

Data Design Time Changes Beta1 to Beta2
The Visual Basic Team
These are some of the feature changes we’ve made within the Data Design Time features. When I started writing this document I thought about making it a bulleted list, but then I realized this isn’t a Whidbey Feature list, it’s a delta from Beta1 to Beta 2. Those interested in the delta probably really want to know what went into the decision. If you’re looking for a Whidbey Feature list, this isn’t it. When we get closer to Whidbey RTM I’m sure we’ll get something like that pulled together

[В начало]

ФОРУМ SQL.RU

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

Кто на чем пишет клиентов под SQL Server?
как поместить строки в колонки ?
Табличная переменна vs Постоянная таблица - есть ли выигрышь?
Устройство кластерного индекса
как выйти из DTS???
SQL 2005 ????
Тем, кто писал хр-процедуры на C++!!
Какой выигрыш даст переход с SQL Server 7 на 2005 и улучшение железа?
После переноса хп с 6.5 на 2K существенное падение производительности.
Достаточно ли PAGLOCK?
Элементарное. Триггер. Проверить значение поля inserted...
Запуск из триггера консольного приложения, которое делает запрос к БД
генерация значения ключевого поля до insert
Шестизначный идентификатор с заполнением случайными числами (Приложение ADP)
опять репликация
Впрос про OPENDATASOURCE и OPENROWSET
Прошу голосовать за SQL.RU в конкурсе Интернить 2005
Доступ к файловой системе из T-SQL
Откат (отмена) выполненного запроса
Cursor vs SELECT

[В начало]

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

ИНТЕРНИТЬ 2005. ПРИЗНАНИЕ ГОДА
Обмен данными
sp_setapprole
Linked Servers : ошибка авторизации
Service Pack 4 beta - оно есть?
DTS и VB script: как прочитать параметер в GlobalVariable
выгрузка данных в XML-файл
QA коннектится, EM - нет
Восстановление базы
Bind failed on TCP port 1433

[В начало]


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

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

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



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


http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.winsoft.sqlhelpyouself
Отписаться

В избранное