SQL.RU
 client/server technologies
 Главная | Документация | Статьи | Книги | Форум | Блоги | Опросы | Гостевая | Рассылка | Работа | Поиск | FAQ |
   
#358<<  #359  >>#360

СОДЕРЖАНИЕ

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

 

СТАТЬИ

Использование представлений для сокрытия промежуточных данных в Microsoft SQL Server

Автор: Михаил Смирнов

Введение

При разработке различного рода коммерческих баз данных довольно часто встает задача обновления заранее просчитанных итоговых данных. Чаще всего это требуется для предоставления различного рода отчетности. Не всегда для этого используется технология OLAP, и поэтому в этой статье я приведу описание приема, который позволяет организовать незаметное для пользователя обновление таких данных.
Для начала сформулируем проблему, которую должен решить данный механизм. Проще всего сделать это на примере. Предположим, что используя базу Northwind, нам требуется предоставлять отчетность о кол-ве и объемах продаж за любой день по любому товару. Мы можем сделать это, создав View следующего вида:

CREATE VIEW [Sales by Product] AS SELECT Orders.OrderDate, [Order Details].ProductID, SUM([Order Details].UnitPrice * [Order Details].Quantity) AS Amount, SUM([Order Details].Quantity) AS Quantity FROM [Order Details] INNER JOIN Orders ON [Order Details].OrderID = Orders.OrderID GROUP BY Orders.OrderDate, [Order Details].ProductID

Однако, если в исходных таблицах Orders или Order Details будет находится больше количество записей (сотни миллионов), то выборка из такого view будет очень медленной. Быстро получить данные из него будет невозможно.

Возможным решением проблемы могла бы быть замена view на таблицу с периодически обновляемыми данными:

CREATE TABLE [Sales by Product] ( OrderDate datetime NOT NULL , ProductID int NOT NULL , Amount money NOT NULL , Quantity int NOT NULL )

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

Например:

CREATE CLUSTERED INDEX [Index1] ON [Sales by Product] (OrderDate, ProductID)

Для того чтобы обновить информацию в такой таблице достаточно было бы просто очистить ее и выполнить запрос на ее заполнение.

DELETE FROM [Sales by Product] INSERT INTO [Sales by Product] (OrderDate, ProductID, Amount, Quantity) SELECT Orders.OrderDate, [Order Details].ProductID, SUM([Order Details].UnitPrice * [Order Details].Quantity) AS Amount, SUM([Order Details].Quantity) AS Quantity FROM [Order Details] INNER JOIN Orders ON [Order Details].OrderID = Orders.OrderID GROUP BY Orders.OrderDate, [Order Details].ProductID

Однако, в связи с тем, что в таблице Orders у нас находится очень много заказов, возникают две проблемы, которые не позволят нам обновлять эту таблицу в рабочее время:

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

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

Описанный здесь механизм позволяет решить обе эти проблемы.

Описание механизма

Для решения первой проблемы нужно принять во внимание, что далеко не все строки таблицы Sales by Product нуждаются в обновлении. Заказы редко вписываются «задним числом», поэтому обычно в обновлении нуждается несколько последних дней и очень редко данные в далеком прошлом. Поэтому, для ускорения процесса расчета можно создать дополнительную вспомогательную таблицу, которая будет содержать даты, для которых требуется пересчет.

CREATE TABLE DatesForUpdates ( UpdateDate datetime NOT NULL )

Такая таблица может заполняться при создании либо обновлении заказов. При наличии такой вспомогательной таблицы процесс обновления Sales by Product может выглядеть так:

DELETE [Sales by Product] FROM [Sales by Product], DatesForUpdates WHERE [Sales by Product].OrderDate = DatesForUpdates.UpdateDate INSERT INTO [Sales by Product] (OrderDate, ProductID, Amount, Quantity) SELECT Orders.OrderDate, [Order Details].ProductID, SUM([Order Details].UnitPrice * [Order Details].Quantity) AS Amount, SUM([Order Details].Quantity) AS Quantity FROM [Order Details] INNER JOIN Orders ON [Order Details].OrderID = Orders.OrderID INNER JOIN DatesForUpdates on Orders.OrderDate = DatesForUpdates.UpdateDate GROUP BY Orders.OrderDate, [Order Details].ProductID DELETE FROM DatesForUpdates

Таким образом мы накладываем фильтр на обновляемые данные, существенным образом облегчая запрос.
Однако, это не решает второй проблемы – для конечного пользователя данные по прежнему пропадают на некоторое время.
Казалось бы, решением проблемы может быть отказ от удаления данных перед их вставкой. Мы могли бы подготовить временную таблицу с вновь рассчитанным набором данным, затем обновить строки, которые уже существуют в Sales by Product, вставить новые строки и удалить лишние (на тот случай если часть заказов была удалена). Однако, это не решит данную проблему, потому что даже в этом случае существует вероятность того, что пользователь получит некорректные данные, если, например, выполнит запрос на выборку между операциями обновления и удаления. Использование транзакции в этом случае тоже не является выходом, так как данные в этом случае будут заблокированы и недоступны для пользователя до момента завершения транзакции.

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

Во-первых: в таблицу Sales by Product добавим поле Version, которое означает версию строки таблицы и может содержать следующие значения:

    1 – строка, доступная для пользователя

    2 – строка, содержащая новые данные. Пользователю не доступна.

    3 – строка, содержащая устаревшие данные. Пользователю также не доступна

Во-вторых: создадим view

CREATE VIEW dbo.[Report by Product] AS SELECT * FROM [Sales by Product] WHERE Version = 1

Именно с этим представлением Report by Product, а не с таблицей Sales by Product будет теперь работать пользователь. Видим, что это представление фильтрует строки со всеми номерами строк кроме 1, скрывая таким образом промежуточные данные.
Процесс обновления, однако, по-прежнему будет работать с таблицей Sales by Product и будет происходить так, как описано ниже.
Первоначально все строки имеют версию равную 1 и доступны для пользователя.

OrderDate

ProductID

Amount

Quantity

Version

1996-11-07 00:00:00.000

1

216.0000

15

1

1996-11-14 00:00:00.000

1

172.8000

12

1

1996-12-03 00:00:00.000

1

216.0000

15

1

Соответственно запрос к представлению

SELECT * FROM [Report by Product]

возвращает следующий результат:

OrderDate

ProductID

Amount

Quantity

1996-11-07 00:00:00.000

1

216.0000

15

1996-11-14 00:00:00.000

1

172.8000

12

1996-12-03 00:00:00.000

1

216.0000

15

После выполнения следующего запроса на вставку в таблицу

INSERT INTO [Sales by Product] (OrderDate, ProductID, Amount, Quantity, Version) SELECT Orders.OrderDate, [Order Details].ProductID, SUM([Order Details].UnitPrice * [Order Details].Quantity) AS Amount, SUM([Order Details].Quantity) AS Quantity, 2 as Version FROM [Order Details] INNER JOIN Orders ON [Order Details].OrderID = Orders.OrderID INNER JOIN DatesForUpdates on Orders.OrderDate = DatesForUpdates.UpdateDate GROUP BY Orders.OrderDate, [Order Details].ProductID

в таблице Sales by Product будут содержаться следующие данные:

OrderDate

ProductID

Amount

Quantity

Version

1996-11-07 00:00:00.000

1

216.0000

15

1

1996-11-14 00:00:00.000

1

172.8000

12

1

1996-12-03 00:00:00.000

1

216.0000

15

1

1996-11-07 00:00:00.000

1

300.0000

20

2

1996-11-14 00:00:00.000

2

172.8000

12

2

1996-12-03 00:00:00.000

2

216.0000

15

2

Видим, что новые записи помечены номером версии 2. Поэтому запрос к представлению по прежнему возвращает старый набор данных, так как новые строки через него не видны.

OrderDate

ProductID

Amount

Quantity

1996-11-07 00:00:00.000

1

216.0000

15

1996-11-14 00:00:00.000

1

172.8000

12

1996-12-03 00:00:00.000

1

216.0000

15

Следующий запрос выполнит обновление номеров версий строк:

UPDATE [Sales by Product] SET Version = CASE WHEN Version = 2 THEN 1 ELSE 3 END FROM [Sales by Product], DatesForUpdates WHERE [Sales by Product].OrderDate = DatesForUpdates.UpdateDate

Это приведет к тому, что номера версий строк обновятся так:

OrderDate

ProductID

Amount

Quantity

Version

1996-11-07 00:00:00.000

1

216.0000

15

3

1996-11-14 00:00:00.000

1

172.8000

12

3

1996-12-03 00:00:00.000

1

216.0000

15

3

1996-11-07 00:00:00.000

1

300.0000

20

1

1996-11-14 00:00:00.000

2

172.8000

12

1

1996-12-03 00:00:00.000

2

216.0000

15

1

Теперь старые данные стали недоступны через представление – на их место встали новые. Запрос к представлению возвращает следующий результат:

OrderDate

ProductID

Amount

Quantity

1996-11-07 00:00:00.000

1

300.0000

20

1996-11-14 00:00:00.000

2

172.8000

12

1996-12-03 00:00:00.000

2

216.0000

15

После этого мы можем произвести очистку старых данных

DELETE FROM [Sales by Product] WHERE Version = 3 DELETE FROM DatesForUpdates

После очистки таблица вновь остается в исходном состоянии – все строки имеют номер версии равный 1.

Итак, весь процесс обновления выглядит следующим образом –

-- Вставка новых данных с номером версии строк 2 INSERT INTO [Sales by Product] (OrderDate, ProductID, Amount, Quantity, Version) SELECT Orders.OrderDate, [Order Details].ProductID, SUM([Order Details].UnitPrice * [Order Details].Quantity) AS Amount, SUM([Order Details].Quantity) AS Quantity, 2 as Version FROM [Order Details] INNER JOIN Orders ON [Order Details].OrderID = Orders.OrderID INNER JOIN DatesForUpdates on Orders.OrderDate = DatesForUpdates.UpdateDate GROUP BY Orders.OrderDate, [Order Details].ProductID -- Обновление версий строк: 2 –> 1, 1 -> 3 UPDATE [Sales by Product] SET Version = CASE WHEN Version = 2 THEN 1 ELSE 3 END FROM [Sales by Product], DatesForUpdates WHERE [Sales by Product].OrderDate = DatesForUpdates.UpdateDate -- Удаление старых данных с номером версии 3 DELETE FROM [Sales by Product] WHERE Version = 3 -- Очистка DatesForUpdates DELETE FROM DatesForUpdates

Видим, что первый запрос вставляет в таблицу данные с версией строк равной 2 (новая строка), благодаря чему эти новые данные пользователю не доступны. Сколько бы ни шел процесс расчета и вставки, пользователь не видит этих строк – он продолжает получать старые строки, которые были созданы в процессе предыдущего обновления и имеют значение поле Version равное 1. Второй запрос изменяет номера версий строк – новые данные становятся на место старых (2 исправляется на 1), а старые помечаются как готовые к удалению (версия 1 исправляется на 3). После выполнения этого запроса у пользователя мгновенно исчезают старые данные, а вместо них появляются новые. Затем строки с устаревшими данными (номер версии 3) удаляются. Благодаря такой схеме у пользователя ни в один момент времени не пропадают данные и не возникает ситуации при которой он видит одновременно и старые и новые данные.

Заключение

Данный простой механизм был использован в ряде промышленных разработок и зарекомендовал себя.
Я с радостью рассмотрю любые комментарии и вопросы по данной тематике.

Мои координаты доступны на сайте www.msmirnov.ru

Михаил Смирнов
Руководитель проектов.

[В начало]

Основы ввода-вывода Microsoft SQL Server. Часть 2 (продолжение)

По материалам статьи Bob Dorr: Microsoft SQL Server I/O Basics. Chapter 2

Зеркальное отображение баз данных (DataBase Mirroring или DBM)

В SQL Server 2005 SP1 были включены возможности зеркального отображения баз данных. Для получения более подробной информации о зеркальном отображении баз данных, см. Обзор зеркального отображения базы данных в SQL Server 2005 Books Online.
Зеркальное отображение базы данных не может существовать в виде самостоятельного решения. Однако, для отображаемой базы данных действуют все требования по организации взаимодействия с исходной базой, обеспечению целостности данных и защите от отказов, которые уже были описаны ранее в настоящем документе, в главе: Удаленное зеркальное отображение.
Зеркальное отображение базы данных использует основанные на циклическом избыточном коде проверки целостности данных (прим. переводчика: более сложный, чем контрольная сумма алгоритм), что необходимо для гарантированной передачи данных между источником и его зеркалом. В SQL Server 2005 для новых баз данных предусмотрена возможность сверки контрольной суммы страниц данных и блоков журнала регистрации транзакций, что повышает возможности обеспечения целостности данных. Для расширения таких возможностей ваших решений, как обеспечения постоянной готовности - 'Always On', мы рекомендуем использовать основанные на циклическом избыточном коде проверки целостности данных в комбинации с проверкой контрольных сумм, что обеспечит самый высокий уровень защиты от нарушений целостности данных.

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

[В начало]

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

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

Путешествия экстентов и последствия DBREINDEX и SHRINKFILE
Tony Rogerson
В этой статье будет показано, как очень легко можно "прострелить себя в ногу", если не понимать принципы работы SHRINKFILE/SHRINKDATABASE и DBCC DBREINDEX или CREATE INDEX с опцией DROP_EXISTING. Правда здорово, когда после DBREINDEX фрагментация снижается с 99 % до 98 %! Давайте кратко рассмотрим некоторые инструменты, которые будут использоваться в этой статье:

Отказ от одностраничного распределения
Kalen Delaney
Эта статья не для начинающих или слабо подготовленных специалистов. Если Вы решите продолжить её чтение, то Вы делаете это на свой страх и риск. Статья иллюстрирует изменения в поведении SQL Server 2005 относительно SQL Server 2000, относящиеся к тому, как и когда страницы распределяются поодиночке. В моих лекциях SQL Server Internals, я описываю условия, при которых SQL Server использует распределение одиночных страницы: пока таблица не займёт 8 страниц, а затем он начинает распределять целыми экстентами (называемыми однородными экстентами), чтобы предоставить таблице или индексу сразу 8 страниц. Одностраничное распределение устроено так, что если таблица окажется в результате очень маленькой (всего несколько страниц), страницы для неё не будут потрачены впустую. Представленный ниже сценарий иллюстрирует описанное выше поведение, создавая таблицу с очень большими строками, каждая из которых занимает отдельную страницу. Я сделала его так, чтобы Вы легко могли заполнить несколько страниц.

Резюме по свойствам соединений
Craig Freedman
Следующая таблица суммирует характеристики трех физических операторов соединения, которые были описаны в моих трех предшествующих статьях.

Ральф Кимбалл в Москве
Александр Гладченко
15 мая 2007 года, Москва, отель "Рэдиссон САС Славянская". Ральф Кимбалл выступил с двумя докладами на семинаре, организованном компанией Sybase (за что ей огромное спасибо!).

Longhorn позволит заменять процессоры "на лету"
Computerworld
На конференции WinHEC сотрудники компаний Microsoft и NEC продемонстрировали функцию Windows Server 2008 (Longhhorn), предоставляющую возможность заменять процессоры, накопители и память в сервере, не отключая его для этого целиком. Демонстрация была проведена на примере сервера NEC Express 5800/1000, выполненного на процессоре Itanium 2. NEC стала первой, кто обеспечил поддержку функции "горячей" замены комплектующих, реализованной в Longhorn, но и другие производители, как ожидается, последуют ее примеру. Данная особенность позволит операционной системе также в некоторых случаях самостоятельно определять возрастание вероятности сбоя индивидуального процессора и включать в работу вместо него другой. В соответствии с заданными правилами участки системы, находящиеся в состоянии бездействия или занятые менее приоритетными приложениями, могут быть при достижении более важной программой определенного порога нагрузки переданы ей в пользование. В Microsoft новую функцию назвали "динамическим разбиением" - подобная ей существует в мэйнфреймах, когда система делится на несколько физических разделов для различных применений.

SQL Server станет универсальнее
Computerworld
Как сообщили сотрудники Microsoft, следующая версия СУБД SQL Server, имеющая кодовое имя Katmai, выйдет в будущем году. По их словам, Katmai разрабатывается в качестве платформы управления и анализа данных для любых компаний, независимо от их размера и бюджета, и в новой версии SQL Server будет представлять собой всеобъемлющее, интегрированное решение в области бизнес-интеллекта. Сообщается также, что Katmai будет более тесно интегрирован с Microsoft Excel 2007, Excel Services, Office SharePoint Server и Office PerformancePoint Server 2007. СУБД позволит выдавать отчеты любого объема и сложности для внутренних нужд или для партнеров и поставщиков. Кроме того, в комплект поставки Katmai войдет среда разработки Microsoft Visual Studio и библиотеки .Net Framework. Новым SQL Server можно будет пользоваться для управления данными любых типов, включая реляционные, документы, географическую информацию и XML.

Автообновление SQL Server Books Online 2005
Ирина Наумова
Как сообщил Бак Вуди в своем блоге, теперь SQL Server 2005 Books Online будет автоматически обновляться через службу Microsoft Update, правда пока только для английской редакции. В списке компонент, предлагаемых к установке появится февральская версия BOL (Doc Refresh 4). Скриншот установки электронной документации через Microsoft Update можно посмотреть в блоге Гленна Берри.

Поддержка языков в СУБД Microsoft SQL Server 2005
Майкрософт
Этот технический документ знакомит разработчиков приложений для СУБД Microsoft SQL Server со средствами поддержки разных языков в Microsoft SQL Server 2005. В документе описана кодировка Юникод, введенные в этой версии СУБД средства поддержки добавочных символов, изменения параметров сортировки в различных версиях SQL Server, изменения типов данных, вопросы, влияющие на производительность. Приведены обновленные сведения о поставщиках данных и информация о новых возможностях поддержки языков, предоставляемой службами SQL Server 2005 Analysis Services[0] и Integration Services.

Технологии Push и Pull при работе с linked servers в Microsoft SQL Server
Михаил Смирнов
Для обеспечения взаимодействия нескольких серверов Microsoft SQL Server наиболее часто используется технология linked-серверов. При этом, типичной является задача обмена данными между linked-серверами. В данной статье я проведу краткий сравнительный анализ технологий push и pull для решения задачи передачи новых данных.

Подзапросы в выражении CASE
Craig Freedman
В этой статье будет рассмотрено, как SQL Server обрабатывает подзапросы в выражении CASE. Кроме того, будут рассмотрены несколько экзотических возможностей соединений.

Подзапросы: AND и OR
Craig Freedman
В статье Введение в соединения, я показал примеры того, как можно использовать полусоединение для оценки подзапроса в EXISTS. В качестве резюме, давайте рассмотрим другой пример:

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

Четырёхядерные Xeon Clovertown в серверах DP: тесты
Дмитрий Чеканов
Intel уже несколько месяцев активно продвигает четырёхядерные серверные системы и рабочие станции. Процессоры Xeon 5300 Clovertown позволяют администраторам модернизировать существующие двухпроцессорные компьютеры на Socket 771 с четырёх до восьми ядер. Мы решили провести тесты восьмиядерных двухпроцессорных систем: так ли они хороши по сравнению с четырёх - ядерными.

Перенос ссылки из локального BOL в IE
Александр Гладченко
Books Online теперь доступен в двух ипостасях: полная клиентская инсталляция и интернет-версия. В клиенте каждая страница документации имеет свою ссылку (URL). Этим удобно пользоваться, если Вы хотите использовать ссылку на страницу электронной документации или послать её коллеге в качестве ответа на вопрос. Однако, у получателя ссылки BOL может оказаться не установленным. В своём блоге Greg Buck Woody (Technical Content Developer, SQL Server.) описал один, не известный мне доселе способ переделки URL страницы из формат Books Online в формат Web - URL, что бы её можно было посмотреть в интеренте.

Файлы Readme пакета обновления SP2 для SQL Server 2005 и SQL Server 2005 Express Edition (включая инструментарий)
Александр Гладченко
16 мая 2007 г. на центре загрузки Майкрософтбыли заменены файлы Readme пакета обновления 2 (SP2) для SQL Server 2005 и выпусков и средств пакета обновления 2 (SP2) для SQL Server 2005 Express Edition, пока только английской версии.

Предварительный выпуск Microsoft SQL Server 2005 JDBC Driver 1.2 (Апрель 2007)
Александр Гладченко
1 апреля 2007 г. на центре загрузки Майкрософт появился апрельский CTP Microsoft SQL Server 2005 JDBC Driver 1.2, информация о котором доступна по этой ссылке:

Худшие методы (MS SQL Server) - пробелы в именах объектов
Andy Warren
Я написал уже несколько статей о различных худших методах - вещах, которые усложняют вашу жизнь без каких бы то ни было веских причин. Теперь поговорим об очень простом методе, настолько простом, что его легко можно избежать. Речь идет о пробелах в именах объектов. SQL поддерживает их, конечно, и вам достаточно заключить имя объекта в квадратные скобки, вот так:

[В начало]

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

Katmai CTP Scheduled for June
Roger Jennings
Francois Ajenstad, Director of Product Management for SQL Server said at about 08:45 into a Podcast interview at the first Microsoft Business Intelligence Conference in Seattle:

Changes Coming to LINQ for SQL
Roger Jennings
Beta 2 will bring a substantial number of changes to Orcas's LINQ-related features. Following are a few of the forthcoming changes mentioned in the LINQ Project General and ADO.NET vNext forums.

SSIS: New suggestion for templates in Katmai
Jamie Thomson
I have raised a suggestion on Connect for a change to the current behaviour of SSIS templates. Here are the details:

Handling Varying Columns, Part 2
John Welch
In Handling Flat Files with Varying Numbers of Columns, I showed an example of parsing a flat file with an inconsistent number of columns. I used a script component, but Jamie commented that the same thing could be accomplished through a Conditional Split and Derived Column transform. So, here's part 2.

SQL SERVER - Binary Sequence Generator - Truth Table Generator
Pinal Dave
Run following script in query editor to generate truth table with its decimal value and binary sequence. The truth table is 512 rows long. This can be extended or reduced by adding or removing cross joins respectively.

DBCC CHECKDB flusing the cache!
Satya SK Jayanty
Well another cache related blog in a row since last few days!

'Out-of-range datetime value' error in SQL Server when working with dates
Serdar Yegulalp
One of the more underrated issues that I run into a great deal with SQL Server is what happens when you pass data to SQL Server that hasn't been properly sanitized for use by the front end. The most extreme consequence of this sort of thing is, of course, a SQL injection attack. But there are other things that can go wrong, not all of them obvious.

SQL Server Replication Crib Sheet
Robyn Page
Replication is intended to be a way of distributing data automatically from a source database to one or more recipient databases. As such, it can have obvious uses in a distributed system. It has also been used to implement high-availability systems. It is not useful for one-off synchronization, or for simply copying data. It is intended as a long-term data relationship between databases. Typical uses are in:

SAP and Microsoft Extend Alliance for Microsoft SQL Server 2005
Microsoft
Continued collaboration between SAP and Microsoft helps customers lower total cost of ownership and increase business agility. VIENNA - May 15, 2007 - SAP AG (NYSE: SAP) and Microsoft Corp. (Nasdaq: MSFT) today announced an agreement on a joint offering that will simplify and accelerate customer adoption of Microsoft® SQL Server™ 2005 and optimize it for the SAP Business Suite. The new offering will enable customers to easily transition to SQL Server 2005 and leverage the benefits of a flexible, enterprise service-oriented architecture to transform their businesses. SAP and Microsoft have also agreed to set up a joint lab in Walldorf, Germany, to further optimize SAP Business Suite on SQL Server 2005. This announcement from SAP and Microsoft, in addition to the Duet™ software announcements made at SAPPHIRE Atlanta, highlights the companies' continued commitment to deliver innovative solutions that benefit mutual customers. The news was released at SAPPHIRE® '07, SAP's international customer conference, being held in Vienna, Austria, May 14 - 16.

How many indexes do you have that aren't used?
Simon Sabin
If you run this sql on a sql 2005 box then you will see which indexes aren't used in queries compared with the number of times they are updated

High CPU utilization by SQL Server 2005 may occur when you use NUMA architecture on a computer that has an x64-based version of SQL Server 2005 installed
Microsoft
Microsoft distributes Microsoft SQL Server 2005 fixes as one downloadable file. Because the fixes are cumulative, each new release contains all the hotfixes and all the security fixes that were included with the previous SQL Server 2005 fix release. Bug #: 50000684 (SQL Hotfix)

Serializable vs. Snapshot Isolation Level
Craig Freedman
Both the serializable and snapshot isolation levels provide a read consistent view of the database to all transactions. In either of these isolation levels, a transaction can only read data that has been committed. Moreover, a transaction can read the same data multiple times without ever observing any concurrent transactions making changes to this data. The unexpected read committed and repeatable read results that I demonstrated in my prior few posts are not possible in serializable or snapshot isolation level

Take Data Offline Using Microsoft Synchronization Services for ADO.NET
Rafik Robeal
Build occasionally connected applications using Microsoft Synchronization Services for ADO.NET

Synchronization Services for ADO.NET. Demo II
Rafik Robeal
Demo II: Offline Application - TSQL + SProcs. In the first demo, I showed you how to build an offline application rather quickly using SyncAdapterBuilder which helps you generate database sync commands needed for bidirectional sync. For the client side, we did not have to do anything except defining the tables of interest and the db connection to the local SQLCE database. SQLCE 3.5 and the SyncClientProvider took care of all sync magic for us. As a reminder, the SyncAgent is the meastro of the sync process between two stores represent by ClientSyncProvider and ServerSyncProvider. The SyncAgent interface exposes the Synchronize() which runs the show.

Sync Services Demos Refresh
Rafik Robeal
The annoying comilation errors that you see when trying to build OfflineAppDemo projects with beta 1 runtime are now gone. Most of these errors were just cleanup of unused constructs we had in the early CTP release. Here is a quick refresher of the offline app demos

Upload multiple XML files to an XML data type column
Muthusamy Anantha Kumar
SQL Server Database administrators often have requirements such as importing multiple files to a table on a database. This article discusses how to upload multiple files, especially XML files, to the SQL Server database XML data type column

Upgrading a Database SQL 2000 to SQL 2005
Sachin Samuel
Performing an upgrade to the next version of SQL Server is something more and more of us will be doing as the support for SQL Server 2000 wanes. New author Sachin Samuel brings us an overview of the process and options that you have for performing an upgrade

Converting Hexadecimal String Values to Alpha (ASCII) Strings
Stephen Lasham
In an interesting exercise in data conversion, Stephen Lasham brings us a nice article on basic manipulations

Interview with Adam Machanic Author Of Expert SQL Server 2005 Development
Denis
I am a big fan of Adam Machanic and the way he thinks about SQL server development. How may SQL developers unit test their procedures or use assertions in their code? Well I can guarantee that there are very few of those. I was very excited when Adam Machanic contacted me to give me a copy of Expert SQL Server 2005 Development for review. I did not finish reading the whole book yet but what I have read so far is very good. If you are an advanced developer and want to kick it up a notch then this is the book for you.

The Dual Schema Problem
Harry Pierson
A few months ago, Ted Neward wrote a great article about the history of the Object Relational Impedance Mismatch problem and how LINQ is addressing it in a new way. Basically, LINQ is introducing new language abstractions and complementary libraries to enable queries as a first class concept within the language. However, I don't believe that O/R Impedance Mismatch is the whole problem. More specifically, it's a follow-on problem to what I would call the Dual Schema problem

Business Processes Are Services Too
Harry Pierson
I've been having a conversation with Piyush Pant over on his blog that started as a comment he left on my Services Aren't Stateless post. He thinks that I'm "missing the crucial point here by implicitly conflating business process and service state". While Piyush hasn't really defined what he means by these terms, I think I understand what he's getting at. Yes, process and service state are different in many ways, but they are also similar in that they are both service private data

VSTDB, Where Have You Been All My Life?
Harry Pierson
Honestly, this post started off as a rant entitled "Is it Me, or is DB Development a Pain in the Ass?" about the sorry state of database development tools in Visual Studio. But in searching around on MSDN for information about the built-in "Database Project" type (which could more accurately be called "just a bunch of SQL scripts"), I stumbled across information about the Database Professionals edition of Visual Studio Team System. That's right, I had forgotten that we shipped this late last year.

Dynamically Pivoting Columns to Rows
John Welch
There's been a few questions on the forums recently about taking column values and pivoting them to rows. For example, I might have an input file with 5 columns: a key column and 4 category columns.

Considering Encrypted Data Requirements into your Disaster Recovery Plan
Allen White
I have the biggest problem trying to get a handle on data encryption. So, when it came time to test a log shipping solution I'd implemented for one of our websites the initial testing failed because I hadn't done a couple of basic, but very important steps.

Analysis Services 2005 in SQL Server has improved security
Baya Pavliashvili
Microsoft Analysis Services (MSAS) relies on Windows accounts for granting access to cube data as well as for administrative tasks such as processing cubes, altering server-wide configuration settings and modifying dimensional objects.

Top 10 Largest Databases in the World
businessintelligencelowdown.com
We all collected things as children. Rocks, baseball cards, Barbies, perhaps even bugs -- we all tried to gather up as much stuff as possible to compile the biggest most interesting collection possible. Some of you may have even been able to amass a collection of items numbering into the hundreds (or thousands).

Top 10 SQL Server 2005 Upgrade Tips
SSWUG
Hello SSWUG member. Thanks for taking the time to visit. Remember, all SSWUG members can use the promotion code SSWUG10 when registering to recieve an instant 10% discount on any workshop. This offer is valid until December 31, 2007.

Modelling Goals and Thresholds in Measure Groups
Chris Webb
Before I carry on with my chalk talk series, I have to own up to something: I didn't actually want to present on the topic of KPIs, and when I found out that I was going to have to talk on the subject I fired off a few emails to people who spend more time with KPIs than I do to ask them if they could suggest some interesting things to talk about. One of these people was Nick Barclay, co-author of 'The Rational Guide to Business Scorecard Manager 2005' (which I shall be reviewing very soon - it's a good book), and he pointed out that while all the examples of KPIs he'd seen hard-coded goals and thresholds into the MDX code this was not a good thing - users want to change their values all the time and ideally you'd want to be able to let them do this themselves. Why not store these values in a measure group, allow users to change the values using writeback, and then use these values within the KPI definition somehow?

Using Linear Regression to Calculate Growth
Chris Webb
A few blog entries back I showed the MDX I used to calculate a seasonally-adjusted total in my chalk talk at the BI conference. This is useful but if we're looking for a calculation that we can use for the Trend property of a KPI it's not the whole story - we still need to find a way of expressing how much a value is growing or shrinking over time. Although previous period growth calculations are a lot more useful with seasonally-adjusted values, we can use simple linear regression (and it has to be simple because, as I said, I'm no statistician) to do a better job.

Debugging SSAS .Net Stored Procedures
Darren Gosbell
Having written quite a few .Net Stored Procedures for the Analysis Services Stored Procedure project, I have often needed to debug into these stored procedures and it is pretty much second nature. But I had a question about this recently which made me realise that getting this working is not really well documented. There is a page in the product documentation which probably has enough information to get you going, but to my mind some of the steps are in the wrong order - and there are no pictures :)

How to get the today's date in MDX
Mosha Pasumansky
The question in the title of this post is a popular one. There are many scenarios, where it is desirable to navigate to the member of the Time hierarchy which corresponds to the current day, month or year. Sometimes, there is a desire to set the default member to be aligned with the current date. It is especially relevant, when the Time dimension contains non aggregatable attribute, such as Year (i.e. there is no member 'All Years'). By default, Analysis Services sets the default member to one of the years, but which one is undefined. So rather then override it with static member such as [Time].[Year].[2005], one may want to point to the current year. Another common scenario is around KPICurrentTime property, which is often set to today's day. Or, perhaps, calculations in the cube need to refer to today's date etc.

What's swimming in your bufferpool?
Tony Voellm, Gaurav Bindlish
When doing a performance investigation a useful thing to do is look at what data is present in the buffer pool. This can be used to analyze impact of running a query on the state of data pages in buffer pool. By collecting the pre and post picture of buffer pool, you can see the cost of running a query in terms of physical IOs that happened. You may argue that this can be done by looking at statistics IO output; however if you are running a series of queries and want to see a consolidated data and not data about individual queries, this query is a great help.

SQL Server 2005 how to find a rarely used index?
Satya SK Jayanty
For a SQL Server database having an index is always beneficial and from performance point of view too. But how about the clustered index which is occupying space on the database that is not used by any of the queries in the database. The Query Optimizer thinks that column statistics are useful, there is also a good chance that adding an appropriate index to this same column would be useful.

How to find dirty buffer pages and clear them - SQL Server
Satya SK Jayanty
Dirty buffer pages are nothing but consuming more memory for even smaller queries on the SQL Server. By default the DBA shouldn't worry about these dirty pages in the buffer pool as they are taken care by the system using Write Ahead Logging (WAL)method. Only in case of point-in-time recovery you might need to worry about these dirty buffers as the server comes online it might find mismatch of pages that will keep the database in suspect mode.

CHECKSUM Functions in SQL Server 2005
Decipherinfosys
The key intent of the CHECKSUM functions is to build a hash index based on an expression or a column list. If say you use it to compute and store a column at the table level to denote the checksum over the columns that make a record unique in a table, then this can be helpful in determining whether a row has changed or not. This mechanism can then be used instead of joining with all the columns that make the record unique to see whether the record has been updated or not. SQL Server Books Online has a lot of examples on this piece of functionality.

SQL Server 2005: Specifying Partitions for Aggregate Functions
Jeff Smith
Did you know that a new feature in SQL Server 2005 allows you to specify an OVER partition for aggregate functions in your SELECT statement?

Correcting my mistake
Hugo Kornelis
Probably the worst thing that can happen to a budding technical book author, is to find an error, even if it's a minor one, in the submitted material just after the deadline for corrections closes. Figures that it should happen to me, eh?

Using TOP and ORDER BY with UNION / UNION ALL
Tony Rogerson
Got asked this from a friend, I have a column treeID that has values 1 - 5 and for each value I require 20 random rows, so 20 for 1, 20 for 2 etc... Is there a query that will do this other than calling the stored procedure 5 times?

Windows WF on SQL Service Broker
Roger Wolter
From the time we first started working on the Service Broker programming models five or six years ago, it was obvious that most SSB programs end up looking a lot like a workflow. Messages come in and the application processes them often sending out more messages to other services. When the application is waiting for a response from a message, the state of the application is stored so that it doesn't have to be kept around if it takes a long time for the response to come back. The Conversation Group ID is a great way to identify state so that when a message arrives it's easy to find the right sate for the message. The original design for Service Broker even included a "Contract Language" to define the flow for messages within a contract. This was dropped early on because we didn't want to invent yet another workflow language but some kind of workflow was something I have been talking about for years. When the workflow guys first started talking about making workflow hostable, I thought hosting it on Service Broker was a natural move. My friend Harry Pierson has been working on WF hosted on Service Broker for one of his projects so when I needed to do a demo for an MDM talk I was giving, I decided to write my own WF service hosted on Service Broker.

Intelligent Layering: Leverage Conditional Formatting Logic from Analysis Services
William Pearson
In Positing the Intelligence: Conditional Formatting in the Analysis Services Layer (a recent member of my Database Journal Introduction to MSSQL Server Analysis Services series), we introduced conditional formatting in the Analysis Services layer of the integrated Microsoft business intelligence solution. We noted, there as well as elsewhere throughout my series', that an important consideration, when designing a business intelligence system within any environment, is "where to put the intelligence" among the various "layers" within the system. I have stated many times in the past, in both articles and presentations, that "multi-layered reporting solutions require multi-layered architects." Nowhere is this more apropos than within the design and implementation of the integrated Microsoft business intelligence solution. A "typical" implementation for me includes the following:

Stored procs vs user defined functions
Kathi Kellenberger
I was at DevTeach/SQLTeach in Montreal last week. The conference was very well run and the organizers did a great job. I gave two presentations, one of which was "T-SQL for Beginners".

Taking the Guesswork out of SQL Server Performance Profiling Part 2
Mario Broodbakker
In the previous article, Dude, where's my time, I described a method, based on use of SQL Server wait events, for measuring response time and pinpointing the main bottlenecks in your SQL Server applications.

Nesting Stored Procedures
Robert Marda
We're pleased to announce that Robert will be writing for us each month - generally on stored procedures, but occasionally on a different topic. This article discusses how nesting stored procedures works and how to use @@NextLevel. Good reading! If there is a stored procedure topic you'd like to see covered, add a comment to the article or email us at articles@sqlservercentral.com

New Column Updates
Bimal Fernando
What is the fastest way to update a newly created column in a large table? New author Bimal Fernando brings us a look at a technique he uses for just this situation.

SQL Sever 2005: Using OVER() with Aggregate Functions
Jeff Smith
One of new features in SQL 2005 that I haven't seen much talk about is that you can now add aggregate functions to any SELECT (even without a GROUP BY clause) by specifying an OVER() partition for each function. Unfortunately, it isn't especially powerful, and you can't do running totals with it, but it does help you make your code a little shorter and in many cases it might be just what you need.

Another Webcast Thanks: Errors and Exceptions in SQL Server 2005
Adam Machanic
Thank you to everyone who attended today's webcast on Errors and Exceptions in SQL Server 2005! There were a huge number of excellent questions and I had a really great time talking to you all about what I feel is a very important topic. The webcast is now available for offline viewing, for those who didn't catch it (for shame).

Sorting and case sensitive collations
Louis Davidson
This is an addition to my book, on page 255, to the end of the section on collation (before the statement that I won't delve any deeper into collations, of course :)), I want to add the following bit of information about collations and how they affect sorting and searching.

SQL Server: JOIN vs IN vs EXISTS - the logical difference
Mladen Prajdic
There is a common misconception that IN behaves equaliy to EXISTS or JOIN in terms of returned results.

News: DevTeach, TechEd, and SQLblog Sundries...
Peter DeBetta
I know I have been a slacker when it comes to posting lately, but I have been on the road quite a bit of late and will finally have some time at home over the next 2 weeks and have some new topics that I should be posting about during that time.

Using NOLOCK and READPAST table hints in SQL Server
Tim Chapman
Table locking hints provide developers much tighter control of their transactions. Look at the benefits and disadvantages of using the NOLOCK and READPAST table hints in SQL Server.

[В начало]

ФОРУМ SQL.RU

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

MSSQL XML Internet
MS SQL 2000 & Windows 2003 & Xeon(4-проц.) & 4Гига оперативки
как рассчитать визиты
-=Сложный запрос =- (LIFO)
альтернатива top, или как выбрать первые N стандартыми средствами?
Оптимизация UPDATE
Удаление USERа
как изменить порядок столбцов в таблмце
использование курсора для создания запроса третьего уровня в stored procedure
Помогите исправить протоколы
Администрирование
как невыводить повторы?
Возвросла нагрузка на процессор в 1.5 раза при переходе на MS SQL 2005 c 2000
Слияние полей из разных строк запроса
Full-text indexing MS SQL 2000
Запуск DTS по расписанию в SQL SERVER 2005 login failed...
2005 Merge Suscriber не хочет синхронизироваться
кто ни будь понимает, чеза хрень творится с сп2?
Триггер
Софт для поиска тяжелых запросов

[В начало]

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

нужен ли доступ к системным таблицам?
Импорт данных

[В начало]

#358<<  #359  >>#360
Rambler's Top100 Рейтинг@Mail.ru  Administrator: Обратная связь 
Copyright: SQL.Ru 2000-2013