phpRS            

Dnešní datum: 07. 09. 2010   | Hlavní stránka | Seznam rubrik | Kniha návštěv |  
  Hlavní menu
Hlavní stránka
Seznam rubrik
Fotogalerie
Kniha návštěv
Stáhněte si
Odkazy
Ankety
TOP 15

  Reklama


  Rubriky

  Poslouchám na síti


Spusť přehrávač


Spusť přehrávač


  Informace o webu
Všehochuť aneb od každého trochu

Content © 1991-2010 Slávek Rydval

View Slávek Rydval's profile on LinkedIn

Vytvořeno pomocí phpRS a Texy!

RSS kanál

Software

* Microsoft SQL Server 2000

Vydáno dne 04. 08. 2005 (4977 přečtení)

Doba, kdy SQL Server vlastně byla Sybase a Microsoft mohl maximálně opravovat chyby je nenávratně pryč. Dneska se před touto databází třese i takový gigant jako je Oracle.

První beta verze nového vydání po verzi 7.0 byla k dispozici (alespoň ze začátku) pouze omezenému počtu vývojářů již v září 1999 (připomeňme si, že verze 7.0 byla dána do prodeje v lednu 1999) a krátce na to byl oznámen nový název, tedy MS SQL Server 2000. Důvod byl víceméně marketingový: označení 8.0 by znamenalo „pouze“ další verzi produktu z řadu BackOffice serverů, kdežto označení číslem roku vydaní mělo vyjádřit nový přístup Microsoftu k tomuto produktu – máme skvělý databázový server a není to pouze člen nějaké rodiny, ale samostatný dospělý jedinec.

Ve skutečnosti je číslo 2000 opravu pouze marketingové. Jestliže si necháte zjistit verzi (viz proměnná @@VERSION), dostanete mj. interní verzi 8.00.194.

Protože změn ve „strojovně“ SQL Serveru bylo minimálně, byla uvolněna již jen jedna beta verze (duben 2000) a tentokráte ji Microsoft ihned rozeslal velkému množství vývojářů. Finální build byl uvolněn v srpnu 2000 a nyní máte možnost seznámit se s ním. Protože recenze SQL Serveru verze 7 vyšla v SWN čísle 4/1999 a pak byl také zmíněn v přehledu databázových serverů v čísle 2/2000, budu se věnovat hlavně novinkám, které s verzí 2000 přicházejí.

Instalace

Výraznou novinkou nové verze SQL Serveru je jeho instalace, kterou můžete provádět buďto na lokální počítač nebo na vzdálený server. To ovšem není to podstatné. Pří instalaci totiž narazíte na volbu přidání nové instance SQL Serveru. Co to vlastně je?

Pokud jste dříve potřebovali ladit vaše kódy na různých verzích SQL Serveru, museli jste mít tolik počítačů, kolik jste měli verzí včetně servisních balíčků. Tomu je ale od teď konec. Na jediný počítač si totiž můžete nainstalovat libovolné množství instancí SQL Serveru, a to tak, že každá instance může mít (ale nemusí) případné opravy. Takto můžete fungovat včetně sedmé verze. Jen na okraj, slovo libovolné v tomto případě znamená tolik, kolik je schopen utáhnout váš počítač.

Důležitým okamžikem v této chvíli je zvolení názvu nové instance. Ten je totiž potřeba při připojování se k dané instanci.

Mohlo by se zdát, že pokud nainstalujete další instanci SQL Serveru, na vašem disku ubude stejné množství volného místa jako při první instalaci. Není to pravda. Věci, jako jsou Books Online, různé nástroje či příklady se nainstalují pouze jednou a ostatní instance je používají. Pouze se mi nelíbilo – a to je problém většiny produktů – že když jsem řekl nainstalovat na disk H:, tak mi stejně na disku C:, kde mám systém, ubrala instalace kolem 100 MB. Nevím jak vám, ale mě to normální (a slušné) nepřipadá a zvykat si na to nechci.

Novinky v Transact-SQL

Není žádným tajemstvím, že Microsoft plně podporuje formát XML, proto jeho podporu zabudoval přímo do SQL Serveru. K dispozici je několik možností, z nich některé přišly až po uvolnění produktu do prodeje (XML for SQL Server Web Release 1 či XML View Mapper 1.0 – jsou zdarma dostupné na webu).

Zřejmě nejpoužívanější bude výběr množiny dat do XML. K tomu slouží klauzule FOR XML příkazu SELECT. K dispozici je několik způsobů, jak data získat. Můžete si vybrat, zda jednotlivé sloupečky budou jako atributy elementu nebo jako zvláštní podelementy. Tento výsledek lze pak s výhodou použít například v IIS (Internet Information Server) a naformátovat jej pomocí kaskádových stylů.

Další novinkou v T-SQL jsou triggery (chcete-li spouště), respektive triggery definované jako INSTEAD OF. V tomto případě totiž nedojde ke standardní manipulaci s daty (INSERT, UPDATE, DELETE), ale vykoná se pouze tento trigger. To je výhodné při provádění úprav dat, které uživatel dostane například pomocí pohledu (VIEW). Pokud si vytvoříte triggery, které se budou spouštět po operaci (AFTER) lze říct, v jakém pořadí se vykonají. Co mi ovšem vadí je absence možnosti změn vkládaných či pozměňovaných dat před vlastním zápisem do tabulky (viz vložený text).

Při vytváření tabulek lze použít klauzule REFERENCES, která je rozšířená o další možnosti: ON DELETE a ON UPDATE, ovšem má to jeden háček, na který jsem narazil. Pokud chcete takto hlídat kaskádově více než jeden sloupeček v jedné tabulce, máte prostě smůlu. SQL Server vám vydá hlášení, které mi připadne neadekvátní (viz vložený text).

S novou verzí přichází také tři nové datové typy. BIGINT je osmibytový celočíselný znaménkový a rozšiřuje základní číselné typy. SQL_VARIANT je takový „paskvilní“ typ, který může obsahovat libovolný datový typ. Nejzajímavější je ovšem typ TABLE, který obsahuje tabulku a lze jej použít například v uživatelsky definovaných funkcích – ano, již i SQL Server zná pojem funkce. Zdá se to neuvěřitelné, že to byl pojem dříve zakázaný.

V databázovém světě věcí ojedinělou jsou indexy definovány nad pohledy. Díky nim můžete používat složitější pohledy, které dříve nebylo vhodné kvůli rychlosti do aplikací zavádět. Nevýhodou je, že tato možnost je až v nejdražší variantě produktu, což je docela škoda.

Indexy je možné definovat také na vypočítávaných sloupcích a lze určit zda budou sestavené jako vzestupné či sestupné. Příkazu CREATE INDEX můžete nařídit, aby k vytvoření indexu použil databázi tempdb, což má za následek zlepšení zápisu a čtení z disku a tedy i zrychlení operace. Pomocí klauzule EXPAND či NOEXPAND lze potlačit či donutit server používat indexy.

Novinky v nástrojích

Zřejmě nejvýraznější změnou, kterou si každý, kdo má zkušenosti s předchozí verzí, všimne, je přidání Object Browseru do SQL Query Analyseru (viz obrázek). K jednotlivým objektům lze získat seznam těch objektů, na kterých závisí (podobně jako například v SQL Station pro Oracle). Na pravé tlačítko nad objektem v Browseru můžete získat jednoduše jeho zdrojový kód – do schránky, nového okna či souboru, lze si vybrat.

V případě, že neustále píšete to samé (například triggery či uložené procedury), můžete využít šablon a ušetřit i několik desítek řádků kódu (jak v SQL Query Analyzeru tak v Enterprise Manageru).

Kromě toho, že můžete uložené procedury vytvářet, můžete je i ladit. K dispozici je kromě bodů pozastavení (breakpoints) také možnost nahlížet do zásobníku a na lokální či globální proměnné.

Změn doznaly taktéž Data Transformation Services. Kromě rozdělení do jednotlivých fází je užitečné, že můžete přesně říct, jak se má převod provést. K dispozici totiž máte převodní skript, takže – pokud je to potřeba – lze naprogramovat různé chování při transformaci. K napsání kódu jsou k dispozici Visual Basic Transformation Script a Java Transformation skript, můžete si tedy vybrat. Pokud vám vadí, že editace není uživatelsky nejpříjemnější (malé okno, nezvýrazněna syntaxe, …), můžete zdrojový text napsat v jiném nástroji a pak jej pouze načíst.

Převod lze uskutečnit opravdu z velkého množství zdrojů: od textových souborů přes Paradox či dBase kolem Excelu a Accessu až k SQL Serveru nebo Oracle (přes OLE DB providera). Cílem může být samozřejmě jedna z položek právě uvedených v neúplném výčtu zdrojů.

Potřebujete-li převést data ze SQL Serveru verze 7 na verzi 2000, je nápomocen průvodce Copy Database Wizard, který navíc dokáže převádět data z jedné instance verze 2000 na jinou. Tuto akci lze provést ihned nebo ji naplánovat buďto na určitý čas nebo tak, aby se prováděla v definovaných intervalech. Toho se nechá využívat například při vývoji aplikací, kdy se budou data z ostrého systému třeba každou půlnoc převádět na testovací databáze.

Architektura

Verze Enterprise dokáže díky technologii Advanced Windows Extension (AWE) pracovat až se 64 GB paměti (ovšem pouze za pomocí Windows 2000 Data Center). Jádro samozřejmě používá 32-bitovou adresaci, ale díky mapování lze dosáhnout uvedené hranice. Ono přechod na 64-bitovou technologii nemá být dle vyjádření Microsoftu žádný problém, protože interní struktury SQL Serveru jsou na to připravené a čeká se vlastně pouze na nový 64-bitový procesor firmy Intel.

Pro neanglicky mluvící uživatele je důležité, aby server mohl nejen ukládat, ale i řadit textová data s vlastní znakovou sadou. SQL Server samozřejmě podporuje kolace (collations – češtináři prominou, ale tohle je nepřeložitelné) již v dřívějších verzí a do stávající přidává některé nové. Důležitou změnou je ale to, že již můžete specifikovat kolaci i na jednotlivé sloupečky, což lze využít například v aplikacích, které mají více jazykových mutací.

Ostatní

Ve výpisu novinek bychom mohli pokračovat na dalších stránkách, ale nemá to cenu. Ty, které mi připadly nejvýraznější, jsem uvedl, zde si ve stručnosti povězme o některých dalších.

Log Shipping umožňuje převést transakční protokol z jedné databáze na druhou (i na jiný server) a tam pak pokračovat dál.

Změny doznal i SQL Profiler. jednak obsahuje nové události pro některé činnosti a jednak byl rozšířen o možnost zajišťování auditu aktivit SQL Serveru (je možné použití úrovně zabezpečení C2).

Vylepšením, které není na první pohled vidět, je velké množství (nových) průvodců pro různé akce, které bylo dříve nutné dělat ručně. Nyní stačí ke spokojenosti ve většině případů neustále mačkat tlačítko Next a jen v minimálních případech provést pár akcí navíc.

Nápověda SQL Serveru byla integrována s Books Online, což znamená, že se vyvolá nápověda závislá na situaci v prostředí.

Tak si to zrekapitulujeme

Je jasné, že Microsoft touto verzí velmi důrazně „dejchá“ na záda Oraclu, ba dokonce v mnoha testech Oracle zamlžuje zpětné zrcátko SQL Serveru (ale zatím jen boční). Že se jedná o velmi kvalitní databázový stroj nejvyšší třídy se můžete přesvědčit sami díky trial verzím, které Microsoft poskytuje zdarma. Jsem velmi zvědav, jak se bude vývoj ubírat nadále, zda-li se někdo (a kdo) dostane do výrazného vedení.

Nemá zřejmě cenu dělat velké závěry ze dvou důvodů. Pořádné testování by muselo být provedeno s gigabytovými daty a tisíci přístupy za minutu, na což bohužel redakce nemá prostředky. Druhý důvod je jistě příjemnější – s testováním serveru jsme neskončili. V některém z dalších letošních čísel popíšeme praktické zkušenosti při převodu reálné aplikace z malé databáze právě na SQL Server.

Ačkoliv mám několik poznámek k Transact-SQL, jde o věci, na které je potřeba si zvyknout. Jako kompenzaci dostanete velmi mocný nástroj, se kterým můžete se svými daty dělat opravdu velká kouzla (zvláště díky uživatelským funkcím). Jestliže používáte Oracle, zřejmě nemá cenu přecházet na tuto databázi, ovšem používáte-li něco jiného či začínáte nové projekty (a nejsou to zrovna telefonní čísla vašich milenek/milenců), bude SQL Server 2000 to správnou volbou pro vaše data nejen díky kvalitě, ale jistě také díky ceně.

Plusy, mínusy, závěr

Plusy

  • Více instancí na jednom počítači
  • Spousta nových průvodců
  • Ladění uložených procedur
  • Object Browser v Query Analyzeru
  • Uživatelsky přítulné

Mínusy

  • Některé nedotaženosti T-SQL
  • Indexované pohledy až ve verzi Enterprise

Závěr

  • Velmi kvalitní databázový stroj, který dokáže porazit v mnoha testech Oracle. Lze nasadit na střední, ale i velké projekty.

Do rámečku

Problém číslo 1: změna dat v triggerech

Problém, který leckdy řešíme, je změna dat ještě před vlastním uložením do tabulky. Například při vytvoření či změně záznamu chceme znát, kdo a kdy jej vytvořil resp. změnil. V případě prvním si můžeme sice pomocí DEFAULT klauzule při definici sloupce, ale při změně dat příkazem UPDATE nám to už nepomůže. Navíc, pokud si uživatel řekne, že místo přednastavené hodnoty chce mít něco jiného, máme smůlu. Na některých databázových serverech se to řeší pomocí odkazů na nová a stará data použitím klíčových slov NEW a OLD. Příkaz pak může vypadat například takto:

NEW.LASTEDITEDBY = SUSER_SNAME()

Bohužel, tohle SQL Server nezná. Má sice virtuální tabulky inserted a deleted, ale ty mají jednu velkou nectnost: jsou pouze ke čtení.

Jedno jednoduché řešení však existuje, ovšem za tu cenu, že zakážeme rekursivní volání triggerů. Pak, například při UPDATE tabulky použijeme tento příkaz ještě jednou v triggeru, tentokráte však, díky zakázanému rekurentnímu volání se vše provede tak, jak potřebujeme:

SP_CONFIGURE 'NESTED TRIGGERS', 0
RECONFIGURE

GO

CREATE TRIGGER AU_MYTABLE
ON MYTABLE
AFTER UPDATE
AS
  UPDATE MYTABLE
  SET LASTEDITEDAT = GETDATE(),
      LASTEDITEDBY = SUSER_SNAME()
  WHERE ID IN (SELECT ID FROM INSERTED)
GO

Problém číslo 2: kaskádové změny dat

Představme si situaci, kdy máme tabulku OSOBA a k ní tabulku KRADEZ, kde bude ID okradené osoby a ID osoby, která kradla. Nyní potřebujeme, aby v případě změny primárního klíče v tabulce OSOBA došlo logicky, bez velkého programování i ke změně v tabulce KRADEZ. Pomocí nově přidané vlastnosti ON UPDATE můžeme upravit tabulku osoba takto:

ALTER TABLE KRADEZ
  ADD FOREIGN KEY (IDOKRADENA)
  REFERENCES OSOBA (IDOSOBA)
  ON UPDATE CASCADE
  ON DELETE NO ACTION
GO
ALTER TABLE KRADEZ
  ADD FOREIGN KEY (IDOKRADLA)
  REFERENCES OSOBA (IDOSOBA)
  ON UPDATE CASCADE
  ON DELETE NO ACTION
GO

První příkaz proběhne podle očekávání, druhý však – zcela nelogicky – vyvolá chybu, která říká, že uvedený cizí klíč může vyvolat cyklickou nebo násobnou kaskádovou cestu. Co se týče násobné kaskádové cesty: no a co? To je přesně to, co potřebuji (ovšem pokud daná relace je pouze neidentifikační, pak tam žádnou násobnost nevidím). A cyklus? Ten mě napadá pouze ve spojení s triggerama, ale to je pak už zřejmě chyba toho, kdo takhle triggery naprogramuje. Zde o jednoduchém řešení nevím.

Obrázky

Přejete si novou instanci nebo jen něco upravit?

                                                
Novou instanci je potřeba pojmenovat

 
Meta Data Browser je nový nástroj pro procházení metadat.

 
Query Analyzer má velmi příjemné rozšíření - Object Browser,

 
Převod lze provádět podle vlastních pravidel - na výběr je J

 
Z jedné databáze do druhé? Ale prosím…

 

Tento článek byl napsán pro časopis Softwarové noviny 6/2001.

Upozornění: tento text neprošel redakční úpravou, takže je tak, jak byl napsán včetně případných chyb. Žádná část tohoto článku nesmí být použita bez předchozího souhlasu autora.

Seznam mých dalších článků je v tomto přehledu.




[Akt. známka: 0 / Počet hlasů: 0] 1 2 3 4 5

Celý článek | Autor: Slávek Rydval | Počet komentářů: 0 | Přidat komentář | Informační e-mailVytisknout článek

  Čtenář
Jméno:
Heslo:


Registrace | Info
Zapomenuté heslo

  Vyhledávání

Hledej
na Nawebce!


Rozšířené vyhledávání

  Kalendář
<<  Září  >>
PoÚtStČtSoNe
  1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30    

  Reklama


rkEdit Oracle Profiler
rkEdit Oracle Profiler