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. Átállás a legfrissebb technológiákra: Windows Server 2003, XP, Office 2003 2005. április 20. Az SQL Server 2005 relációs motorjának újdonságai 2005. május 4. Az SQL Server 2005 üzleti intelligencia szolgáltatásai 2005. május 18. Üzemeltetői konferencia
Napirend Az SQL Server adatplatform Az SQL Server 2005 áttekintése Nagyvállalati adatkezelés Biztonság Rendelkezésre állás Skálázhatóság Programozhatóság XML, CLR, T-SQL (Üzleti intelligencia)
SQL Server Átfogó, integrált adatplatform Reporting Services Analysis Services (OLAP, DM) Notification Services Az SQL Server átfogó, integrált, teljes adatplatform. Minden egy dobozban (termékben): Core database engine: secure, reliable, highly available data store Data transformation and replication services (IS, Replication) facilitate enterprise wide data integration, data warehouse creation, data replication for distributed or mobile data processing applications, and systems availability Deriving additional value from your data: Notification Services, Data Analysis, Data Mining, Reporting Management tools – SQL specific management suite as well as tight integration with tools such as MOM, SMS Development tools – BI specific development toolset as well as tight integration with Visual Studio Flexible, extensible: Every major subsystem in SQL Server ships with it’s own Object Model and set of APIs to you to extend the data system in any direction that is unique to your business Interoperable: Standard data access protocols drastically reduce the time it takes to integrate data in SQL Server with existing systems. In addition, native web service support is built into SQL Server to ensure interoperability with other applications and platforms SQL Server is the only database to include all of this functionality out of the box. Also provide entry level SKUs for lightweight data needs (Express, Workgroup) Scales to your needs: support for databases from the mobile device to the datacenter SQL Server Mobile, 32 bit, 64 bit Hardware platform range of SQL Server includes: Single Pocket PC CPU systems, Throughout mobile and desktop class PCs, Through Multi-CPU server systems All the way up to 64-processor Enterprise Data Center systems Integration Services Replication Services Relációs adatbázis
Az SQL Server generációi 1. A kezdetek 2. A modern SQL Server 3. A közeli jövő SQL Server 6.0/6.5 SQL Server 7.0 SQL Server 2000 SQL Server 2005 Windows integráció DTC (elosztott tranzakciók) Beépített tranzakcionális replikáció Új relációs és tároló motor Kiterjedt automatikus erőforrás kezelés OLAP ETL eszköz (DTS) 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 Rendelkezésre állás fókusz Biztonság Hatékony fejlesztés Natív XML Nagyvállalati ETL és adatbányászat Megbízhatóság, biztonság Integrált üzleti intelligencia A legalacsonyabb TCO Automatikus hangolás Állandó célok
Az SQL Server 2005 fejlesztés fő területei Magas rendelkezésre állás Biztonsági és teljesítmény jellemzők Menedzselhetőség Nagyvállalati adatkezelés Visual Studio és .NET CLR integráció Natív XML technológia az adatbázisban Web Service felületek (natív SOAP) Programozhatóság Valósidejű döntéstámogatás: jelentéskészítés, OLAP, adatbányászat Intelligens kliensek; SharePoint megoldások Átfogó (és lényegesen gyorsabb) ETL szolgáltatás SQL Server 2005 is a significant release with hundreds of new and improved features. Largest release of SQL Server to date. Will be the most dependable and secure release as well: Trustworthy Computing philosophy – multiple security reviews Targeting over 300,000 beta testers with beta 3 – largest in SQL Server history. SQL Server 2005 will bring fundamental advancements in three key areas: Enterprise Data Management, Developer Productivity, and Business Intelligence. Enterprise Data Management SQL Server 2005 will deliver a reliable, secure and productive data platform for line of business and analytical applications. Failover clustering and database mirroring technology enable organizations to deliver highly reliable, available applications to their employees, customers, and partners. SQL Server 2005 will deliver enhanced security for enterprise data through features such as data encryption, secure default settings, password policy enforcement, fine grained permissions control, and an enhanced security model. Through innovations such as a new management tool, enhanced self-tuning capabilities, and a powerful new management programming model, SQL Server 2005 also extends SQL Server’s ease-of-use leadership and increases the productivity of database administrators. These enhancements enable DBAs to focus on high value tasks like database architecture while spending less time on routine maintenance, configuration, and tuning. Developer Productivity SQL Server 2005 includes many new technologies that will empower the developer and bring significant increases in developer productivity. SQL Server 2005 will enable developers to leverage existing skills across a variety of development languages while providing an end-to-end development environment for the database. XML capabilities will allow developers to build new classes of connected applications across any platform or device. SQL Server 2005 will support the storage of structured and unstructured data. Business Intelligence The SQL Server 2005 release of SQL Server will further Microsoft’s leadership in Business Intelligence through innovations in scalability, data transformation, development tools, and data analytics. SQL Server 2005 will enable scalable business intelligence by putting critical, timely information in the hands of all employees. From the CEO to the information worker, employees will be able to quickly and easily harness data to make better decisions faster. The comprehensive analytical, integration, and data migration capabilities of SQL Server 2005 will enable companies to extend the value of their existing applications, regardless of the underlying platform. See http://www.microsoft.com/sql/2005 for additional information on SQL Server 2005. Üzleti intelligencia
Nagyvállalati adatkezelés SQL Server 2005 Jogosultságkezelés Adatbázis tükrözés Gyors helyreállítás Adatbázis pillanatfelvétel Online index műveletek Pillanatfelvétel izoláció Partícionálás Elvárások Biztonság Rendelkezésre állás Skálázhatóság Menedzselhetőség
SQL Server 2005 biztonsági fejlesztések Továbbfejlesztett biztonsági jellemzők Adattitkosítás, titkosítási kulcs kezelés Auditálás, felhasználó azonosítás és hozzáférési jogosultság kezelés A felület minimalizálása A legtöbb szolgáltatás telepítése opcionális – explicit választást igényel Telepítés, javítócsomagok Microsoft Update Services integráció Common Criteria Tervezett: EAL4+ (Evaluation Assurance Level 4, vagy erősebb) Biztonsági eszközök MBSA (Microsoft Baseline Security Analyzer) SQL Server Best Practices Analyzer Authentication Password policy enforcements for SQL logins Strengthening SQL Authentication Privacy and Encryption Native support for Encryption and Decryption of data Infrastructure for Key management Authorization Enhancements User Schema Separation Module Execution Context Catalog Security Granular Permission Control Auditing DDL Triggers Events
Redukált (támadási) felület SQL Server Surface Area Configuration varázsló
Surface Area Configuration demó
Jelszó házirend A helyi NT jelszó házirend alapján Megvalósítás Jelszó erősség, lejárat Fiók kizárás Alapértelmezett működés Megvalósítás Új jelszó házirend ellenőrző API a Windows 2003 Server-től kezdve Azonosításkor, jelszó megadáskor hívják Adminisztrátori opciók a login-ok kapcsán Házirend ellenőrzések, lejárat ki/be kapcsolása Jelszócsere előírása az első bejelentkezéskor Login-ok gyors letiltása
A felhasználók és a sémák szétválasztása A principálisok és a sémák szétválasztása Principális Az egyedek, akikkel szemben az objektumokat védjük sys.database_principals nézet Séma Objektum konténer; a 4 részes név 3. darabja sys.schemas nézet A default séma A felhasználók és a szerepkörök tulajdonsága A névfeloldáskor használja a kereső algoritmus sys.database_principals Új DDL a felhasználókra és a sémákra CREATE/ALTER/DROP - USER/ROLE/SCHEMA A felhasználó megszüntetése nem igényli a séma átnevezését
Default Schema Névfeloldáshoz, ha nincs megadva a sémanév Az SQL2000-ben a „dbo” az alapértelmezett „séma” A dbo séma bővítése potenciális biztonsági rés A tulajdonosi lánc helytelen használata esetén SQL2005-ben csak akkor a „dbo” az alapértelmezett séma, ha az adatbázis felhasználónál nincs default schema megadva create/alter user … WITH DEFAULT_SCHEMA = sémanév
Sémák és felhasználók Az adatbázis több sémát tartalmazhat Minden sémának van tulajdonosa – user vagy role Minden felhasználónak van alapértelmezett sémája, aminek nem feltétlenül ő a tulajdonosa Az adatbázis objektumok sémákban léteznek A tulajdonosi lánc változatlanul működik Adatbázis Approle1 User1 Role1 Has default schema Owns Owns Schema1 Owns Schema2 Schema3 SP1 Fn1 Tab1
Végrehajtási környezet SQL Server 2000 Execute jog ellenőrzés User3-ra Select jog ellenőrzés User3-ra User2.Proc1 User1.T1 User 3 User1.Proc1 User1.T1 Execute jog ellenőrzés User3-ra Nincs jogosultság ellenőrzés User3-ra SQL Server ‘Execute AS ‘X’ ’ Ownership chaining works for DML only (no DDL, no exec) User 3 User2.Proc1 User1.T1 Execute jog ellenőrzés User3-ra Select jog ellenőrzés‘X’-re, Nem user3-ra
Modul végrehajtási környezet Module Tárolt eljárás, függvény, trigger A tulajdonosi lánc helyett/mellett használható A tulajdonosi lánc szabályok változatlanul érvényesek A jogosultságokat a végrehajtási környezetre ellenőrizzük Az adat definíciós utasításokra és a dinamikus SQL-re is A modulok végrehajtási környezetét tartalmazó rendszer nézetek: sys.sql_modules és a sys. assembly_modules
Modul végrehajtási környezet (2) Execute AS CALLER A modul utasításai a modult közvetlenül hívó nevében (és jogaival) hajtódnak végre Alapértelmezett viselkedés, hasonló az SQL Server 2000-hez Execute AS ‘user’ A modul a megadott felhasználóval hajtódik végre Az execute as záradékot megadó felhasználónak IMPERSONATE jog kell a megadott ‘user’-re Execute AS SELF A végrehajtás a záradékot megadó felhasználó nevében történik Execute AS OWNER Az utasítások a modul mindenkori tulajdonosa nevében futnak Impersonate jog kell az aktuális tulajdonosra (megadáskor) Kiszolgáló hatókörű DDL triggerek esetén: Execute AS ‘login’
Példa az Execute As használatára Probléma: A TRUNCATE jog nem továbbadható Az ALTER jog a TRUNCATE-et tartalmazza, de az túl sok lenne Megoldás: Execute As Tárolt eljárást készítünk a TRUNCATE-re Execute As egy olyan felhasználóval, akinek van ALTER joga Grant execute jog a cél felhasználónak Eredmény: A TRUNCATE jogot „továbbadhatóvá” tettük
Új jogosultságok A legtöbb objektumra vonatkoznak a következő jogosultságok CONTROL: tulajdonos-szerű jogok ALTER: a tulajdonságok megváltoztatása ALTER ANY ‘X’: ALTER jog minden X típusú objektumra Take Ownership: a tulajdonjog átvételének joga Rendszer nézetek sys.database_permissions, sys.server_permissions
Jogosultság alapú meta-adat biztonság A meta-adatok alapértelmezésben védettek A sysadmin szerep mindent láthat a kiszolgálón Az adatbázis tulajdonos (dbo) mindent láthat az adatbázisban Az objektum tulajdonosa láthatja az adott objektum adatait A ”VIEW DEFINITON” engedély teszi lehetővé az objektum meta-adatainak olvasását
A rendelkezésre állás fokozása Automatikus feladatátvétel Feladatátvevő fürtözés (Failover Clustering) Adatbázis tükrözés Adatbázis karbantartás, helyreállítás Online index műveletek Gyors helyreállítás (recovery) Online, akár lap szintű visszatöltés Egyidejű adatelérés, blokkolás elkerülése Pillanatfelvétel izoláció Egyéb fejlesztések Adatbázis pillanatfelvételek Replikáció
Adatbázis tükrözés Magas rendelkezésre állás – alacsony költséggel Ügyfelek Adatbázis feladatátvétel <3 mp Automatikus/ manuális feladatátvétel Automatikus kliens átirányítás Standard hardver eszközök Tanú Napló rekordok Principális Tükörkép
Az adatbázis tükrözés előnyei Gyors, automatikus feladatátvétel Adatbázis szinten teljes másolat Különálló gépek Az adatok két példányban léteznek A gépek szabványos hálózaton keresztül kommunikálnak Nem igényel speciális hardvert Önellenőrző Magas rendelkezésre állás – adatbázis szinten Purpose: Introduce the feature and tell the audience exactly what DBM is High Availability Achieves HA by maintaining two copies of data Monitors the servers Uses standard/commodity hardware
Tükrözés - szerepkörök Principális Fogadja az ügyfél kapcsolatokat Engedi az adatok módosítását Tükörkép („azonnali” tartalék) A principálisnál történő változásokat végrehajtja a tükör adatbázison Az ügyfelek közvetlenül nem érik el a tükörképet Szerepet cserélhet, principálissá válhat A tükörkép pillanatfelvételei felhasználhatók jelentés készítésre
A tanú szerepe Lehetővé teszi az automatikus feladatátvételt Megakadályozza a „megosztott agy” problémát „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? Csak az a kiszolgáló lehet principális, amelyik legalább egy másik kiszolgálóval képes kommunikálni
A tanú jellemzői Egy SQL Server 2005 példány Egy tanú több tükrözést támogathat Nagyon kevés erőforrást fogyaszt Válaszol a „ping”-ekre Közli, hogy a másik kiszolgáló él-e Nem egyetlen meghibásodási pont A tükröző partnerek egymással is meg tudnak állapodni Amíg két szerver tud kommunikálni egymással, a tükrözés működőképes
A tükrözés folyamata - szinkron Nyugta Érvényesítés Nyugta Folyamatos előregörgetés Továbbítás a tükörhöz Napló írás nyugta Tranzakció-napló írás Tranzakció-napló írás DB Log Log DB
Adatbázis tükrözés - szinkron A principális egyszerre írja a saját tranzakciónaplóját és küldi a hálózatra a módosításokat A tranzakció akkor érvényesítődik, ha a tükör is beírta a módosításokat a saját tranzakciónaplójába Feladatátvétel esetén nincs adatvesztés A tükörkép kész a feladatátvételre, ha megtörtént a tranzakciók előregörgetése – az esetleges visszagörgetésre nem kell várni Automatikus feladatátvétel lehetséges
Az adatbázis állapotai a tükrözési folyamat során SYNCHRONIZED A tükör is minden adatot tartalmaz SYNCHRONIZING A tükör le van maradva, de dolgozik SUSPENDED A tükrözés fel van függesztve DISCONNECTED A kiszolgáló nem tud kommunikálni a partnerrel EXPOSED (veszélyeztetett) = SYNCHRONIZING / SUSPENDED / DISCONNECTED
Szinkron és aszinkron tükrözés A biztonsági szint beállítása szerint SECURITY: FULL – csak akkor érvényesítünk a principálison, ha a módosítás naplózódott a tükörképen is A tükrözés hatással van a principális áteresztőképességére A feladatátvétel ideje szabályozható (REDO_QUEUE adatbázis opció) SECURITY: OFF – a principális nem vár a tükörkép nyugtájára A tükrözés hatása a principális áteresztőképességére minimális
Aszinkron tükrözés Nyugta Érvényesítés Folyamatos előregörgetés 1 Nyugta Érvényesítés 3 2 Folyamatos előregörgetés Továbbítás a tükörhöz 2 Napló írás megtörtént Tranzakció-napló írás Tranzakció-napló írás DB Log Log DB
Az tükrözés alkalmazásai Magas rendelkezésre állás Biztonság: FULL Automatikus feladatátvétel Egy kiszolgáló elvesztése esetén az adatbázis változatlanul használható Magas védelem Biztonság: FULL; nincs tanú manuális áttérés Nagy teljesítmény Biztonság: OFF A rendszergazda végzi a feladatátadást Adatvesztés lehetséges Egy fajta mentési mechanizmus High protection = Security: full, nincs tanú
Adatbázis tükrözés demó
Gyors helyreállítás (recovery) SQL Server 2000 Az adatbázis a visszagörgetés után hozzáférhető SQL Server 2005 Az adatbázis a visszagörgetés megkezdésekor hozzáférhető Előregörgetés Visszagörgetés Használható Idő Előregörgetés Visszagörgetés Használható
Adatbázis pillanatfelvétel Mire jó? Felhasználói hiba kivédése Visszatérés a „múltba” A hiba megtörténte előtt kell pillanatfelvételt készíteni Erősen használt adatbázis adott állapotának elmentése Például, adatbázis tükörkép esetén Jelentéskészítés céljából
Adatbázis pillanatfelvétel Az adatbázis állapota egy adott időpillanatban Azonnal létrejön Csak olvasható Az eredeti adatbázis változását nem korlátozza A pillanatfelvétel új (csak olvasható) adatbázisként jelenik meg Hiba esetén visszanyúlhatunk a pillanatfelvételhez a régi adatokért
Pillanatfelvétel Technológia Helykímélő Csak a módosult adatlapokat tároljuk Másolás íráskor (Copy-On-Write) Kezdetben a kópia nem igényel helyet A pillanatfelvétel létezése befolyásolja az eredeti adatbázis működési sebességét
Pillanatfelvétel Másolás íráskor Northwind Northwind_SS Parancs Create Northwind_SS Update Northwind Read Northwind_SS Value R D B H J L Y M Value Eredmény: D D X D Tárolási igény 12.5% 0%
Pillanatfelvétel a tükörképen Több pillanatfelvétel is készíthető Minden pillanatfelvétel saját névvel rendelkezik Az adatbázis állapotát eltérő időpontokban mutatják A tükörképen létrehozott pillanatfelvételek befolyásolhatják a principális működését Az egy időben létező pillanatfelvételek számát csak az erőforrások korlátozzák
Jelentéskészítés a tükörképen Pillanatfelvételekkel Adatbázis tükrözés OLTP kliensek Tanú Principális Tükörkép Pillanatfelvételek Jelentéskészítő kliensek
Online index műveletek Online index karbantartás Create, Rebuild, Reorganize, Drop Add / Drop Constraint Parallel végrehajtás (MAXDOP opció) Online/offline választható Online és Parallel csak EE (!)
Pillanatfelvétel tranzakció izoláció Az adatok olvasásakor az utasítás, vagy a tranzakció megkezdésekor érvényes utolsó értékeket látjuk Nincs zárolás Az olvasások nem blokkolják a módosításokat és a módosítások nem blokkolják az olvasásokat Javítja az adatok elérhetőségét, csökkenti a deadlock-ok kialakulását Az adatsorok verziózásán alapul (tempdb) Adatbázis szinten lehet engedélyezni
Pillanatfelvétel izoláció változatok A Read Committed szint új változata Zárolás nélküli Read Committed Utasítás szintű pillanatfelvétel izoláció Olvasáskor az utasítás kezdetekor érvényes utolsó értéket kapjuk Új tranzakció izolációs szint Snapshot – új izolációs szint Tranzakció szintű Olvasáskor a tranzakció kezdetekor érvényes utolsó értéket kapjuk
SQL Server 2005 Tranzakció izolációs szintek Lehetséges anomáliák Izolációs szintek Érvénytelen adat olvasás Nem megismétel-hető olvasás Fantomok UPDATE konfliktus Egyidejű elérés vezérlése Read Uncommitted igen nem nincs Read Committed zárolással pillanatfelvétel pesszimista optimista Repeatable Read Snapshot Serializable
A pillanatfelvétel engedélyezése és az izolációs szint beállítása Engedélyezés – adatbázis szinten alter database <adatbázis> set READ_COMMITTED_SNAPSHOT on és/vagy: alter database <adatbázis> set ALLOW_SNAPSHOT_ISOLATION on Izolációs szint beállítás – kapcsolat szinten set transaction isolation level read committed set transaction isolation level snapshot A tranzakció működése az engedélyezett és a beállított értéktől is függ
Read Committed Snapshot Adatbázis: READ_COMMITTED_SNAPSHOT on Kapcsolat: set transaction isolation level read committed A módosítások nem blokkolják az olvasásokat és fordítva A módosítások blokkolják egymást! A módosítások zárakkal történnek Nem használható a master, az msdb és a tempdb adatbázisokkal
Snapshot Adatbázis: ALLOW_SNAPSHOT_ISOLATION on Kapcsolat: set transaction isolation level snapshot A módosítások nem blokkolják az olvasásokat és fordítva A módosítások konfliktusba kerülhetnek Elvesztett módosítás veszélye Automatikus és kötelező konfliktus feloldás véd az „elvesztett módosítás” probléma ellen Alapértelmezett a master–en és az msdb-n
Pillanatfelvétel izoláció demó
Replikáció újdonságok Tranzakcionális replikáció Oracle-ből az SQL Server-be HTTPS Merge szinkronizálás AZ SQL Server 2005 új adattípusainak támogatása Pont-pont replikáció A replikált táblák szerkezete módosítható Jobb biztonság, teljesítmény, adminisztráció, diagnosztika, …
Partícionált táblák és indexek Értéktartomány (range) alapú partícionálás A táblákat, indexeket több tárolási objektumra bontjuk egy adatoszlop értéke szerint A relációs motor és az SQL programozó számára a tábla egyetlen egység marad A tároló motor több objektumként kezeli a partíciókat Max. 1000 partíció / tábla The idea of partitioning is to create multiple storage objects for manageability and performance while still treating them as a single object
Egy nagy monolitikus tábla Order History Customer ID Order Date Amount … Order ID Példa: Az ORDER HISTORY tábla; egy nem fürtözött index a CUSTOMER ID-n Nem partícionált: Filegroup DATA Order History Table Let’s look at an example of partitioning. First consider the monolithic storage example here, where we create two filegroups. One for data, a second for the index (Customer ID) Filegroup IDX Customer ID Index
Partícionálás és tárolás ORDER DATE szerint: Orders Customer ID Order Date Amount … Order ID Order History Customer ID Order Date Amount … Order ID Filegroup DATA_2002 Filegroup DATA_2003 Filegroup DATA_2004 Order History Table Order History Table Order History Table Filegroup IDX_2002 Filegroup IDX_2003 Filegroup IDX_2004 Customer ID Index Customer ID Index Customer ID Index Compare the preceding monolithic example of two file groups for the entire table – one for data, second for index with this example of a partitioned table. Here we a partitioned table consisting of 3 filegroup (or storage object) pairs, each containing a slice of the data. Partitioned by ORDER_DATE, each pair contains a year’s worth of data and index. Notice the nonclustered index is on CustomerID. The index on CustomerID is split into 3 different storage portions or structures corresponding to the 3 different yearly date ranges or slices on Order Date. The physical implementation of 3 filegroup pairs is a storage concept, not a relational concept. Order Date < ‘2003-01-01’ Order Date >= ‘2003-01-01’ and Order Date < ‘2004-01-01’ Order Date >= ‘2004-01-01’
A partícionált táblák előnyei Kezelhetőség Gyors adatbetöltés és törlés Darabonkénti mentés/visszatöltés a „régi” adatokra Partíciónkénti index kezelés Nincs index töredezettség a régi adatokra Eltérő tárolási mód lehetséges a régi adatokra Jobb lekérdezési sebesség a nagy táblák esetén Hatékony join, ha az illeszkedő táblák azonosan partícionáltak Kisebb index fát és adatpartíciót kell bejárni Manageability 1. Deletion and data loading can be very fast if done by partition. 2. Backup and restore of partitions provides flexibility – only backup those partitions that change rather than entire monolithic table. Create a backup of historic data once. Can recover a single partition without bringing the table down, as long as queries are not accessing the partition being recovered, query activity continues uninterrupted. 3. Can reorganize, optimize and rebuild indices by partition. Less intrusive, faster to do a partition at a time. Spread maintenance over days rather than bringing a 3TB table down for maintenance. 4. Less fragmentation of indexes because history doesn’t change. Hot spots in current partition, easier to manage rather than a single object with page split & fragmentation. This allows you to concentrate on the hot partitions and reorganize as needed. 5. Alternative storage: example, can use NTFS file compression on historical data in SQL2005. Historical unchanging data on a compressed filegroup will the current data can be kept on high performance RAID10 file group. Performance Faster joins – special performance advantages with aligned tables (e.g. partitioned in the same manner) Smaller b-trees for each partition makes partition access fast, especially when we limit rows by partition key, accessing a subset of data. 3. In SQL2000, the time it takes to optimize a partitioned view is a function of how many tables are in the underlying partitioned view. Treating a SQL2005 partitioned table as a single object means smaller more concise query plans, optimization is fast, and many operations can be done in parallel. 4. Another example of performance benefits in terms of concurrency, lock escalation stops at the partition level.
A partícionálás elemei Objektumok: Partíció függvény Partíció séma Műveletek: Megosztás - Split Partition Összefésülés - Merge Partition Csere - Switch Partition How do we build and work with partitioned tables. Building blocks or objects. Operations (for maintenance)
A partíció függvény A partícionáló oszlop adatait egész számokra képezi le A határpontok által definiált N pont N+1 partíció Boundary 1 Boundary 2 Boundary 3 Boundary 4 Partition function is used to figure out how to map a data type to a particular partition using boundary points to establish the domain of the partition. You always have one more partition (N+1) than boundary points (N). Partition # 1 2 3 4 5
Partíció függvény példa CREATE PARTITION FUNCTION annual_range (DATETIME) as RANGE RIGHT /* a határpontokra eső adatok helye */ for values ( -- Partition 1 -- 2001 és korábbi '2002-01-01', -- Partition 2 -- 2002 '2003-01-01', -- Partition 3 -- 2003 '2004-01-01', -- Partition 4 -- 2004 '2005-01-01' -- Partition 5 -- 2005 és későbbi ) Partíció sorszám lekérdezése: select $partition.annual_range(‘2003-03-15’) This DDL creates partitions based on a datetime datatype. Range right means if you have a value = to boundary point, it goes into that partition on the right. Range right is the most natural partitioning scheme because every boundary is the starting point for that partition. Range left means if you have a value = to boundary point, it goes into the partition to the left.
Partíció függvény példa (2) Boundary 1 Boundary 2 Boundary 3 Boundary 4 2002-01-01 2003-01-01 2004-01-01 2005-01-01 Partition # 1 2 3 4 5 4 boundary points implies 5 partitions. N boundary points describe N+1 partitions dátum < 2002-01-01 2002-01-01 <=dátum < 2003-01-01 2004-01-01 2005-01-01 <=dátum
Partíció séma Egy-egy fájlcsoportot rendel a partíciókhoz Nem kötelező különböző fájlcsoportokat használni Különböző fájlcsoportok használata hasznos lehet mentés/helyreállítás esetén Partition scheme is used to map the partition defined by the partition function to an underlying storage location. Can be mapped to same or different storage locations. Categories of storage can be used. For high performance, spread across as many drives as possible.
Partíció séma példák CREATE PARTITION SCHEME annual_scheme_1 as PARTITION annual_range to (annual_min, -- filegroup pre-2002 annual_2002, -- filegroup 2002 annual_2003, -- filegroup 2003 annual_2004, -- filegroup 2004 annual_2005) -- filegroup 2005-től Create PARTITION SCHEME annual_scheme_2 as PARTITION annual_range ALL to ([PRIMARY]) Note that the partition scheme_1 example here lists the file groups that we want to map partitions to, in order.
Partícionált táblák és indexek A partícionáló kulcs csak egyetlen oszlop lehet A partícionált táblák és indexek partíció sémákon hozhatók létre (nem fájlcsoportokon) Több tábla és index is használhatja ugyanazt a partíció függvényt és sémát Partition schemes map to filegroups. Once you create a partition function, you can create many partition schemes using that partition function. Once you create a partition scheme, you can create many tables and indexes using the partition scheme. Partíció függvény Partíció séma Tábla, index
Tábla és index létrehozása CREATE TABLE Order_History ( Order_ID bigint, Order_Date datetime, Customer_ID bigint … ) ON Annual_Scheme_1(Order_Date) CREATE INDEX Order_Cust_Idx ON Order_History(Order_ID) ON Annual_Scheme_1(Order_Date) Here is the create table / index statements. Notice the ON clause referencing the partition scheme using Order_Date as the partitioning column. Notice the index key is Order_ID while the partitioning key is Order_Date.
Index partícionálás Ha egy index hasonló partíció függvényt használ és ugyanazt a partícionáló kulcsot használja, mint az alaptábla, akkor az index „illeszkedő” (aligned) 1-1 megfelelés az adat és index partíciók között Hasonló: Azonos adattípus Azonos számú partíció Azonos határpontok Index létrehozásakor alapértelmezett az illeszkedő index Lehetővé teszi a gyors partícióváltást (switch partition) Index alignment means index rows in a partition map to data rows in the corresponding base table partition. Default is aligned indexes. Create index (with no partition scheme) will automatically use the same partitioning key & partition scheme as the base table. An index does not have to participate in the same named partition function to be aligned with its base table. However, the partition function of the index and the base table must be essentially the same, in that: 1) The arguments of the partition functions have the same data type; 2) They define the same number of partitions; and 3) They define the same boundary values for partitions.
Partícionált táblák adatainak lekérdezése Ha a partícionáló kulcs szerepel a WHERE záradékban, a végrehajtás kevesebb partíciót érint Select * from OrderHistory o where … o.date_key between ‘2002-01-01’ and ‘2002-06-30’ Vigyázat: join-on keresztül nem tudjuk szűkíteni az érintett partícók számát Select * from Sales s INNER JOIN Region d on d.region_id = s.region_id where … d.Name = ‘Asia’ Partition elimination requires the partitioning key in the where clause. Restriction via join does NOT eliminate partitions
Műveletek partíciókkal Megosztás - Split Partition Összefésülés - Merge Partition Csere - Switch Partition Basic operations for incremental loads, deletes, archiving etc.
Split Az új határpont egy partíciót kettéoszt ALTER PARTITION FUNCTION … SPLIT RANGE … Új határpont felvétele a partíció függvényben Minden objektumra hat, amelyik a függvényt használja Az új határpont egy partíciót kettéoszt Az új partícióba eső adatokat a tároló motor átmozgatja a régi helyükről Azonnal megtörténik, ha a partíció üres Partícionált tábla végein célszerű mindig egy üres partíciót fenntartani This adds a new boundary point. The performance caveat is whether rows need to be moved to the new partition. If rows are moved, an exclu table lock applied until the rows are moved.
Merge ALTER PARTITION FUNCTION … MERGE RANGE Eltávolít egy határpontot a partíció függvényből A határpont két oldalán levő partíciók adatai összemásolódnak Sok írással, olvasással járó művelet Gyors (azonnali) ha a két partíció üres An exclusive table lock is held until the data is moved.
Switch Felcseréli a forrás partíciót, vagy táblát egy másik tábla egy üres partíciójával, vagy egy üres táblával (cél) Tisztán meta-adat művelet Megkötések: A cél üres kell, hogy legyen A forrás és a cél azonos fájlcsoportban legyen A forráson legyen meg minden index, amit a cél megkövetel, illeszkedve, és a megfelelő fájlcsoporton Ha a cél egy partíció, a forrás táblán legyen olyan check constraints, ill. a forrás partíció olyan legyen, ami beleillik a cél partíció tartományba A csere az összes kapcsolódó indexet is automatikusan magával viszi If your table and indexes are aligned, you can instantly switch in/out data
Switch tippek Ha táblát cserélünk partícióra, a tábla indexeinek tartalmazni kell a partícionáló kulcsot CREATE INDEX, INCLUDE opció A $partition.<partíció függvény> konstrukciót használjuk az abszolút partíció sorszámok helyett A partíció sorszámok változhatnak Currently INCLUDE doesn’t work. In BETA3, we will use INCLUDE.
Csúszó időablak kezelés Új adatok betöltése 2002-01-01 2003-01-01 2004-01-01 2005-01-01 2006-01-01 [üres] [üres] [üres] Partíció # 1 2 3 4 5 6 2001 & korábbi 2002 adatok 2003 adatok 2004 adatok 2005 adatok 2005 & későbbi 2006 & későbbi Előkészítő tábla létrehozása Split az utolsó partíción Bulk load és index az előkészítő táblán Switch Main design point for sliding window is you always reserve an empty partition at either end. This means switching operations will be instantaneous for either adding (switching in) or archiving (switching out) The idea of doing this as efficiently as possible – keep table available, meta data only e.g. pointer switches. When you build the staging table, it is outside of the partitioned table. Thus, you have no availability hit while loading the staging table, and then add indexes to the staging table. Lastly, the pointer switch is instantaneous. 2005 Staging Table
Csúszó időablak kezelés A legrégebbi adatok törlése 1 2 3 4 5 2002-01-01 2001 & korábbi [üres] 6 2003-01-01 2004-01-01 2005-01-01 2006-01-01 [üres] [üres] Partíció # 1 2 3 4 5 2002 & korábbi 2003 adatok 2004 adatok 2005 adatok 2006 & későbbi Üres tábla létrehozása az eltávolítandó adatok számára Switch Merge Getting rid of 2002 data. Remember that the 2001 data that was once in partition 1 is already emptied in keeping with the recommendation to keep a partition on either end EMPTY. 2002 Unload Table
Mentés, visszatöltés A partícionálással kihasználhatjuk az SQL Server 2005 új szolgáltatásait A Read-Only fájlcsoportok a tranzakciónapló visszatöltése nélkül is helyreállíthatók Nem változó, historikus adatok esetén meggyorsítja a mentést
Online visszatöltés SQL Server 2000 SQL Server 2005 Visszatöltés közben az adatbázis offline, nem használható SQL Server 2005 Az adatbázis online marad Csak a visszatöltött rész nem elérhető Visszatöltés részekben File / Filegroup visszatöltés A megsérült adatlapok követése és lap szintű visszatöltés
Programozhatóság Elvárások SQL Server 2005 Hatékony fejlesztés Üzleti logika a kiszolgálón Kevéssé strukturált adatok kezelése Együttműködés más rendszerekkel SQL Server 2005 Visual Studio integráció CLR függvények, eljárások, triggerek XML adattípus kezelés a kiszolgálóban Natív http, SOAP Transact-SQL továbbfejlesztések Developer Productivity - Integration with Visual Studio, .NET and Web Services Native XML technology Built-in community integration (Internal tests show some scenarios have a 40x performance increase with one-fifth the code for things that T-SQL doesn’t do so well but C#/VB/.NET Framework do great – string manipulation, complex math, etc.)
.NET és Visual Studio integráció Programozási nyelvek választéka T-SQL a halmaz-orientált adatkezelésre .NET nyelvek a procedurális algoritmusokra Az üzleti logika helye választható Adatbázis, középső réteg, ügyfél oldal Ugyanaz a modul, ugyanaz az adatelérési felület (ADO.Net) Integrált hibakeresés Különböző nyelveken keresztül – TSQL és .NET Rugalmas, bővíthető kód Függvények, tárolt eljárások, triggerek – SQL-ben, vagy .Net nyelven Felhasználói adattípusok, aggregátumok XML adattípus Internal tests show some scenarios have a 40x performance increase with one-fifth the code for things that T-SQL doesn’t do so well but C#/VB/.NET Framework do great – string manipulation, complex math, etc.) Visual Studio supports a new SQL Server 2005 Project system Easy to develop, debug and deploy .NET code for SQL Server 2005 Integrated debugging experience across mid-tier and database tier Seamlessly step cross-language – TSQL and .NET Set breakpoints anywhere, inspect anything Customer benefit : Increased Productivity CLR Integration benefits: Rich Languages, APIs in the Database + Tools Developer Productivity In-Proc Data Access via ADO.NET Allows portability of code from/to middle-tier Managed Functions - Mixture of data access & business logic Demand Forecasting application being developed as a scenario Managed Procedures - XP replacement Robust alternative to access external resources (file/registry) UDTs - Small, scalar types to augment SQL’s native typespace E.g. Date, time
Üzleti logika megvalósítása a kiszolgálón - CLR Függvények, tárolt eljárások, triggerek - tetszőleges CLR nyelven Számításigényes algoritmusokat procedurális nyelvekben könnyebb megírni és a kapott kód gyorsabban fut, mint ugyanaz Transact-SQL-ben A Transact-SQL (T-SQL) beépített függvényeinek kiterjesztése Célterület: Szá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 SQL Server Nem (csak) SQL Server API-kat használó modulok Külső erőforrások elérése
CLR runtime SQL Server (in-process) A fejlesztés menete VB,C#,C++ Build VS .NET Project Assembly: “MyLib.dll” SQL Data Definition: create assembly … create function … create procedure … create trigger … create type … CLR runtime SQL Server (in-process) SQL Server SQL lekérdezés: select dbo.függvény(paraméter)
Függvények Skaláris Tábla-értékű
Skaláris CLR függvények Egy .NET Framework assembly egy osztályának metódusai A visszatérési érték Csak skaláris (Unicode) lehet Nem lehet: rowversion, text, ntext, image A visszaadott .Net adattípusnak illeszkednie kell egy SQL Server adattípushoz Testre szabott attribútumok használhatók [SqlFunction(attribútumok)]
Skaláris CLR függvény készítése demó
A skaláris függvények attribútumai SqlFunction[(függvény-attribútum [,...])] IsDeterministic= {true | false} DataAccess = { DataAccessKind.None | DataAccessKind.Read } Felhasználói táblák elérése SystemDataAccess = { SystemDataAccessKind.None | SystemDataAccessKind.Readread } Rendszer katalógusok, nézetek elérése IsPrecise = { true | false }
A skaláris függvények attribútumai - példa [SqlFunction(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 függvénnyel A CLR skaláris függvényeket felhasználhatjuk számított oszlopok létrehozására A PERSISTED kulcsszóval előírhatjuk a számított oszlop tárolását CLR függvénnyel készített számított oszlopra akkor készíthető index, ha determinisztikus, nem végez adathozzáférést PERSISTED (tárolt)
Index 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ű függvények A függvény értéke táblaként használható A tábla értékű függvény adatainak elérése T-SQL függvény esetén: belső munkatáblán keresztül (spooled) CLR függvény esetén: adatfolyam (streamed) Nem kell bevárni az egész adathalmaz elkészültét a feldolgozással A függvénynek implementálni kell az ISqlReader interfészt - plans to simplify the interface requirements
Tábla értékű CLR függvény készítése demó
CLR tárolt eljárások A függvényekkel ellentétben: Végezhetnek adat definíciós (DDL) és adat módosító (DML) műveleteket Küldhetnek eredményeket a kliens oldalra Felhasználási terület A CLR előnyös, ha: Sok számítást végzünk az adatokon A korábbi verziókban használt kiterjesztett tárolt eljárások (Extended Stored Procedures) helyett Halmaz műveletekre változatlanul az SQL a legjobb
Adatelérés CLR tárolt eljárásból In-process adatelérésre optimalizált ADO.NET szolgáltató System.Data.SqlServer névtér A programozási modell alapvetően megfelel az SqlClient-nek SqlConnection, SqlCommand, SqlReader, SqlParameter Bővítmények SqlContext SqlPipe – eredmények küldése a kliens felé SqlTriggerContex – a triggerek számára SqlContext - IsAvailable property is read-only, and returns true if the calling code is running inside SQL Server. If IsAvailable == false, all the other SqlContext members will throw an InvalidOperationException if used.
CLR adatmó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ése SqlPipe - Send metódus (overloaded): void Send(string message) T-SQL: print void Send(SqlDataReader reader) Több soros eredményhalmaz void Send(SqlDataRecord record) Egy soros eredményhalmaz Adatbázis lekérdezés eredménye a kliensre: SqlPipe.Execute(SqlCommand) SqlCommand cmd = SqlContext.GetCommand(); cmd.CommandText = "select @@version"; SqlContext.GetPipe().Execute(cmd);
Eredményhalmaz küldése (2) Előzőleg végrehajtott lekérdezés eredményének elküldéseküldése public 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é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ése newRecord.SetSqlString(0, "Hello World!"); //rekord elküldés SqlContext.GetPipe().SendResultsStart(newRecord, true /*sending row*/); //a küldés befejezése SqlContext.GetPipe().SendResultsEnd();
Triggerek DML és DDL triggerek is készíthetők CLR-ben A triggerek a TriggerContext objektumon keresztül érik el a módosításra vonatkozó információkat
Trigger ADO.NET bővítmények SqlContext.GetTriggerContext() bool [ ] ColumnsUpdated: T-SQL: ColumnsUpdated() TriggerAction: a triggert elindító művelet tc =SqlContext.GetTriggerContext(); if (tc.TriggerAction == TriggerAction.Update) LogDirectUpdate(…);
Felhasználási javaslatok A CLR nem a Transact-SQL helyett van A CLR modulok lehetővé teszik Komplex, procedurális üzleti logika megvalósítását Külső adatok elérését Az üzleti logika SQL Serverben történő megvalósítását Nem „kötelező” minden üzleti logikát kiszolgálóban megvalósítani Skálázhatósági megfontolások
XML kezelés XML támogatás az SQL Server 2000-ben Beépül az adatbázis-motorba XML adattípus, XML manipuláció, XML indexek, XML sémák XML adat-manipuláció a kiszolgálón
SQL Server 2000 – kiszolgáló XML be és XML ki XML DOM … 2 1 sp_xml_preparedocument XML data Parse 5 select … for xml … Table OpenXML 3 … Phone ID name 4 insert into …
SQL Server 2000 – középső réteg XML nézetek Annotált leképező sémák (XDR, XSD) SQLXML 3.0 SP2 1 Bulk load Lekérdezés, updategram XML View Person 3 FN LN Address Phone 2 Phone Address Last Name First Name
SQL Server 2005 XML a relációs adatbázisban XML adattípus Oszlop, változó, … Típus nélküli, és/vagy séma gyűjteménnyel ellenőrzött Ellenőrzések (constraint-ek) XML adatokon Bináris, vagy szöveges tárolás (max. 2GB) XML adatok lekérdezése és módosítása XQuery (fejlődő W3C szabvány), XPath 2.0 Indexek XML oszlopokon Elsődleges XML index: B+ fa minden címkén, értéken és ösvényen Másodlagos XML indexek (PATH, PROPERTY, VALUE) XML adattípus: belső (bináris) ábrázolás Ha van xsd, akkor a megfelelő adattípust használjuk. Ha nincs: string. (A bináris tárolás kb. 20%-kal kevesebb hely.) XML index: B+ tree A belső ábrázolás megőrzi az XML dokumentum struktúráját
SQL Server 2005 A relációs és XML adatok integrációja Egységes relációs és XML tároló A meglevő SQL Server tároló motor és lekérdezés optimalizáló felhasználásával A relációs és az XML záradékok ugyanabba az optimalizált lekérdezési tervbe kerülnek Az integrált XML adattípus előnyei Kevéssé strukturált adatok modellezése A táblákra bontás, ill. újra összekapcsolás költsége eltűnik Az XML feldolgozást az SQL Server optimalizálja A meglevő relációs táblákba beilleszthető XML oszlopok nem igénylik a működő alkalmazások módosítását
Kiszolgáló oldali XML támogatás Tárolás XML adattípus, varchar(max), varbinary(max) Táblákra bontás openXML() és XML metódusok query() – XML dokumentum egy részének előállítása value() – skaláris érték kiolvasása exist() – létezés vizsgálata nodes() – csomópontok keresése az XML dokumentumban modify() – XML dokumentum egy részének módosítása query – untyped XML value – T-SQL type exists – 0, 1 nodes – special XML data type
Kiszolgáló oldali XML támogatás (2) Indexelés XML indexek Full-text index az elemek tartalmára Lekérdezés for xml … [type] XQuery, XPath XSD támogatás CREATE XML SCHEMA COLLECTION CLR támogatás System.Xml névtér eszközei
Eszközök az XML dokumentumok kezeléséhez XML szerkesztő SQL Server Management Studio-ban Integration Services XML dokumentum táblákra bontása XML dokumentum XML oszlopokban történő tárolása
Adatmodellezési javaslatok Strukturált adatok, ismert séma relációs modell Bevált, ismert technológia Esetleg [n]varchar(max) oszlopok a tárolásra, ha nem akarjuk manipulálni a dokumentumot a kiszolgálón XML adattípus Egyszerű adatkezelés kevéssé strukturált adatok esetén Jobb teljesítmény, mintha felbontanánk és újra összeállítanánk a komplex XML dokumentumokat Egyszerű migráció text típusú oszlopról: ALTER TABLE <tábla> ALTER COLUMN <oszlop> XML [XML schema collection]
XML kezelés összefoglalás Gyengén strukturált adatok kezelése Natív XML adattípus Fejlett indexelés & lekérdezés optimalizálás Modern programozási nyelv a kiszolgálón Az XML támogatás beépül a relációs tárolóba és a lekérdezés optimalizálóba Az SQL Server eszközei használhatók hibakeresés, lekérdezési tervek, nyomkövetés – a meglevő eszközökkel
Transact-SQL újdonságok Lekérdezések Rekurzív lekérdezések Rang függvények Új relációs operátorok Adatmódosítás – output záradékkel Teljes-szöveges keresés Új adattípusok T-SQL procedurális bővítmények
Common Table Expression (CTE) és rekurzív lekérdezések Rekurzív hierarchia bejárása egyetlen lekérdezéssel Felhasználás Hierarchia egy táblában (főnök-beosztott, alkatrészek beépülése) Keressük egy főnök összes beosztottját Keressük egy termék beépülő alkatrészeit
Common Table Expression SQL-99 Szintaxis: WITH <CTE Név> ( <oszlop lista> ) AS ( <CTE definíció> ) SELECT … FROM … <CTE Név> Lehet rekurzív és nem rekurzív Nem rekurzív CTE: Olvashatóbb lekérdezések
Rekurzív CTE Önmagára hivatkozik Rekurzív CTE definíció: <nem-rekurzív SELECT> UNION ALL <SELECT a CTE felhasználásával> A rekurzió megáll, ha a második SELECT nem ad eredményt inicializálás gyűjtés
Rekurzív CTE példa WITH EmpCTE(ID, Név, Mgr, Szint) AS ( SELECT EmployeeID, FirstName+' '+LastName, ReportsTo, 1 FROM Employees WHERE ReportsTo is null UNION ALL SELECT E.EmployeeID, E.FirstName+' '+ E.LastName, E.ReportsTo, M.Szint+1 FROM Employees AS E JOIN EmpCTE AS M ON E.ReportsTo = M.ID ) SELECT * FROM EmpCTE Northwind adatbázis
Rang és sorszám függvények Az SQL-99 OLAP bővítmények szerint RANK() DENSE_RANK() NTILE(<expression>) ROW_NUMBER() Szintaxis <rang_függvény> OVER( [PARTITION BY <oszlop>] ORDER BY <oszlop>)
Rang és sorszám használata Adatelemzés (RANK, DENSE_RANK, NTILE) Sorrendeket generálhatunk különböző kritériumok szerint, egyetlen lekérdezésben A megjelenítés sorrendje eltérhet a rangoktól Lapozás a ROW_NUMBER segítségével Nagyobb eredményhalmaz megjelenítése
Rang példa A termékek rangjának lekérdezése eladott darabszám és egységár szerint select ProductName, sum(Quantity), rank() over (order by sum( Quantity) desc), rank() over (order by max(od.UnitPrice)) from dbo.Products p join dbo.[Order Details] od on p.ProductID=od.ProductID join dbo.Orders o on od.OrderID=o.OrderID group by ProductName order by ProductName Northwind adatbázis
Sorszámozás példa select N=row_number() over (order by CustomerID) , * from dbo.Orders Northwind adatbázis
TOP SQL 2000: SELECT TOP <konstans> SQL 2005: SELECT TOP (<kifejezés>) INSERT, UPDATE, DELETE esetén is használható A SET ROWCOUNT is használható a SELECT utasítás esetén felülbírálja a TOP-ot INSERT, UPDATE, DELETE esetén a TOP felülbírálja a SET ROWCOUNT-ot A következő verzióban () a SET ROWCOUNT nem fog hatni INSERT, UPDATE, DELETE esetén
Új relációs operátorok PIVOT, UNPIVOT, APPLY Sorokból oszlopokat készít Hasonló az Access TRANSFORM-hoz UNPIVOT A PIVOT ellentéte APPLY A külső tábla minden sorára kiértékel egy tábla értékű függvényt és a két táblát összekapcsolja
PIVOT példa, összegzés Make 1990 1991 Honda 2000 3000 Acura 500 600 Year Sales Honda 1990 2000 Acura 500 1991 3000 600 SELECT * FROM T PIVOT(SUM(Sales) FOR Year IN ([1990], [1991])) t Make 1990 1991 Honda 2000 3000 Acura 500 600
PIVOT példa, név-érték párosítás ObjID PropName PropVal 1 Name x.doc CrDate 12/3/2001 2 Sales.xls Author Higgins SELECT * FROM table PIVOT(MIN(PropVal) FOR PropName IN ([Name],[Author])) t ObjID Name Author 1 x.doc NULL 2 Sales.xls Higgins
DML utasítás OUTPUT záradékkal Az adatmódosító utasítás részeként sorokat tudunk visszaadni egy tábla változóba Az Inserted és Deleted virtuális táblák tartalmazzák a régi és új értékeket Példa: UPDATE Orders SET status= 'processed' OUTPUT DELETED.*, INSERTED.* into @tab WHERE status='unprocessed'
Full-Text indexelés Skálázhatóság, teljesítmény Az index felépítése egy nagyságrenddel gyorsabb A lekérdezések 30-50%-kal gyorsabbak
Full-Text - újdonságok Thesaurus támogatás Több oszlopos lekérdezések CONTAINS((col1,col2), ‘Yukon’) Jobb nyelv támogatás Konfigurálható ékezetfüggőség Elosztott lekérdezések: Fulltext lekérdezés kapcsolt kiszolgálóra Indexelt nézetek támogatása
Full-Text - adminisztráció Az adatbázis mentés a full-text katalógusokat is tartalmazza Adatbázis detach/attach a full-text katalógusokat is mozgatja Példány szintű erőforrás (nincsenek megosztott komponensek) Az MS Search az SQL Server biztonsági kontextusában fut
Varchar(max) A varchar, nvarchar, varbinary kiterjesztése 2GB méretig create table T (Id int, Picvarbinary(max)) A text/ntext/image alternatívája Minden string függvény működik a varchar(max)-on Az UPDATE támogatja a darabolást UPDATE T SET Picture.Write(@newchunk, @offset, @remove)
DDL triggerek Adatszerkezet módosításra induló triggerek Minden DDL eseményre CREATE_TABLE, ALTER_PROCEDURE, DROP_LOGIN, stb. Adatbázis és kiszolgáló szinten Az esemény adatait a trigger az eventdata() függvényen keresztül éri el
A DDL triggerek felhasználása Fejlesztési szabályok érvényesítése CREATE/ALTER visszagörgetése Véletlen objektum eldobás megakadályozása Objektum checkin/checkout Forrás verziózás Az adatbázis menedzsment naplózása
Kivételkezelés Az “if @@error” kód helyett Szintaxis: BEGIN TRY <utasítások> END TRY BEGIN CATCH <kivételkezelés> END CATCH
Kivételkezelés - tranzakció Tranzakció abortáló kivételek esetén a tranzakció „haldokló” állapotban marad egy explicit „rollback” kiadásáig Haldokló tranzakcióban naplózott műveletek nem végezhetők A kivételkezelés többnyire rollback-kel kezdődik Új függvények a hibakód, hibaüzenet, súlyosság elérésére a CATCH blokkban Újra lehet dobni az eredeti kivételt
Tranzakció abort példa CREATE PROCEDURE add_to_T1 @a int, @b nvarchar(1000) AS declare @error_msg nvarchar(400), @error_num int, @error_severity int BEGIN TRY BEGIN TRAN --idegen kulcs megsértés hiba INSERT T1 VALUES (@a, @b) COMMIT TRAN END TRY BEGIN CATCH ROLLBACK INSERT T1_Log VALUES (@a, @b, GETDATE()) SELECT @error_msg=error_message(), @error_num=error_number(), @error_severity=error_severity() RAISERROR (@error_msg, @error_num, @error_severity) END CATCH
Utasítás szintű újrafordítás (recompile) Nem kell az egész tárolt eljárást újrafordítani (mint az SQL2000-ben) Az utasítás szintű tervek is a gyorsírótárba kerülnek a modul szintű tervekkel együtt Hasznos, ha: Változnak a tábla statisztikák Nagy méretű tárolt eljárás újrafordítása helyett Dinamikus SQL helyett
Összefoglalás A Transact-SQL tovább él és virul A Transact-SQL változatlanul a legjobb nyelv halmaz-orientált műveletekre A .Net CLR kiváló procedurális lehetőségekkel bővíti az SQL Server fejlesztők eszköztárát
Címek, hivatkozások SQL Server 2005 SQL Server 2005 Webcasts MSDN http://www.microsoft.com/hun/sql/default.mspx http://www.microsoft.com/sql/2005/ SQL Server 2005 Webcasts http://www.microsoft.com/events/series/technetsqlserver2005.mspx http://www.microsoft.com/events/series/msdnsqlserver2005.mspx MSDN http://msdn.microsoft.com/sql/