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

Новости сайта "Упражнения по SQL" (http://www.sql-ex.ru) 187


Новости сайта "Упражнения по SQL (http://www.sql-ex.ru)" Выпуск 187 (26 апреля 2008 г.)

Новым посетителям сайта

SQL Exercises Сайт посвящен изучению языка, с помощью которого осуществляется взаимодействие с реляционными (и не только) СУБД. Суть обучения состоит в выполнении заданий на написание запросов к учебным базам данных; при этом система контролирует правильность выполнения заданий. В настоящее время реализованы все операторы подъязыка манипуляции данными (DML), которые включают в себя оператор извлечения данных SELECT, а также операторы модификации данных - INSERT, DELETE и UPDATE.

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

Демонстрация плана выполнения запроса и сравнительная оценка эффективности решений поможет вам освоить принципы оптимизации запросов, которые пригодятся на третьем рейтинговом этапе, который начинается после 138 задачи.

Имеется возможность получить сертификат по SQL DML при выполнении определенного количества заданий.


Новости сайта

§ Исправил баг сравнительного графика производительности решений. SergeyKiev заметил, что на графике присутствуют задачи 42 и 49, которые ранее были перенесены со второго этапа на первый.

§ Выставил новую задачу от нового автора $erges. Эта задача сложности 1 заменила задачу 44, которая перешла на обучающий этап.
Буду готовить к публикации еще несколько задач от $arges.

§ Одна задача осталась AKudrakov до перехода на третий этап (задач 137, время 28.609).

§ Изменения среди лидеров (решенные за неделю задачи третьего этапа):
23. iglbeat (140)
28. PandNsk (139)

§ Новые лица в ТОР 100 и вернувшиеся туда:
93. zjor (127, 103.306)

§ Продвинулись в рейтинге:
84. Cергей L (127, 51.683)

§ Продвижение ближайших претендентов на попадание в ТОР 100:
105. nadush (124, 188.743)
112. TomGolab (123, 35.535)
113. Plastilin (123, 386.724)
118. DeadLock5 (122, 86.035)
147. Sergey79 (115, 186.582)
159. Angellore (112, 24.393)
164. LexusSaD (111, 2.292)
170. DDV (110, 40.656)
171. strongb (110, 140.978)
190. Toxa Moskit (120, 40.618)

§ На этой неделе сертифицированы:
reks07 (B08026650) [AR] - г. Орел, Россия
Ozzy (A08030213) [BK] - г.Балашиха, МО, Россия

§ Число подписчиков - 3776

Число участников рейтинга - 15946

Число участников второго этапа - 1339

Число участников третьего этапа - 30

Сертифицировано на сайте - 268

Лучшие результаты (ТОР 20)

No Person Number of
Sel_ex
Last_Sel Number of
DML_ex
Scores Days Days_2 Days_3 S_3 LastSolved LastVisit
1 Сальников С.А. ($erges) 145 146 21 356 50 2.754 3.359 28 16 Apr 2008 25 Apr 2008
2 Печатнов В.В. (pvv) 145 146 21 356 127 19.165 6.326 28 23 Feb 2008 25 Apr 2008
3 Креславский О.М. (Arcan) 145 146 21 356 389 22.436 12.553 28 23 Feb 2008 25 Apr 2008
4 Карасёва Н.В. (vlksm) 145 146 21 356 667 64.764 38.288 28 03 Mar 2008 25 Apr 2008
5 Любченко В.А. (IAS56) 145 146 21 356 552 403.414 373.617 28 09 Mar 2008 20 Apr 2008
6 Держальцев В.А. (MadVet) 144 145 21 353 1064 57.441 25.129 25 15 Mar 2008 16 Apr 2008
7 Голубин Р.С. (Roman S. Golubin) 144 145 21 353 919 92.541 58.822 25 23 Feb 2008 25 Apr 2008
8 Мурашкин И.В. (lepton) 143 146 21 349 734 37.129 26.815 21 26 Mar 2008 22 Apr 2008
9 Белогурова К. (Katy_Ekb) 142 143 21 346 287 10.733 4.673 18 07 Mar 2008 25 Apr 2008
10 Войнов П.Е. (pаparome) 142 146 21 345 916 3.013 .213 17 26 Feb 2008 21 Apr 2008
11 Северюхин Ю.А. (Venser) 139 142 21 338 335 4.930 .655 14 01 Feb 2008 04 Feb 2008
12 Тарасов Д.Б. (Gavrila) 140 142 21 339 914 23.390 2.501 14 26 Feb 2008 25 Apr 2008
13 Солдатенков Ю.С. (SolYUtor) 140 142 21 339 703 17.852 2.695 14 20 Apr 2008 25 Apr 2008
14 Кувалкин К.С. (Cyrilus) 140 142 21 339 1207 13.042 2.782 14 15 Mar 2008 25 Apr 2008
15 Шептунов П.П. (Dzen) 138 142 21 337 279 8.130 3.499 14 02 Oct 2007 15 Nov 2007
16 Селезнёв А.С. (Артём С.) 141 142 21 342 127 15.597 4.279 14 14 Mar 2008 31 Mar 2008
17 Мальцев А.В. (Палкин) 138 142 21 337 422 48.788 7.690 14 13 Oct 2007 20 Jan 2008
18 Васьков Е.В. (Johan) 140 142 21 339 611 14.323 12.767 14 21 Mar 2008 20 Apr 2008
19 Бураков С.Г. (burakov58) 138 142 21 337 974 51.701 19.814 14 30 Sep 2007 09 Nov 2007
20 Валуев Д.И. (Fiolent) 141 142 21 342 1638 188.425 131.545 14 28 Feb 2008 25 Apr 2008

Лучшие результаты за неделю

No surname n_sel sel_all sel_scores dml_scores scores rating last_visit
1 Kaminski R. (robkam) 57 57 109 34 143 777 25 Apr 2008
2 >Шадрин И.В. (SADIV) 54 54 105 34 139 837 25 Apr 2008
3 Маленков А. (Andrey Malenkov) 52 52 101 23 124 1084 24 Apr 2008
4 >Ignatev S.A. (Stas_I) 51 51 98 9 107 1418 25 Apr 2008
5 >Туршев (Romul_T) 40 40 76 15 91 1897 25 Apr 2008
6 >Мишин С. (CepbIu) 47 48 89 0 89 1963 25 Apr 2008
7 Мадьяров А.И. (Voistinu) 43 43 85 0 85 2123 23 Apr 2008
8 >Семионенко М.Л. (Красный барон) 35 35 63 15 78 2350 25 Apr 2008
9 Крицин К.А. (kosyak) 31 31 58 11 69 2762 24 Apr 2008
10 Романец М. (Deadok) 32 32 60 9 69 2765 23 Apr 2008
11 >basior (ugs) 20 48 37 31 68 1086 25 Apr 2008
12 >Умрихина Е.В. (Umrikhina) 36 36 68 0 68 2823 25 Apr 2008
13 Coatu L. (Lucian) 16 52 36 28 64 963 23 Apr 2008
14 Болмасов С.И. (guardian) 20 31 41 17 58 2733 25 Apr 2008
15 Панарин А.А. (BiZ) 26 96 57 0 57 224 25 Apr 2008
16 >Mroz (miki999) 17 29 40 15 55 2730 25 Apr 2008
17 Milshin A. (Toshka) 29 29 53 0 53 3945 23 Apr 2008
18 >Черник В.В. (Vadim1211) 22 35 52 0 52 2980 25 Apr 2008
19 Беляева Т.Ю. (Беляева Татьяна) 26 26 45 0 45 4849 23 Apr 2008
20 >Лакин Д.Л. (Йа Димко) 19 30 44 0 44 3729 25 Apr 2008
21 >Земзюлин А.П. (А.Земзюлин) 23 28 44 0 44 4385 25 Apr 2008
22 Лекомцев (PavlikMorozov) 20 47 43 0 43 1872 20 Apr 2008
23 >Reprintsev S.V. (Zubilo) 24 24 40 0 40 5245 25 Apr 2008

Изучаем SQL

Утилита TableDiff.exe в SQL Server 2005

decipherinfosys (оригинал: TableDiff.exe utility in SQL Server 2005 )
Перевод Моисеенко С.И.

Мы уже говорили об утилитах командной строки в SQL Server 2005 и рассмотрели подробно некоторые из них, например, SQLCMD. Сейчас мы переходим к утилите tablediff.exe. Эта утилита обычно используется, чтобы выявить несовпадение данных в двух таблицах в сценарии репликации, когда исходная таблица находится в экземпляре, который выступает в роли издателя, а таблица назначения выступает как подписчик. Она может также использоваться, чтобы выполнить сравнение на уровне столбца и сгенерировать скрипт T-SQL, который устранит несогласованность. Утилита имеет также опцию быстрого сравнения схемы и числа строк в таблицах. Ниже представлены все опции утилиты и местоположение этого exe-файла в установке по умолчанию SQL Server 2005:

C:\Program Files\Microsoft SQL Server\90\COM>tablediff.exe /?
Microsoft (R) SQL Server Replication Diff Tool
Copyright (C) 1988-2005 Microsoft Corporation. All rights reserved.
User-specified agent parameter values:
/?
 Replication Diff Tool Command Line Options
        usage: tablediff
          -- Source Options --
 -sourceserver          Source Host
 -sourcedatabase        Source Database
 -sourceschema          Source Schema Name
 -sourcetable           Source Table or View
 -sourceuser            Source Login
 -sourcepassword        Source Password
 -sourcelocked          Lock the source table/view durring tablediff

          -- Destination Options --
 -destinationserver     Destination Host
 -destinationdatabase   Destination Database
 -destinationschema     Destination Schema Name
 -destinationtable      Destination Table or View
 -destinationuser       Destination Login
 -destinationpassword   Destination Password
 -destinationlocked     Lock the destination table/view durring tablediff

          -- Misc Options --
 -t             Timeout
 -c             Column Level Diff
 -f             Generate Fix SQL (You may also specify a file name and path)
 -q             Quick Row Count
 -et            Specify a table to put the errors into
 -dt            Drop the error table if it exists
 -o             Output file
 -b             Number of bytes to read for blob data types (Default 8000)
 -strict        Strict compare of source and destination schema
 -rc            Number of retries
 -ri            Retry interval

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

1) Информация подключения для местоположения источника и назначения.
2) Опции сравнения: a) Сравнение схем: обычное или точное; b) Сравнение, использующее число строк, или сравнение столбцов и c) Генерация скрипта T-SQL для синхронизации данных таблицы назначения с таблицей-источником.

Давайте создадим таблицы одинаковой структуры в двух различных базах данных в целях демонстрации мы создаем их на одном и том же экземпляре:

 

USE MAINDB
GO
CREATE TABLE TABLEDIFF_TEST (COL1 INT NOT NULL PRIMARY KEY, COL2 VARCHAR(10) NULL)
GO
INSERT INTO TABLEDIFF_TEST (COL1, COL2) VALUES (1, 'ABCD');

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

 

 

USE MISYS
GO
CREATE TABLE TABLEDIFF_TEST (COL1 INT NOT NULL PRIMARY KEY, COL2 VARCHAR(10) NULL)
GO
INSERT INTO TABLEDIFF_TEST (COL1) VALUES (1);
INSERT INTO TABLEDIFF_TEST (COL1) VALUES (2);
INSERT INTO TABLEDIFF_TEST (COL1) VALUES (3);

 

Теперь мы можем запустить утилиту tablediff.exe из командной строки, чтобы получить разницу и вывести ее во внешний файл (мы можем также выбрать вариант записи в таблицу):

C:\Program Files\Microsoft SQL Server\90\COM>tablediff.exe -strict -sourceserver (local)
-sourcedatabase MISYS -sourceschema dbo -sourcetable TABLEDIFF_TEST -destinationserver (local)
-destinationdatabase MAINDB -destinationschema dbo -destinationtable TABLEDIFF_TEST
-o E:\Table_Test_Output.txt

Microsoft (R) SQL Server Replication Diff Tool
Copyright (C) 1988-2005 Microsoft Corporation. All rights reserved.

User-specified agent parameter values:
-strict
-sourceserver (local)
-sourcedatabase MISYS
-sourceschema dbo
-sourcetable TABLEDIFF_TEST
-destinationserver (local)
-destinationdatabase MAINDB
-destinationschema dbo
-destinationtable TABLEDIFF_TEST
-o E:\Table_Test_Output.txt

C:\Program Files\Microsoft SQL Server\90\COM>

Вот вывод этой команды:

Table [MISYS].[dbo].[TABLEDIFF_TEST] on (local)
and Table [MAINDB].[dbo].[TABLEDIFF_TEST] on (local) have 3 differences.

Err COL1 Col
Mismatch 1 COL2
Src. Only 2
Src. Only 3
The requested operation took 0.21875 seconds.
(данная операция заняла 0,21875 секунд)

Это означает, что для значения COL1=1, не было найдено соответствующего значения в COL2, а записи со значениями COL1=2 и COL1=3 представлены только в источнике, но не в назначении. Давайте с помощью этой утилиты сгенерируем операторы DML, чтобы получить синхронизированные данные в базе данных назначения (это может быть сделано при использовании опции "-f"):

Table [MISYS].[dbo].[TABLEDIFF_TEST] on (local) and Table [MAINDB].[dbo].[TABLEDIFF_TEST] on (local) have 3 differences.
Fix SQL written to DIFFIX.633343501980863750.sql.
Err COL1 Col
Mismatch 1 COL2
Src. Only 2
Src. Only 3
The requested operation took 0.21875 seconds.

На сей раз, когда мы выполнили команду, она создала нам отдельный файл SQL, который содержит эти операторы DML (название файла - DIFFIX.633343501980863750.sql - указано выше, а находится он там же, где и утилита tablediff.exe. Вот содержимое этого файла:

 


-- Host: (local)
-- Database: [MAINDB]
-- Table: [dbo].[TABLEDIFF_TEST]
UPDATE [dbo].[TABLEDIFF_TEST] SET [COL2]=NULL WHERE [COL1] = 1
INSERT INTO [dbo].[TABLEDIFF_TEST] ([COL1],[COL2]) VALUES (2,NULL)
INSERT INTO [dbo].[TABLEDIFF_TEST] ([COL1],[COL2]) VALUES (3,NULL)

 

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

Мы показали вам, что кое-что существует непосредственно в SQL Server, что может использоваться для исследования проблем. Хотя, если Вы действительно ищете легкий способ разбираться с подобными проблемами, то должны познакомиться с инструментами от Red Gate (SQL Compare and SQL Data-Compare).

27-12-2007

Полезная информация

§ Все статьи, публикуемые в рассылке, затем выкладываются на сайте Книги и статьи по SQL.

§ Желающих поспособствовать популяризации сайта прошу проголосовать/поставить закладку в социальных сетях:
del.icio.us
dzone.com
Digg.com
stumbleupon.com

Контакты

По всем вопросам, связанным с функционированием сайта, проблемами при решении упражнений, идеями вы можете обращаться к Сергею И.Моисеенко msi77[@]yandex.ru. Вы также можете предложить свои задачи для публикации на сайте.

Подписка Subscribe.Ru
Новости сайта "Упражнения по SQL"

В избранное