Posts tagged SQL Server
Wirtualna premiera SQL Server 2012
Jan 23rd
Właśnie dowiedziałem się, będąc w Redmond na szkoleniu Bare Metal SQL Server 2012, że 7 marca będzie miała miejsce wirtualna premiera SQL Server 2012! Jeżeli interesuje Cię nowa wersja SQL Servera, chcesz obejrzeć 30+ sesji prowadzonych przez czołowych specjalistów z całego świata i pracowników Microsoft, nie przegap tego wydarzenia i rejestruj się już dzisiaj na witrynie http://www.sqlserverlaunch.com. Na zachętę dodam, że w ramach premiery będzie miał miejsce mały konkurs z ciekawymi nagrodami. Po szczegóły odsyłam już na witrynę wydarzenia. Ja już się zarejestrowałem, a teraz wracam do tworzenia wirtualnych maszyn na potrzeby labów ;-)
Ważne! Wspomniana wirtualna premiera będzie wyłącznie wydarzeniem promującym najnowszą wersję SQL Servera i nie należy jej traktować jako oficjalnej premiery produktu. Nie oczekujcie więc, że 7 marca będziemy w stanie pobrać wersję RTM produktu :-)
Materiały z dwóch edycji SQLDay Workshop
Jan 7th
Ostatnio informowałem o trzeciej edycji warsztatów SQLDay Workshop. Miejsca na warsztaty rozeszły się błyskawicznie, co tylko potwierdza, jak potrzebne są podobne przedsięwzięcia.
Miło mi poinformować za Tobiaszem Koprowskim, aktualnym prezesem Polskiej Grupy Użytkowników SQL Server (PLSSUG), że na kanale YouTube PLSSUG dostępne są nagrania wideo z dwóch poprzednich edycji warsztatów.
Osoby zainteresowane materiałami zapraszam na podane poniżej strony.
SQLDay Workshop 2009 PlayList: http://www.youtube.com/playlist?list=PL6FF436F4330A598C&feature=plcp
SQLDay Workshop 2010 PlayList: http://www.youtube.com/playlist?list=PLB07B560412F478F6&feature=plcp
Polecam też fanpage PLSSUG na Facebooku, gdzie można śledzić aktualne wydarzenia i działania grupy.
Wydarzenie – warsztaty SQLDay Workshop 2012
Dec 27th
W imieniu krakowskiego oddziału Polskiej Grupy Użytkowników SQL Server (PLSSUG) zapraszam na doroczne warsztaty SQLDay Workshop 2012. Warsztaty odbędą się, tradycyjnie już, w Krakowie. Termin imprezy: 4 lutego 2012. Miejsce: Krakowski Park Technologiczny Sp. z o.o., Al. Jana Pawła II 41L. Warsztaty będą bezpłatne, ale wymagana będzie rejestracja (wkrótce na stronie warsztatów). Wszelkich informacji na temat warsztatów udziela lider krakowskiego PLSSUG-a, Paweł Wilkosz (pawel.wilkosz[małpa]plssug.org.pl). Ale już teraz mogę śmiało polecić te warsztaty wszystkim pasjonatom systemu Microsoft SQL Server oraz osobom, które pracują z tym systemem na co dzień. Udział w warsztatach zapowiedziały 4 osoby legitymujące się tytułem Microsoft Most Valuable Professional (MVP) w kategorii SQL Server, a więc znakomici specjaliści znający tajniki także najnowszej odsłony systemu – SQL Server 2012 ("Denali"). Polecam!
[PL] Konferencje, prelekcje, wydarzenia
Nov 24th
Szykuje się sporo atrakcji dla osób zainteresowanych bazami danych, w szczególności tymi implementowanymi w systemie Microsoft SQL Server. Pomyślałem, że dobrze by było zebrać informacje o nadchodzących wydarzeniach i wyostrzyć czujność pasjonatów baz danych.
Już za tydzień, w czwartek 1 grudnia, o godzinie 18:00 w siedzibie firmy Microsoft w Warszawie przy Al. Jerozolimskich 195A rozpocznie się spotkanie warszawskiego oddziału Polskiej Grupy Użytkowników SQL Server (PLSSUG). Z czystym sumieniem polecam obu prelegentów, którzy wystąpią w ramach tego spotkania. Marek Adamczuk, ekspert w dziedzinie architektury rozwiązań i programowania w języku T-SQL, opowie o kursorach – często znienawidzonym i jeszcze częściej niedocenianym elemencie języka T-SQL. Z kolei Włodek Bielski, znakomity specjalista z zakresu hurtowni danych i Business Intelligence, zaprezentuje PowerView – nowe narzędzie do prezentacji danych dostępne w SQL Server 2012. Naprawdę polecam obie ciekawie zapowiadające się sesje i obu prelegentów, których mam przyjemność znać osobiście i z którymi mam lub miałem okazję blisko współpracować.
Jeśli ktoś jest zainteresowany budowaniem rozwiązań analitycznych w oparciu o SQL Server i przy okazji jest studentem WWSI (Warszawska Wyższa Szkoła Informatyki), może być zainteresowany konferencją organizowaną przez tę uczelnię. Konferencja ta – odbywająca się co roku pod szyldem "Od studenta do specjalisty Business Intelligence" – jest skierowana głównie do studentów, ale gdy spojrzeć na sylwetki prelegentów – Marcin Szeliga (SQL Server MVP), Grzegorz Stolecki (SQL Server MVP) czy wspomniany Włodek Bielski, wydaje mi się, że każdy entuzjasta hurtowni, BI i data miningu może znaleźć tam coś dla siebie. Ja również będę miał przyjemność wystąpienia na tej konferencji. Zaprezentuję temat "Władcy Danych – wykorzystanie Master Data Services do zapanowania nad wszechobecnym chaosem". Prezentacja będzie poświęcona nowemu narzędziu do zarządzania różnymi reprezentacjami danych w rozproszonych środowiskach – Master Data Services. Konferencja odbędzie się 8 grudnia w budynku uczelni. Więcej informacji na stronie pod linkiem powyżej. Niestety, z tego, co wiem, konferencja jest przeznaczona wyłącznie dla studentów WWSI. Spróbuję się zorientować, czy będą jakieś nagrania z prezentacji i ew. materiały udostępnione publicznie.
I wreszcie wisienka na torcie. SQLDay 2012 czyli doroczna konferencja organizowana przez PLSSUG we Wrocławiu. Znamy już daty – 25 i 26 maja przyszłego roku – a więc warto zarezerwować sobie te dwa dni (a najlepiej także 24 maja). Dwa dni, a więc coś nowego (do tej pory wszystkie edycje były jednodniowe). Co więcej, od obecnego prezesa PLSSUG, Tobiasza "Anoraka" Koprowskiego, wiem, że swój udział zapowiedziało kilku zagranicznych prelegentów, wybitnych specjalistów w zakresie systemu SQL Server (naprawdę głośne nazwiska, sądzę, że niebawem pojawią się na witrynie konferencji). Zapowiada się znakomity zlot pasjonatów, geeków i innych SQL-owych zboczeńców :-)
To tyle informacji, a zarazem mojego blogowania na dzisiaj. A teraz czas zaprzyjaźnić się z SQL Server 2012 RC0, którego wczoraj udało mi się po walce zainstalować! ;-)
[PL] Najlepsze praktyki dla programisty T-SQL – collation i "obce znaczki"
Nov 6th
Na tegorocznej konferencji Microsoft Technology Summit (MTS) przedstawiłem wraz z Markiem Adamczukiem prezentację pt. "Najlepsze praktyki dla programisty Transact-SQL". Po tej sesji sporo osób prosiło mnie o materiały, a głównie demonstracje. Dobra informacja jest taka, że materiały te można już pobrać ze strony konferencji. Najwięcej dyskusji po prezentacji dotyczyło fragmentu poświęconego collation i pracy z danymi tekstowymi pochodzącymi z różnych języków. Dlatego, po rozmowie z Markiem, postanowiłem napisać niniejszy artykuł, w którym omówię wybrane najlepsze praktyki posługując się kodem zaprezentowanym na MTS.
Nvarchar – N ma znaczenie
Typy danych nchar i nvarchar umożliwiają przechowywanie w bazie danych tekstów zawierających znaki charakterystyczne dla różnych języków. Przykładowo, mamy bazę w collation "rosyjskim", a w jednej z kolumn w tabeli w tej bazie chcemy przechować tekst w języku polskim. Wówczas typ danych nvarchar doskonale nadaje się do przechowywania danych (co ciekawe, kolumna tego typu ma nadal przypisane collation "rosyjskie"). Co jest jednak istotne w takim przypadku? Ważne jest, by przy używaniu literałów tekstowych dawać systemowi SQL Server znać, że podany tekst ma być traktowany jako Unicode. Do tego służy prefiks N umieszczany bezpośrednio przed literałem (wielkość litery ma znaczenie). Poniższy przykład dobrze obrazuje tę zasadę. Bez prefiksu N polskie znaki w napisie, który otrzymuje collation bazy danych, po prostu znikają (w niektórych przypadkach zamiast znaków charakterystycznych dla różnych alfabetów pojawiają się znaki zapytania lub inne "krzaczki"). Po dodaniu prefiksu N polskie znaki są wstawiane w kolumnę typu nvarchar bez problemu, mimo że collation bazy i kolumny jest "rosyjskie".
--Tworzymy "rosyjską" bazę USE master; GO IF DB_ID('RussianDB') IS NOT NULL BEGIN ALTER DATABASE RussianDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE; DROP DATABASE RussianDB; END; GO CREATE DATABASE RussianDB COLLATE Cyrillic_General_CI_AS; GO USE RussianDB; GO --Tabela z kolumną nvarchar CREATE TABLE dbo.Tab (c nvarchar(20) NULL); GO --Wstawiamy dane INSERT INTO dbo.Tab (c) SELECT 'ąęśćłóżźń'; GO --Test SELECT * FROM dbo.Tab; GO --A teraz zróbmy to, jak trzeba INSERT INTO dbo.Tab (c) SELECT N'ąęśćłóżźń'; GO --Test SELECT * FROM dbo.Tab; GO
Długa czy krótka kolacja?
W SQL Server mamy bogactwo możliwych do wyboru collation. Zawsze, gdy tworzymy nową bazę danych, stajemy przed wyborem, jakie collation nadać tworzonej bazie? Pierwsza myśl – niech baza ma takie collation, jak bazy systemowe (czyli takie collation, jakie wybraliśmy przy instalacji SQL Servera). A jeśli ma mieć inne collation? Co wybierać – collation SQL-owe (prefiks SQL_ – zwane dalej "długim collation") czy raczej collation rodem z systemu Windows (np. Polish_CI_AS – zwane dalej "krótkim collation")? Istnieje kilka przesłanek przemawiających na korzyść collation "Windowsowych". Pierwsza przesłanka – niejawne rzutowania w przypadku, gdy do kolumny o "długim collation" spróbujemy wstawić dane typu nvarchar. Wówczas niejawna konwersja kolumny na nvarchar spowoduje niemożliwość wykorzystania ewentualnego indeksu (i odbędzie się skanowanie tabeli). W przypadku kolumny z "krótkim collation" problem znika – dane Unicode są rzutowane do typu varchar i indeks może zostać wykorzystany.
--Tabela z "długim" collation CREATE TABLE #t1 ( c1 varchar(128) COLLATE SQL_Polish_CP1250_CS_AS NOT NULL ); CREATE CLUSTERED INDEX IX_1 ON #t1 (c1); GO --Tabela z "krótkim" collation CREATE TABLE #t2 ( c2 varchar(128) COLLATE Polish_CI_AS NOT NULL ); CREATE CLUSTERED INDEX IX_2 ON #t2 (c2); GO --Dane INSERT INTO #t1 (c1) SELECT name FROM sys.all_objects; GO INSERT INTO #t2 (c2) SELECT name FROM sys.all_objects; GO --Test SELECT * FROM #t1 WHERE c1 = N'objects'; SELECT * FROM #t2 WHERE c2 = N'objects'; GO
Innym zachowaniem "długich collation", które może być powodem do zaniechania ich wykorzystywania, jest sortowanie tekstów, w których pojawiają się myślniki. W zasadzie komentarz jest zbędny – wystarczy rzut oka na wyniki zapytania z sortowaniem, by stwierdzić, że wynik dla "długiego collation" jest dość nieoczekiwany.
--Zmieńmy zawartość TRUNCATE TABLE #t1; TRUNCATE TABLE #t2; INSERT INTO #t1 (c1) VALUES ('a'), ('a-'), ('a-a'); INSERT INTO #t2 (c2) VALUES ('a'), ('a-'), ('a-a'); GO --Problem sortowania i myślników SELECT * FROM #t1 ORDER BY c1; SELECT * FROM #t2 ORDER BY c2; GO
Collation a tabele tymczasowe
Jeśli już zdecydujemy się na wybór dla bazy danych collation innego niż collation serwera, musimy liczyć się z tym, że nasza nowo utworzona baza będzie miała inne collation niż baza tempdb. Co za tym idzie? Gdy będziemy używali tabel tymczasowych w kodzie proceduralnym w naszej bazie, możemy napotkać na konflikty collation w sytuacjach, gdy będą wykonywane operacje porównywania czy sortowania tekstu.
USE RussianDB; GO IF OBJECT_ID('dbo.T11', 'U') IS NOT NULL DROP TABLE dbo.T11; GO CREATE TABLE dbo.T11 ( c11 varchar(128) NOT NULL ); GO INSERT INTO dbo.T11 (c11) VALUES ('MTS'); GO IF OBJECT_ID('tempdb.dbo.#T11', 'U') IS NOT NULL DROP TABLE #T11; GO CREATE TABLE #T11 ( c11 varchar(128) NOT NULL ); GO -- Test - konflikt collation SELECT * FROM dbo.T11 UNION SELECT * FROM #T11; GO
Msg 468, Level 16, State 9, Line 3 Cannot resolve the collation conflict between "Polish_CI_AS" and "Cyrillic_General_CI_AS" in the UNION operation.
Rozwiązanie połowiczne – użyć składni SELECT INTO do stworzenia tabeli tymczasowej jako kopii istniejącej tabeli. Wówczas collation kolumn tekstowych są identyczne z tymi z tabeli źródłowej.
IF OBJECT_ID('tempdb.dbo.#T11', 'U') IS NOT NULL DROP TABLE #T11; GO SELECT TOP 0 * INTO #T11 FROM dbo.T11; GO -- Test: ciut lepiej, bo działa SELECT * FROM dbo.T11 UNION SELECT * FROM #T11; GO
Nie zawsze jednak mamy tabelę wzorcową, na której możemy oprzeć tabelę tymczasową. Dlatego najlepszym rozwiązaniem wydaje się być użycie klauzuli COLLATE DATABASE_DEFAULT. Wówczas kolumna tekstowa otrzymuje collation identyczne z tym, jakie zostało przypisane bazie danych, w kontekście której uruchamiamy kod.
IF OBJECT_ID('tempdb.dbo.#T11', 'U') IS NOT NULL DROP TABLE #T11; GO CREATE TABLE #T11 ( c11 varchar(128) COLLATE DATABASE_DEFAULT NOT NULL ); GO -- Test: jest dobrze :) SELECT * FROM dbo.T11 UNION SELECT * FROM #T11; GO
Podsumowanie
Powyższe przykłady ilustrują pewne wybrane przeze mnie i Marka problemy dotyczące danych tekstowych w SQL Server. Oczywiście, podobnych problemów jest więcej (np. jak zmienić collation istniejącej bazy?), ale wydawało nam się, że przedstawione dema pozwolą na ominięcie najczęściej występujących pułapek. No i druga sprawa – mieliśmy tylko 60 minut na prezentację :-) W tym miejscu pragnę podziękować wszystkim, którzy byli na naszej sesji na MTS i wypełnili ankietę dotyczącą naszej prezentacji. Jest mi też niezmiernie miło, że nasz przekaz spotkał się z bardzo pozytywnym odbiorem. Gdyby była potrzeba opisania w kolejnym artykule jakiegoś fragmentu kodu z naszych demonstracji, dajcie znać, a chętnie opublikuję kolejny fragment tekstu na blogu.
[PL] SQL Server MVP Deep Dives vol. 2 już jest!
Sep 27th
Miło mi poinformować, że wydawnictwo Manning rozpoczęło przyjmowanie zamówień na książkę SQL Server MVP Deep Dives vo. 2, której jestem współautorem. Oficjalna premiera książki będzie miała miejsce w Redmond w czasie konferencji PASS Summit 2011. Dla osób, które nie zetknęły się z pierwszą częścią książki – SQL Server MVP Deep Dives to książka pisana przez specjalistów zajmujących się systemem SQL Server. Większość autorów to ludzie nagrodzeni przez firmę Microsoft tytułem Microsoft Most Valuable Professional. Cały dochód ze sprzedaży idzie na cel charytatywny, w przypadku drugiej odsłony książki – na organizację Operation Smile zajmującą się operowaniem rozszczepów podniebienia u dzieci. To dla mnie wielki zaszczyt być częścią tego przedsięwzięcia i szczytnej idei, jaką jest wspieranie organizacji niosących pomoc dzieciom na całym świecie. Cena książki to 47,99 dolarów US za wersję elektroniczną lub 59,99 dolarów US za wersję drukowaną. Książkę polecam każdemu, kto interesuje się zagadnieniami związanymi z SQL Serverem lub po prostu ma ochotę i środki by wesprzeć szczytny cel tego wydawnictwa.
[PL] Będę na MTS 2011
Aug 16th
Miło mi zakomunikować, że w tym roku pojawię się w roli prelegenta na konferencji Microsoft Technology Summit 2011 (MTS 2011). Wraz z moim przyjacielem, Markiem Adamczukiem, zostaliśmy zaproszeni przez firmę Microsoft do udziału w konferencji i przygotowanie wspólnej prezentacji. Co ciekawe, w dobie nadchodzącej następnej wersji SQL Servera – Denali – poproszono nas o sesję na poziomie 300-400 (średnio-zaawansowany/zaawansowany) niekoniecznie związaną z Denali. Wybraliśmy temat Najlepsze praktyki dla programisty Transact-SQL. Sam tytuł może jeszcze ulec zmianie, ale na pewno nasza sesja będzie dotyczyła najlepszych praktyk, technik użytkowych programowania w T-SQL, elementów kodu sprawdzonych "na polu walki". Zapraszam wszystkich uczestniczących w MTS 2011 maniaków SQL-owych uwielbiających operacje na zbiorach (nie mylić z seksem zbiorowym) na naszą prezentację (jej hasło marketingowe brzmi: "sprawdź, czy Twój kod spełnia normy wysokiej jakości" ;-)). Zachęcam też do nawiązania kontaktów w czasie konferencji – okazji na pewno nie będzie brakować :-) Do zobaczenia na MTS!
[PL] Denali CTP3 – Nowe lepsze DBCC IND?
Jul 26th
Niedawno ukazała się nowa publiczna wersja Community Preview 3 (CTP3) systemu SQL Server vNext (codename Denali). Okoliczności ukazania się tej wersji były dość ciekawe, ponieważ wersja ukazała się dość niespodziewanie szybciej, niż ktokolwiek mógł podejrzewać. Jednocześnie firma Microsoft zarzuciła użytkowników bogactwem nowych wersji SQL Server 2008 R2 (Service Pack1) i 2008 (kilka Cumulative Update’ów). Jest więc co eksplorować, choć zalecam ostrożność, ponieważ z zaufanych źródeł wiem, że zwłaszcza Service Pack 1 do R2 jest źródłem licznych problemów (włącznie z tym, że dość trudno go poprawnie zainstalować).
Dopiero kilka dni temu znalazłem czas, by sprokurować sobie maszynę wirtualną do Denali CTP3. Maszyna działa pod kontrolą Windows Server 2008 SP1. Do tego trzeba było doinstalować parę rzeczy, ale na szczęście instalator wszystko dość jasno opisuje i nie ma problemów ze znalezieniem w sieci brakujących dodatków do systemu operacyjnego.
Jedną z pierwszych czynności po zainstalowaniu każdej nowej wersji SQL Servera jest w moim przypadku sprawdzenie, czy nie pojawiły się nowe widoki i funkcje dynamiczne. Uruchamiam zatem zapytanie:
SELECT 'sys.' + name FROM sys.system_objects WHERE [schema_id] = 4 AND name LIKE 'dm[_]%';
Przejrzenie listy w przypadku Denali CTP3 zaowocowało znalezieniem kilku ciekawych obiektów, ale najciekawszym z mojego punktu widzenia wydaje się być sys.dm_db_database_page_allocations. Jest to funkcja dynamiczna, która przyjmuje sporo parametrów: identyfikator bazy, identyfikator tabeli, identyfikator indeksu, numer partycji oraz rodzaj widoku. Lista parametrów przypomina widok sys.dm_db_index_physical_stats. Jednak nowa funkcja zwraca informacje prawie takie same, jakie dotąd można było uzyskać za pomocą polecenia DBCC IND. Możemy zatem obejrzeć, które strony wchodzą w skład konkretnego indeksu czy sprawdzić, z ilu poziomów stron dany indeks jest złożony. Przykładowe odwołanie do tej funkcji:
SELECT * FROM sys.dm_db_database_page_allocations( DB_ID(), NULL, NULL, NULL, 'DETAILED' );
Przykładowy wynik (lista stron zaalokowanych dla całej bazy, widok o największej liczbie detali):
Nie muszę tłumaczyć, o ile lepiej byłoby mieć w systemie widok dynamiczny, na dodatek w pełni wspierany i udokumentowany. Do szczęścia jeszcze poproszę jakiś oficjalny zamiennik dla DBCC PAGE :-)
[PL] Zmiany w PLSSUG
Jun 20th
W ostatnią sobotę, 18 czerwca, odbyła się we Wrocławiu trzecia już w historii konferencja SQLDay. Organizatorem, jak zwykle, była Polska Grupa Użytkowników SQL Server (PLSSUG). Niestety, sprawy zawodowe tym razem nie pozwoliły mi wziąć udziału w konferencji, nad czym boleję. Tak czy owak, tradycji musiało stać się za dość i w trakcie konferencji został ogłoszony wybór nowego prezesa PLSSUG :-)
Nowym prezesem został… (TADA!) Tobiasz Koprowski! Tobiasz jest znany w środowisku jako tytan pracy. To na jego barkach co roku spoczywała organizacja SQLDay. To on jest najbardziej aktywnym członkiem grupy w szeregach międzynarodowych organizacji wspierających grupy offline (tu mowa o GITCA). Generalnie, człowiek orkiestra. Stąd, pierwsza myśl, jaka przyszła mi do głowy, gdy nadeszła pora wytypowania mojego “następcy”, brzmiała, że to właśnie jemu należałoby powierzyć następną kadencję na najwyższym “stołku” w PLSSUG. Tobiaszu, jestem pewien, że dasz sobie radę i będziesz doskonałym “wodzem” grupy.
Co udało się zrobić grupie przez ostatnie kilka miesięcy (od grudniowej konferencji SQLDay 2010)? Przede wszystkim przeszliśmy na nową witrynę. Może nie jest jeszcze ona doskonała, ale jesteśmy na dobrej drodze, a przynajmniej samodzielnie ją utrzymujemy i informacje na niej są w miarę aktualne. Po drugie, oczywiście, udało się zrealizować projekt konferencji latem, a nie, jak to było dotychczas, porą jesienną lub zimową. Przynajmniej dojechać było łatwiej ;-) Poza tym, co najważniejsze, grupa cały czas żyje. Spotykamy się w kilku miastach w Polsce i nie zapowiada się, byśmy mieli przestać dyskutować o SQL Serverze.
W tym miejscu zwracam się do tych czytelników mojego bloga, którzy są członkami PLSSUG. Jeśli macie możliwość udzielenia jakiegokolwiek wsparcia Tobiaszowi i liderom grupy, nie wahajcie się i piszcie maila na adres leaders@plssug.org.pl. Żaden nadesłany mail nie zostanie bez odpowiedzi. A że my wszyscy jesteśmy zapracowani i doba zawsze ma za mało godzin, każda pomocna dłoń jest na wagę złota. Zachęcam do czynnego udziału w życiu grupy. Przynosi to często wymierne korzyści nie tylko samym aktywistom, ale i szerokiej rzeszy członków grupy i uczestników naszych spotkań i konferencji.
Kończąc ten wpis wyrażam nadzieję, że na następną edycję SQLDay uda mi się dotrzeć i – być może – przedstawić jakąś ciekawą prezentację. Do zobaczenia!



Nazywam się Paweł Potasiński i pracuję w polskim oddziale Microsoft w dziale Small and Midmarket Solutions & Partners (SMS&P) jako Partner Technology Advisor.




