Monthly Archives: Październik 2011

Problem z systemowymi DSN w systemach z rodziny WINDOWS 7

Jedną z metod dostępu do baz danych SQL Server są źródła danych ODBC. O ile ustawienia DSN użytkownika jak i DSN systemowego nie jest żadną nowością, to w WINDOWS 7 (i prawdopodobnie VISTA) można się nieźle zdziwić.

Scenariusz problemu jest następujący:

Załóżmy, że pracujemy w firmie, która jest w trakcie migracji do WINDOWS 7 ze starszych systemów klienckich. Wraz z przejściem na nowy system modernizujemy sprzęt i instalujemy WINDOWS w wersji 64bit. Jedna z aplikacji z której korzystają użytkownicy używa ODBC do połączenia z bazą SQL Server. Po instalacji systemu przechodzimy więc do panelu sterowania, a stamtąd do okna „System i zabezpieczenia\Narzędzia administracyjne”. Następnie klikamy w skrót „Źródła danych (ODBC)” i z przyzwyczajenia ustawiamy systemowe DSN.

ODBC Administrator

Systemowe DSN z założenia jest dostępne do odczytu dla wszystkich użytkowników danego komputera, tak więc aplikacja powinna działać OK.  Przekazujemy komputer użytkownikowi, który się na niego loguje, po czym stwierdza, że niestety program łączący się z bazą nie działa tak jak powinien.

Okno błędu przykładowej aplikacji

W czym zatem tkwi problem?

Gdy zbadałem sprawę okazało się, że winowajcą jest funkcja „Windows 32 bit On Windows 64 bit”, w skrócie zwana WoW64. Z uwagi na to, że aplikacja korzystająca z ODBC jest 32 bitowa, to nie używa ona ustawionego przez nas DSN Systemowego w 64 bitowej wersji WINDOWS. Rozwiązaniem jest użycie 32 bitowego ODBC Administratora znajdującego się w katalogu:

C:\Windows\SysWOW64\odbcad32.exe.

Jego wygląd nie różni się niczym od wersji, którą odpalaliśmy używając panelu sterowania. Jedyną różnicą w jego działaniu jest to, że ustawia on DSN dla aplikacji 32 bit. Tworzymy za jego pomocą DSN systemowe, po czym uruchamiamy aplikację.

Działająca aplikacja używająca ODBC

Działa :). Pozostaje jednak jeszcze jedno pytanie:

Czy gdybyśmy ustawili DSN użytkownika to problem ten też by wystąpił?

Odpowiedzią jest NIE. Z tego co udało mi się wybadać WINDOWS kopiuje w pewnym momencie ustawienia DSN tak, by aplikacje 32-bitowe zachowywały się poprawnie. Ponieważ zwykły użytkownik nie ma uprawnień do konfiguracji DSN systemowych,  to mechanizm ten po prostu nie zadziałał. Jeżeli ustawimy DSN użytkownika problem z aplikacją nie wystąpi. Zwykły użytkownik ma prawo do tworzenia swoich DSN, więc WINDOWS po prostu przekopiuje ustawienia 64 bit na potrzeby 32 bitowych programów.

PS. Z uwagi, że winowajcą jest WoW64, to oczywistym jest, że na 32 bitowym systemie WINDOWS 7 problem ten nie występuje.

Reklamy

Imagine Cup, IT Challenge – pierwszy quiz za mną …

We wpisie z 17 października (https://coltuszyk.wordpress.com/2011/10/17/imagine-cup-it-challenge-a-mialem-byc-tylko-kibicem/) wspomniałem, że na początku tego tygodnia zarejestrowałem się do konkursu Imagine Cup, a dokładniej kategorii IT Challenge.

Pierwszym etapem konkursu jest poradzenie sobie z pytaniami zadanymi w formie quizu z dziedziny administracji produktami Microsoft. W tym roku wyznaczono sześć terminów podejścia, a pierwszy z nich przypadał wczoraj:

  • 20 października 2011
  • 15 listopada 2011
  • 1 grudnia 2011
  • 14 grudnia 2011
  •  9 stycznia2012
  • 26 stycznia 2012

Jak to zwykle bywa w sprawach na których człowiekowi zależy – nie było łatwo. Zaczęło się od tego, że pomimo zalogowania nie widziałem przycisku umożliwiającego podejście do quizu, a przyczyną okazał się brak podania numeru telefonu w moim profilu IC. Kolejnym schodkiem pod górę był mój router odmawiający posłuszeństwa co skończyło się jego restartem (dobrze, że mam nawyk zapisywania wyklikanych odpowiedzi co kilka minut). Na koniec całej zabawy, po wybraniu przycisku „finish quiz” wyskoczył nic nikomu nie mówiący błąd o treści:

„An error has occurred: ad684cfa-2aa0-4724-b2a7-652ffb378639”

Jeśli chodzi o pytania, to nie można zdradzać ich treści, ale powiem, że osobiście wydały mi się trudniejsze niż rok temu. Nie jest to jednak jakimś zaskoczeniem, gdyż co roku są trudniejsze …

Mimo wszystko udało się !!!

Dzisiaj sprawdziłem wyniki i okazało się, że zdobyłem 20 punktów, co dało mi 14 lokatę na liście ponad 600 uczestników.

Ranking zawodników po pierwszym quizie

Nie owijając w bawełnę czuję ulgę wiedząc, że mam już rundę I za sobą. Jednocześnie gratuluję wszystkim, którym także udało się zaliczyć ten test i tym przejść do półfinałów za pierwszym podejściem 🙂

Oficjalna strona konkursu: http://www.imaginecup.com/

Tablica z wynikami: http://www.imaginecup.com/Competition/leaderboard.aspx

Imagine Cup, IT Challenge – a miałem być tylko kibicem … :)

Miałem zamiar zachęcić was za pomocą mego bloga do wzięcia udziału w największym konkursie informatycznym na świecie – Imagine Cup. Wstrzymywałem się jednak z wpisem z uwagi na to, że do niedawna nie było umieszczonych oficjalnych zasad dla jednej z kategorii, a mianowicie IT Challenge. Jest ona jedyną częścią Imagine Cup polegającą na zweryfikowaniu umiejętności administracyjnych uczestników.

Dziś sprawdziłem ponownie witrynę konkursową i zasady są już na niej umieszczone. Rywalizacja w IT Challenge rozpoczyna się 17 października o godzinie 00:01 GMT  i zakończy się o 23:59 GMT 9 maja 2012. Podobnie jak w latach ubiegłych składa się ona z trzech rund:

Runda I polega na poprawnej odpowiedzi na pytania zadane w formie quizu. W tym roku wyznaczono sześć terminów podejścia i podobnie jak w latach ubiegłych wystarczy zaliczyć jeden z nich (co nie jest takie proste jak może się na pierwszy rzut oka wydawać)

Runda II to tzw. Case Study, polegające na zaprojektowaniu infrastruktury informatycznej „od A do Z” wg. opisu biznesowego dostarczonego przez MS na potrzeby konkursu oraz przesłaniu projektu do oceny za pomocą strony konkursowej.

Runda III jest finałem konkursu i bierze w nim udział jedynie 6 uczestników. W rundzie tej należy stworzyć infrastrukturę informatyczną spełniającą założenia podane przez MS a całość jest przeprowadzona w formie 24 godzinnego laboratorium.

Chciałem was namówić jako kibic, ale nie wyszło 🙂 Właśnie się zapisałem i będzie to mój czwarty udział w konkursie. Okazało się, że spełniam wszystkie wymogi uczestnictwa:

– mam ukończone 16 lat 🙂

– Byłem studentem w dowolnym czasie pomiędzy 1 stycznia 2011 a 31 maja 2012 (czerwcu 2011 roku się obroniłem, tak więc zgodnie z regułami jest OK)

– Nie jestem pracownikiem Microsoftu i nie mam krewnych, którzy są w tej firmie zatrudnieni

– Nie jestem mieszkańcem jednego krajów wykluczonych z konkursu

Namawiam więc was jako uczestnik:

Jeżeli macie ochotę sprawdzić swoje umiejętności informatyczne to Imagine Cup jest dla was. Różnorodność technologiczna konkursu i możliwość nabycia nowych umiejętności jest w nim po prostu oszałamiająca !!!

Oficjalna strona Imagine Cup:

http://www.imaginecup.com/

SQL Server Denali i klauzula OVER

Jednym z udoskonaleń SQL Server Denali jest rozszerzenie możliwości jaką dają nam funkcje okienkowe.  Wraz z ukazaniem się wersji CTP3 klauzula ORDER BY używana wewnątrz OVER nie jest już zarezerwowana tylko i wyłącznie dla funkcji rankingowych, lecz może być także użyta podczas agregacji.

Co nam daje ta funkcjonalność?

Klauzula ORDER BY powoduje zmianę działania funkcji agregującej w ten sposób, że podczas wyliczeń dane są szeregowane w wybranej przez programistę kolejności. Agregacja bierze pod uwagę tylko te rekordy, dla których wartość kolumny wykorzystanej w klauzuli ORDER BY jest równa wartości w aktualnym rekordzie lub jest to wartość zaszeregowana przed nim.

Weźmy jako przykład następujące zestawienie:

Dla bazy AdventureWorks2008R2 wygenerujmy raport wyświetlający w jaki sposób rosły należności z tytułu kolejnych zmówień złożonych przez wybranego klienta. Przykładowy wykaz przedstawiam poniżej.

Kolumna SalesOrderID zawiera unikalne identyfikatory kolejnych zamówień klienta, kolumna TotalDue wyświetla należność za wybrane zamówienie, a RunningTotal to suma wszystkich należności do wybranego zamówienia włącznie (np. RunningTotal w drugim wierszu to suma TotalDue dla pierwszego i drugiego zamówienia klienta).

Dzięki nowym możliwościom klauzuli OVER, zapytanie wybierające te dane będzie wyglądało następująco:

SELECT h.SalesOrderID, h.TotalDue,
       SUM(h.TotalDue) OVER(ORDER BY h.SalesOrderID) AS RunningTotal
FROM Sales.SalesOrderHeader h
WHERE h.CustomerID = 29994

Dla wcześniejszych wersji SQL Server musielibyśmy napisać znacznie więcej kodu:

SELECT h1.SalesOrderID, h1.TotalDue, SUM(h2.TotalDue) AS RunningTotal
FROM Sales.SalesOrderHeader h1
JOIN Sales.SalesOrderHeader h2
ON h1.SalesOrderID >= h2.SalesOrderID
AND h1.CustomerID = h2.CustomerID
WHERE h1.CustomerID = 29994
GROUP BY h1.SalesOrderID, h1.TotalDue

Oprócz poprawy czytelności, rozszerzenie klauzuli OVER pozwoliło na pominięcie operacji JOIN i tym samym dało zysk wydajnościowy. Porównanie zamieszczonych poniżej planów wykonania obu zapytań potwierdza, że pierwsze z nich będzie szybsze.

Podsumowując mogę stwierdzić, że zwiększenie możliwości jakie dają funkcje okienkowe w SQL Server Denali  jest nowością, z której opłaca się skorzystać, niezależnie czy bardziej zwracamy uwagę na szybkość wykonania naszych zapytań, czy na ilość literek jaką musimy użyć by te zapytania napisać :).

70-642 MCTS: Windows Server 2008 Network Infrastructure, Configuring

Nie samym SQL-em admin baz danych żyje 🙂

Wczoraj przystąpiłem do egzaminu certyfikacyjnego 70-642 MCTS: Windows Server 2008 Network Infrastructure, Configuring. Mimo tego, że podczas przygotowań do niego byłem MEGA LENIWY(co akurat nie jest powodem do dumy), to udało mi się go zdać. Jako, że dzisiaj dostałem potwierdzenie na moją skrzynkę mailową, to mogę już pobrać za pomocą MCP Site wersję elektroniczną uzyskanego certyfikatu  i przedstawić ją na moim blogu 🙂

TS: Windows Server 2008 Network Infrastructure, Configuring

TS: Windows Server 2008 Network Infrastructure, Configuring