SQL 2008 R2 bejelentési konferencia – az előadásom darabjai

Az április 21-én lenyomott előadásomból három dolog érdekelheti az átlagembert:

  • A PowerPointos dia, mert elfelejtette miről beszéltem vagy nem emlékszik az SQLKlub oldalára.
  • A PowerShell script, ami kilistázza a backupokat.
  • A PowerShell script, ami megmutatja, hogy milyen csoporton át esett be a polgár az SQL szerverbe.

Szóval a PPTX itt van: SQL_2008R2_Launch_uzemeltetoi_Erik.pptx. A PowerShell scripteket ki kell szipkáznom a demógépekből majd, ha méltóztatok felbootolni a Hyper-V-t megint.

Amiről nem tudom, hogy mennyi szó esett a Visual Studio bejelentési eseményen, az a StreamInsight, amivel lehet F1-es autót is menedzselni :). A Data-tier Application be lett mutatva ott is, itt is. De azt hiszem azt sehol nem mondta el senki – én sem a magam előadásában -, hogy az SQL Express adatbáziskorlátja felment 4 GB-ról 10 GB-ra. Nem véletlen. De ez egy külön post lesz.

SQL 2008 R2 RTM

Egyre rövidebbeket írok róla: A TechNeten még hosszú, az SQLKlubon már rövid, itt meg csak ennyi.

A rövidítésekről:
RTM: Release-To-Manufacturer. Ez az a változat, amit a hardvergyártók és megoldásszállítók kapnak, elég korán, hogy mire a termék a polcokra kerül, addigra már lehessen venni pl. gépet, amin ez fut.
SKU: Stock Keeping Unit. A raktári azonosító eredeti jelentés mellett ezt szokták használni a termékváltozat szó szinonímájaként is. Először kissé zavaró volt az ENT SKU visszafejtése, de mára már kifejezetten szeretem, és szerintem rövidebb, mint az Enterprise Edition.
BOL: Books Online. A legjobb méret-használhatóság arányú help, amit valaha készítettek termékhez. Ezt szerencsére az SQL Serverhez készítik.

Amúgy ha valaki szeretné tudni az újdonságokat egy SQL verzióban, nézze meg a What’s New kulcsszót a BOL-ban. Én is mindig úgy kezdem :)

SQL Klub klubnap – május 11., BME

Lesz SQL Klubnap, május 11-én, további részletek itt:
http://www.sqlklub.hu/Blog/tabid/65/EntryId/5/SQL-Klub-I-esemeny-majus-11-kedd.aspx

Akit érdekel, regisztráljon és jöjjön! (remélem jó lesz)

Powershell profile-ok

Készülődve a jövő szerdai SQL Server 2008 R2 bejelentésre éppen a Powershelles demómat reszelem-tesztelem, és örömmle tapasztaltam, hogy a PowerShell 2.0-hoz adott ISE, avagy GUI egy másik profile-t használ, mint a mezei parancssor, amiben ez látszik:

PS C:\Users\erik> $profile
C:\Users\erik\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

Ezzel szemben az ISE ezt mondja:

PS C:\Windows\system32> $profile
C:\Users\erik\Documents\WindowsPowerShell\Microsoft.PowerShellISE_profile.ps1

Biztos van különbség közöttük, gondoltam, majd elhatároztam, hogy csinálok egy symlinket (vagy hogy hívják azt Windowson) a sima profájlra. Aztán belenéztem az internetbe, és bing! máris megtaláltam a különbséget. Az ISE profile-ban gyakorlatilag kibővíthetjük az ISE menürendszerét, egy custom menüpontba betolhatjuk mindazt, amit szeretnénk még a GUI-ban látni, billentyűkombóval meg mindennel. It tvan pl. egy kedves kis minta: http://get-powershell.com/2008/12/29/code-snippets-in-powershell-ise/.

Tárolt eljárások definíciójában keresés

Időről időre visszatérő probléma: melyik tárolt eljárást érinti egy adott tábla módosítása, melyik SP-ben van deprecated (elavult) (NOLOCK) hint, effélék – szóval keresni kell a definíciókban. Ezt sokféleképpen megtehetjük, a legkényelmesebb a definíciók felolvasása. Régebben az INFORMATION_SCHEMA.ROUTINES ANSI standard metatáblát használtam erre, most már váltottam a meglehetősen nem intuitív nevű sys.sql_modules rendszernézetre. A különbség egyébként nem nagy – a standardban csak az első 4000 karakter látszik, a MSSQL-specifikus pedig nvarchar(max), tehát hajszálnyit több fér bele.

Ebből született a tárolt eljárásban stringet kereső tárolt eljárás. Két paramétert vár: a stringet, amire keresni akarunk és az adatbázis nevét, amiben keresni akarunk. Ha az egész szerveren szeretnénk keresni, akkor használhatjuk az undocumented sp_MSforeachdb tárolt eljárást.

CREATE PROCEDURE dbo.spFindTextInSP
@string nvarchar(1000),
@dbname sysname = ''
AS
if (isnull(@dbname,'') = '')
        set @dbname = db_name()
declare @q nvarchar(2000)
set @q = 'select quotename(object_schema_name(object_id,db_id('''+ @dbname + '''))) + ''.'' + quotename(object_name(object_id,db_id(''' + @dbname +  '''))) AS matching_objects from ' + @dbname + '.sys.sql_modules
where definition like ''%' + @string + '%'''
exec(@q)

GO

-- és két minta felhasználás
exec dbo.spFindTextInSp 'alert'
exec dbo.spFindTextInSp 'alert', 'Customer_archiv'