Upload
randi
View
34
Download
3
Embed Size (px)
DESCRIPTION
Az SQL Server 2005 relációs motorjának újdonságai. Kószó Károly rendszermérnök Microsoft Magyarország. TechNet események 2005 tavaszán. 2005. március 23. A Windows Server idei újdonságai. 2005. április 6. - PowerPoint PPT Presentation
Citation preview
Az SQL Server 2005 Az SQL Server 2005 relációs motorjának újdonságairelációs motorjának újdonságai
Kószó KárolyKószó Károlyrendszermérnökrendszermérnök
Microsoft MagyarországMicrosoft Magyarország
TechNet események 2005 tavaszánTechNet események 2005 tavaszán
2005. április 6.2005. április 6. Átállás a legfrissebb technológiákra:Átállás a legfrissebb technológiákra: Windows Server 2003, XP, Office 2003 Windows Server 2003, XP, Office 2003
2005. április 6.2005. április 6. Átállás a legfrissebb technológiákra:Átállás a legfrissebb technológiákra: Windows Server 2003, XP, Office 2003 Windows Server 2003, XP, Office 2003
2005. április 20.2005. április 20. Az SQL Server 2005 relációs motorjánakAz SQL Server 2005 relációs motorjának újdonságai újdonságai
2005. április 20.2005. április 20. Az SQL Server 2005 relációs motorjánakAz SQL Server 2005 relációs motorjának újdonságai újdonságai
2005. május 4.2005. május 4. Az SQL Server 2005 üzleti intelligencia Az SQL Server 2005 üzleti intelligencia szolgáltatásai szolgáltatásai
2005. május 4.2005. május 4. Az SQL Server 2005 üzleti intelligencia Az SQL Server 2005 üzleti intelligencia szolgáltatásai szolgáltatásai
2005. május 18.2005. május 18.
Üzemeltetői konferenciaÜzemeltetői konferencia2005. május 18.2005. május 18.
Üzemeltetői konferenciaÜzemeltetői konferencia
2005. március 23.2005. március 23. A Windows Server idei újdonságaiA Windows Server idei újdonságai2005. március 23.2005. március 23. A Windows Server idei újdonságaiA Windows Server idei újdonságai
NapirendNapirend Az Az SQL Server SQL Server adatplatformadatplatform
Az Az SQL Server 2005 SQL Server 2005 áttekintéseáttekintése
Nagyvállalati adatkezelésNagyvállalati adatkezelés
– BiztonságBiztonság
– Rendelkezésre állásRendelkezésre állás
– SkálázhatóságSkálázhatóság
ProgramozhatóságProgramozhatóság
– XML, CLR, T-SQLXML, CLR, T-SQL
(Üzleti intelligencia)(Üzleti intelligencia)
SQL ServerSQL ServerÁtfogó,Átfogó, integráltintegrált adatplatformadatplatform
Integration ServicesIntegration Services
Reporting ServicesReporting Services
Analysis ServicesAnalysis Services (OLAP, DM) (OLAP, DM)
Notification ServicesNotification Services
Replication ServicesReplication ServicesRelációsRelációs adatbázisadatbázis
Az Az SQL Server SQL Server generációigenerációi
SQL Server 7.0
SQL Server 2005
SQL Server 2000
• A legalacsonyabb TCO• Automatikus hangolás
• Megbízhatóság, biztonság• Integrált üzleti intelligencia
• Rendelkezésre állás fókusz
• Biztonság • Hatékony fejlesztés• Natív XML• Nagyvállalati ETL és
adatbányászat
• Teljesítmény, skálázhatóság fókusz
• XML támogatás• Továbbfejlesztett
OLAP kiszolgáló• Adatbányászat• Notification Services• Reporting Services
• Új relációs és tároló motor
• Kiterjedt automatikus erőforrás kezelés
• OLAP• ETL eszköz (DTS)
Állandó célok
SQL Server 6.0/6.5
• Windows integráció
• DTC (elosztott tranzakciók)
• Beépített tranzakcionális replikáció
1. A kezdetek 2. A modern SQL Server 3. A közeli jövő
Magas rendelkezésre állás Magas rendelkezésre állás BiztonságiBiztonsági ésés teljesítmény jellemzőkteljesítmény jellemzők MenedzselhetőségMenedzselhetőség
Visual Studio Visual Studio ésés .NET .NET CLR integráció CLR integráció NatívNatív XML XML technológiatechnológia az adatbázisbanaz adatbázisban Web ServiceWeb Service felületek (natív SOAP) felületek (natív SOAP)
Valósidejű döntéstámogatásValósidejű döntéstámogatás: : jelentéskészítésjelentéskészítés, , OLAP, adatbányászatOLAP, adatbányászat
Intelligens kliensek;Intelligens kliensek; SharePoint SharePoint megoldásokmegoldások Átfogó (és lényegesen gyorsabb)Átfogó (és lényegesen gyorsabb) ETL ETL
szolgáltatásszolgáltatás
Az Az SQL Server 2005SQL Server 2005 fejlesztés fő területei fejlesztés fő területei
NagyvállalatiNagyvállalatiadatkezelésadatkezelés
ProgramozhatóságProgramozhatóság
ÜzletiÜzletiintelligenciaintelligencia
NagyvállalatiNagyvállalati adatkezelésadatkezelés
ElvárásokElvárások BiztonságBiztonság Rendelkezésre állásRendelkezésre állás SkálázhatóságSkálázhatóság MenedzselhetőségMenedzselhetőség
SQL Server 2005SQL Server 2005 JogosultságkezelésJogosultságkezelés Adatbázis tükrözésAdatbázis tükrözés Gyors helyreállításGyors helyreállítás Adatbázis pillanatfelvételAdatbázis pillanatfelvétel Online index műveletekOnline index műveletek Pillanatfelvétel izolációPillanatfelvétel izoláció PartícionálásPartícionálás
SQL Server 2005 SQL Server 2005 biztonsági fejlesztésekbiztonsági fejlesztések Továbbfejlesztett biztonsági jellemzőkTovábbfejlesztett biztonsági jellemzők
Adattitkosítás, titkosítási kulcs kezelésAdattitkosítás, titkosítási kulcs kezelés AuditálásAuditálás, , felhasználó azonosításfelhasználó azonosítás és hozzáférési jogosultság és hozzáférési jogosultság
kezeléskezelés A felület minimalizálásaA felület minimalizálása
A legtöbb szolgáltatás telepítése opcionális – explicit választást A legtöbb szolgáltatás telepítése opcionális – explicit választást igényeligényel
Telepítés, javítócsomagokTelepítés, javítócsomagok Microsoft Update ServicesMicrosoft Update Services integráció integráció
Common CriteriaCommon Criteria Tervezett:Tervezett: EAL4+ EAL4+ (Evaluation Assurance Level 4, vagy erősebb) (Evaluation Assurance Level 4, vagy erősebb)
BiztonságiBiztonsági eszközökeszközök MBSA MBSA ((Microsoft Baseline Security AnalyzerMicrosoft Baseline Security Analyzer)) SQL Server SQL Server Best Practices AnalyzerBest Practices Analyzer
Redukált (támadási) felületRedukált (támadási) felület
demó
Surface Area ConfigurationSurface Area Configuration
Jelszó házirendJelszó házirend A helyi NT jelszó házirend alapjánA helyi NT jelszó házirend alapján
Jelszó erősség, lejáratJelszó erősség, lejárat Fiók kizárásFiók kizárás Alapértelmezett működésAlapértelmezett működés
MegvalósításMegvalósítás Új jelszó házirend ellenőrzőÚj jelszó házirend ellenőrző API API aa Windows 2003Windows 2003
ServerServer-től kezdve-től kezdve AzonosításkorAzonosításkor, , jelszó megadáskor hívjákjelszó megadáskor hívják
Adminisztrátori opciók a login-ok kapcsánAdminisztrátori opciók a login-ok kapcsán Házirend ellenőrzések, lejárat ki/be kapcsolásaHázirend ellenőrzések, lejárat ki/be kapcsolása Jelszócsere előírása az első bejelentkezéskorJelszócsere előírása az első bejelentkezéskor Login-ok gyors letiltásaLogin-ok gyors letiltása
A felhasználók és a sémák A felhasználók és a sémák szétválasztásaszétválasztása A principálisok és a sémák szétválasztásaA principálisok és a sémák szétválasztása
Principális Principális – Az egyedek, akikkel szemben az objektumokat védjükAz egyedek, akikkel szemben az objektumokat védjük– sys.database_principals sys.database_principals nézetnézet
SémaSéma – Objektum konténerObjektum konténer; ; a 4 részes név 3. darabjaa 4 részes név 3. darabja– sys.schemas sys.schemas nézetnézet
AA default default sémaséma A felhasználók és a szerepkörök tulajdonságaA felhasználók és a szerepkörök tulajdonsága A névfeloldáskor használja aA névfeloldáskor használja a kereső algoritmuskereső algoritmus sys.database_principalssys.database_principals
ÚjÚj DDL DDL a felhasználókra és a sémákraa felhasználókra és a sémákra CREATE/ALTER/DROP CREATE/ALTER/DROP - - USERUSER//ROLEROLE//SCHEMASCHEMA
A felhasználó megszüntetése nem igényli a séma A felhasználó megszüntetése nem igényli a séma átnevezésétátnevezését
Default SchemaDefault Schema Névfeloldáshoz, ha nincs megadva a Névfeloldáshoz, ha nincs megadva a
sémanévsémanév Az SQL2000-ben a „dbo” az alapértelmezett Az SQL2000-ben a „dbo” az alapértelmezett
„séma”„séma” A dbo séma bővítése potenciális biztonsági A dbo séma bővítése potenciális biztonsági
résrés– A tulajdonosi lánc helytelen használata eseténA tulajdonosi lánc helytelen használata esetén
SQL2005-ben csak akkor a „dbo” az SQL2005-ben csak akkor a „dbo” az alapértelmezett séma, ha az adatbázis alapértelmezett séma, ha az adatbázis felhasználónál nincs default schema megadvafelhasználónál nincs default schema megadva– create/alter user … create/alter user …
WITH DEFAULT_SCHEMA = WITH DEFAULT_SCHEMA = sémanévsémanév
Sémák és felhasználókSémák és felhasználók
Az adatbázis több sémát Az adatbázis több sémát tartalmazhattartalmazhat
Minden sémának van Minden sémának van tulajdonosatulajdonosa – user – user vagyvagy rolerole
Minden felhasználónak Minden felhasználónak van alapértelmezett van alapértelmezett sémája, aminek nem sémája, aminek nem feltétlenül ő a tulajdonosafeltétlenül ő a tulajdonosa
Az adatbázis objektumok Az adatbázis objektumok sémákban létezneksémákban léteznek
A tulajdonosi lánc A tulajdonosi lánc változatlanul működikváltozatlanul működik
Role1 User1
Owns
Has default schema
Owns
Approle1
Owns
Schema1 Schema2
Schema3
SP1Fn1
Tab1
Adatbázis
Végrehajtási környezetVégrehajtási környezet
User 3User 3
Select Select jogjog ellenőrzésellenőrzés User3-ra User3-ra
Execute Execute jogjog ellenőrzésellenőrzés User3 User3-ra-ra
User1.Proc1User1.Proc1 User1.T1User1.T1
Execute Execute jogjog ellenőrzésellenőrzés User3 User3-ra-ra
NincsNincs jogosultság jogosultság ellenőrzés User3-raellenőrzés User3-ra
User 3User 3 User2.Proc1User2.Proc1 User1.T1User1.T1
‘‘Execute AS ‘X’ ’Execute AS ‘X’ ’
Execute Execute jogjog ellenőrzésellenőrzés User3 User3-ra-ra
Select Select jogjog ellenőrzésellenőrzés‘X’‘X’-re,-re, NemNem user3 user3-ra-ra
SQL ServerSQL Server
SQL SQL Server Server 20002000
User2.Proc1User2.Proc1 User1.T1User1.T1
Modul végrehajtási környezetModul végrehajtási környezet ModuleModule
Tárolt eljárásTárolt eljárás, , függvényfüggvény, , triggertrigger
A tulajdonosi lánc helyett/mellett használhatóA tulajdonosi lánc helyett/mellett használható A tulajdonosi lánc szabályok változatlanul érvényesekA tulajdonosi lánc szabályok változatlanul érvényesek
A jogosultságokat a végrehajtási környezetre A jogosultságokat a végrehajtási környezetre ellenőrizzükellenőrizzük Az adat definíciós utasításokra és a dinamikus SQL-re isAz adat definíciós utasításokra és a dinamikus SQL-re is
A modulok végrehajtási környezetét tartalmazó A modulok végrehajtási környezetét tartalmazó rendszer nézetek:rendszer nézetek: sys.sql_modulessys.sql_modules és a sys. és a sys. assembly_modulesassembly_modules
Modul végrehajtási környezet (2)Modul végrehajtási környezet (2) Execute AS CALLERExecute AS CALLER
A modul utasításai a modultA modul utasításai a modult közvetlenülközvetlenül hívó nevében (és jogaival) hívó nevében (és jogaival) hajtódnak végrehajtódnak végre
Alapértelmezett viselkedésAlapértelmezett viselkedés, , hasonló az SQL Server 2000-hezhasonló az SQL Server 2000-hez Execute AS ‘Execute AS ‘useruser’’
A modul a megadott felhasználóval hajtódik végreA modul a megadott felhasználóval hajtódik végre Az Az execute as execute as záradékot megadó felhasználónak IMPERSONATE záradékot megadó felhasználónak IMPERSONATE
jog kell a megadott ‘user’-rejog kell a megadott ‘user’-re Execute AS SELFExecute AS SELF
AA végrehajtásvégrehajtás aa záradékot megadó felhasználó nevében történikzáradékot megadó felhasználó nevében történik Execute AS OWNERExecute AS OWNER
Az utasítások a modul mindenkori tulajdonosa nevében futnakAz utasítások a modul mindenkori tulajdonosa nevében futnak Impersonate Impersonate jog kell az aktuális tulajdonosra (megadáskor)jog kell az aktuális tulajdonosra (megadáskor)
Kiszolgáló hatókörű DDL triggerek esetén:Kiszolgáló hatókörű DDL triggerek esetén: Execute AS Execute AS ‘login’‘login’
Példa azPélda az Execute AsExecute As használatárahasználatára ProblémaProbléma::
A A TRUNCATE TRUNCATE jog nem továbbadhatójog nem továbbadható AzAz ALTER ALTER jog a jog a TRUNCATETRUNCATE-et tartalmazza-et tartalmazza, , de az túl de az túl
sok lennesok lenne MegoldásMegoldás: : Execute AsExecute As
Tárolt eljárást készítünk a Tárolt eljárást készítünk a TRUNCATETRUNCATE-re-re Execute AsExecute As egy olyan felhasználóval, akinek van egy olyan felhasználóval, akinek van
ALTER ALTER jogajoga Grant execute Grant execute jog a cél felhasználónakjog a cél felhasználónak
EredményEredmény:: A A TRUNCATE TRUNCATE jogot „továbbadhatóvá” tettükjogot „továbbadhatóvá” tettük
Új jogosultságokÚj jogosultságok A legtöbb objektumra vonatkoznak a A legtöbb objektumra vonatkoznak a
következő jogosultságokkövetkező jogosultságok CONTROLCONTROL: : tulajdonos-szerű jogoktulajdonos-szerű jogok ALTERALTER: : a tulajdonságok megváltoztatásaa tulajdonságok megváltoztatása ALTER ANY ‘X’:ALTER ANY ‘X’: ALTER jog mindenALTER jog minden X X típusú típusú
objektumraobjektumra Take OwnershipTake Ownership: : a tulajdonjog átvételének a tulajdonjog átvételének
jogajoga Rendszer nézetekRendszer nézetek
sys.database_permissionssys.database_permissions, , sys.server_permissionssys.server_permissions
Jogosultság alapú meta-adat Jogosultság alapú meta-adat biztonságbiztonság
A meta-adatok alapértelmezésben védettekA meta-adatok alapértelmezésben védettek A sysadmin szerep mindent láthat a A sysadmin szerep mindent láthat a
kiszolgálónkiszolgálón Az adatbázis tulajdonos (dbo) mindent láthat Az adatbázis tulajdonos (dbo) mindent láthat
az adatbázisbanaz adatbázisban Az objektum tulajdonosa láthatja az adott Az objektum tulajdonosa láthatja az adott
objektum adataitobjektum adatait A ”A ”VIEW DEFINITONVIEW DEFINITON” engedély teszi lehetővé ” engedély teszi lehetővé
az objektum meta-adatainak olvasásátaz objektum meta-adatainak olvasását
A rendelkezésre állás fokozásaA rendelkezésre állás fokozása Automatikus feladatátvételAutomatikus feladatátvétel
Feladatátvevő fürtözés (Feladatátvevő fürtözés (Failover ClusteringFailover Clustering)) Adatbázis tükrözésAdatbázis tükrözés
Adatbázis karbantartás, helyreállításAdatbázis karbantartás, helyreállítás Online Online index műveletekindex műveletek Gyors helyreállítás (Gyors helyreállítás (recoveryrecovery)) OnlineOnline, akár lap szintű visszatöltés, akár lap szintű visszatöltés
Egyidejű adatelérés, blokkolás elkerüléseEgyidejű adatelérés, blokkolás elkerülése Pillanatfelvétel izolációPillanatfelvétel izoláció
Egyéb fejlesztésekEgyéb fejlesztések Adatbázis pillanatfelvételekAdatbázis pillanatfelvételek Replikáció Replikáció
Adatbázis tükrözésAdatbázis tükrözésMagas rendelkezésre állás – alacsony költséggelMagas rendelkezésre állás – alacsony költséggel
TükörképPrincipális
Ügyfelek
Napló rekordok
Tanú
AdatbázisAdatbázis feladatátvételfeladatátvétel
<3 mp<3 mp Automatikus/ Automatikus/
manuális manuális feladatátvételfeladatátvétel
AutomatikusAutomatikus kliens kliens átirányításátirányítás
Standard Standard hardver hardver eszközökeszközök
Az adatbázis tükrözés előnyeiAz adatbázis tükrözés előnyei
Gyors, automatikus feladatátvételGyors, automatikus feladatátvétel Adatbázis szinten teljes másolatAdatbázis szinten teljes másolat
Különálló gépekKülönálló gépek Az adatok két példányban léteznekAz adatok két példányban léteznek A gépek szabványos hálózaton keresztül A gépek szabványos hálózaton keresztül
kommunikálnakkommunikálnak
Nem igényel speciális hardvertNem igényel speciális hardvert Önellenőrző Önellenőrző Magas rendelkezésre állás – adatbázis szintenMagas rendelkezésre állás – adatbázis szinten
Tükrözés - szerepkörökTükrözés - szerepkörök PrincipálisPrincipális
Fogadja az ügyfél kapcsolatokatFogadja az ügyfél kapcsolatokat Engedi az adatok módosításátEngedi az adatok módosítását
TükörképTükörkép ( („azonnali”„azonnali” tartaléktartalék)) A principálisnál történő változásokat végrehajtja A principálisnál történő változásokat végrehajtja
a tükör adatbázisona tükör adatbázison Az ügyfelek közvetlenül nem érik el a tükörképetAz ügyfelek közvetlenül nem érik el a tükörképet Szerepet cserélhet, principálissá válhatSzerepet cserélhet, principálissá válhat A tükörkép pillanatfelvételei felhasználhatók A tükörkép pillanatfelvételei felhasználhatók
jelentés készítésrejelentés készítésre
A tanú szerepeA tanú szerepe Lehetővé teszi az automatikus Lehetővé teszi az automatikus
feladatátvételtfeladatátvételt Megakadályozza aMegakadályozza a „megosztott agy” „megosztott agy”
problémátproblémát „„Miért nem látom a másik kiszolgálót? A hálózat Miért nem látom a másik kiszolgálót? A hálózat
szűnt meg, vagy a kiszolgáló nem működik?szűnt meg, vagy a kiszolgáló nem működik?
Csak az a kiszolgáló lehet principális, Csak az a kiszolgáló lehet principális, amelyik legalább egy másik kiszolgálóval amelyik legalább egy másik kiszolgálóval képes kommunikálniképes kommunikálni
A tanú jellemzőiA tanú jellemzői Egy SQL Server 2005 példányEgy SQL Server 2005 példány Egy tanú több tükrözést támogathatEgy tanú több tükrözést támogathat Nagyon kevés erőforrást fogyasztNagyon kevés erőforrást fogyaszt
Válaszol aVálaszol a „„pingping”-ekre”-ekre Közli, hogy a másik kiszolgáló él-eKözli, hogy a másik kiszolgáló él-e
NemNem egyetlen meghibásodási pontegyetlen meghibásodási pont A tükröző partnerek egymással is meg tudnak A tükröző partnerek egymással is meg tudnak
állapodniállapodni Amíg két szerver tud kommunikálni Amíg két szerver tud kommunikálni
egymással, a tükrözés működőképesegymással, a tükrözés működőképes
A tükrözés folyamata - szinkronA tükrözés folyamata - szinkron
Érvényesítés
Tranzakció-napló írás
Továbbítás a tükörhöz
Log
Nyugta
Napló írás nyugta
Folyamatos előregörgetés
Nyugta
DBDB Log
Tranzakció-napló írás
Adatbázis tükrözés - szinkronAdatbázis tükrözés - szinkron A principális egyszerre írja a saját A principális egyszerre írja a saját
tranzakciónaplóját és küldi a hálózatra a tranzakciónaplóját és küldi a hálózatra a módosításokatmódosításokat
A tranzakció akkor érvényesítődik, ha a A tranzakció akkor érvényesítődik, ha a tükör is beírta a módosításokat a saját tükör is beírta a módosításokat a saját tranzakciónaplójábatranzakciónaplójába
Feladatátvétel esetén nincs adatvesztésFeladatátvétel esetén nincs adatvesztés A tükörkép kész a feladatátvételre, ha A tükörkép kész a feladatátvételre, ha
megtörtént a tranzakciók előregörgetése – az megtörtént a tranzakciók előregörgetése – az esetleges visszagörgetésre nem kell várniesetleges visszagörgetésre nem kell várni
Automatikus feladatátvétel lehetségesAutomatikus feladatátvétel lehetséges
Az adatbázisAz adatbázis állapotai a állapotai a tükrözési folyamat sorántükrözési folyamat során SYNCHRONIZEDSYNCHRONIZED
A tükör is minden adatot tartalmazA tükör is minden adatot tartalmaz
SYNCHRONIZINGSYNCHRONIZING A tükör le van maradva, de dolgozikA tükör le van maradva, de dolgozik
SUSPENDEDSUSPENDED A tükrözés fel van függesztveA tükrözés fel van függesztve
DISCONNECTEDDISCONNECTED A kiszolgáló nem tud kommunikálni a partnerrelA kiszolgáló nem tud kommunikálni a partnerrel
EXPOSED EXPOSED (veszélyeztetett) (veszélyeztetett) = = SYNCHRONIZING SYNCHRONIZING // SUSPENDED SUSPENDED // DISCONNECTED DISCONNECTED
Szinkron és aszinkron tükrözésSzinkron és aszinkron tükrözés A biztonsági szint beállítása szerintA biztonsági szint beállítása szerint
SECURITY: SECURITY: FULL – FULL – csak akkor csak akkor érvényesítünk a principálison, ha a érvényesítünk a principálison, ha a módosítás naplózódott a tükörképen ismódosítás naplózódott a tükörképen is– A tükrözés hatással van a principális A tükrözés hatással van a principális
áteresztőképességéreáteresztőképességére– A feladatátvétel ideje szabályozható A feladatátvétel ideje szabályozható
((REDO_QUEUE REDO_QUEUE adatbázis opció)adatbázis opció) SECURITY: SECURITY: OFF – OFF – a principális nem vár a a principális nem vár a
tükörkép nyugtájáratükörkép nyugtájára– A tükrözés hatása a principális A tükrözés hatása a principális
áteresztőképességére minimálisáteresztőképességére minimális
Aszinkron tükrözésAszinkron tükrözés
Érvényesítés
Tranzakció-napló írás
Továbbítás a tükörhöz
Log
Nyugta
Napló írás megtörtént
Folyamatos előregörgetés
DBDB Log
Tranzakció-napló írás
1
2
2
3
Az tükrözés alkalmazásaiAz tükrözés alkalmazásai Magas rendelkezésre állásMagas rendelkezésre állás
Biztonság:Biztonság: FULL FULL Automatikus feladatátvételAutomatikus feladatátvétel Egy kiszolgáló elvesztése esetén az adatbázis Egy kiszolgáló elvesztése esetén az adatbázis
változatlanul használhatóváltozatlanul használható Magas védelemMagas védelem
Biztonság: FULL; nincs tanú Biztonság: FULL; nincs tanú manuális áttérés manuális áttérés Nagy teljesítményNagy teljesítmény
Biztonság:Biztonság: OFF OFF A rendszergazda végzi a feladatátadástA rendszergazda végzi a feladatátadást Adatvesztés lehetségesAdatvesztés lehetséges Egy fajta mentési mechanizmusEgy fajta mentési mechanizmus
demó
Adatbázis tükrözésAdatbázis tükrözés
GyorsGyors helyreállítás (helyreállítás (recoveryrecovery)) SQL Server 2000SQL Server 2000
Az adatbázisAz adatbázis a a visszagörgetésvisszagörgetés utánután hozzáférhető hozzáférhető
SQL Server SQL Server 20052005 Az adatbázisAz adatbázis a a visszagörgetésvisszagörgetés megkezdésekormegkezdésekor
hozzáférhetőhozzáférhető
VisszagörgetésElőregörgetés
Használható
VisszagörgetésElőregörgetés
Használható
Idő
Adatbázis pillanatfelvételAdatbázis pillanatfelvételMire jó?Mire jó?
Felhasználói hiba kivédéseFelhasználói hiba kivédése Visszatérés a „múltba”Visszatérés a „múltba” A hiba megtörténte előtt kell pillanatfelvételt A hiba megtörténte előtt kell pillanatfelvételt
készítenikészíteni
Erősen használt adatbázis adott Erősen használt adatbázis adott állapotának elmentéseállapotának elmentése Például, adatbázis tükörkép eseténPéldául, adatbázis tükörkép esetén Jelentéskészítés céljábólJelentéskészítés céljából
Adatbázis pillanatfelvételAdatbázis pillanatfelvétel
Az adatbázis állapota egy adott Az adatbázis állapota egy adott időpillanatbanidőpillanatban Azonnal létrejönAzonnal létrejön Csak olvashatóCsak olvasható
Az eredeti adatbázis változását nem Az eredeti adatbázis változását nem korlátozzakorlátozza
A pillanatfelvétel új (csak olvasható) A pillanatfelvétel új (csak olvasható) adatbázisként jelenik megadatbázisként jelenik meg
Hiba esetén visszanyúlhatunk a Hiba esetén visszanyúlhatunk a pillanatfelvételhez a régi adatokértpillanatfelvételhez a régi adatokért
PillanatfelvételPillanatfelvételTechnológiaTechnológia
Helykímélő Helykímélő Csak a módosult adatlapokat tároljukCsak a módosult adatlapokat tároljuk
Másolás íráskor (Másolás íráskor (Copy-On-WriteCopy-On-Write)) Kezdetben a kópia nem igényel helyetKezdetben a kópia nem igényel helyet
A pillanatfelvétel létezése befolyásolja A pillanatfelvétel létezése befolyásolja az eredeti adatbázis működési az eredeti adatbázis működési sebességétsebességét
ValueValue
RR
DD
BB
HH
JJ
LL
YY
MM
Tárolási igény
Parancs
Create Northwind_SS
Northwind Northwind_SS
Update Northwind
0%
ValueValue
DDXX
Read Northwind_SS
12.5%
Eredmény:
PillanatfelvételPillanatfelvétel MásolásMásolás íráskoríráskor
DD
Pillanatfelvétel a tükörképenPillanatfelvétel a tükörképen
Több pillanatfelvétel is készíthetőTöbb pillanatfelvétel is készíthető Minden pillanatfelvétel saját névvel rendelkezikMinden pillanatfelvétel saját névvel rendelkezik Az adatbázis állapotát eltérő időpontokban mutatjákAz adatbázis állapotát eltérő időpontokban mutatják
A tükörképen létrehozott pillanatfelvételek A tükörképen létrehozott pillanatfelvételek befolyásolhatják a principális működésétbefolyásolhatják a principális működését
Az egy időben létező pillanatfelvételek Az egy időben létező pillanatfelvételek számát csak az erőforrások korlátozzákszámát csak az erőforrások korlátozzák
Jelentéskészítés a tükörképenJelentéskészítés a tükörképen Pillanatfelvételekkel Pillanatfelvételekkel
Tükörkép
Principális
Jelentéskészítő kliensek
AdatbázisAdatbázis tükrözéstükrözés
OLTP kliensekTanú
PillanatfelvételekPillanatfelvételek
Online Online indexindex műveletekműveletek
Online index Online index karbantartáskarbantartás Create, Rebuild, Reorganize, DropCreate, Rebuild, Reorganize, Drop Add / Drop Constraint Add / Drop Constraint
Parallel végrehajtás (MAXDOP opció)Parallel végrehajtás (MAXDOP opció) Online/offline Online/offline választhatóválasztható
Pillanatfelvétel tranzakció izolációPillanatfelvétel tranzakció izoláció
Az adatok olvasásakor az Az adatok olvasásakor az utasításutasítás, vagy a , vagy a tranzakciótranzakció megkezdésekor érvényes utolsó megkezdésekor érvényes utolsó értékeket látjukértékeket látjuk Nincs zárolásNincs zárolás Az olvasások nem blokkolják a módosításokat és a Az olvasások nem blokkolják a módosításokat és a
módosítások nem blokkolják az olvasásokatmódosítások nem blokkolják az olvasásokat
Javítja az adatok elérhetőségét, csökkenti a Javítja az adatok elérhetőségét, csökkenti a deadlockdeadlock-ok kialakulását-ok kialakulását
Az adatsorok verziózásán alapul (Az adatsorok verziózásán alapul (tempdbtempdb)) Adatbázis szinten lehet engedélyezniAdatbázis szinten lehet engedélyezni
Pillanatfelvétel izoláció változatokPillanatfelvétel izoláció változatok
A A Read CommittedRead Committed szint új változata szint új változata Zárolás nélküli Zárolás nélküli Read CommittedRead Committed Utasítás szintű pillanatfelvétel izolációUtasítás szintű pillanatfelvétel izoláció
– Olvasáskor az utasítás kezdetekor érvényes utolsó Olvasáskor az utasítás kezdetekor érvényes utolsó értéket kapjukértéket kapjuk
Új tranzakció izolációs szintÚj tranzakció izolációs szint SnapshotSnapshot – új izolációs szint – új izolációs szint Tranzakció szintűTranzakció szintű
– Olvasáskor a tranzakció kezdetekor érvényes utolsó Olvasáskor a tranzakció kezdetekor érvényes utolsó értéket kapjukértéket kapjuk
SQL Server 2005 SQL Server 2005 Tranzakció izolációs szintekTranzakció izolációs szintek
Lehetséges anomáliákLehetséges anomáliák
Izolációs szintekIzolációs szintek Érvénytelen Érvénytelen adat olvasásadat olvasás
Nem Nem megismétel-megismétel-hető olvasáshető olvasás
FantomokFantomok UPDATE UPDATE konfliktuskonfliktus
Egyidejű Egyidejű elérés elérés
vezérlésevezérlése
Read Read UncommittedUncommitted igenigen igenigen igenigen nemnem nincsnincs
Read CommittedRead Committed- zárolássalzárolással- pillanatfelvételpillanatfelvétel
nemnem
nemnem
igenigen
igenigen
igenigen
igenigen
nemnem
nemnem
pesszimistapesszimista
optimistaoptimista
Repeatable ReadRepeatable Read nemnem nemnem igenigen nemnem pesszimistapesszimista
SnapshotSnapshot nemnem nemnem nemnem igenigen optimistaoptimista
SerializableSerializable nemnem nemnem nemnem nemnem pesszimistapesszimista
A pillanatfelvétel engedélyezése és A pillanatfelvétel engedélyezése és az izolációs szint beállításaaz izolációs szint beállítása Engedélyezés – adatbázis szintenEngedélyezés – adatbázis szinten
alter database <alter database <adatbázisadatbázis> > set READ_COMMITTED_SNAPSHOT onset READ_COMMITTED_SNAPSHOT on
és/vagy:és/vagy: alter database <alter database <adatbázisadatbázis> > set ALLOW_SNAPSHOT_ISOLATION onset ALLOW_SNAPSHOT_ISOLATION on
Izolációs szint beállítás – kapcsolat szintenIzolációs szint beállítás – kapcsolat szinten set transaction isolation level read set transaction isolation level read committedcommitted
set transaction isolation level snapshotset transaction isolation level snapshot A tranzakció működése az engedélyezett és a A tranzakció működése az engedélyezett és a
beállított értéktől is függbeállított értéktől is függ
Read Committed SnapshotRead Committed Snapshot Adatbázis: Adatbázis: READ_COMMITTED_SNAPSHOT onREAD_COMMITTED_SNAPSHOT on Kapcsolat: Kapcsolat: set transaction isolation set transaction isolation
level read committedlevel read committed A módosítások nem blokkolják az olvasásokat A módosítások nem blokkolják az olvasásokat
és fordítvaés fordítva A módosítások blokkolják egymást!A módosítások blokkolják egymást!
A módosítások zárakkal történnekA módosítások zárakkal történnek
Nem használható a Nem használható a mastermaster, az , az msdbmsdb és a és a tempdbtempdb adatbázisokkal adatbázisokkal
SnapshotSnapshot Adatbázis: Adatbázis: ALLOW_SNAPSHOT_ISOLATION onALLOW_SNAPSHOT_ISOLATION on Kapcsolat: Kapcsolat: set transaction isolation set transaction isolation
level level snapshotsnapshot A módosítások nem blokkolják az olvasásokat A módosítások nem blokkolják az olvasásokat
és fordítvaés fordítva A módosítások konfliktusba kerülhetnekA módosítások konfliktusba kerülhetnek
Elvesztett módosítás veszélyeElvesztett módosítás veszélye Automatikus és kötelező konfliktus feloldás véd az Automatikus és kötelező konfliktus feloldás véd az
„elvesztett módosítás” probléma ellen„elvesztett módosítás” probléma ellen
Alapértelmezett a Alapértelmezett a mastermaster–en és az –en és az msdbmsdb-n-n
demó
Pillanatfelvétel izolációPillanatfelvétel izoláció
ReplikációReplikáció újdonságokújdonságok Tranzakcionális replikáció Tranzakcionális replikáció OracleOracle-ből-ből az az
SQL Server-beSQL Server-be HTTPS Merge HTTPS Merge szinkronizálásszinkronizálás AZAZ SQL Server 2005 SQL Server 2005 új adattípusainak új adattípusainak
támogatásatámogatása Pont-pont replikációPont-pont replikáció A replikált táblák szerkezete módosíthatóA replikált táblák szerkezete módosítható JobbJobb biztonságbiztonság, , teljesítményteljesítmény, ,
adminisztráció,adminisztráció, diagnosztika, …diagnosztika, …
Partícionált táblák és indexekPartícionált táblák és indexek Értéktartomány (Értéktartomány (rangerange) alapú ) alapú
partícionáláspartícionálás A táblákat, indexeket több tárolási A táblákat, indexeket több tárolási
objektumra bontjuk egy adatoszlop objektumra bontjuk egy adatoszlop értéke szerintértéke szerint
A relációs motor és az SQL programozó A relációs motor és az SQL programozó számára a tábla egyetlen egység maradszámára a tábla egyetlen egység marad
A tároló motor több objektumként A tároló motor több objektumként kezeli a partíciókatkezeli a partíciókat Max.Max. 1000 1000 partíció / táblapartíció / tábla
Egy nagy monolitikus táblaEgy nagy monolitikus tábla
Customer ID IndexCustomer ID Index
Order History TableOrder History Table
Nem partícionáltNem partícionált::
Filegroup DATAFilegroup DATA
Filegroup IDXFilegroup IDX
PéldaPélda: : AzAz ORDER HISTORY ORDER HISTORY tábla; egy nemtábla; egy nem fürtözöttfürtözött indexindex aa CUSTOMER ID CUSTOMER ID-n-n
OrderOrderHistoryHistory
Customer IDCustomer ID
Order DateOrder Date
AmountAmount
……
Order IDOrder ID
PartícionálásPartícionálás és tárolásés tárolás
Customer ID IndexCustomer ID Index Customer ID IndexCustomer ID Index Customer ID IndexCustomer ID Index
ORDER DATEORDER DATE szerint szerint::
Order Date <Order Date <‘‘2003-01-01’2003-01-01’
Order Date >=Order Date >=‘‘2003-01-01’ and2003-01-01’ andOrder Date <Order Date <‘‘2004-01-01’2004-01-01’
Order Date >=Order Date >=‘‘2004-01-01’2004-01-01’
Filegroup Filegroup DATA_2002DATA_2002
Filegroup Filegroup DATA_2003DATA_2003
Filegroup Filegroup DATA_2004DATA_2004
Filegroup Filegroup IDX_2002IDX_2002
Filegroup Filegroup IDX_2003IDX_2003
Filegroup Filegroup IDX_2004IDX_2004
OrdersOrders
Customer IDCustomer ID
Order DateOrder Date
AmountAmount
……
Order IDOrder IDOrderOrderHistoryHistory
Customer IDCustomer ID
Order DateOrder Date
AmountAmount
……
Order IDOrder ID
Order History TableOrder History Table Order History TableOrder History Table Order History TableOrder History Table
A partícionált táblák előnyeiA partícionált táblák előnyei Kezelhetőség Kezelhetőség
GyorsGyors adatbetöltés és törlésadatbetöltés és törlés Darabonkénti mentés/visszatöltés a „régi” adatokraDarabonkénti mentés/visszatöltés a „régi” adatokra Partíciónkénti index kezelésPartíciónkénti index kezelés Nincs index töredezettség a régi adatokraNincs index töredezettség a régi adatokra Eltérő tárolási mód lehetséges a régi adatokraEltérő tárolási mód lehetséges a régi adatokra
Jobb lekérdezési sebesség a nagy táblák Jobb lekérdezési sebesség a nagy táblák eseténesetén Hatékony join, ha az illeszkedő táblák azonosan Hatékony join, ha az illeszkedő táblák azonosan
partícionáltakpartícionáltak Kisebb index fát és adatpartíciót kell bejárni Kisebb index fát és adatpartíciót kell bejárni
A partícionálás elemeiA partícionálás elemei
ObjektumokObjektumok:: Partíció függvényPartíció függvény PartícióPartíció sémaséma
MűveletekMűveletek:: Megosztás - Megosztás - Split PartitionSplit Partition Összefésülés - Összefésülés - Merge PartitionMerge Partition Csere - Csere - Switch PartitionSwitch Partition
A partíció függvényA partíció függvény A partícionáló oszlop adatait egész A partícionáló oszlop adatait egész
számokra képezi leszámokra képezi le A határpontok által definiáltA határpontok által definiált N N pont pont N+1 N+1 partíciópartíció
Partition #Partition #
11 22 33 44 55
BoundaryBoundary
11BoundaryBoundary
22BoundaryBoundary
33BoundaryBoundary
44
Partíció függvény példaPartíció függvény példaCREATE PARTITION FUNCTION annual_range CREATE PARTITION FUNCTION annual_range
(DATETIME)(DATETIME)as RANGE RIGHTas RANGE RIGHT /* a határpontokra eső adatok helye */ /* a határpontokra eső adatok helye */for valuesfor values(( -- Partition 1 -- -- Partition 1 -- 20012001 és korábbiés korábbi'200'20022-01-01',-01-01', -- Partition 2 -- 200-- Partition 2 -- 20022'200'20033-01-01',-01-01', -- Partition 3 -- 200-- Partition 3 -- 20033'200'20044-01-01',-01-01', -- Partition 4 -- 200-- Partition 4 -- 20044'200'20055-01-0-01-011'' -- Partition 5 -- Partition 5 ---- 200 2005 5 és későbbiés későbbi))
Partíció sorszám lekérdezése:Partíció sorszám lekérdezése:select $partition.select $partition.annual_rangeannual_range(‘2003-03-15’)(‘2003-03-15’)
dátumdátum < < 20020022-01-01-01-01
20020022-01-01-01-01<=dátum <<=dátum <2003-01-012003-01-01
20020033-01-01-01-01<=dátum <<=dátum <2004-01-012004-01-01
20020044-01-01-01-01<=dátum <<=dátum <2005-01-012005-01-01
20020055-01-01-01-01<=dátum <=dátum
Partíció függvény példa (2)Partíció függvény példa (2)
Partition #Partition #
11 22 33 44 55
BoundaryBoundary
11BoundaryBoundary
22BoundaryBoundary
33BoundaryBoundary
44
20020022-01-01-01-01 20020033-01-01-01-01 20020044-01-01-01-01 20020055-01-01-01-01
Partíció sémaPartíció séma Egy-egy fájlcsoportot rendel a Egy-egy fájlcsoportot rendel a
partíciókhozpartíciókhoz Nem kötelező különböző fájlcsoportokat Nem kötelező különböző fájlcsoportokat
használnihasználni Különböző fájlcsoportok használata hasznos Különböző fájlcsoportok használata hasznos
lehet mentés/helyreállítás eseténlehet mentés/helyreállítás esetén
Partíció séma példákPartíció séma példákCREATE PARTITION SCHEME annual_scheme_1CREATE PARTITION SCHEME annual_scheme_1as PARTITION annual_range toas PARTITION annual_range to(annual_min,(annual_min, -- filegroup pre-2002-- filegroup pre-2002annual_200annual_20022,, -- filegroup 2002-- filegroup 2002annual_200annual_20033,, -- filegroup 2003-- filegroup 2003annual_200annual_20044,, -- filegroup 2004-- filegroup 2004annual_200annual_2005)5) -- filegroup 2005-- filegroup 2005-től-től
Create PARTITION SCHEME annual_scheme_2Create PARTITION SCHEME annual_scheme_2as PARTITION annual_rangeas PARTITION annual_rangeALL to ([PRIMARY])ALL to ([PRIMARY])
Partícionált táblák és indexekPartícionált táblák és indexek A partícionáló kulcs csak egyetlen A partícionáló kulcs csak egyetlen
oszlop lehetoszlop lehet A partícionált táblák és indexekA partícionált táblák és indexek partíció partíció
sémákon hozhatók létre (nem sémákon hozhatók létre (nem fájlcsoportokon)fájlcsoportokon)
Több tábla és index is használhatja Több tábla és index is használhatja ugyanazt augyanazt a partíció függvénytpartíció függvényt ésés sémátsémát
Tábla,Tábla, indexindex
PartícióPartíciósémaséma
PartícióPartíciófüggvényfüggvény
Tábla és index létrehozásaTábla és index létrehozása
CREATE CREATE TABLE Order_History (TABLE Order_History (Order_ID Order_ID bigint,bigint,Order_DateOrder_Date datetime,datetime,Customer_IDCustomer_ID bigintbigint……
) ON ) ON Annual_Scheme_1(Order_Date)Annual_Scheme_1(Order_Date)
CREATE INDEX Order_Cust_IdxCREATE INDEX Order_Cust_IdxON Order_History(Order_ID)ON Order_History(Order_ID)
ON ON Annual_Scheme_1(Order_Date)Annual_Scheme_1(Order_Date)
Index Index partícionáláspartícionálás Ha egy indexHa egy index hasonlóhasonló partíció függvénytpartíció függvényt
használ és ugyanazt a partícionáló kulcsot használ és ugyanazt a partícionáló kulcsot használja, minthasználja, mint az alaptáblaaz alaptábla, , akkor az index akkor az index „illeszkedő” („illeszkedő” (alignedaligned)) 1-11-1 megfelelés az adat és index partíciók közöttmegfelelés az adat és index partíciók között Hasonló:Hasonló:
– Azonos adattípusAzonos adattípus– Azonos számú partícióAzonos számú partíció– Azonos határpontokAzonos határpontok
Index létrehozásakor alapértelmezett az Index létrehozásakor alapértelmezett az illeszkedő indexilleszkedő index
Lehetővé teszi a gyors partícióváltást Lehetővé teszi a gyors partícióváltást ((switch partitionswitch partition))
Ha a partícionáló kulcs szerepel Ha a partícionáló kulcs szerepel aa WHERE WHERE záradékban, a végrehajtás kevesebbzáradékban, a végrehajtás kevesebb partíciót partíciót érintérint
Select * from OrderHistory o where …Select * from OrderHistory o where …o.date_key betweeno.date_key between ‘2002-01-01’ and ‘2002-06-30’ ‘2002-01-01’ and ‘2002-06-30’
VigyázatVigyázat: : joinjoin-on keresztül nem tudjuk -on keresztül nem tudjuk szűkíteni az érintett partícók számátszűkíteni az érintett partícók számát
Select * from Sales s INNER JOIN Region d Select * from Sales s INNER JOIN Region d on d.region_id = s.region_id where …on d.region_id = s.region_id where …d.Name = d.Name = ‘Asia’‘Asia’
Partícionált táblák adatainak Partícionált táblák adatainak lekérdezéselekérdezése
Műveletek partíciókkalMűveletek partíciókkal
Megosztás - Megosztás - Split PartitionSplit Partition Összefésülés - Összefésülés - Merge PartitionMerge Partition Csere - Csere - Switch PartitionSwitch Partition
SplitSplit ALTER PARTITION FUNCTION … SPLIT ALTER PARTITION FUNCTION … SPLIT
RANGE …RANGE … Új határpont felvétele a partíció függvénybenÚj határpont felvétele a partíció függvényben Minden objektumra hat, amelyik a függvényt Minden objektumra hat, amelyik a függvényt
használjahasználja Az új határpont egy partíciót kettéosztAz új határpont egy partíciót kettéoszt Az új partícióba eső adatokat a tároló Az új partícióba eső adatokat a tároló
motor átmozgatja a régi helyükrőlmotor átmozgatja a régi helyükről Azonnal megtörténik, ha a partíció üresAzonnal megtörténik, ha a partíció üres
Partícionált tábla végein célszerű mindig egy Partícionált tábla végein célszerű mindig egy üres partíciót fenntartaniüres partíciót fenntartani
MergeMerge ALTER PARTITION FUNCTION … ALTER PARTITION FUNCTION …
MERGE RANGEMERGE RANGE Eltávolít egy határpontot a partíció Eltávolít egy határpontot a partíció
függvénybőlfüggvényből A határpont két oldalán levő partíciók A határpont két oldalán levő partíciók
adatai összemásolódnakadatai összemásolódnak Sok írással, olvasással járó műveletSok írással, olvasással járó művelet Gyors (azonnali) ha a két partíció üresGyors (azonnali) ha a két partíció üres
SwitchSwitch FelcseréliFelcseréli a a forrásforrás partíciót, vagy táblátpartíciót, vagy táblát egyegy
másikmásik tábla egy tábla egy üresüres partíciójával, vagy egy partíciójával, vagy egy üresüres táblával ( táblával (célcél))
Tisztán meta-adat műveletTisztán meta-adat művelet MegkötésekMegkötések::
A cél üres kell, hogy legyenA cél üres kell, hogy legyen A forrás és a cél azonos fájlcsoportban legyenA forrás és a cél azonos fájlcsoportban legyen A forráson legyen meg minden index,A forráson legyen meg minden index, amitamit a cél a cél
megkövetelmegkövetel, , illeszkedve,illeszkedve, ésés a megfelelő fájlcsoportona megfelelő fájlcsoporton HaHa a céla cél egy partícióegy partíció, , a forrás táblán legyen olyana forrás táblán legyen olyan
check constraintscheck constraints,, ill. a forrás partícióill. a forrás partíció olyan legyen, olyan legyen, amiami beleillik a cél partíció tartománybabeleillik a cél partíció tartományba
A csereA csere az összes kapcsolódó indexet is az összes kapcsolódó indexet is automatikusan magával visziautomatikusan magával viszi
Switch Switch tippektippek Ha táblát cserélünk partícióra, a tábla Ha táblát cserélünk partícióra, a tábla
indexeinek tartalmazni kell a indexeinek tartalmazni kell a partícionáló kulcsotpartícionáló kulcsot CREATE INDEXCREATE INDEX,, INCLUDE INCLUDE opcióopció
AA $partition $partition.<partíció függvény>.<partíció függvény> konstrukciót használjuk az abszolút konstrukciót használjuk az abszolút partíció sorszámok helyettpartíció sorszámok helyett AA partíció sorszámok változhatnakpartíció sorszámok változhatnak
CsúszóCsúszó időablak kezelésidőablak kezelésÚj adatok betöltéseÚj adatok betöltése
PartícióPartíció # #11 22 33 44 55
20020022-01-01-01-01 20020033-01-01-01-01 20020044-01-01-01-01 20020055-01-01-01-01
2001 & 2001 & korábbikorábbi
2002 2002 adatokadatok2003 2003 adatokadatok2004 2004 adatokadatok2005 & 2005 & későbbikésőbbi
[[üresüres]] [[üresüres]]
Előkészítő tábla létrehozásaElőkészítő tábla létrehozása Split Split az utolsó partíciónaz utolsó partíción Bulk load Bulk load ésés index index az az
előkészítő táblánelőkészítő táblán SwitchSwitch
[[üresüres]]
20020066-01-01-01-01
2005 2005 adatokadatok2006 & 2006 & későbbikésőbbi
66
2005 Staging 2005 Staging TableTable
CsúszóCsúszó időablak kezelésidőablak kezelésA legrégebbi adatok törléseA legrégebbi adatok törlése
PartícióPartíció # #
20020033-01-01-01-01 20020044-01-01-01-01 20020055-01-01-01-01
2003 2003 adatokadatok2004 2004 adatokadatok
Üres tábla létrehozása az Üres tábla létrehozása az eltávolítandó adatok számáraeltávolítandó adatok számára
SwitchSwitch MergeMerge
[[üresüres]]
20020066-01-01-01-01
2005 2005 adatokadatok2006 & 2006 & későbbikésőbbi
2002 2002 adatokadatok
11 22 33 44 55
20020022-01-01-01-01
2001 & 2001 & korábbikorábbi
[[üresüres]]
66
2002 Unload 2002 Unload TableTable
[[üresüres]]
11 22 33 44 55
2002 & 2002 & korábbikorábbi
Mentés,Mentés, visszatöltésvisszatöltés A partícionálással kihasználhatjuk az A partícionálással kihasználhatjuk az
SQL Server 2005 új szolgáltatásaitSQL Server 2005 új szolgáltatásait A A Read-Only Read-Only fájlcsoportok a tranzakciónapló fájlcsoportok a tranzakciónapló
visszatöltése nélkül is helyreállíthatókvisszatöltése nélkül is helyreállíthatók
Nem változó, historikus adatok esetén Nem változó, historikus adatok esetén meggyorsítja a mentéstmeggyorsítja a mentést
Online Online visszatöltésvisszatöltés
SQL Server 2000SQL Server 2000 Visszatöltés közben az adatbázis offline, Visszatöltés közben az adatbázis offline,
nem használhatónem használható
SQL Server 200SQL Server 20055 Az adatbázisAz adatbázis online online marad marad
– Csak a visszatöltött rész nem elérhetőCsak a visszatöltött rész nem elérhető
Visszatöltés részekbenVisszatöltés részekben– File / Filegroup File / Filegroup visszatöltésvisszatöltés– A megsérült adatlapok követéseA megsérült adatlapok követése ésés lap szintű lap szintű
visszatöltésvisszatöltés
ProgramozhatóságProgramozhatóság
ElvárásokElvárások Hatékony fejlesztésHatékony fejlesztés Üzleti logika a Üzleti logika a
kiszolgálónkiszolgálón Kevéssé strukturált Kevéssé strukturált
adatok kezeléseadatok kezelése Együttműködés más Együttműködés más
rendszerekkelrendszerekkel
SQL Server 2005SQL Server 2005 Visual Studio Visual Studio
integrációintegráció CLR függvények, CLR függvények,
eljárások, triggerekeljárások, triggerek XML adattípus kezelés XML adattípus kezelés
a kiszolgálóbana kiszolgálóban Natív http, SOAPNatív http, SOAP Transact-SQL Transact-SQL
továbbfejlesztésektovábbfejlesztések
.NET .NET ésés Visual Studio Visual Studio integrációintegráció Programozási nyelvek választékaProgramozási nyelvek választéka
T-SQL T-SQL a halmaz-orientált adatkezelésrea halmaz-orientált adatkezelésre .NET .NET nyelvek a procedurális algoritmusokranyelvek a procedurális algoritmusokra
Az üzleti logika helye választhatóAz üzleti logika helye választható Adatbázis, középső réteg, ügyfél oldalAdatbázis, középső réteg, ügyfél oldal Ugyanaz a modul, ugyanaz az adatelérési felület (ADO.Net)Ugyanaz a modul, ugyanaz az adatelérési felület (ADO.Net)
Integrált hibakeresésIntegrált hibakeresés Különböző nyelveken keresztülKülönböző nyelveken keresztül – TSQL – TSQL ésés .NET .NET
Rugalmas, bővíthető kódRugalmas, bővíthető kód Függvények, tárolt eljárások, triggerek Függvények, tárolt eljárások, triggerek
– SQL-ben, vagy .Net nyelven– SQL-ben, vagy .Net nyelven Felhasználói adattípusok, aggregátumokFelhasználói adattípusok, aggregátumok XML XML adattípusadattípus
ÜzletiÜzleti logika megvalósítása a logika megvalósítása a kiszolgálón - CLRkiszolgálón - CLR Függvények, tárolt eljárások, triggerek -Függvények, tárolt eljárások, triggerek - tetszőlegestetszőleges
CLR CLR nyelvennyelven Számításigényes algoritmusokat procedurális nyelvekben Számításigényes algoritmusokat procedurális nyelvekben
könnyebb megírni és a kapott kód gyorsabban fut, mint ugyanaz könnyebb megírni és a kapott kód gyorsabban fut, mint ugyanaz Transact-SQL-benTransact-SQL-ben
AA Transact-SQL (T-SQL) Transact-SQL (T-SQL) beépített függvényeinek beépített függvényeinek kiterjesztésekiterjesztése
Célterület:Célterület: Számításigényes, procedurális logika az adatbázis rétegbenSzámításigényes, procedurális logika az adatbázis rétegben Sok adatelérést végző logika a középső rétegben Sok adatelérést végző logika a középső rétegben SQL Server SQL Server Nem (csak) SQL Server API-kat használó modulokNem (csak) SQL Server API-kat használó modulok Külső erőforrások eléréseKülső erőforrások elérése
VS .NET VS .NET ProjectProject
Assembly: “MyLib.dll”
VB,C#,C++VB,C#,C++ BuildBuild
SQL ServerSQL Server
SQL Data Definition:SQL Data Definition: create assembly … create function … create procedure … create trigger … create type …SQL SQL lekérdezéslekérdezés: :
select dbo.függvény(paraméter)
CLR runtime SQL Server (in-process)
A fejlesztés meneteA fejlesztés menete
FüggvényekFüggvények
SkalárisSkaláris Tábla-értékűTábla-értékű
Skaláris Skaláris CLR CLR függvényekfüggvények
EgyEgy .NET Framework assembly .NET Framework assembly egy egy osztályának metódusaiosztályának metódusai
A visszatérési érték A visszatérési érték Csak skaláris (Csak skaláris (UnicodeUnicode)) lehetlehet Nem lehet:Nem lehet: rowversion, text, ntext, image rowversion, text, ntext, image A visszaadott .Net adattípusnak illeszkednie kell A visszaadott .Net adattípusnak illeszkednie kell
egyegy SQL Server SQL Server adattípushozadattípushoz Testre szabott attribútumok használhatókTestre szabott attribútumok használhatók
[[SqlFunction(SqlFunction(attribútumokattribútumok)])]
demó
Skaláris CLR függvény készítéseSkaláris CLR függvény készítése
A skalárisA skaláris függvények függvények attribútumaiattribútumai SqlFunction[(SqlFunction[(függvény-attribútumfüggvény-attribútum [,...])] [,...])]
IsDeterministicIsDeterministic= {true | = {true | falsefalse}} DataAccessDataAccess = { DataAccessKind.None | = { DataAccessKind.None |
DataAccessKind.Read }DataAccessKind.Read }– Felhasználói táblák eléréseFelhasználói táblák elérése
SystemDataAccessSystemDataAccess = = { SystemDataAccessKind.None | { SystemDataAccessKind.None | SystemDataAccessKind.Readread }SystemDataAccessKind.Readread }– Rendszer katalógusok, nézetek eléréseRendszer katalógusok, nézetek elérése
IsPreciseIsPrecise = { true | false } = { true | false }
A skalárisA skaláris függvények függvények attribútumai - példaattribútumai - példa[SqlFunctionSqlFunction(IsDeterministic = true, IsPrecise = true)]
public static SqlString ExtractAreaCode(string s)
{
Regex r1 = new Regex("\\((?<ac>[1-9][0-9]+)\\)");
Match m = r1.Match(s);
if (m.Success)
return m.Value.Substring(1, m.Length-2);
else return SqlString.Null;
}
Számított oszlop CLR Számított oszlop CLR függvénnyelfüggvénnyel A CLR skaláris függvényeket A CLR skaláris függvényeket
felhasználhatjuk számított oszlopok felhasználhatjuk számított oszlopok létrehozásáralétrehozására A A PERSISTEDPERSISTED kulcsszóval előírhatjuk a kulcsszóval előírhatjuk a
számított oszlop tárolásátszámított oszlop tárolását
CLR függvénnyel készített számított CLR függvénnyel készített számított oszlopraoszlopra akkor készíthető index, haakkor készíthető index, ha determinisztikusdeterminisztikus, , nem végez adathozzáféréstnem végez adathozzáférést PERSISTEDPERSISTED (tárolt) (tárolt)
Index számított oszlopon - példaIndex számított oszlopon - példa
create table Contacts (
Fname nvarchar(30),
Lname nvarchar(30),
PhoneNo nvarchar(30),
AreaCode AS dbo.ExtractAreaCode(PhoneNo) PERSISTED)
go
create index ContactAreaCode ON Contacts(AreaCode)
Tábla értékűTábla értékű függvényekfüggvények A függvény értéke táblaként használhatóA függvény értéke táblaként használható A tábla értékű függvény adatainak A tábla értékű függvény adatainak
eléréseelérése T-SQL függvény esetén: T-SQL függvény esetén:
belső munkatáblán keresztül (belső munkatáblán keresztül (spooledspooled)) CLR függvény esetén: adatfolyam (CLR függvény esetén: adatfolyam (streamedstreamed))
– Nem kell bevárni az egész adathalmaz elkészültét a Nem kell bevárni az egész adathalmaz elkészültét a feldolgozássalfeldolgozással
A függvénynek implementálni kell az A függvénynek implementálni kell az ISqlReaderISqlReader interfészt interfészt
demó
Tábla értékű CLR függvény készítéseTábla értékű CLR függvény készítése
CLR tárolt eljárásokCLR tárolt eljárások A függvényekkel ellentétben:A függvényekkel ellentétben:
Végezhetnek adat definíciós Végezhetnek adat definíciós (DDL(DDL) és) és adat adat módosítómódosító (DML) (DML) műveleteketműveleteket
Küldhetnek eredményeket a kliens oldalraKüldhetnek eredményeket a kliens oldalra Felhasználási területFelhasználási terület
A A CLR CLR előnyös, haelőnyös, ha::– Sok számítást végzünk az adatokonSok számítást végzünk az adatokon– A korábbi verziókban használt kiterjesztett tárolt A korábbi verziókban használt kiterjesztett tárolt
eljárások (eljárások (Extended Stored ProceduresExtended Stored Procedures) helyett) helyett Halmaz műveletekre változatlanul az Halmaz műveletekre változatlanul az SQL SQL aa
legjobblegjobb
AdatelérésAdatelérés CLR CLR tárolt eljárásból tárolt eljárásból In-process adatelérésre optimalizált In-process adatelérésre optimalizált ADO.NET ADO.NET
szolgáltatószolgáltató System.Data.SqlServer System.Data.SqlServer névtérnévtér A programozási modell alapvetően megfelel azA programozási modell alapvetően megfelel az
SqlClientSqlClient-nek-nek SqlConnection, SqlCommand, SqlReader, SqlConnection, SqlCommand, SqlReader,
SqlParameterSqlParameter
BővítményekBővítmények SqlContextSqlContext
– SqlPipeSqlPipe – eredmények küldése a kliens felé – eredmények küldése a kliens felé
– SqlTriggerContex – a triggerek számáraSqlTriggerContex – a triggerek számára
CLR CLR adatmódosítás példaadatmódosítás példa
using System.Data.SqlServer;
…
SqlConnection cn = SqlContext.GetConnection();
SqlCommand cmd = cn.CreateCommand();
cmd.CommandText = “UPDATE Emp SET photo = @img” +
“WHERE EmpId=10”;
SqlParameter param1 = cmd.Parameters.Add(“@img”, SqlDbType.VarBinary, SqlMetadata.Max);
param1.Value = img;
cmd.ExecuteNonQuery();
Eredményhalmaz küldéseEredményhalmaz küldése SqlPipe SqlPipe - - Send Send metódusmetódus ((overloadedoverloaded)): :
void Send(string message)void Send(string message)– T-SQL: printT-SQL: print
void Send(SqlDataReader reader)void Send(SqlDataReader reader)– Több soros eredményhalmazTöbb soros eredményhalmaz
void Send(SqlDataRecord record)void Send(SqlDataRecord record)– Egy soros eredményhalmazEgy soros eredményhalmaz
Adatbázis lekérdezés eredménye a kliensreAdatbázis lekérdezés eredménye a kliensre:: SqlPipe.Execute(SqlCommand)SqlPipe.Execute(SqlCommand)
SqlCommand cmd = SqlContext.GetCommand(); cmd.CommandText = "select @@version"; SqlContext.GetPipe().Execute(cmd);
Eredményhalmaz küldése (2)Eredményhalmaz küldése (2)
Előzőleg végrehajtott lekérdezés Előzőleg végrehajtott lekérdezés eredményének elküldéseküldéseeredményének elküldéseküldésepublic static void SendReaderToClient() { SqlCommand cmd = SqlContext.GetCommand(); cmd.CommandText = "select @@version"; ISqlReader rdr = cmd.ExecuteReader(); using (rdr) { SqlContext.GetPipe().Send(rdr); } }
Dinamikusan összeállított eredményhalmazDinamikusan összeállított eredményhalmaz//oszlop meta-adatok létrehozása SqlMetaData[] columnSchema = new SqlMetaData[] { new SqlMetaData("stringcol", SqlDbType.NVarChar, 128) }; //sor meta-adatok létrehozása SqlMetaData tableSchema = new SqlMetaData("row",SqlDbType.Row,columnSchema); //rekord létrehozás ISqlUpdatableRecord newRecord = SqlContext.GetConnection().CreateRecord(tableSchema); //rekord oszlopainak feltöltésenewRecord.SetSqlString(0, "Hello World!"); //rekord elküldés SqlContext.GetPipe().SendResultsStart(newRecord, true /*sending row*/); //a küldés befejezése SqlContext.GetPipe().SendResultsEnd();
TriggerekTriggerek
DML DML ésés DDL DDL triggerektriggerek is készíthetőkis készíthetők CLRCLR-ben-ben
A triggerek aA triggerek a TriggerContext TriggerContext objektumon objektumon keresztül érikkeresztül érik el a módosításra vonatkozó el a módosításra vonatkozó információkatinformációkat
Trigger ADO.NET Trigger ADO.NET bővítményekbővítmények
SqlContext.GetTriggerContext()SqlContext.GetTriggerContext() bool [bool [ ] ColumnsUpdated: ] ColumnsUpdated:
– T-SQLT-SQL:: ColumnsUpdated() ColumnsUpdated()
TriggerAction: TriggerAction: a triggert elindító műveleta triggert elindító művelet
tc =SqlContext.GetTriggerContext();
if (tc.TriggerAction == TriggerAction.Update)
LogDirectUpdate(…);
Felhasználási javaslatokFelhasználási javaslatok A A CLR CLR nem a Transact-SQL helyett vannem a Transact-SQL helyett van A CLR modulok lehetővé teszik A CLR modulok lehetővé teszik
Komplex, procedurális üzleti logika megvalósításátKomplex, procedurális üzleti logika megvalósítását Külső adatok elérésétKülső adatok elérését Az üzleti logika SQL Serverben történő megvalósításátAz üzleti logika SQL Serverben történő megvalósítását
Nem „kötelező” minden üzleti logikát Nem „kötelező” minden üzleti logikát kiszolgálóban megvalósítanikiszolgálóban megvalósítani Skálázhatósági megfontolásokSkálázhatósági megfontolások
XML kezelésXML kezelés
XML támogatás az SQL Server 2000-benXML támogatás az SQL Server 2000-ben
XML XML támogatástámogatás azaz SQL Server 2005 SQL Server 2005-ben-ben Beépül az adatbázis-motorbaBeépül az adatbázis-motorba
– XML XML adattípusadattípus, XML , XML manipulációmanipuláció, XML , XML indexekindexek, , XML XML sémáksémák
XML adat-manipuláció a kiszolgálónXML adat-manipuláció a kiszolgálón
SQL Server 2000 –SQL Server 2000 – kiszolgáló kiszolgálóXML be és XML kiXML be és XML ki
sp_xml_preparedocumentsp_xml_preparedocument
OpenXMLOpenXML
XMLXML DOMDOM
…………
……
……
PhonePhoneIDIDnamename
insert into …insert into …
TableTable
TableTable
TableTable
XML dataXML data ParseParse
11 22
33
44
selectselect … … for xml … for xml …55
SQL Server 2000SQL Server 2000 – középső réteg – középső rétegXML XML nézeteknézetek Annotált leképező sémák (XDR, XSD)Annotált leképező sémák (XDR, XSD) SQLXML 3.0 SP2SQLXML 3.0 SP2
PhonePhoneAddressAddressLast NameLast NameFirst NameFirst Name
BulBulkk
loadload
PersonPerson
AddressAddressLNLN PhonePhoneFNFN
LekérdezésLekérdezés,,updategramupdategramXML ViewXML View
3322
11
SQL Server 2005 SQL Server 2005 XML XML a relációs adatbázisbana relációs adatbázisban
XML adattípusXML adattípus Oszlop, változó, …Oszlop, változó, … Típus nélküli, és/vagy séma gyűjteménnyel ellenőrzöttTípus nélküli, és/vagy séma gyűjteménnyel ellenőrzött Ellenőrzések (Ellenőrzések (constraintconstraint-ek) XML adatokon-ek) XML adatokon Bináris, vagy szöveges tárolás (max. 2GB)Bináris, vagy szöveges tárolás (max. 2GB)
XML XML adatok lekérdezése és módosításaadatok lekérdezése és módosítása XQuery (fejlődő W3C szabvány), XPath 2.0XQuery (fejlődő W3C szabvány), XPath 2.0
Indexek XML oszlopokonIndexek XML oszlopokon Elsődleges XML index: B+ fa minden címkén, értéken és Elsődleges XML index: B+ fa minden címkén, értéken és
ösvényenösvényen Másodlagos XML indexek (PATH, PROPERTY, VALUE)Másodlagos XML indexek (PATH, PROPERTY, VALUE)
SQL Server 2005 SQL Server 2005 A relációsA relációs ésés XML XML adatok integrációjaadatok integrációja Egységes relációs ésEgységes relációs és XML XML tárolótároló
A meglevőA meglevő SQL SQL Server tároló motorServer tároló motor ésés lekérdezés optimalizáló lekérdezés optimalizáló felhasználásávalfelhasználásával
A relációs és az XML záradékok ugyanabba az optimalizált A relációs és az XML záradékok ugyanabba az optimalizált lekérdezési tervbe kerülneklekérdezési tervbe kerülnek
Az integrált XML adattípus előnyeiAz integrált XML adattípus előnyei Kevéssé strukturált adatok modellezéseKevéssé strukturált adatok modellezése A táblákra bontás, ill. újra összekapcsolás költsége eltűnikA táblákra bontás, ill. újra összekapcsolás költsége eltűnik AzAz XML XML feldolgozást az SQL Server optimalizáljafeldolgozást az SQL Server optimalizálja A meglevő relációs táblákba beilleszthető XML oszlopok nem A meglevő relációs táblákba beilleszthető XML oszlopok nem
igénylik a működő alkalmazások módosításátigénylik a működő alkalmazások módosítását
Kiszolgáló oldali XML támogatásKiszolgáló oldali XML támogatás TárolásTárolás
XML adattípus, varchar(max), varbinary(max)XML adattípus, varchar(max), varbinary(max) Táblákra bontásTáblákra bontás
openXMLopenXML() és() és XML metódusokXML metódusok
– query() query() –– XML XML dokumentum egy részének előállításadokumentum egy részének előállítása– value() value() – skaláris érték kiolvasása– skaláris érték kiolvasása– existexist() – létezés vizsgálata() – létezés vizsgálata– nodesnodes() – csomópontok keresése az XML () – csomópontok keresése az XML
dokumentumbandokumentumban– modifymodify() – () – XML XML dokumentum egy részének dokumentum egy részének
módosításamódosítása
Kiszolgáló oldali XML támogatás (2)Kiszolgáló oldali XML támogatás (2) IndexelésIndexelés
XML indexekXML indexek Full-text index az elemek tartalmáraFull-text index az elemek tartalmára
LekérdezésLekérdezés for xml … [type]for xml … [type] XQuery, XPathXQuery, XPath
XSD támogatásXSD támogatás CREATE XML SCHEMA COLLECTIONCREATE XML SCHEMA COLLECTION
CLR támogatásCLR támogatás System.Xml névtér eszközeiSystem.Xml névtér eszközei
Eszközök az XML dokumentumok Eszközök az XML dokumentumok kezeléséhezkezeléséhez XML XML szerkesztőszerkesztő SQL ServerSQL Server Management Management
StudioStudio-ban-ban Integration Integration ServicesServices
XML XML dokumentumdokumentum táblákra bontásatáblákra bontása XML XML dokumentumdokumentum XML XML oszlopokban történő oszlopokban történő
tárolásatárolása
Adatmodellezési javaslatokAdatmodellezési javaslatok Strukturált adatok, ismert sémaStrukturált adatok, ismert séma relációs relációs
modellmodell Bevált, ismert technológiaBevált, ismert technológia EsetlegEsetleg [n]varchar(max) [n]varchar(max) oszlopok a tárolásra, ha nem oszlopok a tárolásra, ha nem
akarjuk manipulálni a dokumentumot a kiszolgálónakarjuk manipulálni a dokumentumot a kiszolgálón XML XML adattípusadattípus
Egyszerű adatkezelés kevéssé strukturált adatok Egyszerű adatkezelés kevéssé strukturált adatok eseténesetén
Jobb teljesítmény, mintha felbontanánk és újra Jobb teljesítmény, mintha felbontanánk és újra összeállítanánk a komplex XML dokumentumokatösszeállítanánk a komplex XML dokumentumokat
Egyszerű migráció text típusú oszlopról:Egyszerű migráció text típusú oszlopról: ALTER TABLE <ALTER TABLE <táblatábla>>
ALTER COLUMN <ALTER COLUMN <oszloposzlop> XML [XML schema > XML [XML schema collection]collection]
XML kezelés összefoglalásXML kezelés összefoglalás
Gyengén strukturáltGyengén strukturált adatok kezeléseadatok kezelése NatívNatív XML XML adattípusadattípus FejlettFejlett indexelésindexelés & & lekérdezés optimalizáláslekérdezés optimalizálás Modern Modern programozási nyelv a kiszolgálónprogramozási nyelv a kiszolgálón
Az Az XML XML támogatás beépül a relációs támogatás beépül a relációs tárolóba és a lekérdezés optimalizálóbatárolóba és a lekérdezés optimalizálóba
Az SQL Server eszközei használhatókAz SQL Server eszközei használhatók hibakereséshibakeresés, , lekérdezési tervek, nyomkövetéslekérdezési tervek, nyomkövetés
– – a meglevő eszközökkela meglevő eszközökkel
Transact-SQL újdonságokTransact-SQL újdonságok LekérdezésekLekérdezések
Rekurzív lekérdezésekRekurzív lekérdezések Rang függvényekRang függvények Új relációs operátorokÚj relációs operátorok Adatmódosítás – output záradékkelAdatmódosítás – output záradékkel Teljes-szöveges keresésTeljes-szöveges keresés
Új adattípusokÚj adattípusok T-SQLT-SQL procedurális bővítmények procedurális bővítmények
Common Table Expression (CTE) Common Table Expression (CTE) ésés rekurzív lekérdezésekrekurzív lekérdezések
Rekurzív hierarchia bejárása egyetlen Rekurzív hierarchia bejárása egyetlen lekérdezéssellekérdezéssel
FelhasználásFelhasználás Hierarchia egy táblábanHierarchia egy táblában ( (főnök-főnök-
beosztottbeosztott, , alkatrészek beépülésealkatrészek beépülése)) Keressük egy főnök összes beosztottjátKeressük egy főnök összes beosztottját Keressük egy termék beépülő alkatrészeitKeressük egy termék beépülő alkatrészeit
Common Table ExpressionCommon Table Expression SQL-99SQL-99 Szintaxis:Szintaxis:
WITH WITH <<CTECTE Név Név>> ( < ( <oszlop listaoszlop lista> )> )ASAS( ( <CTE<CTE definíció definíció>> ))SELECT SELECT … FROM …… FROM … <CTE <CTE NévNév> >
Lehet rekurzívLehet rekurzív és nem rekurzívés nem rekurzív Nem rekurzív CTENem rekurzív CTE::
Olvashatóbb lekérdezésekOlvashatóbb lekérdezések
RekurzívRekurzív CTE CTE
Önmagára hivatkozikÖnmagára hivatkozik RekurzívRekurzív CTE CTE definíció: definíció:
<<nemnem--rekurzívrekurzív SELECT> SELECT>
UNION ALLUNION ALL
<SELECT <SELECT aa CTE CTE felhasználásával felhasználásával>>
A rekurzió megáll, ha a második A rekurzió megáll, ha a második SELECT nem ad eredménytSELECT nem ad eredményt
inicializálás
gyűjtés
Rekurzív CTE példaRekurzív CTE példaWITH EmpCTE(ID, Név, Mgr, Szint)WITH EmpCTE(ID, Név, Mgr, Szint)ASAS( ( SELECT EmployeeID, FirstName+' '+LastName,SELECT EmployeeID, FirstName+' '+LastName,
ReportsTo, 1ReportsTo, 1 FROM EmployeesFROM Employees WHERE ReportsTo is nullWHERE ReportsTo is null UNION ALLUNION ALL SELECT E.EmployeeID, E.FirstName+' '+SELECT E.EmployeeID, E.FirstName+' '+
E.LastName, E.ReportsTo, E.LastName, E.ReportsTo, M.M.Szint+1Szint+1 FROM Employees AS E JOIN EmpCTE AS MFROM Employees AS E JOIN EmpCTE AS M ON E.ReportsTo = M.IDON E.ReportsTo = M.ID))SELECT * FROM EmpCTESELECT * FROM EmpCTE
Northwind adatbázisNorthwind adatbázis
Rang és sorszámRang és sorszám függvényekfüggvények AzAz SQL-99 OLAP SQL-99 OLAP bővítmények szerintbővítmények szerint
RANK()RANK() DENSE_RANK()DENSE_RANK() NTILE(<expression>) NTILE(<expression>) ROW_NUMBER() ROW_NUMBER()
SzintaxisSzintaxis
<<ranrangg__függvényfüggvény> >
OVER( [PARTITION BY <OVER( [PARTITION BY <oszloposzlop>] >]
ORDER BY <ORDER BY <oszloposzlop>>))
Rang és sorszám használataRang és sorszám használata AdatelemzésAdatelemzés (RANK, DENSE_RANK, (RANK, DENSE_RANK,
NTILE)NTILE) SorrendeketSorrendeket generálhatunk különböző generálhatunk különböző
kritériumok szerint, egyetlen lekérdezésbenkritériumok szerint, egyetlen lekérdezésben A megjelenítés sorrendje eltérhet a rangoktólA megjelenítés sorrendje eltérhet a rangoktól
Lapozás aLapozás a ROW_NUMBER ROW_NUMBER segítségével segítségével Nagyobb eredményhalmaz megjelenítéseNagyobb eredményhalmaz megjelenítése
Rang példaRang példa
select ProductName,select ProductName, sum(Quantity),sum(Quantity), rank() over rank() over
(order by sum( Quantity) desc),(order by sum( Quantity) desc),rank() overrank() over
(order by max(od.UnitPrice))(order by max(od.UnitPrice))from dbo.Products pfrom dbo.Products pjoin dbo.[Order Details] od on join dbo.[Order Details] od on
p.ProductID=od.ProductIDp.ProductID=od.ProductIDjoin dbo.Orders o on join dbo.Orders o on
od.OrderID=o.OrderIDod.OrderID=o.OrderIDgroup by ProductNamegroup by ProductNameorder by ProductNameorder by ProductName
A termékek rangjának lekérdezése eladott darabszám és egységár szerint
Northwind adatbázisNorthwind adatbázis
Sorszámozás példaSorszámozás példaselect N=row_number() overselect N=row_number() over
(order by CustomerID) , *(order by CustomerID) , *from dbo.Ordersfrom dbo.Orders
Northwind adatbázisNorthwind adatbázis
TOPTOP SQL 2000SQL 2000: SELECT TOP <: SELECT TOP <konstanskonstans>> SQL 2005SQL 2005: SELECT TOP (<: SELECT TOP (<kifejezéskifejezés>)>)
INSERT, UPDATE, DELETEINSERT, UPDATE, DELETE esetén is esetén is használhatóhasználható
A SET ROWCOUNT is használhatóA SET ROWCOUNT is használható– a SELECT utasítás esetén felülbírálja a TOP-ota SELECT utasítás esetén felülbírálja a TOP-ot– INSERT, UPDATE, DELETE esetén a TOP INSERT, UPDATE, DELETE esetén a TOP
felülbírálja a SET ROWCOUNT-otfelülbírálja a SET ROWCOUNT-ot– A következő verzióban (A következő verzióban () a SET ROWCOUNT ) a SET ROWCOUNT
nem fog hatni INSERT, UPDATE, DELETE esetén nem fog hatni INSERT, UPDATE, DELETE esetén
Új relációs operátorokÚj relációs operátorok PIVOTPIVOT, , UNPIVOTUNPIVOT, , APPLYAPPLY PIVOTPIVOT
Sorokból oszlopokat készítSorokból oszlopokat készít Hasonló azHasonló az Access TRANSFORM Access TRANSFORM-hoz-hoz
UNPIVOTUNPIVOT AA PIVOT PIVOT ellentéte ellentéte
APPLYAPPLY A külső tábla minden sorára kiértékel egy A külső tábla minden sorára kiértékel egy
tábla értékűtábla értékű függvényt és a két táblát függvényt és a két táblát összekapcsoljaösszekapcsolja
PIVOT példa, összegzésPIVOT példa, összegzés
MakeMake YearYear SalesSales
HondaHonda 19901990 20002000
AcuraAcura 19901990 500500
HondaHonda 19911991 30003000
AcuraAcura 19911991 600600
SELECT *SELECT *FROM T PIVOT(SUM(FROM T PIVOT(SUM(SalesSales) )
FOR FOR YearYear IN IN ([1990], ([1990],
[1991])) t[1991])) t
MakeMake 19901990 19911991
HondaHonda 20002000 30003000
AcuraAcura 500500 600600
PIVOT példa, név-érték párosításPIVOT példa, név-érték párosítás
SELECT *SELECT *
FROM tableFROM table PIVOT(MIN(PIVOT(MIN(PropValPropVal) ) FOR FOR PropNamePropName IN IN ([Name],[Author])) t([Name],[Author])) t
ObjIDObjID PropNamePropName PropValPropVal
11 NameName x.docx.doc
11 CrDateCrDate 12/3/200112/3/2001
22 NameName Sales.xlsSales.xls
22 AuthorAuthor HigginsHiggins
ObjIDObjID NameName AuthorAuthor
11 xx.doc.doc NULLNULL
22 Sales.xlsSales.xls HigginsHiggins
DML DML utasításutasítás OUTPUT OUTPUT záradékkal záradékkal Az adatmódosító utasítás részeként sorokat Az adatmódosító utasítás részeként sorokat
tudunk visszaadni egy tábla változóbatudunk visszaadni egy tábla változóba AzAz InsertedInserted ésés DeletedDeleted virtuális táblák virtuális táblák
tartalmazzák a régi és új értékekettartalmazzák a régi és új értékeket
Példa:Példa:
UPDATE OrdersUPDATE OrdersSET status= SET status= ''processedprocessed''OUTPUT DELETED.*, INSERTED.* OUTPUT DELETED.*, INSERTED.* into @tabinto @tabWHERE statusWHERE status='un='unprocessedprocessed''
Full-Text Full-Text indexelésindexelés
Skálázhatóság, teljesítménySkálázhatóság, teljesítmény Az index felépítése egy nagyságrenddel Az index felépítése egy nagyságrenddel
gyorsabbgyorsabb A lekérdezésekA lekérdezések 30-50% 30-50%-kal gyorsabbak-kal gyorsabbak
Full-Text Full-Text -- újdonságokújdonságok
Thesaurus Thesaurus támogatástámogatás Több oszlopos lekérdezésekTöbb oszlopos lekérdezések
CONTAINS((col1,col2), ‘Yukon’)CONTAINS((col1,col2), ‘Yukon’)
Jobb nyelv támogatásJobb nyelv támogatás Konfigurálható ékezetfüggőségKonfigurálható ékezetfüggőség Elosztott lekérdezésekElosztott lekérdezések::
Fulltext Fulltext lekérdezés kapcsolt kiszolgálóralekérdezés kapcsolt kiszolgálóra
Indexelt nézetek támogatásaIndexelt nézetek támogatása
FullFull-T-Text ext - adminisztráció- adminisztráció Az adatbázis mentés a full-text Az adatbázis mentés a full-text
katalógusokat is tartalmazzakatalógusokat is tartalmazza Adatbázis detach/attach a full-text Adatbázis detach/attach a full-text
katalógusokat is mozgatjakatalógusokat is mozgatja Példány szintű erőforrásPéldány szintű erőforrás ( (nincsenek nincsenek
megosztott komponensekmegosztott komponensek) ) Az Az MS Search MS Search azaz SQL Server SQL Server
biztonsági kontextusában futbiztonsági kontextusában fut
Varchar(max)Varchar(max) AA varchar, nvarchar, varbinary varchar, nvarchar, varbinary
kiterjesztésekiterjesztése 2GB 2GB méretig méretigcreate tablecreate table T T (Id int,(Id int, Picvarbinary(max))Picvarbinary(max))
AA text/ntext/image text/ntext/image alternatívája alternatívája Minden string függvény működik a Minden string függvény működik a
varchar(max)-onvarchar(max)-on Az UPDATE támogatja a darabolástAz UPDATE támogatja a darabolást
UPDATE UPDATE T T SET Picture.Write(@newchunk, SET Picture.Write(@newchunk, @offset, @remove)@offset, @remove)
DDL DDL triggerektriggerek Adatszerkezet módosításra induló Adatszerkezet módosításra induló
triggerektriggerek Minden DDL eseményreMinden DDL eseményre
CREATE_TABLE, ALTER_PROCEDURE, CREATE_TABLE, ALTER_PROCEDURE, DROP_LOGIN, DROP_LOGIN, stbstb..
Adatbázis és kiszolgáló szintenAdatbázis és kiszolgáló szinten Az esemény adatait aAz esemény adatait a trigger trigger azaz
eventdata() eventdata() függvényen keresztül éri elfüggvényen keresztül éri el
A A DDL DDL triggerek felhasználásatriggerek felhasználása Fejlesztési szabályok érvényesítéseFejlesztési szabályok érvényesítése
CREATE/ALTER CREATE/ALTER visszagörgetésevisszagörgetése
Véletlen objektum eldobás Véletlen objektum eldobás megakadályozásamegakadályozása
Objektum Objektum checkin/checkoutcheckin/checkout Forrás verziózásForrás verziózás Az adatbázis menedzsment naplózásaAz adatbázis menedzsment naplózása
Kivételkezelés Kivételkezelés
Az Az “if @@error” “if @@error” kód helyettkód helyett Szintaxis:Szintaxis:
BEGIN TRY
<utasítások>
END TRY
BEGIN CATCH
<kivételkezelés>
END CATCH
Kivételkezelés - tranzakcióKivételkezelés - tranzakció Tranzakció abortáló kivételek esetén aTranzakció abortáló kivételek esetén a
tranzakciótranzakció „haldokló”„haldokló” állapotban marad egy állapotban marad egy explicit „rollback” kiadásáigexplicit „rollback” kiadásáig Haldokló tranzakcióban naplózott műveletek Haldokló tranzakcióban naplózott műveletek
nem végezhetőknem végezhetők A kivételkezelés többnyire rollback-kel A kivételkezelés többnyire rollback-kel
kezdődikkezdődik Új függvények aÚj függvények a hibakódhibakód, , hibaüzenethibaüzenet, ,
súlyosságsúlyosság elérésére aelérésére a CATCH CATCH blokkbanblokkban Újra lehet dobni az eredeti kivételtÚjra lehet dobni az eredeti kivételt
Tranzakció abort példaTranzakció abort példa
CREATECREATE PROCEDUREPROCEDURE add_to_T1 @a add_to_T1 @a int,int, @b @b nvarchar(nvarchar(10001000))ASASdeclaredeclare @error_msg @error_msg nvarchar(nvarchar(400400),), @error_num @error_num int,int, @error_severity @error_severity intintBEGINBEGIN TRYTRY BEGINBEGIN TRANTRAN ----idegen kulcs megsértés hibaidegen kulcs megsértés hiba INSERTINSERT T1 T1 VALUESVALUES ((@a@a,, @b @b)) COMMITCOMMIT TRANTRANENDEND TRYTRYBEGINBEGIN CATCHCATCH ROLLBACKROLLBACK INSERTINSERT T1_Log T1_Log VALUESVALUES ((@a@a,, @b @b,, GETDATE())GETDATE()) SELECTSELECT @error_msg @error_msg==error_messageerror_message(),(), @error_num @error_num==error_numbererror_number(),(),
@error_severity@error_severity==error_severityerror_severity()() RAISERRORRAISERROR ((@error_msg@error_msg,, @error_num @error_num,, @error_severity @error_severity))ENDEND CATCHCATCH
Utasítás szintű újrafordítás Utasítás szintű újrafordítás (recompile)(recompile) Nem kell az egész tárolt eljárást újrafordítani Nem kell az egész tárolt eljárást újrafordítani
(mint az SQL2000-ben)(mint az SQL2000-ben) Az utasítás szintű tervek is a gyorsírótárba Az utasítás szintű tervek is a gyorsírótárba
kerülnek a modul szintű tervekkel együttkerülnek a modul szintű tervekkel együtt Hasznos, ha:Hasznos, ha:
Változnak a tábla statisztikákVáltoznak a tábla statisztikák Nagy méretű tárolt eljárás újrafordítása helyettNagy méretű tárolt eljárás újrafordítása helyett Dinamikus SQL helyettDinamikus SQL helyett
Összefoglalás Összefoglalás A A Transact-SQL Transact-SQL tovább él és virultovább él és virul A A Transact-SQLTransact-SQL változatlanul a legjobb változatlanul a legjobb
nyelv halmaz-orientált műveletekrenyelv halmaz-orientált műveletekre A .Net CLR kiváló procedurális A .Net CLR kiváló procedurális
lehetőségekkel bővíti az SQL Server lehetőségekkel bővíti az SQL Server fejlesztők eszköztárátfejlesztők eszköztárát
Címek, hivatkozásokCímek, hivatkozások SQL Server 2005SQL Server 2005
http://www.microsoft.com/hun/sql/default.mspxhttp://www.microsoft.com/hun/sql/default.mspx http://www.microsoft.com/sql/2005/http://www.microsoft.com/sql/2005/
SQL Server 2005 WebcastsSQL Server 2005 Webcasts http://www.microsoft.com/events/series/http://www.microsoft.com/events/series/
technetsqlserver2005.mspxtechnetsqlserver2005.mspx http://www.microsoft.com/events/series/
msdnsqlserver2005.mspx MSDN
http://msdn.microsoft.com/sql/