Wykorzystanie XACT_STATE do sprawdzenia stanu transakcji

2012-11-17

Poniższy przykład pochodzi z http://msdn.microsoft.com/en-us/library/ms189797.aspx.  Prezentuje on, jak można dobrze wykonywać transakcje i reagować na potencjalnie pojawiające się błędy.

1. Po pierwsze używaj opcji SET XACT_ABORT ON. Powoduje ona „awansowanie błędów” powodujących przerwanie pojedynczego STATEMENT na błędy powodujące przerwanie batcha, lub przejście do bloku CATCH w przypadku obsługi błędów poprzez TRY/CATCH

2 Używaj TRY/CATCH do wychwycenia błędów. Jeżeli twoja transakcja składa się z wielu instrukcji, to transakcja sama w sobie nie wycofa wszystkiego po napotkaniu pierwszego lepszego błędu (chyba że użyłeś XACT_ABORT). To do Ciebie należy obsługa tego błędu

3. Używaj wartości funkcji XACT_STATE() do oceny tego co można zrobić dalej:

  • 1 masz otwartą transakcję i nadaje się ona do commitowania
  • 0  nie ma otwartej transakcji. Zarówno commit jak i rollback spowodowały by błędy
  • -1 masz otwartą transakcję, ale nie da się jej skommitować. Np. próbowałeś wstawić duplikujący się rekord na kolumnie z CONSTRAINT UNIQUE. Zrób co chcesz, a potem wywołaj rollback do tej transakcji.

Wszystko ładnie widać na poniższym przykładzie: Czytaj dalej »

By Rafał Kraik in SQL

Mutator Write dla kolumny nvarchar(max)

2012-11-17

Dopiero dzisiaj zauważyłem, że w SQL mamy coś takiego! Jest to metoda pozwalająca na dokonywanie zapisu do koluny nvarchar(max) w taki sposób, aby zmienić część tekstu na inny. Poniżej prezentuję przykład wzięty z http://decipherinfosys.wordpress.com/2007/07/24/update-textntext-or-varcharmax-data-type-columns-in-sql-server/

Popatrz na ten przykład:

 Tworzysz tabelkę:
CREATE TABLE Test
(ID INT IDENTITY,
TXT NVARCHAR(MAX))

 Wstaw do niej rekord:

INSERT Test VALUES(’It is new’)

i obejrzyj go:

SELECT TXT FROM Test

A teraz zaktualizuj go z wykorzystaniem mutatora WRITE

UPDATE Test SET TXT.WRITE(’was’,3,2)

Zobacz zmiany:

SELECT TXT FROM Test

Czytaj dalej »

By Rafał Kraik in SQL

Korzystanie z aliasów SQL

2012-11-15

Alias do serwera SQL musi być konfigurowany na systemie klienckim. Mało wygodne będzie jednak odiwedzanie komputeró po kolei i wyklikiwanie w nim definicji aliasu.

Alias wystarczy zdefiniować na jednym komputerze, a następnie wyeksportować z rejestru i importować na pozostałych komputerach.

Odpowiednia gałąź rejestru z aliasami serwera SQL to:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\ConnectTo

Źródło:

http://blogs.msdn.com/b/sql_protocols/archive/2007/01/07/connection-alias.aspx

By Rafał Kraik in SQL

PHP: Pobieranie adresu IP zdalnego klienta

2012-10-18

Rozwiązując pewien problem potrzebowałem uzyskać w skrypcie php adres zdalnego klienta. Właściwy sposób to

<?php echo $_SERVER[’REMOTE_ADDR’]; ?>

Przy okazji natknąłem się na bardzo przydatny kawałek kodu:

<center><b>Server variables</b></center>
< hr>
GATEWAY_INTERFACE = <?php echo $_SERVER[’GATEWAY_INTERFACE’]; ?> <br>
SERVER_ADDR       = <?php echo $_SERVER[’SERVER_ADDR’]; ?>       <br>
SERVER_NAME       = <?php echo $_SERVER[’SERVER_NAME’]; ?>  <br> Czytaj dalej »

By Rafał Kraik in Linuxy

Apache 2: w Error_log pojawia się komunikat sh: host: command not found

2012-10-15

Apache 2 wykonuje reverse DNS lookup. Potrzebuje do tego komendy host, która prawdopodobnie nie znajduje się w systemie. Sprawdź czy ta komenda występuje w Twoim systemie wydając polecenie host. Jeśli nie to zainstaluj pakiet zawierający tę komendę:

yum install bind-utils

 

By Rafał Kraik in Błedy, Linuxy

Brak internetu po połączeniu się z VPN (Użycie lokalnego gateway)

2012-10-15

Objaw: po uzyskaniu połączenia poprzez VPN stacja robocza straciła kontakt z Internetem.

Przyczyna: Domyślnie po uzyskaniu połączenia VPN stacja robocza otrzymuje nowy adres Gateway, który staje się domyślnym gateway dla tego komputera. Jeżeli gateway był niepoprawnie skonfigurowany, to rzeczywiście jest możliwa utrata połączenia z Internetem, mimo działającego nadal połączenia z VPN

Naprawa: Poprawić ustawienia bramki uzyskiwane przez stacje roboczą po połączeniu VPN lub (i to było w moim przypadku lepsze) spowodowanie, aby stacja robocza nie korzystała z gatewaya zdalengo (bo wtedy cały ruch internetowy będzie przekazaywany przez łącze VPN) tylko poprzez gateway lokalny. Poniżej instrukcja krok po kroku:

1.  W Centrum sieci i udostępniania przejdź do „Zmień ustawienia karty sieciowej”

2. Wybierz właściwości połączenia VPN Czytaj dalej »

250-ty wpis na tym blogu. Dowcipy o SQL

2012-10-11

Wyjaśnienia dla niewtajemniczonych:

DBA = Database Administrator

COMMIT – polecenie zatwierdzające zapisanie danych/transakcji na dysku. Brak tego polecenia powoduje często odwołanie transakcji

NULL – wartość nieokreślona w SQL

JOIN/SELECT/DROP – pewne polecenia SQL

 

A teraz przejdźmy do rzeczy. Jeśli dowcipy czyta ktoś spoza branży – uśmieszkami oznaczyłem miejsca, gdzie należy się śmiać:

 

Q1: Co DBA powiedział do programisty?

A: Nieważne, programista i tak nie słuchał.

Q2: A co programista odpowiedział DBA?

A: Nieważne. I tak odpowiedź brzmiała „NIE”.

🙂

W Nowym Yorku odbywa się konferencja „Wpływ środowiska bazodanowego na społeczeństwo na przełomie XX i XXI wieku. Na konferencję zaproszono różne bazy danych

Najpierw przyjechała limuzyna z Oraclem. Wysiada Oracle i jeszcze 4 osoby.

-Drogi Oracle, kim są Twoi towarzysze?

-Mam tu 4 DBA. Jeden mnie zainstaluje, drugi zaprojektuje tabele, trzeci będzie mną administrował, a ten czwarty wytłumaczy dlaczego jestem taki drogi.

Drugą limuzyną przyjechał DB2 z 40 osobami w towarzystwie:

-Drogi DB2, kim oni są?

-Tych dwóch to DBA, ci dwaj to specjaliści od sprzętu, a tych 36 to konsultanci.

W trzeciej limuzynie przyjechał SQL Server. Przyjechał sam.

-Dlaczego nie przywiozłeś nikogo ze sobą?

-Ach, bo ja jestem od Microsoft. Właściwie każdy mnie łatwo zainstaluje, wszędzie pełno kreatorów, administracja mimi bazami to pestka! A jeśli się wysypię no cóż – radź sobie sam, pogoogluj, albo poszukaj na forum…

20 minut po rozpoczęciu konferencji z piskiem opon, brudnym samochodem podjeżdża MySQL. Koszula niewyprasowana, włosy nieuczesane, MySQL pędzi na konferencję.

-MySQL, dlaczego się spóźniłeś?

-Ach, coś mi się pomieszało, sądziłem że dzisiaj jest 31 luty… Czytaj dalej »

By Rafał Kraik in Humor, SQL