SQL CLR – przykład funkcji, procedur, typów…

2018-10-07

Poniżej zamieszczam przykładową klasę zaimplementowaną w C# Visual Studio 2017 zawierającą:

  • funkcję Split zamieniającą napis rozdzielany separatorami na tabelę wartości
  • funkcję ListFiles zwracającą w postaci tabeli pliki znajdujące się w określonym katalogu
  • funkcję ListDirs zwracającą w postaci tabeli katalogi znajdujące się w określonym folderze
  • funkcję skalarną GetDBCount zwracającą informację o ilości baz znajdujących się na serwerze
  • funkcję agregującą WeightedAvg wyznaczającą średnią ważoną
  • procedurę GetWindowsLocale pobierającą informację o ustawieniach regionalnych z systemu Windows i zwracającą te informacje przez tekst w SQL
  • trigger DropTableTrigger uruchamiany podczas kasowania tabel i zwracający kilka informacji o tej operacji w postaci tekstu
  • typ Point pozwalający na zdefiniowanie punktu, jego parsowanie, wyświetlanie oraz wyznaczanie odległości między punktami na płaszczyźnie

Czytaj dalej »

By Rafał Kraik in SQL

SQL CLR – podpisywanie kodu

2018-10-07

Tutorial krok po kroku, jak podpisać i zaiportować moduł CLR

W tym artykule pokażę jak od A do Z zaimplementować w .NET dwie metody służące do listowania plików i katalogów i zaimportować te funkcje do SQL 2017 z uwzględnieniem aktualnych best practice (z opcją ‚clr strict security’). Czym jest ta opcja i jakie ma działanie zobacz w https://www.mobilo24.eu/sql-clr-w-wersji-2017opcja-clr-strict-security/

Utwórz klasę w Visual Studio (uwaga – koniecznie wybierz  Class Library .NET) – inaczej nie będzie do dyspozycji wszystkich wymaganych referencji (https://stackoverflow.com/questions/48130887/visual-studio-not-recogonizing-microsoft-sqlserver-namespace):

Napisz swój kod, co może wyglądać o tak: Czytaj dalej »

By Rafał Kraik in SQL

SQL: CLR w wersji 2017+opcja clr strict security

2018-10-07

SQL 2017 wprowadził pewną zmianę w zakresie CLR.

Otóż od tej pory bardzo wiele zależy od opcji ‚clr strict security’ (konfigurowana przez sp_configure).

Jeżeli jej wartość to „0” (NIEZALECANE), to wszystko działa po staremu, tzn.:

  • każdy assembly posiada swój permission set, który może być równy:
    • SAFE – nie wychodzimy poza „proces” – jakieś dane dostaliśmy na wejściu i je przetwarzamy
    • EXTERNAL ACCESS – możliwe jest korzystanie z zasobów zewnętrznych, jak np. sieć lub system plików
    • UNSAFE – można wywołać kod niezarządzany
  • żeby zaimportować moduł SAFE właściwie nie trzeba wykonywać żadnej specjalnej konfiguracji,
  • ale dla EXTERNAL ACCESS lub UNSAFE należy:
    • podpisywać assembly certyfikatem lub kluczem asymetrycznym (ZALECANE)
    • lub ustawiać parametr TRUSTWORTHY dla bazy na ON a właścicielem bazy powinien być login z uprawnieniem UNSAFE ASSEMBLY (NIEZALECANE)

Jeżeli wartość parametru to 1 (ZALECANE), to permission set nadal należy określać, ale… nie służy on już do niczego. Każdy assembly będzie traktowany i tak  jako UNSAFE, a do uruchomienia kodu musisz podpisać kod (ZALECANE) lub zmienić  TRUSTWORTHY na ON (NIEZALECANE).

Ponieważ TRUSTWORTHY ustawione na on może naruszać bezpieczeństwo systemu, oczywiście zaleca się stosowanie podpisywania kodu.

https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/clr-strict-security?view=sql-server-2017

 

By Rafał Kraik in SQL

SQL CLR: Funkcja z context connection=true kończy się błędem

2018-09-30

Funkcja została zdefiniowana w dość prosty sposób:

 [SqlFunction(DataAccess = DataAccessKind.Read,
 SystemDataAccess = SystemDataAccessKind.Read)]
 public static int GetDBCount()
 {
 using (SqlConnection conn
 = new SqlConnection("context connection=true"))
 {
 conn.Open();
 SqlCommand cmd = new SqlCommand(
 "SELECT COUNT(*) AS 'NumberOfDatabases' FROM sys.databases", conn);
 return (int)cmd.ExecuteScalar();
 }
 }

Niestety jej wykonanie kończyło się błędem:

This statement has attempted to access data whose access is restricted by the assembly. Czytaj dalej »

By Rafał Kraik in SQL

SSAS: Powershell: Raport o wielkości baz danych

2018-09-12

W świecie SQL do raportu dotyczącego wielkości baz danych, zupełnie naturalne jest wykorzystanie poleceń języka TSQL.

W świecie SSAS odpowiednikiem tego języka jest XMLA. Czy to nie dziwne, że polecenia/zapytania buduje się w XML. No cóż – tak to ktoś wymyślił i nie zmienimy tego. Na pewno nie da się do SSAS wysłać zapytania SQL.

Co w takim razie zrobić kiedy trzeba zaraportować wielkość baz danych w SSAS? Z pomocą przyjdzie moduł, za pomocą którego można w bardzo prosty sposób (jeśli choć trochę się zna powershella) wysłać zapytanie do SSAS i skonsumować wynik w postaci obiektów o intuicyjnych właściwościach. Oto funkcja, która pobiera informacje o bazach danych SSAS i raportuje ich rozmiar i status:

function Get-SSASDBSize
{
    param($ServerName="localhost")
    $loadInfo = [Reflection.Assembly]::LoadWithPartialName("Microsoft.AnalysisServices")

    $server = New-Object Microsoft.AnalysisServices.Server
    $server.connect($ServerName)
    if ($server.name -eq $null) {
     Write-Output ("Server '{0}' not found" -f $ServerName)
     return
    }

    foreach ($d in $server.Databases )
    {
     Write-Output ( "{0}; {1}; {2};  {3}MB" -f $ServerName, $d.Name, $d.State, ($d.EstimatedSize/1024/1024).ToString("#,##0") )
    } 
}

Prawda, że krótkie? Po kolei: Czytaj dalej »

By Rafał Kraik in SSAS

SQL: Testowanie dysku pod SQL: diskspd (Disk speed)

2018-09-06

Czasami instalujemy SQL na tym co mamy. Pojawił się serwer i ktoś oczekuje, że zainstalujesz na nim silnik bazy danych. Istalujesz i już. Czasami jednak i na szczęście zdarza się to coraz częściej klient jest zainteresowany nie tylko zainstalowaniem serwera ale i jego wydajnością. Kluczowym parametrem determinującym pracę serwera jest prędkość dysków. Chyba dla każdego dysku da się tak zbudować test, w którym ten dysk wypada najlepiej i… to jest pewnie to, co robią producenci. Nam, administratorom, zależy jednak raczej na empirycznym i dość obiektywnym sptawdzeniu wydajności systemu dyskowego.

Jednym z programów, który może dla nas taką wstępną analizę przeprowadzić jest Disk Speed – https://gallery.technet.microsoft.com/DiskSpd-A-Robust-Storage-6ef84e62

Programu nie trzeba instalować – to wielka zaleta, bo instalacja programu na systemie produkcyjnym to czynność, którą ty – administrator bazy – być może musiałbyś uzgodnić z administratorem systemu operacyjnego. Program dostępny po prostu w postaci pliku exe jest wiec w tej sytuacji wygodniejszy.

Zaraz dokładniej omówię parametry, ale zrobimy to na przykładzie konkretnego testu:

.\diskspd.exe -b64K -d30 -t8 -o8 -h -r -w20 -L -c2G test_002.dat> diskspeed_report.txt

-b64K – oznacza rozmiar bloków w jakich są wykonywane operacje. Ponieaż zalecany rozmiar dysku dla SQL to 64 KB (rozmiar extentu = 8 * 8 KB) to wybór tej wartości przy testowaniu dysku pod SQL jest trafny Czytaj dalej »

By Rafał Kraik in SQL

Kurs data science: „Analiza danych w Python i PANDAS” za free!

2018-08-28

Od dzisiaj na platformie Udemy dostępny jest kurs „Analiza danych w Python i PANDAS”. Z tej okazji przez krótki czas kurs będzie dostępny za darmo! To taki give-back dla społeczności, bez której samodzielne rozwiązywanie wielu problemów byłoby koszmarne.

Jeśli zdążyłeś/aś to poniższy link pozwoli na darmowe zapisanie się na szkolenie. Jeśli kurs został już sklasyfikowany jako płatny, to z tym linkiem możesz go kupić w najniższej możliwej cenie.

Zapisz się na kurs Analiza danych w Python i PANDAS!

Kurs Analiza danych w Python i PANDAS

A co w samym  kursie?

  • Przygotowanie środowiska do analizy danych
  • Wprowadzenie do modułu PANDAS
  • Obiekt Data Series
  • Obiekt Dara Frame
  • Modyfikacja danych
  • Multiindex i tabele przestawne
  • Grupowanie danych
  • Łączenie danych z wielu obiektów data frame
  • Wykresy
  • Export i import danych

W sumie ponad 13 godzin materiału wideo, a do każdej lekcji quiz i zadania do samodzielnego rozwiązania (z propozycją rozwiązań)

Zapraszam do świata Data Science!