SQLServer 13. téma Szöveges állományok kezelése XML DB Recovery modes A DML műveletek hatékonyságának fontos eleme a naplózás módozata: - FULL Recovery mode: minden elemi művelet naplózódik költséges, de biztonságos LOG file-t menteni kell felülírás előtt - BULK-LOGGED mode: a kötegelt beolvasásnál nem naplózza a köztes állapotokat LOG file-t menteni kell felülírás előtt - SIMPLE mode: LOG file-t nem menti, felülírja korlátozott helyreállítási lehetőség 1
BULK LOGGED mód Áttérés parancsa: ALTER DATABASE nnn SET RECOVERY BULK_LOGGED Előfeltételei: - ne legyen konkurrens DML - TABLE szintű zárolás használhatósága - üres legyen a tábla - lehetőleg ne legyen indexelt - ne legyen rajta megszorítás, trigger BCP segédprogram BCP : Bulk Copy Program - parancssori program - korlátozott adatkonverzió és ellenőrzés - igényelt jog: SELECT, INSERT, ALTER bcp db.tabla in out textfile -t mezőterminátor -r rekordterminátor -F átugrott első rekordok darabszáma 2
BULK INSERT BULK INSERT - SQL parancs - csak adatbetöltésre (bcp funkcionalitás) - igényelt jog: INSERT, ALTER - a LOGIN OS joggal olvassa be a filet BULK INSERT db.tabla FROM file WITH, FIRSTROW = n, ROWTERMINATOR=.., FIELDTERMINATOR= OPENROWSET Függvény formátum külső állományok beolvasása SQL parancsokban táblaként használható OLE DB kapcsolattal dolgozik SELECT.. FROM OPENROWSET( DSN.kapcsolat_id BULK datafile FORMATFILE =, FIRSTROW = n, ) 3
SSIS Wizard EXPORT/IMPORT Wizard (BIDS, SSMS) DTS modul továbbfejlesztése Főbb lépések: Adatforrás kijelölés Cél kijelölés Leképzések kijelölése Átemelés ütemezése XML Szemi-struktúrált adatszerkezet Helyesen formált: Pontosan egy gyökérelem Teljesen a szülőbe foglaltak a gyerekek Egy vagy kéttagú elemek Elemjellemzők idézőjelek között Felhasználása: Adatátvitel, elemi adattárolás, információ kódolás 4
XML <?xml version= 1.0?> <ab:adatok xmlns:ab=http://xml_1.ab.org/1> <autok> <ab:auto rsz= r1 > <tipus>fiat</tipus><lejart/> <ar> 234000</ar> </ab:auto> <ab>auto>..</ab><auto> </autok> </ab:adatok> XML tárolása Szövegmezőben: DECLARE @vv AS nvarchar(555) SET @vv = <autok> </autok> Általános, egységben kezeli a teljes dok.-ot XML adattípusban: DECLARE @vv AS XML SET @vv = <autok> </autok> DBMS közeli, XML specifikus adatkezelés 5
XML validálás Validáció az XMLSchema-ra épül Lehetőségek: Adattípusok, névterek használata Saját elem és adattípusok, származtatás Gazdag megszorításkészlet <schema xmlns= http://www.w.org/2001/xmlschema > <simpletype name= rsz > <restriction base= String >. </simpletype> </schema> XML validálás Séma definiálása: CREATE XML SCHEMA COLLECTION nn AS xmlschema leírás Sémára hivatkozás: DECLARE @vv AS XML(nn) CREATE TABLE tt ( mm XML(nn), ) 6
XML adatok generálása XML file előállítása a relációs adatokból: - SELECT FROM FOR XML RAW( tagnev ) nincs gyökér, egyszintű minden rekord egy tag minden mező egy attributum - SELECT FROM FOR XML RAW, ELEMENTS minden mező egy gyerekelem - SELECT FROM FOR XML AUTO minden forrástáblához külön gyerekelem minden mező attributum - SELECT FROM FOR XML AUTO, ELEMENTS minden mező gyerekelem XML adatok generálása SELECT * FROM TABLA1 INNER JOIN tabla2 ON tabla1.kod=tabla2.esem FOR XML AUTO, ELEMENTS; <TABLA1> <KOD>1</KOD> <SZOVEG>PETER OLVAS</SZOVEG> <tabla2> <nev>feri OR </nev> <esem>1</esem> </tabla2> </TABLA1> <TABLA1> <KOD>3</KOD> <SZOVEG>ANNA ISZIK</SZOVEG> 7
XML adatok generálása XML file előállítása a relációs adatokból: - SELECT FOR XML PATH( tagnev ),ROOT( nev ) részletes kontroll, egyedi kialakítás minden mezőre külön XPath beállítás gyökérelem is kijelölhető mező_kif1 xpath_1, mező_kif2 xpath_2, XPath elemek: elemnév @attribnév elem1/elem2 elem/@attrib text() comment() node() data() XML adatok generálása SELECT KOD '@EID', SZOVEG, NEV 'SZOVEG/ORID/text()' FROM TABLA1 INNER JOIN tabla2 ON tabla1.kod=tabla2.esem FOR XML PATH, ROOT( Naplo ); <Naplo> <row EID="1"> <SZOVEG>Peti olvas<orid> Feri őr </ORID></SZOVEG> </row> <row EID="3"> <SZOVEG>Anna iszik<orid>feriőr </ORID></SZOVEG> </row> <row EID="2"> <SZOVEG>Zoli alszik<orid>tomiőr </ORID></SZOVEG> </row> </Naplo> 8
XML adatok generálása XML file előállítása a relációs adatokból: - SELECT FOR XML EXPLICIT( tagnev ),ROOT( nev ) legnagyobb kontroll, egyedi kialakítás mezőkre külön kiterjesztett XPath beállítás Universal table formátum: első mező: mélységjelző második mező: szülőjelző elemjelző: elemnév!tag_sorszám!attribute!direktíva Direktíva: hide elementxsinil element cdata XML adatok generálása SELECT 1 as TAG, null as PARENT, szoveg [A!1], kod [A!1!kod], null as [c!2] FROM TABLA1 inner join tabla2 on tabla1.kod=tabla2.esem union all SELECT 2 as TAG, 1 as PARENT, szoveg,null, nev [C!2] FROM TABLA1 inner join tabla2 on tabla1.kod=tabla2.esem order by 3 FOR XML EXPLICIT, ROOT('Naplo'); <Naplo> <A kod="3">anna ISZIK<c>FERI OR </c></a> <A kod="1">peter OLVAS<c>FERI OR </c></a> <A kod="2">zoli SETAL<c>TOMI OR </c></a> </Naplo> 9
XML adatok generálása XML file előállítása XML adattípusú adatokból: - query() : XQuery lekérdezés XML fregmentet ad vissza - value(): XQuery leklérdezés skalár értéket ad vissza - exist(): XPath kifejezés, csomópont létezés ellenőrzése XQuery lekérdezés: FOR $v IN kif LET $v=kif.. WHERE kif ORDER BY kif RETURN kif XML adatok generálása create table table3 (kod int primary key, szoveg xml); insert into table3 values (2, '<a><b>tim<c>43</c></b><b>zoli<c>34</c></b> <b>era<c>53</c></b></a>'); select szoveg.query('for $v in /a/b where $v/c > 40 return $v') from table3 for xml raw('e'), root('xx'); <xx> <e> <b>feri<c>43</c></b> </e> <e> <b>tim<c>43</c></b> <b>era<c>53</c></b> </e> </xx> 10
XML adatok módosítása XML adattípus módosítása: - modify() : XQuery Update funkciók biztosítása műveletek: - insert into after before - replace value - delete XML adatok módosítása 1. Séma létrehozása: create xml schema collection sema1 as ' <schema xmlns="http://www.w3.org/2001/xmlschema"> <element name="a"> <complextype> <sequence maxoccurs= unbounded > <element name="b" type="string"/> <element name="c" type="integer"/> </sequence> </complextype> </element> </schema>'; 11
XML adatok módosítása 1. Mező, tábla létrehozása: create table tt3 (kod int primary key, leiras xml(sema1)); 2. Adat felvitele: OK: insert into tt3 values (1,'<a><b>Tomi</b><c>23</c></a>'); NO: insert into tt3 values (1,'<a><b>Tomi</b><e>23</e></a>'); 3. Módosítás: update tt3 set leiras.modify('replace value of (/a/c)[1] with 55') where kod = 2; XML adatok relációsra alakítása 1. OPENXML(): FROM OPENXML (forrás, xpath_kif,mód) WITH (séma).. Séma: elemek relációs adattípusra konvertálása 2. nodes() : OK: insert into tt3 values (1,'<a><b>Tomi</b><c>23</c></a>'); NO: insert into tt3 values (1,'<a><b>Tomi</b><e>23</e></a>'); 3. Bulk Copy: update tt3 set leiras.modify('replace value of (/a/c)[1] with 55') where kod = 2; 12
XML adatok relációsra alakítása OPENXML használata: declare @vv xml; set @vv = '<f><a><b>laci</b><c>34</c></a> <a><b>anna</b><c>24</c></a></f>' declare @h int; exec sp_xml_preparedocument @h OUTPUT, @vv; select * from openxml(@h,'/f/a',2) with (b char(20), c int) go A B Laci 34 Anna 24 XML indexek Indexek típusai (XML mezőkhöz): Primary index Minden csomópontot indexel xpath keresésre optimalizált (tipus, nev, sorrend,..) CREATE PRIMARY XML_INDEX inev ON t(m) Secondary index Másodlagos keresésre, Primary indexet indexeli Típusai: PATH, VALUE, PROPERTY CREATE XML_INDEX inev ON t(m) USING XML INDEX primary FOR PATH VALUE PROPERTY 13