<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Blog despre programare</title>
	<atom:link href="http://katalyn.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://katalyn.wordpress.com</link>
	<description>Sfaturi, trucuri, cele mai bune practici de programare</description>
	<lastBuildDate>Tue, 25 Aug 2009 13:40:04 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>ro</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='katalyn.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/ee4a8990cb26be08cdc32d9b8956c0f3?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>Blog despre programare</title>
		<link>http://katalyn.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://katalyn.wordpress.com/osd.xml" title="Blog despre programare" />
		<item>
		<title>MS SQL Server &#8211; Principal &#8220;utilizator&#8221; is not able to access the database &#8220;nume_baza_de_date&#8221; under the current security context.</title>
		<link>http://katalyn.wordpress.com/2009/08/25/ms-sql-server-principal-utilizator-is-not-able-to-access-the-database-nume_baza_de_date-under-the-current-security-context/</link>
		<comments>http://katalyn.wordpress.com/2009/08/25/ms-sql-server-principal-utilizator-is-not-able-to-access-the-database-nume_baza_de_date-under-the-current-security-context/#comments</comments>
		<pubDate>Tue, 25 Aug 2009 13:40:04 +0000</pubDate>
		<dc:creator>Catalin Dumitru</dc:creator>
				<category><![CDATA[Management Studio]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[eroare]]></category>
		<category><![CDATA[error]]></category>

		<guid isPermaLink="false">http://katalyn.wordpress.com/?p=73</guid>
		<description><![CDATA[Eroarea &#60;MS SQL Server &#8211; Principal &#8220;utilizator&#8221; is not able to access the database &#8220;nume_baza_de_date&#8221; under the current security context.&#62; provine de la Management Studio care in momentul in care incearca sa obtina lista bazelor de date de pe server, incearca sa &#8220;aduca&#8221; si cateva informatii aditionale (executand o interogare T-SQL pentru care nu are suficiente [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=katalyn.wordpress.com&blog=882444&post=73&subd=katalyn&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Eroarea &lt;MS SQL Server &#8211; Principal &#8220;utilizator&#8221; is not able to access the database &#8220;nume_baza_de_date&#8221; under the current security context.&gt; provine de la Management Studio care in momentul in care incearca sa obtina lista bazelor de date de pe server, incearca sa &#8220;aduca&#8221; si cateva informatii aditionale (executand o interogare T-SQL pentru care nu are suficiente drepturi de securitate), printre ele si &#8220;Collation&#8221;. Aceasta informatie nu poate fi disponibila decat utilizatorilor care au acces la baza de date. Cu alte cuvinte, daca un utilizator nu are acces la toate bazele de date este foarte posibil sa intalneasca eroarea prezentata pentru ca Management Studio incearca sa aduca informatii aditionale despre toate bazele de date. Pentru a ocoli acest comportament se deschide Management Studio, se deschide fereastra ObjectExplorer), se intra in &#8220;Databases&#8221; iar apoi se da click cu butonul din dreapta al mouse-lui pe capul de tabel. Se debifeaza Collation si se apasa refresh. Aceasta comportament tine cont numai de Management Studio si se manifesta numai daca exista baze de date neaccesibile pt. utilizatorul care se conecteaza la server.</p>
Posted in eroare, Management Studio, SQL Server Tagged: eroare, error, Management Studio <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/katalyn.wordpress.com/73/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/katalyn.wordpress.com/73/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/katalyn.wordpress.com/73/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/katalyn.wordpress.com/73/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/katalyn.wordpress.com/73/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/katalyn.wordpress.com/73/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/katalyn.wordpress.com/73/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/katalyn.wordpress.com/73/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/katalyn.wordpress.com/73/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/katalyn.wordpress.com/73/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=katalyn.wordpress.com&blog=882444&post=73&subd=katalyn&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://katalyn.wordpress.com/2009/08/25/ms-sql-server-principal-utilizator-is-not-able-to-access-the-database-nume_baza_de_date-under-the-current-security-context/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/cb331d7e43eb6a51dcbcd5663466d8f0?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">katalyn</media:title>
		</media:content>
	</item>
		<item>
		<title>Functii de rang (RANK functions)</title>
		<link>http://katalyn.wordpress.com/2009/06/19/functii-de-rang-rank-functions/</link>
		<comments>http://katalyn.wordpress.com/2009/06/19/functii-de-rang-rank-functions/#comments</comments>
		<pubDate>Fri, 19 Jun 2009 13:12:23 +0000</pubDate>
		<dc:creator>Catalin Dumitru</dc:creator>
				<category><![CDATA[Diverse]]></category>
		<category><![CDATA[OLTP]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[T-SQL]]></category>
		<category><![CDATA[baza de date]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[programare]]></category>

		<guid isPermaLink="false">http://katalyn.wordpress.com/?p=54</guid>
		<description><![CDATA[O data cu SQL Server 2005, Microsoft a introdus o serie de noi functionalitati. Aceste noi functionalitati usureaza munca unui administrator sau dezvoltator in scrierea codului T-SQL si a intretinerii bazelor de date.  In continuare vom discuta despre funtiile de rang. Functiile de rang intorc o valoare rang pentru fiecare rand dintr-un set de date. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=katalyn.wordpress.com&blog=882444&post=54&subd=katalyn&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:justify;">O data cu SQL Server 2005, Microsoft a introdus o serie de noi functionalitati. Aceste noi functionalitati usureaza munca unui administrator sau dezvoltator in scrierea codului T-SQL si a intretinerii bazelor de date.  In continuare vom discuta despre funtiile de rang. Functiile de rang intorc o valoare rang pentru fiecare rand dintr-un set de date. Aceste functii sunt nondeterministice. Functie de functia utilizata, mai multe randuri pot avea aceeasi valoare sau valori indivituale.</p>
<p style="text-align:justify;">Functiile de rang permite inumararea secventiala a setului de date. Pentru a exemplifica rezultatul executiei acestor functii, se considera tabela si inregistrarile de mai jos:</p>
<p><em>CREATE TABLE Persoane(<br />
            Nume VARCHAR(50),<br />
            Varsta INT,<br />
            SEX CHAR(1)<br />
)</em></p>
<p><em>INSERT INTO Persoane VALUES (&#8216;Ion&#8217;,53,&#8217;M')<br />
INSERT INTO Persoane VALUES (&#8216;Vasile&#8217;,45,&#8217;M')<br />
INSERT INTO Persoane VALUES (&#8216;Gheorghe&#8217;,89,&#8217;M')<br />
INSERT INTO Persoane VALUES (&#8216;Maria&#8217;,21,&#8217;F')<br />
INSERT INTO Persoane VALUES (&#8216;Stefan&#8217;,46,&#8217;M')<br />
INSERT INTO Persoane VALUES (&#8216;Adriana&#8217;,69,&#8217;F')<br />
INSERT INTO Persoane VALUES (&#8216;Mircea&#8217;,56,&#8217;M')<br />
INSERT INTO Persoane VALUES (&#8216;Mihai&#8217;,2,&#8217;M')<br />
INSERT INTO Persoane VALUES (&#8216;Daniela&#8217;,46,&#8217;F')<br />
INSERT INTO Persoane VALUES (&#8216;Cristina&#8217;,25,&#8217;F')<br />
INSERT INTO Persoane VALUES (&#8216;Andreea&#8217;,14,&#8217;F')</em></p>
<p style="text-align:justify;">Transact – SQL furnizeaza urmatoarele functii: <span style="text-decoration:underline;">RANK(), DENSE_RANK(), NTILE(), ROW_NUMBER()</span></p>
<p><strong><span style="text-decoration:underline;">RANK</span></strong></p>
<p style="text-align:justify;">Uneori se doreste ca doua sau mai multe randuri care au aceasi clauza de ordonare (order by) ca aibe acelasi rang. Sintaxa generala este:</p>
<p>RANK ( )  OVER ( [ &lt;partition_by_clause&gt; ] &lt;order_by_clause&gt; )</p>
<p style="text-align:justify;">Unde:<br />
[ &lt;partition_by_clause&gt; ] – reprezinta coloana sau coloanele dupa care se creaza grupari in setul de date<br />
&lt;order_by_clause&gt; &#8211; reprezinta coloana sau coloanele dupa care se realizeaza ordonarea pentru stabilirea valorilor rang in cadrul partitiei.</p>
<p style="text-align:justify;">Functia RANK inumara secvential valorile din clauza ORDER BY. Cand doua sau mai multe randuri au aceeasi valoare in ORDER BY, primesc acelasi rang. Chiar si in acest caz, valoarea de rang este incrementata iar cand o noua valoare este determinate in ORDER BY, rangul determinat va fi mai mare cu 1 decat numarul de randuri aflat inaintea randului current. In exemplul urmator, s-a aplicat functia RANK peste coloana Varsta.</p>
<p><em>SELECT      RANK() OVER(ORDER BY Varsta) as RankNumber,<br />
            Nume,<br />
            Varsta<br />
FROM Persoane</em></p>
<p><img class="aligncenter size-full wp-image-61" title="rank_1" src="http://katalyn.files.wordpress.com/2009/06/rank_11.jpg?w=233&#038;h=261" alt="rank_1" width="233" height="261" /></p>
<p style="text-align:justify;">Se poate observa ca acolo unde varsta este aceeasi, si valoarea rang este identical. Atunci cand se intalneste o noua varsta, rangul devine numarul de randuri de dinaintea randului current incrementat cu 1. Cu alte cuvinte, Andreea are rangul 3 pentru ca inaintea ei sunt alte 2 persoane care avand aceeasi varsta, au primit acelasi rang.</p>
<p><em>SELECT      RANK() OVER(PARTITION BY Sex ORDER BY Varsta) as RankNumber,<br />
            Nume,<br />
            Varsta,<br />
            Sex<br />
FROM Persoane</em></p>
<p><img class="aligncenter size-full wp-image-64" title="rank_2" src="http://katalyn.files.wordpress.com/2009/06/rank_21.jpg?w=262&#038;h=261" alt="rank_2" width="262" height="261" /></p>
<p style="text-align:justify;">In exemplul 2, setul de date a fost grupat dupa sex iar apoi s-a atribuit valoarea de rang (individual pentru fiecare partitie a setului de date).</p>
<p> <span style="text-decoration:underline;"><strong>DENSE_RANK</strong></span></p>
<p style="text-align:justify;">Aceasta functie este similara funtiei RANK cu exceptia faptului ca valorile rang sunt in ordine, nu lipseste niciuna. Cu alte cuvinte, o valoare rang este ori valoarea rang a randului precedent ori valoarea rang a randului precedent incrementat cu 1. Aceste valori sunt in ordine, fara valori “lipsa”.</p>
<p><em>SELECT      DENSE_RANK() OVER(ORDER BY Varsta) as RankNumber,<br />
            Nume,<br />
            Varsta<br />
FROM Persoane</em></p>
<p><img class="aligncenter size-full wp-image-66" title="rank_3" src="http://katalyn.files.wordpress.com/2009/06/rank_31.jpg?w=228&#038;h=257" alt="rank_3" width="228" height="257" /></p>
<p><strong><span style="text-decoration:underline;">NTILE</span></strong></p>
<p style="text-align:justify;">Aceasta functie este similara celorlalte si imparte un set de date in subgrupuri.</p>
<p><em>SELECT      NTILE(3) OVER(ORDER BY Varsta) as RankNumber,<br />
            Nume,<br />
            Varsta<br />
FROM Persoane</em></p>
<p><img class="aligncenter size-full wp-image-67" title="rank_4" src="http://katalyn.files.wordpress.com/2009/06/rank_41.jpg?w=225&#038;h=262" alt="rank_4" width="225" height="262" /></p>
<p style="text-align:justify;">In exemplul de mai sus, setul de date a fost impartit in 3 subgrupuri (3 este valoarea parametrului functiei NTILE). Folosirea acestei functii va avea ca effect divizarea setului de date in subgrupuri de date cu acelasi rang.</p>
<p><strong><span style="text-decoration:underline;">ROW_NUMBER</span></strong></p>
<p style="text-align:justify;">Aceasta functie intoarce o valoare rang data de numarul randului. Fiecare rand din setul de date va fi cu 1 mai mare decat precedentul rand si cu 1 mai mic decat urmatorul rand. Primul rand din setul de date va avea valoarea 1. Acest rang se poate aplica sip e partitii de date ale setului de date (aduca pe grupuri de date).</p>
<p><em>SELECT      ROW_NUMBER() OVER(ORDER BY Varsta) as RankNumber,<br />
            Nume,<br />
            Varsta<br />
FROM Persoane</em></p>
<p><img class="aligncenter size-full wp-image-68" title="rank_5" src="http://katalyn.files.wordpress.com/2009/06/rank_51.jpg?w=226&#038;h=256" alt="rank_5" width="226" height="256" /></p>
<p style="text-align:justify;">In exemplul de mai sus, numerotarea randurilor s-a realizat dupa coloana Varsta. Daca vom dori afisarea setului de date in alta ordine, adica adaugarea clauzei Order by, in acest caz, numai afisarea o sa se realizeze dupa noua ordine, numerotarea randurilor se va realiza dupa clauza order by a functiei ROW_NUMBER.</p>
<p><em>SELECT      ROW_NUMBER() OVER(ORDER BY Varsta) as RankNumber,<br />
            Nume,<br />
            Varsta<br />
FROM Persoane<br />
ORDER BY NUME</em></p>
<p><img class="aligncenter size-full wp-image-65" title="rank_6" src="http://katalyn.files.wordpress.com/2009/06/rank_61.jpg?w=222&#038;h=255" alt="rank_6" width="222" height="255" /></p>
<p style="text-align:justify;">Acum se poate observa ca afisarea s-a realizat dupa noua ordine dar valorile rang sunt aceleasi.</p>
Posted in Diverse, OLTP, SQL Server, T-SQL Tagged: baza de date, database, programare, SQL Server <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/katalyn.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/katalyn.wordpress.com/54/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/katalyn.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/katalyn.wordpress.com/54/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/katalyn.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/katalyn.wordpress.com/54/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/katalyn.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/katalyn.wordpress.com/54/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/katalyn.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/katalyn.wordpress.com/54/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=katalyn.wordpress.com&blog=882444&post=54&subd=katalyn&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://katalyn.wordpress.com/2009/06/19/functii-de-rang-rank-functions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/cb331d7e43eb6a51dcbcd5663466d8f0?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">katalyn</media:title>
		</media:content>

		<media:content url="http://katalyn.files.wordpress.com/2009/06/rank_11.jpg" medium="image">
			<media:title type="html">rank_1</media:title>
		</media:content>

		<media:content url="http://katalyn.files.wordpress.com/2009/06/rank_21.jpg" medium="image">
			<media:title type="html">rank_2</media:title>
		</media:content>

		<media:content url="http://katalyn.files.wordpress.com/2009/06/rank_31.jpg" medium="image">
			<media:title type="html">rank_3</media:title>
		</media:content>

		<media:content url="http://katalyn.files.wordpress.com/2009/06/rank_41.jpg" medium="image">
			<media:title type="html">rank_4</media:title>
		</media:content>

		<media:content url="http://katalyn.files.wordpress.com/2009/06/rank_51.jpg" medium="image">
			<media:title type="html">rank_5</media:title>
		</media:content>

		<media:content url="http://katalyn.files.wordpress.com/2009/06/rank_61.jpg" medium="image">
			<media:title type="html">rank_6</media:title>
		</media:content>
	</item>
		<item>
		<title>OLTP  (online transaction preocessing) vs. BI (business intelligence)</title>
		<link>http://katalyn.wordpress.com/2009/01/27/oltp-online-transaction-preocessing-vs-bi-business-intelligence/</link>
		<comments>http://katalyn.wordpress.com/2009/01/27/oltp-online-transaction-preocessing-vs-bi-business-intelligence/#comments</comments>
		<pubDate>Tue, 27 Jan 2009 10:37:14 +0000</pubDate>
		<dc:creator>Catalin Dumitru</dc:creator>
				<category><![CDATA[Business Inteligence]]></category>
		<category><![CDATA[OLTP]]></category>
		<category><![CDATA[data warehouse]]></category>
		<category><![CDATA[baza de date]]></category>
		<category><![CDATA[BI]]></category>
		<category><![CDATA[database]]></category>

		<guid isPermaLink="false">http://katalyn.wordpress.com/?p=52</guid>
		<description><![CDATA[De la inceput, sistemele relationale de baze de date au fost utilizate pentru a stoca informatii primare pentru afacere precum comenzile sau facturile utilizand procesarea bazata pe tranzactii. Aceasta orientare pe datele afacerii are avantaje si dezavantaje. Un avantaj este acela ca performanta scazuta a primelor sisteme relationale de baze de date s-a imbunatatit substantial [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=katalyn.wordpress.com&blog=882444&post=52&subd=katalyn&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p class="MsoNormal" style="text-align:justify;margin:0 0 10pt;"><span lang="RO"><span style="font-size:small;"><span style="font-family:Calibri;">De la inceput, sistemele relationale de baze de date au fost utilizate pentru a stoca informatii primare pentru afacere precum comenzile sau facturile utilizand procesarea bazata pe tranzactii. Aceasta orientare pe datele afacerii are avantaje si dezavantaje. Un avantaj este acela ca performanta scazuta a primelor sisteme relationale de baze de date s-a imbunatatit substantial astfel incat, in zilele noastre, multe sisteme relationale de baze de date pot executa zeci de tranzactii pe secunda (bineinteles daca si componentele hardware permit acest lucru). Pe de alta parte, orientarea spre afaceri a sistemelor tranzactionale au prevenit aparitia altor sisteme naturale de baze de date pentru a se analiza si a umple nevoia de informatii din datele existente intro companie sau department.</span></span></span></p>
<p class="MsoNormal" style="margin:0 0 10pt;"><strong><span lang="RO"><span style="font-size:small;"><span style="font-family:Calibri;">OLTP (online transaction processing)</span></span></span></strong></p>
<p class="MsoNormal" style="text-align:justify;margin:0 0 10pt;"><span lang="RO"><span style="font-size:small;"><span style="font-family:Calibri;">Dupa cum am spus deja, performanta este principala problema a sistemelor bazate pe procesarea tranzactionala. Un exemplu tipic al aplicarii acestor sisteme este retragerea de fonduri de la un bancomat (ATM). Catva dintre principalele proprietati ale sistemelor OLTP sunt:</span></span></span></p>
<p class="MsoListParagraphCxSpFirst" style="text-indent:-.25in;margin:0 0 0 .5in;"><span lang="RO"><span><span style="font-size:small;font-family:Calibri;">1.</span><span style="font:7pt &quot;">       </span></span></span><span lang="RO"><span style="font-size:small;"><span style="font-family:Calibri;">Tranzactii scurte</span></span></span></p>
<p class="MsoListParagraphCxSpMiddle" style="text-indent:-.25in;margin:0 0 0 .5in;"><span lang="RO"><span><span style="font-size:small;font-family:Calibri;">2.</span><span style="font:7pt &quot;">       </span></span></span><span lang="RO"><span style="font-size:small;"><span style="font-family:Calibri;">Multi utilizatori (sute sau chiar mii)</span></span></span></p>
<p class="MsoListParagraphCxSpMiddle" style="text-indent:-.25in;margin:0 0 0 .5in;"><span lang="RO"><span><span style="font-size:small;font-family:Calibri;">3.</span><span style="font:7pt &quot;">       </span></span></span><span lang="RO"><span style="font-size:small;"><span style="font-family:Calibri;">Operatii continue de citire si scriere bazate pe un numar redus de randuri</span></span></span></p>
<p class="MsoListParagraphCxSpLast" style="text-indent:-.25in;margin:0 0 10pt .5in;"><span lang="RO"><span><span style="font-size:small;font-family:Calibri;">4.</span><span style="font:7pt &quot;">       </span></span></span><span lang="RO"><span style="font-size:small;"><span style="font-family:Calibri;">Date de dimensiuni medii sunt stocate in baza de date</span></span></span></p>
<p class="MsoNormal" style="text-align:justify;margin:0 0 10pt;"><span lang="RO"><span style="font-size:small;"><span style="font-family:Calibri;">Performanta bazelor de date va creste daca tranzactiile sunt scurte. Motivul este acela ca tranzactiile folosesc lock-uri pentru a preveni posibilul efect negativ<span>  </span>al problemelor de acces concurential. Daca tranzactiile sunt lungi, numarul de lock-uri si durata lor cresc, scazand performanta accesului la date si a performantei pentru alte tranzactii.</span></span></span></p>
<p class="MsoNormal" style="text-align:justify;margin:0 0 10pt;"><span lang="RO"><span style="font-size:small;"><span style="font-family:Calibri;">Sistemele OLTP mari au ,de obicei, multi utilizatori care acceseaza sistemul simultan. Un exemplu tipic este cel al unui sistem de rezervare a biletelor pentru o companie aeriana, care trebuie sa proceseze zeci de cereri ,aproape imediat, pentru bilete de calatorie intro tara sau pe intreg cuprinsul planetei. In acest tip de sistem, utilizatorii isi doresc ca asteptarile lor legate de timp sa fie satisfacute – sistemul sa raspunda cat mai repede si sa fie disponibil 24 de ore pe zi timp de 7 zile pe saptamana.</span></span></span></p>
<p class="MsoNormal" style="text-align:justify;margin:0 0 10pt;"><span lang="RO"><span style="font-size:small;"><span style="font-family:Calibri;">Utilizatorii sitemelor OLTP executa instructiuni DML (data manipulation language) in mod continu realizand operatii de citire si scriere in acelasi timp. Pentru ca datele unui asemenea sistem se schimba des se poate spune ca sistemul este foarte dinamic. In mod normal, aceste operatii (sau rezultatul lor) implica o cantitate mica de date, altfel, daca sistemul aceseaza multe randuri va fi nevoie sa fie accesate una sau mai multe tabele din baza de date (ceea ce poate produce lock-uri conducand spre scaderea performantelor).</span></span></span></p>
<p class="MsoNormal" style="text-align:justify;margin:0 0 10pt;"><span lang="RO"><span style="font-size:small;"><span style="font-family:Calibri;">In utlimii ani, cantitatea de date stocate intro baza de date operationala (baza de date gestionata de un sistem OLTP) a crescut rapid. Astazi, multe baze de date pot stoca pana la cateva zeci sau chiar sute de GB de date. Si dupa cum vom vedea, aceasta cantitate este mica in comparatie cu depozitele de date (data warehouse).</span></span></span></p>
<p class="MsoNormal" style="margin:0 0 10pt;"><strong><span lang="RO"><span style="font-size:small;"><span style="font-family:Calibri;">Sistemele de Inteligenta Artificiala (business inteligence)</span></span></span></strong></p>
<p class="MsoNormal" style="text-align:justify;margin:0 0 10pt;"><span lang="RO"><span style="font-size:small;"><span style="font-family:Calibri;">Inteligenta artificiala (BI – business inteligence) este procesul de integrare a cantitatilor uriase de date intrun singur spatiu de stocare in care utilizatorii sa poata rula interogari si rapoarte pentru a analiza datele existente. Cu alte cuvinte, scopul BI este de a pastra datele care pot fi accesate de utilizatorii care iau decizii pe baza analizelor. Aceste sisteme sunt adesea numite analitice sau informative, pentru ca accesand datele, utilizatorii pot obtine informatii pe baza carora pot lua decizii mai bune.</span></span></span></p>
<p class="MsoNormal" style="text-align:justify;margin:0 0 10pt;"><span lang="RO"><span style="font-size:small;"><span style="font-family:Calibri;">Scopul sistemelor BI este diferit de scopul sistemelor OLTP. Spre exemplu urmatoarea intrebare este o interogare pentru sistemele<span>  </span>BI: „Care este cea mai bine vanduta categorie de produse pentru fiecare regiune in semestrul al 3-lea din anul 2008 ?”. De aceea, un sistem BI are proprietati diferite fata de cele listate la sistemele OLTP (prezentate mai sus). Cateva dintre cele mai importante proprietati ale sistemelor BI sunt urmatoarele:</span></span></span></p>
<p class="MsoListParagraphCxSpFirst" style="text-indent:-.25in;margin:0 0 0 .5in;"><span lang="RO"><span><span style="font-size:small;font-family:Calibri;">1.</span><span style="font:7pt &quot;">       </span></span></span><span lang="RO"><span style="font-size:small;"><span style="font-family:Calibri;">Operatiunile de incarcare (load) se bazeaza pe un numar mare de randuri</span></span></span></p>
<p class="MsoListParagraphCxSpMiddle" style="text-indent:-.25in;margin:0 0 0 .5in;"><span lang="RO"><span><span style="font-size:small;font-family:Calibri;">2.</span><span style="font:7pt &quot;">       </span></span></span><span lang="RO"><span style="font-size:small;"><span style="font-family:Calibri;">Numar mic de utilizatori</span></span></span></p>
<p class="MsoListParagraphCxSpLast" style="text-indent:-.25in;margin:0 0 10pt .5in;"><span lang="RO"><span><span style="font-size:small;font-family:Calibri;">3.</span><span style="font:7pt &quot;">       </span></span></span><span lang="RO"><span style="font-size:small;"><span style="font-family:Calibri;">Cantitati mari de date sunt stocate in baza de date</span></span></span></p>
<p class="MsoNormal" style="text-align:justify;margin:0 0 10pt;"><span lang="RO"><span style="font-size:small;"><span style="font-family:Calibri;">In afara de incarcarea cu date realizata la intervale regulate (de obicei, zilnic), sistemele BI sunt de obicei, sisteme deschise doar pentru citire (de aceea natura natura datelor intrun asemenea sistem este statica). Datele sunt aduse din surse diferite, curatate (se asigura consistenta) si incarcate intro baza de date numita depozit de date (data warehouse sau data mart). Datele curatate raman, de obicei, nemodificate dar ele pot fi modificate dupa procesul de curatare si inainte de incarcare. Pentru ca sistemele BI sunt utilizate pentru a obtine informatii, numarul utilizatorilor simultani este foarte mic in comparatie cu numarul utilizatorilor care acceseaza simultan un sistem OLTP. De obicei, utilizatorii unui sistem BI genereaza rapoarte care afiseaza diferiti indicatori cu privire la starea financiara a unei intreprinderi (sau departament), sau executa interogari complexe pentru a compara datele.</span></span></span></p>
<p class="MsoNormal" style="text-align:justify;margin:0 0 10pt;"><span lang="RO"><span style="font-size:small;"><span style="font-family:Calibri;">O alta deosebire intre sistemele OLAP si BI este aceea legata de disponibilitate, in timp ce un sistem OLTP poate fi accesat non – stop, un sistem BI poate fi accesat numai dupa ce acesta este incarcat cu date.</span></span></span></p>
<p class="MsoNormal" style="text-align:justify;margin:0 0 10pt;"><span lang="RO"><span style="font-size:small;"><span style="font-family:Calibri;">In timp ce un sistem OLTP stocheaza numai datele curente, un sistem BI trebuie sa tina cont si de modificarile istorice (spuneam mai devreme ca un sistem BI realizeaza comparatii intre date, ei bine acest lucru se poate realiza pe perioade diferite de timp). Din acest motiv, cantitatea de date stocata intr-un depozit de date este foarte mare.</span></span></span></p>
Posted in Business Inteligence, data warehouse, OLTP Tagged: baza de date, BI, Business Inteligence, data warehouse, database, OLTP <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/katalyn.wordpress.com/52/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/katalyn.wordpress.com/52/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/katalyn.wordpress.com/52/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/katalyn.wordpress.com/52/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/katalyn.wordpress.com/52/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/katalyn.wordpress.com/52/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/katalyn.wordpress.com/52/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/katalyn.wordpress.com/52/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/katalyn.wordpress.com/52/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/katalyn.wordpress.com/52/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=katalyn.wordpress.com&blog=882444&post=52&subd=katalyn&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://katalyn.wordpress.com/2009/01/27/oltp-online-transaction-preocessing-vs-bi-business-intelligence/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/cb331d7e43eb6a51dcbcd5663466d8f0?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">katalyn</media:title>
		</media:content>
	</item>
		<item>
		<title>Parametrul de tip tabela (Table Valued Parameter)</title>
		<link>http://katalyn.wordpress.com/2009/01/13/parametrul-de-tip-tabela-table-valued-parameter/</link>
		<comments>http://katalyn.wordpress.com/2009/01/13/parametrul-de-tip-tabela-table-valued-parameter/#comments</comments>
		<pubDate>Tue, 13 Jan 2009 15:27:55 +0000</pubDate>
		<dc:creator>Catalin Dumitru</dc:creator>
				<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[metodologie]]></category>
		<category><![CDATA[baza de date]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[parametru]]></category>
		<category><![CDATA[programare]]></category>
		<category><![CDATA[tabela]]></category>
		<category><![CDATA[TVP]]></category>

		<guid isPermaLink="false">http://katalyn.wordpress.com/?p=34</guid>
		<description><![CDATA[Este un nou tip de parametru in SQL Server 2008 si permite trimiterea de randuri multiple catre o instructiune T-SQL sau folosirea ca parametru la apelarea unei functii sau proceduri stocate.
 
Crearea si utilizarea TVP
Pentru a fi creat este necesar sa se defineasca numele si structura: CREATE TYPE Nume AS TABLE (coloana tip). Pentru a fi [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=katalyn.wordpress.com&blog=882444&post=34&subd=katalyn&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p class="MsoNormal" style="text-align:justify;margin:0;">Este un nou tip de parametru in SQL Server 2008 si permite trimiterea de randuri multiple catre o instructiune T-SQL sau folosirea ca parametru la apelarea unei functii sau proceduri stocate.<br />
 <br />
Crearea si utilizarea TVP<br />
Pentru a fi creat este necesar sa se defineasca numele si structura: CREATE TYPE Nume AS TABLE (coloana tip). Pentru a fi utilizat se defineste o procedura sau functie cu unul sau mai multi parametrii de tipul nou creat. Accesarea datelor se realizeaza cu ajutorul instructiunilor DML (select, insert, update, delete).<br />
 <br />
Avantaje:<br />
1.       Accepta PRIMARY KEY, UNIQUE si CHECK CONSTRAINTS<br />
2.      Se reduce numarul de apeluri catre server<br />
3.      Se foloseste READONLY ceea ce permite transmiterea unei referinte catre rutina (astfel nu se duplica datele irosind timp si spatiu de stocare)<br />
4.      Nu se face LOCK pentru popularea cu date<br />
5.      Aplicatia client poate preciza ordinea de sortare si cheile unice<br />
6.      Reprezinta un model simplu de programare<br />
7.      Se pot programa reguli de business complexe in rutine simple<br />
8.       Sunt strongly typed<br />
9.       Pot exista de cardinalitati diferite (adica cu numar diferit de coloane)<br />
10.    Beneficiaza de avantajul temporary table caching<br />
 <br />
Restrictii:<br />
1.      Nu accepta DEFAULT CONSTRAINT sau crearea directa de indecsi<br />
2.      Nu se poate altera structura TVP<br />
3.      Declararea parametrului se face precizand READONLY ceea ce va avea ca efect restrictia de a nu altera datele (nu se pot executa instructiuni DML cu exceptia SELECT)<br />
4.      SQL Server nu creaza si nu mentine statistici pentru coloanele unui parametru de tip tabela<br />
5.      Nu se poate folosi ca target pentru SELECT INTO<br />
 <br />
Securitate:<br />
TVP se supune regulilor de securitate ale obiectelor: CREATE, GRANT, DENY, ALTER, CONTROL, TAKE OWNERSHIP, REFERENCES, EXECUTE, VIEW DEFINITION, si REVOKE.<br />
 <br />
Catalog:<br />
1.      sys.table_types<br />
2.      sys.parameters<br />
3.      sys.types<br />
 <br />
Observatii:<br />
1.       In spatele oricarui TVP se afla o tabela temporara stocata in Tempdb<br />
2.       Disponibil in Framework 3.5<br />
 <br />
Recomandare Microsoft:<br />
1.      A se folosi pentru mai putin de 1000 de randuri<br />
2.      Pentru mai mult de 1000 de randuri a se folosi BULK_INSERT<br />
 <br />
Testare:<br />
A fost creata o aplicatie client dezvoltata in C# avand doar o forma, 2 butoane, un textbox si un listbox. Unul dintre butoane apela o procedura si ii pasa un parametru de tip tabela iar cel de-al 2-lea buton crea o tabela temporara, adauga date in ea si apoi executa o procedura. Rolul textbox-ului a fost acela de a-mi permite introducerea unui numar intreg care sa reprezinte numarul de randuri generate pentru a testa executarea celor doua proceduri. Testarea a avut ce efect compararea timpilor de la apasarea butoanelor si pana la terminarea executiilor celor doua proceduri.<br />
Rezultatele au fost in favoarea TVP insa timpul castigat la rulare nu a fost foarte mare, diferenta este infima insa daca s-ar folosi tabele cu un numar mare de coloane si un numar mai mare de randuri diferenta ar fi mai semnificativa. La o mie de inregistrari adaugate intr-o tabela prin cele doua metode, rezultatele au fost:<br />
Metoda tabelei temporare: 0.156 secunde<br />
Metoda TVP: 0.093<br />
Timpii au diferit putin la fiecare rulare insa diferenta s-a pastrat.<br />
 <br />
Concluzie:<br />
Utilizarea TVP ar aduce un avantaj prin:<br />
1.      Timpi mai mici de executie<br />
2.      Claritatea codului</p>
Posted in metodologie, SQL Server Tagged: baza de date, database, parametru, programare, SQL Server, tabela, TVP <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/katalyn.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/katalyn.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/katalyn.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/katalyn.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/katalyn.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/katalyn.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/katalyn.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/katalyn.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/katalyn.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/katalyn.wordpress.com/34/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=katalyn.wordpress.com&blog=882444&post=34&subd=katalyn&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://katalyn.wordpress.com/2009/01/13/parametrul-de-tip-tabela-table-valued-parameter/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/cb331d7e43eb6a51dcbcd5663466d8f0?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">katalyn</media:title>
		</media:content>
	</item>
		<item>
		<title>Interogările recursive folosind Common Table Expressions (CTE)</title>
		<link>http://katalyn.wordpress.com/2009/01/13/interogarile-recursive-folosind-common-table-expressions-cte/</link>
		<comments>http://katalyn.wordpress.com/2009/01/13/interogarile-recursive-folosind-common-table-expressions-cte/#comments</comments>
		<pubDate>Tue, 13 Jan 2009 15:05:31 +0000</pubDate>
		<dc:creator>Catalin Dumitru</dc:creator>
				<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[metodologie]]></category>
		<category><![CDATA[baza de date]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[recursivitate]]></category>

		<guid isPermaLink="false">http://katalyn.wordpress.com/?p=31</guid>
		<description><![CDATA[Marele avantaj al introgărilor recursive este acela că se pot referii  singure. Care este rostul acestora? Pentru a reprezenta date ierarhice aşa cum este o organigramă a departamentelor dintro companie sau un meniu pentru un site web etc.
Pentru a se rezolva acest aspect au apărut mai mulţi algoritmi pe care nu o să-i discut aici [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=katalyn.wordpress.com&blog=882444&post=31&subd=katalyn&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p class="MsoNormal" style="text-align:justify;margin:0 0 10pt;">Marele avantaj al introgărilor recursive este acela că se pot referii  singure. Care este rostul acestora? Pentru a reprezenta date ierarhice aşa cum este o organigramă a departamentelor dintro companie sau un meniu pentru un site web etc.<br />
Pentru a se rezolva acest aspect au apărut mai mulţi algoritmi pe care nu o să-i discut aici însă utilizând motoarele de căutare puteţi găsi singuri foarte mulţi algoritmi. Prin interogările recursive avem posibilitatea de a standardiza modul de lucru cu datele ierarhice şi cu interogări asupra acestora.<br />
Sintaxa:<br />
WITH nume_CTE (optional lista_coloane) AS<br />
 (<br />
   Membru_ancora<br />
   UNION ALL<br />
   Membru_recursiv<br />
 )<br />
INTEROGARE ASUPRA nume_CTE<br />
OPTION (MAXRECURSION n)<br />
 <br />
Se poate observa că interogarea recursivă este formată din două interogări numite membru ancoră şi  membru recursiv. Membrul ancoră este interogarea al cărei rezultat  va fi folosit ca intrare pentru membrul recursiv. Aceasta se va autoapela până când niciun rând nu mai este întors (condiţie de încheiere). Ar mai fi de menţionat ca reguli pentru interogările recursive că “UNION ALL” este singura construcţie permisă între cei doi membrii şi că membrul recursiv poate referii doar o singura interogare recursivă (CTE).<br />
Un exemplu folosit pentru a înţelege recursivitatea este calculul factorialului. Spre exemplificare se poate folosi urmatorul script:<br />
CREATE FUNCTION dbo.Factorial(@Numar int)<br />
RETURNS int AS BEGIN<br />
 <br />
      IF @Numar = 0 BEGIN<br />
            RETURN 1<br />
      END<br />
 <br />
      RETURN @Numar * dbo.Factorial(@Numar &#8211; 1)<br />
END<br />
 <br />
Şi testarea:<br />
SELECT  dbo.Factorial(1) AS [1!],          <br />
                  dbo.Factorial(2) AS [2!],<br />
                  dbo.Factorial(3) AS [3!],<br />
                  dbo.Factorial(4) AS [4!],<br />
                  dbo.Factorial(5) AS [5!]<br />
Se poate observa că funcţia se autoapeleaza până când @Numar = 0 (pentru cine nu ştie: n! = 1*2*..(n-1)*n)<br />
Să analizăm comparativ exemplul de mai sus cu CTE. Avem un parametru de intrare iar în CTE avem membru de intrare. Apoi după condiţia de continuitate se autoapelează funcţia cam în acelaşi mod în care membrul recursiv se autoapelează decrementând valoarea parametrului (în CTE se preia valoarea părintelui astfel se avanseaza cu un nivel). Când parametrul funcţiei va avea valoarea 0, se opreşte autoapelarea, iar în CTE ne oprim când nu mai avem părinte, am ajuns la condiţia de ieşire. Când s-a ajuns la nivelul maxim de iterare, valorile din stivă se vor asigna variabilei rezultat, se va combina cu membrul ancora iar rezultatul este afisat.<br />
Exemplu:<br />
CREATE TABLE Arbore (<br />
      ID_Nod                    int IDENTITY(1,1) PRIMARY KEY CLUSTERED,<br />
      ID_NodParinte     int NULL<br />
            CONSTRAINT [FK_Arbire_ID_Nod] FOREIGN KEY REFERENCES dbo.Arbore(ID_Nod),<br />
      Informatie              nvarchar(200) NOT NULL,<br />
            CONSTRAINT  [CK_ID_NodParinte] CHECK (ID_Nod &lt;&gt; ID_NodParinte)<br />
)<br />
 <br />
GO<br />
INSERT INTO Arbore (ID_NodParinte, Informatie)<br />
VALUES (NULL, N&#8217;Rădăcină&#8217;)<br />
 <br />
INSERT INTO Arbore (ID_NodParinte, Informatie)<br />
VALUES (1, N&#8217;Nivelul 1 &#8211; primul nod&#8217;)<br />
 <br />
INSERT INTO Arbore (ID_NodParinte, Informatie)<br />
VALUES (1, N&#8217;Nivelul 1 &#8211; al 2-lea nod&#8217;)<br />
 <br />
INSERT INTO Arbore (ID_NodParinte, Informatie)<br />
VALUES (3, N&#8217;Nivelul 2 &#8211; primul nod&#8217;)<br />
 <br />
INSERT INTO Arbore (ID_NodParinte, Informatie)<br />
VALUES (4, N&#8217;Informatie căutată&#8217;)<br />
GO<br />
Am creat şi populat o tabelă în care nodul părinte referă o valoare din cheia tabelei. Această structură ajută la reprezentarea unui arbore definit unic printro cheie, părinte şi informaţie (valoare). Ne propunem să aflăm toate nodurile prin care se trece de la rădăcină până la frunza cu o anumită informaţie. Un exemplu mai concret ar fi acela prin care dorim să aflăm toţi şefii unui angajat plecând de la seful imediat superior până la directorul general sau putem afla structura ierarhică a unui departament pornind de la acesta şi până la ultimul nivel de conducere.<br />
Utilizare CTE pentru exemplul propus (frunza cu o informaţie dată):<br />
WITH Arb (ID_Nod, ID_NodParinte, Informatie, Nivel) AS<br />
(<br />
      SELECT ID_Nod, ID_NodParinte, Informatie, 0<br />
      FROM dbo.Arbore<br />
      WHERE Informatie = N&#8217;Informatie căutată&#8217;<br />
     <br />
      UNION ALL<br />
     <br />
      SELECT a.ID_Nod, a.ID_NodParinte, a.Informatie, Nivel + 1 <br />
      FROM dbo.Arbore a<br />
      INNER JOIN Arb b ON b.ID_NodParinte = a.ID_Nod<br />
      WHERE B.ID_NodParinte IS NOT NULL<br />
)<br />
SELECT ID_Nod, ID_NodParinte, Informatie, Nivel<br />
FROM Arb<br />
ORDER BY ID_Nod<br />
 <br />
Să analizăm:<br />
Se crează membrul ancoră în care se crează o pseudocoloană (Nivel) ce ne va ajuta să identificăm nivelul ierarhic; rezultatul membrului ancoră se foloseşte ca intrare pentru membrul recursiv; se incrementează nivelul; se afişează rezultatul:<br />
ID_Nod      ID_NodParinte Informatie                  Nivel<br />
&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8211;<br />
1           NULL          Rădăcină                    3<br />
3           1             Nivelul 1 &#8211; al 2-lea nod    2<br />
4           3             Nivelul 2 &#8211; primul nod      1<br />
5           4             Informatie căutată          0<br />
 <br />
(4 row(s) affected)</p>
Posted in metodologie, SQL Server Tagged: baza de date, database, recursivitate, SQL Server <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/katalyn.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/katalyn.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/katalyn.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/katalyn.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/katalyn.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/katalyn.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/katalyn.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/katalyn.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/katalyn.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/katalyn.wordpress.com/31/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=katalyn.wordpress.com&blog=882444&post=31&subd=katalyn&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://katalyn.wordpress.com/2009/01/13/interogarile-recursive-folosind-common-table-expressions-cte/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/cb331d7e43eb6a51dcbcd5663466d8f0?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">katalyn</media:title>
		</media:content>
	</item>
		<item>
		<title>Executarea de interogari peste mai multe servere (multiple server query execution).</title>
		<link>http://katalyn.wordpress.com/2009/01/08/executarea-de-interogari-peste-mai-multe-servere-multiple-server-query-execution/</link>
		<comments>http://katalyn.wordpress.com/2009/01/08/executarea-de-interogari-peste-mai-multe-servere-multiple-server-query-execution/#comments</comments>
		<pubDate>Thu, 08 Jan 2009 09:28:31 +0000</pubDate>
		<dc:creator>Catalin Dumitru</dc:creator>
				<category><![CDATA[Management Studio]]></category>
		<category><![CDATA[SQL Server]]></category>

		<guid isPermaLink="false">http://katalyn.wordpress.com/?p=24</guid>
		<description><![CDATA[SQL Server permite executarea de script-uri peste mai multe servere fara a fi necesara schimbarea conexiuni si rerularea sciptului. Pentru a intelege mai bine despre ce este vorba, am sad au un exemplu: vrem sa rulam un script in contextul mai multor baze de date aflate pe servere diferite. Avem mai multe solutii insa spre [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=katalyn.wordpress.com&blog=882444&post=24&subd=katalyn&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p class="MsoNormal" style="text-align:justify;margin:0 0 10pt;"><span style="font-size:small;font-family:Calibri;">SQL Server permite executarea de script-uri peste mai multe servere fara a fi necesara schimbarea conexiuni si rerularea sciptului. Pentru a intelege mai bine despre ce este vorba, am sad au un exemplu: vrem sa rulam un script in contextul mai multor baze de date aflate pe servere diferite. Avem mai multe solutii insa spre exemplificare am sa ofer numai una: scriptul respective il putem salva ca procedura stocata in fiecare din bazele de date, fiecare server sa-l adaugam ca linked server intr-o instanta separate de SQL Server iar in aceasta instant sa cream o noua procedura care executa procedura create mai devreme pe fiecare server. Principalul dezavantaj este acela ca daca avem nevoie sa modificam procedura stocata, va trebui facut deployment pe fiecare server<span>  </span>in parte. Aici ne putem ajuta de executarea de interogari asupra mai multor <span> </span>servere sau mai bine zis asupra unui grup de servere. Vom crea un grup de servere, vom adauga serverele in grup si apoi vom executa scriptul. Pentru aceasta deschidem Management Studio iar apoi pentru a crea un grup de servere putem apasa combinatia de taste CTRL+ALT+G sau mergem in meniul VIEW de unde alegem Registered Servers. Click dreapta pe Local Server Groups si vom selecta New Server Group, introducem denumirea noului grup. Click dreapta pe Local Servers Groups si alegem New Registration Server Registration. In fereastra nou deschisa selectam instant pe care vrem sa o adaugam in grup, setam elementele de securitate si numele instantei eventual si descrierea iar apoi din tab-ul Connection Properties <span> </span>trebuie sa selectam baza de date in al carei context se va executa scriptul. Repetam acesti pasi pentru fiecare server. Dupa ce am adaugat toate instantele de SQL Server suntem gata sa executam scriptul. Click dreapta pe denumirea grupului si alegem New Query. In fereastra deschisa vom scrie:</span></p>
<p class="MsoNormal" style="margin:0 0 10pt;"><span style="font-size:10pt;color:blue;line-height:115%;font-family:&quot;">SELECT</span><span style="font-size:10pt;line-height:115%;font-family:&quot;"> <span style="color:fuchsia;">DB_NAME</span><span style="color:gray;">()</span> <span style="color:blue;">AS</span> BazaDeDateContextuala</span></p>
<p class="MsoNormal" style="text-align:justify;margin:0 0 10pt;"><span><span style="font-size:small;font-family:Calibri;">Acesta interogare va avea ca efect afisarea bazei de date curente, veti observa ca desi in interogare este o singura coloana, rezultatul va avea 2 coloane si anume coloanele “Server Name” si “bazaDeDateContextuala” iar rezultatul rularii va contine randuri pentru fiecare server in parte (denumirea server-ului de unde vin randurile este trecuta in prima coloana)</span></span></p>
Posted in Management Studio, SQL Server Tagged: Management Studio, SQL Server <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/katalyn.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/katalyn.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/katalyn.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/katalyn.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/katalyn.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/katalyn.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/katalyn.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/katalyn.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/katalyn.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/katalyn.wordpress.com/24/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=katalyn.wordpress.com&blog=882444&post=24&subd=katalyn&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://katalyn.wordpress.com/2009/01/08/executarea-de-interogari-peste-mai-multe-servere-multiple-server-query-execution/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/cb331d7e43eb6a51dcbcd5663466d8f0?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">katalyn</media:title>
		</media:content>
	</item>
		<item>
		<title>De ce avem nevoie de un proces pentru un proiect de web design?</title>
		<link>http://katalyn.wordpress.com/2008/12/23/de-ce-avem-nevoie-de-un-proces-pentru-un-proiect-de-web-design/</link>
		<comments>http://katalyn.wordpress.com/2008/12/23/de-ce-avem-nevoie-de-un-proces-pentru-un-proiect-de-web-design/#comments</comments>
		<pubDate>Tue, 23 Dec 2008 14:25:19 +0000</pubDate>
		<dc:creator>Catalin Dumitru</dc:creator>
				<category><![CDATA[WEB Design]]></category>

		<guid isPermaLink="false">http://katalyn.wordpress.com/?p=21</guid>
		<description><![CDATA[Realizarea unui website poate fi foarte provocatoare. Avand in vedere foarte multe componente diferite pornind de la design-ul vizual si pana la integrarea cu bazele de date, este suficient spatiu pentru a gresi. Pentru a minimiza riscul ca un proiect web sa fie realizat gresit avem nevoie de un proces care sa ne ghideze. Din [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=katalyn.wordpress.com&blog=882444&post=21&subd=katalyn&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:justify;">Realizarea unui website poate fi foarte provocatoare. Avand in vedere foarte multe componente diferite pornind de la design-ul vizual si pana la integrarea cu bazele de date, este suficient spatiu pentru a gresi. Pentru a minimiza riscul ca un proiect web sa fie realizat gresit avem nevoie de un proces care sa ne ghideze. Din pacate, multi dezvoltatori utilizeaza ceea ce se numeste metoda “NIKE”, adica realizeaza proiectul pur si simplu utilizand o planificare foarte mica sau chiar deloc. Procesul constructiei unui site in acest fel nu este metodologic deloc. Scopul site-ului are tendinta de a se pierde, procesul este mai mult intuitiv decat procedural si rezultatul poate fi impredictibil. Site-urile dezvoltate in acest mod sunt ca plantele, cresc organic – ocazional intr-o floare frumoasa, dar de cele mai multe ori cresc haotic. Site-urile complexe necesita planificare atenta. Un proces sau o metodologie trebuie folosita pentru a ghida eforturile de web design si dezvoltare.</p>
Posted in WEB Design  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/katalyn.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/katalyn.wordpress.com/21/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/katalyn.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/katalyn.wordpress.com/21/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/katalyn.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/katalyn.wordpress.com/21/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/katalyn.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/katalyn.wordpress.com/21/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/katalyn.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/katalyn.wordpress.com/21/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=katalyn.wordpress.com&blog=882444&post=21&subd=katalyn&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://katalyn.wordpress.com/2008/12/23/de-ce-avem-nevoie-de-un-proces-pentru-un-proiect-de-web-design/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/cb331d7e43eb6a51dcbcd5663466d8f0?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">katalyn</media:title>
		</media:content>
	</item>
		<item>
		<title>Backup Compression (compresie backup)</title>
		<link>http://katalyn.wordpress.com/2008/12/15/backup-compression-compresie-backup/</link>
		<comments>http://katalyn.wordpress.com/2008/12/15/backup-compression-compresie-backup/#comments</comments>
		<pubDate>Mon, 15 Dec 2008 13:25:53 +0000</pubDate>
		<dc:creator>Catalin Dumitru</dc:creator>
				<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[compression]]></category>
		<category><![CDATA[mirror]]></category>

		<guid isPermaLink="false">http://katalyn.wordpress.com/?p=13</guid>
		<description><![CDATA[In SQL Server 2008 a fost introdus backup-ul compresat. Acesta se realizeaza cu comanda BACKUP la care se adauga clauza WITH COMPRESSION.
Exemplu: BACKUP DATABASE [MASTER] TO DISK=&#8217;C:\Master.bak&#8217; WITH COMPRESSION
Backup-ul compresat se poate realiza din editiile enterprise si developer insa restaurarea dintr-un backup compresat se poate realiza pe oricare dintre editiile SQL Server.
La nivel de server exista [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=katalyn.wordpress.com&blog=882444&post=13&subd=katalyn&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>In SQL Server 2008 a fost introdus backup-ul compresat. Acesta se realizeaza cu comanda BACKUP la care se adauga clauza WITH COMPRESSION.</p>
<p style="text-align:justify;">Exemplu: BACKUP DATABASE [MASTER] TO DISK=&#8217;C:\Master.bak&#8217; WITH COMPRESSION<br />
Backup-ul compresat se poate realiza din editiile enterprise si developer insa restaurarea dintr-un backup compresat se poate realiza pe oricare dintre editiile SQL Server.<br />
La nivel de server exista optiunea &#8220;backup-compression default&#8221; care atunci cand este setata are ca efect stabilirea modului implicit de backup(compresat/necompresat). Aceasta optinea poate fi suprascrisa de WITH COMRESSION si WITH NO_COMPRESSION in T-SQL sau din Management Studio in fereastra Back Up Database setand Set backup compresion (care prevede 3 posibilitati:  Use the default server setting &#8211; care are ca efect folosirea optiunii de la nivel de server; Compress backup; Do not compress backup).</p>
<p>Avantaje: reducerea timpilor la operatiunile de backup / restore si reducerea spatiului de stocare.</p>
<p>Dezavantaj: se creste utilizarea procesorului.</p>
<p>Pentru a se vedea rata de compresie se poate rula interogarea de mai jos:</p>
<p>SELECT backup_size/compressed_backup_size AS RataCompresie, * <br />
FROM msdb..backupset; </p>
<p>Studiu de caz:</p>
<p>A fost folosita o baza de date (XXX) de 4,4GB</p>
<p>Spatiu de stocare pentru fisierul de backup:</p>
<p>Compresat: 556,209 KB<br />
Necompresat: 1,401,256 KB</p>
<p>Timp de realizare al backup-ului:</p>
<p>Compresat: 40 secunde<br />
Necompresat: 64 secunde</p>
<p>Timp de restaurare:</p>
<p>Compresat: 95 secunde<br />
Necompresat: 140 secunde<br />
Observatie: ambele fisiere de backup au fost apoi arhivate cu WinRar 3.71 iar rezultatele au fost in favoarea backup-ului necompreasat (273,222 KB pentru necompresat in comparatie cu 531,449 KB cat a avut cel compresat in conditiile in care ambele backup-uri au fost arhivate cu aceleasi setari precum compression method: normal).<br />
Concluzie: tehnica de backup poate reduce timpii destinati operatiunilor administrative si pot imbunatatii procese precum log shipping sau mirroring.</p>
Posted in SQL Server Tagged: backup, compression, mirror, SQL Server <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/katalyn.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/katalyn.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/katalyn.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/katalyn.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/katalyn.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/katalyn.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/katalyn.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/katalyn.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/katalyn.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/katalyn.wordpress.com/13/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=katalyn.wordpress.com&blog=882444&post=13&subd=katalyn&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://katalyn.wordpress.com/2008/12/15/backup-compression-compresie-backup/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/cb331d7e43eb6a51dcbcd5663466d8f0?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">katalyn</media:title>
		</media:content>
	</item>
		<item>
		<title>Recovery model</title>
		<link>http://katalyn.wordpress.com/2007/12/20/recovery-model/</link>
		<comments>http://katalyn.wordpress.com/2007/12/20/recovery-model/#comments</comments>
		<pubDate>Thu, 20 Dec 2007 09:28:17 +0000</pubDate>
		<dc:creator>Catalin Dumitru</dc:creator>
				<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[baza de date]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[log]]></category>
		<category><![CDATA[logged]]></category>
		<category><![CDATA[model]]></category>
		<category><![CDATA[recovery]]></category>
		<category><![CDATA[recuperare]]></category>

		<guid isPermaLink="false">http://katalyn.wordpress.com/2007/12/20/recovery-model/</guid>
		<description><![CDATA[Modelul de recuperare (recovery model) reprezintă o opţiune de configurare care controlează modul în care transacţiile sunt păstrate în log, dacă log-ul de tranzacţii poate fi salvat ca şi copie de siguranţă, şi ce opţiuni de recuperare sunt disponibile pentru baza de date. Modelul ales are implicaţii asupra asupra recuperării din copiile de siguranţă şi [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=katalyn.wordpress.com&blog=882444&post=12&subd=katalyn&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:justify;">Modelul de recuperare (recovery model) reprezintă o opţiune de configurare care controlează modul în care transacţiile sunt păstrate în log, dacă log-ul de tranzacţii poate fi salvat ca şi copie de siguranţă, şi ce opţiuni de recuperare sunt disponibile pentru baza de date. Modelul ales are implicaţii asupra asupra recuperării din copiile de siguranţă şi implicaţii privind performaţa.</p>
<p style="text-align:justify;">În MS SQL Server sunt disponibile 3 tipuri de modele: <strong>FULL</strong>, <strong>SIMPLE </strong>şi <strong>BULK-LOGGED</strong>. Aceste modele determincă cum SQL Server lucrează cu logul de tranzacţii şi determină operaţiile pe care le salvează în log şi dacă trunchiază (truncate) logul de tranzacţii. Trunchierea logului de tranzacţii este procesul de înlăturare a tranzacţiilor comise lăsând spaţiul liber pentru noi tranzacţii.</p>
<ul>
<li>
<div style="text-align:justify;">În modelul de recuperare FULL, SQL Server păstrează toate tranzacţiile în logul de tranzacţii şi nu-l trunchiază niciodată. Acest model permite recuperarea (restore) din copii de siguranţă a unei baze de date la momentul în care s-a salvat copia de siguranţă sau recuperare la un moment din timp (restore point in time).  Pentru SQL Server 2005 recuperarea în timp este disponibilă doar în versiunile Enterprise Edition şi Developer Edition.</div>
</li>
<li>
<div style="text-align:justify;">În modelul de recuperare SIMPLE, SQL Server salvează cât mai puţine tranzacţii (minimally log) cele mai multe operaţii şi trunchiază logul de tranzacţii după fiecare checkpoint. În acest model nu se pot salva şi recupera copii de siguranţă ale logului de tranzacţii. Nu pot fi restaurate nici pagini de date.</div>
</li>
<li>
<div style="text-align:justify;">În modelul de recuperare BULK-LOGGED, SQL Server salvează cât mai puţin în logul de tranzacţii operaţii bulk precum SELECT INTO şi BULK INSERT. În acest model, dacă un log conţine operaţii bulk, baza de date poate fi restaurată la momentul salvării copiei de siguranţă, nu şi în timp. Acest model este destinat a fi utilizat doar pe parcursul operaţiilor de import masiv de date.</div>
</li>
</ul>
<h4>Cum se modifică modelul de recuperare (recovery model)</h4>
<p>Informaţii despre configurarea bazelor de date se poate obţine:</p>
<p><span style="font-size:x-small;"><span style="color:#ff0000;">SELECT<span style="font-size:x-small;"> </span><span style="font-size:x-small;">name</span><span style="font-size:x-small;">,</span><span style="font-size:x-small;"> recovery_model_desc </span><span style="font-size:x-small;">FROM</span><span style="font-size:x-small;"> </span><span style="font-size:x-small;">SYS.DATABASES</span><span style="font-size:x-small;"> </span></span></span></p>
<p>Pentru modificarea acestei opţiuni se poate utiliza:</p>
<ul>
<li>
<div style="text-align:justify;">SSMS (SQL Server Management Studio) &#8211; click dreapta pe o baza de date &#8211; properties &#8211; pagina Options</div>
</li>
<li>
<div style="text-align:justify;"><span style="font-size:x-small;color:#0000ff;"><span style="color:#ff0000;">ALTER</span><span style="color:#000000;"><span style="color:#ff0000;"><span style="color:#ff0000;"><span style="color:#ff0000;"><span style="font-size:x-small;"> </span><span style="font-size:x-small;">DATABASE</span><span style="font-size:x-small;"> AdventureWorks </span><span style="font-size:x-small;">SET</span><span style="font-size:x-small;"> </span><span style="font-size:x-small;">RECOVERY</span><span style="font-size:x-small;"> </span><span style="font-size:x-small;">FULL</span><span style="font-size:x-small;"> </span><span style="font-size:x-small;">|</span><span style="font-size:x-small;"> </span><span style="font-size:x-small;">SIMPLE</span><span style="font-size:x-small;"> </span><span style="font-size:x-small;">|</span><span style="font-size:x-small;"> </span><span style="font-size:x-small;"><span style="color:#ff0000;">BULK_LOGGED</span></span></span></span></span></span></span></div>
</li>
</ul>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/katalyn.wordpress.com/12/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/katalyn.wordpress.com/12/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/katalyn.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/katalyn.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/katalyn.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/katalyn.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/katalyn.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/katalyn.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/katalyn.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/katalyn.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/katalyn.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/katalyn.wordpress.com/12/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=katalyn.wordpress.com&blog=882444&post=12&subd=katalyn&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://katalyn.wordpress.com/2007/12/20/recovery-model/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/cb331d7e43eb6a51dcbcd5663466d8f0?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">katalyn</media:title>
		</media:content>
	</item>
		<item>
		<title>SQLParameter in .NET</title>
		<link>http://katalyn.wordpress.com/2007/11/09/sqlparameter-in-net/</link>
		<comments>http://katalyn.wordpress.com/2007/11/09/sqlparameter-in-net/#comments</comments>
		<pubDate>Fri, 09 Nov 2007 15:27:45 +0000</pubDate>
		<dc:creator>Catalin Dumitru</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[]]></category>
		<category><![CDATA[programare]]></category>

		<guid isPermaLink="false">http://katalyn.wordpress.com/2007/11/09/sqlparameter-in-net/</guid>
		<description><![CDATA[Executia interogarilor la momentul executiei unei aplicatii este o necesitate fie ca este vorba de o aplicatie web, aplicatie desktop sau chiar o aplicatie de tip consola. Asadar, preluarea intrarilor din aplicatie si trimiterea lor ca parametrii pentru o procedura stocata sau functie este necesara atunci cand se doreste realizarea de operatii pe seturi de date.
In [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=katalyn.wordpress.com&blog=882444&post=9&subd=katalyn&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p align="justify">Executia interogarilor la momentul executiei unei aplicatii este o necesitate fie ca este vorba de o aplicatie web, aplicatie desktop sau chiar o aplicatie de tip consola. Asadar, preluarea intrarilor din aplicatie si trimiterea lor ca parametrii pentru o procedura stocata sau functie este necesara atunci cand se doreste realizarea de operatii pe seturi de date.</p>
<p align="justify"><em><u>In continuare se va presupune existenta unui obiect SQLConnection asociat cu obiectul SQLCommand.</u></em></p>
<p align="justify">Utilizarea obiectului SQLParameters faciliteaza transmitere valorilor catre interogari in .NET. Acesti parametrii pot avea orice directie (input, output, inputoutput). de asemenea se pot asocia tipuri de date, dimensiuni si valori. Sunt permise mai multe constructii pentru obiectele SQLParameters. Un exemplu este prezentat in cele ce urmeaza:</p>
<p align="left"><font color="#ff0000">String SirSql = “interogarea dumneavoastra”;<br />
SqlCommand SqlCmd = new SqlCommand(SirSql);<br />
SqlParameter SqlPar = new SqlParameter(&#8220;@PrimulParam.&#8221;, SqlDbType.VarChar, 50)<br />
SqlPar.Value = 100;<br />
SqlPar.Direction = ParameterDirection.Input;<br />
SqlCmd.Parameters.Add(SqlPar);</font></p>
<p align="justify"><font color="#ff0000"><font color="#333333">Exemplul de mai sus ne arata cum este declarat un parametru de tip INPUT cu numele @PrimulParametru de tip VARCHAR si dimensiune 50. Deasemenea i-a fost atribuita valoarea 100.</font></font></p>
<p align="justify"><font color="#ff0000"><font color="#333333">Cand construiti dinamic o interogare, puteti specifica valoarea pentru coloane. Valoare care se poate gasi in variabile si care prin concatenare si functii pe text (string) va poate ajuta sa compuneti interogari. Generarea de interogari la nivelul serverului de baze de date sau la nivelul aplicatiei client este un subiect care nu va fi dezbatut aici, poate intr-un alt articol. Pentru moment am sa exemplific constructia unei interogari la nivelul aplicatiei client (business layer) si executarea acesteia utilizand obiectul SQLCommand. </font></font></p>
<p align="justify"><font color="#ff0000"><font color="#333333">Este posibila constructia interogarilor asa cum este prezentata putin mai jos iar la momentul executarii, valoarea variabilei sa se gaseasca in constructie.</font></font></p>
<p align="left"><font color="#ff0000">int VariabilaMea = “75”;<br />
string sql  = &#8221; SELECT * FROM TabelaMea WHERE ID = “ + VariabilaMea;<br />
SqlCommand SqlCmd = new SqlCommand(sql);<br />
SqlCmd.ExecuteNonQuery();</font></p>
<p align="justify">O metoda alternativa propun in cele ce urmeaza:</p>
<p align="left"><font color="#ff0000">SqlCommand SqlCmd = new SqlCommand(sql);<br />
SqlParameter SqlPar = new SqlParameter(&#8220;@PrimulParametru&#8221;, SqlDbType.Int);.<br />
SqlPar.Value = “75”;<br />
SqlCmd.Parameters.Add(SqlPar);<br />
SqlCmd.ExecuteNonQuery();</font></p>
<p align="justify">De ce sa specificam separat parametrii? Sa luam cazul operatiilor de actualizare (adaugare, modificare) asupra unei tabele. Daca doriti adaugarea unui fisier in baza de date, nu veti putea realiza concatenarea interogarii; motivul este pentru ca fisierul va fi in format binar. Solutia este de a trimite continutul obiectului catre interogare prin specificarea valorii obiectului ca parametru. Ca exemplu:</p>
<p align="left"><font color="#ff0000">byte[] fileData = new byte[lengthOfFile];</font></p>
<p align="justify">Apoi atribuim variabila de tip byte[] obiectului SQLParameter utilizand constructorul:</p>
<p align="left"><font color="#ff0000">SqlParameter(string NumeParametru, Obiect valoare).</font></p>
<p align="justify">Codul de mai jos permite trimiterea continutului unui fisier ca parametru si adaugarea acestuia intro tabela.</p>
<p align="left"><font color="#ff0000">//Creare parametru si executare interogare.<br />
SqlCommand SqlCmd = new SqlCommand(sql);<br />
SqlParameter SqlPar = new SqlParameter(&#8220;@binaryValue&#8221;, fileData);<br />
SqlCmd.Parameters.Add(SqlPar);<br />
SqlCmd.ExecuteNonQuery();</font></p>
<p align="justify">Sursa articol: Raj Vasant</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/katalyn.wordpress.com/9/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/katalyn.wordpress.com/9/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/katalyn.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/katalyn.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/katalyn.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/katalyn.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/katalyn.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/katalyn.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/katalyn.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/katalyn.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/katalyn.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/katalyn.wordpress.com/9/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=katalyn.wordpress.com&blog=882444&post=9&subd=katalyn&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://katalyn.wordpress.com/2007/11/09/sqlparameter-in-net/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/cb331d7e43eb6a51dcbcd5663466d8f0?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">katalyn</media:title>
		</media:content>
	</item>
		<item>
		<title>Reguli privind valorile NULL</title>
		<link>http://katalyn.wordpress.com/2007/10/05/reguli-privind-valorile-null/</link>
		<comments>http://katalyn.wordpress.com/2007/10/05/reguli-privind-valorile-null/#comments</comments>
		<pubDate>Fri, 05 Oct 2007 14:06:19 +0000</pubDate>
		<dc:creator>Catalin Dumitru</dc:creator>
				<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[NULL]]></category>

		<guid isPermaLink="false">http://katalyn.wordpress.com/2007/10/05/reguli-privind-valorile-null/</guid>
		<description><![CDATA[Navigand pe diverse site-uri am gasit un articol care se refera la NULL-uri. Pe aceasta cale tin sa precizez ca tot meritul il detine autorul (Michael Coles) prin articolul publicat la adresa http://www.sqlservercentral.com/articles/Advanced+Querying/2829/. Ceea ce mi-a atras foarte repede atentia au fost cele 4 reguli pe care autorul le considera ca fiind fundamentale in &#8220;gandirea&#8221; [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=katalyn.wordpress.com&blog=882444&post=8&subd=katalyn&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:justify;">Navigand pe diverse site-uri am gasit un articol care se refera la NULL-uri. Pe aceasta cale tin sa precizez ca tot meritul il detine autorul (Michael Coles) prin articolul publicat la adresa http://www.sqlservercentral.com/articles/Advanced+Querying/2829/. Ceea ce mi-a atras foarte repede atentia au fost cele 4 reguli pe care autorul le considera ca fiind fundamentale in &#8220;gandirea&#8221; NULL-urilor si anume: 1.Utilizati NULL pentru a indica valori necunoscute(lipsa). Nu utilizati NULL pentru valoarea zero, sir de caractere de dimensiunea zero sau alte valori &#8220;cunoscute&#8221; ca fiind lipsa. Actualizati valorile NULL cat mai repede.2.In standardul ANSI SQL, NULL nu este egal cu nimic, nici macar cu alte valori NULL.<br />
3.Utilizati SET ANSI_NULLS ON si utilizati intodeauna sintaxa din standardul ANSI SQL pentru NULL. Abaterea de la aceasta regula poate conduce la probleme de portabilitate, incompatibilitate a codului existent si a bazei de date, si poate intoarce rezultate eronate. 4.Standardul ANSI SQL pentru COALESCE() si CASE sunt preferate ISNULL() sau altor metode.Va rog sa cititi respectivul articol pentru ca autorul prezinta si cateva exemple despre comportamentul valorilor NULL.<br />
 </p>
<p> </p>
<p> <br />
 </p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/katalyn.wordpress.com/8/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/katalyn.wordpress.com/8/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/katalyn.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/katalyn.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/katalyn.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/katalyn.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/katalyn.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/katalyn.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/katalyn.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/katalyn.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/katalyn.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/katalyn.wordpress.com/8/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=katalyn.wordpress.com&blog=882444&post=8&subd=katalyn&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://katalyn.wordpress.com/2007/10/05/reguli-privind-valorile-null/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/cb331d7e43eb6a51dcbcd5663466d8f0?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">katalyn</media:title>
		</media:content>
	</item>
		<item>
		<title>Auditul grupurilor de utilizatori Windows in SQL Server</title>
		<link>http://katalyn.wordpress.com/2007/05/28/auditul-grupurilor-de-utilizatori-windows-in-sql-server/</link>
		<comments>http://katalyn.wordpress.com/2007/05/28/auditul-grupurilor-de-utilizatori-windows-in-sql-server/#comments</comments>
		<pubDate>Mon, 28 May 2007 08:29:15 +0000</pubDate>
		<dc:creator>Catalin Dumitru</dc:creator>
				<category><![CDATA[SQL Server]]></category>

		<guid isPermaLink="false">http://katalyn.wordpress.com/2007/05/28/auditul-grupurilor-de-utilizatori-windows-in-sql-server/</guid>
		<description><![CDATA[Asigurarea securităţii este o parte din treaba fiecărui DBA.  Cu SQL Server aveţi posibilitata să utilizaţi atât autentificare SQL Server, Windows cât şi mixtă. Avantajul utilizărrii autentificării Windows pentru SQL Server este acela că se poate beneficia de avantajele modelului de securitate Windows si a politicilor de securitate configurate pe domeniu. Un alt avantaj este [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=katalyn.wordpress.com&blog=882444&post=7&subd=katalyn&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:justify;">Asigurarea securităţii este o parte din treaba fiecărui DBA.  Cu SQL Server aveţi posibilitata să utilizaţi atât autentificare SQL Server, Windows cât şi mixtă. Avantajul utilizărrii autentificării Windows pentru SQL Server este acela că se poate beneficia de avantajele modelului de securitate Windows si a politicilor de securitate configurate pe domeniu. Un alt avantaj este acela că se poate confugura securitatea la nivel de domeniu in loc de nivelul de instanţă al SQL Server.  Bazându-ne pe grupurile de utilizatori care sunt configurate în Windows, se pot acorda acces grpurilor in SQL Server fără a crea login pentru fiecare utilizator.</p>
<p style="text-align:justify;">Dezavantajul este că utilizatorii care aparţin grupurilor de utilizatori din Windows sunt &#8220;mascaţi&#8221; la nivelul SQL server-ului. In logins se pot vedea grupurile care au acces dar nu se poate vedea care utilizatori fac parte din respectivele grupuri. Cum se poate obţine această informaţie in SQL Server?</p>
<p style="text-align:justify;">SQL Server oferă o procedură stocată extinsă (xp_logininfo) care permite o &#8220;privire&#8221; în această problemă. Această procedură se regăseşte atât în SQL Server 2000 cât şi în SQL Server 2005. Procedura are următorii parametrii:</p>
<ul>
<li>@acctname &#8211; numele utilizatorului windows sau a grupului </li>
<li>@option - informaţia de afişat 
<ul>
<li>&#8216;all&#8217; &#8211; afişează informaţii pentru permisiuni</li>
<li>&#8216;members&#8217; &#8211; afişează lista de membrii a grupului</li>
</ul>
</li>
<li>@privelege &#8211; variabilă de ieşire şi întoarce &#8216;admin&#8217;,'user&#8217; sau null</li>
</ul>
<p>Exemple:</p>
<div><span style="font-size:x-small;color:#0000ff;">EXEC<span style="font-size:x-small;"> </span><span style="font-size:x-small;color:#800000;">xp_logininfo</span><span style="font-size:x-small;"> </span><span style="font-size:x-small;color:#ff0000;">&#8216;BUILTIN\Administrators&#8217;</span><span style="font-size:x-small;">  &#8211; Afişează informaţii despre grup (permission path)</span></span></div>
<div></div>
<p><span style="font-size:x-small;color:#0000ff;"></p>
<div><span style="font-size:x-small;color:#0000ff;">EXEC<span style="font-size:x-small;"> </span><span style="font-size:x-small;color:#800000;">xp_logininfo</span><span style="font-size:x-small;"> </span><span style="font-size:x-small;color:#ff0000;">&#8216;BUILTIN\Administrators&#8217;</span><span style="font-size:x-small;color:#808080;">,</span><span style="font-size:x-small;"> </span><span style="font-size:x-small;color:#ff0000;">&#8216;members&#8217;  </span>- Afişează lista de membrii din grupul Windows</span></div>
<div><span style="font-size:x-small;color:#0000ff;"> </span></div>
<p></span><span style="font-size:x-small;color:#0000ff;"> </p>
<p></span></p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/katalyn.wordpress.com/7/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/katalyn.wordpress.com/7/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/katalyn.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/katalyn.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/katalyn.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/katalyn.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/katalyn.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/katalyn.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/katalyn.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/katalyn.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/katalyn.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/katalyn.wordpress.com/7/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=katalyn.wordpress.com&blog=882444&post=7&subd=katalyn&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://katalyn.wordpress.com/2007/05/28/auditul-grupurilor-de-utilizatori-windows-in-sql-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/cb331d7e43eb6a51dcbcd5663466d8f0?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">katalyn</media:title>
		</media:content>
	</item>
		<item>
		<title>SET NOCOUNT ON</title>
		<link>http://katalyn.wordpress.com/2007/04/25/set-nocount-on/</link>
		<comments>http://katalyn.wordpress.com/2007/04/25/set-nocount-on/#comments</comments>
		<pubDate>Wed, 25 Apr 2007 12:58:31 +0000</pubDate>
		<dc:creator>Catalin Dumitru</dc:creator>
				<category><![CDATA[SQL Server]]></category>

		<guid isPermaLink="false">http://katalyn.wordpress.com/2007/04/25/set-nocount-on/</guid>
		<description><![CDATA[Una dintre cele mai importante sarcini zilnice pe care administratorii de baze de date trebuie să le execute este aceea de a avea grijă ca sistemul de gestiune a bazelor de date să ruleze cât mai repede. Cu cât mai mulţi utilizatori se conectază la server-ul de baze de date, acestea vor creşte ca dimensiune [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=katalyn.wordpress.com&blog=882444&post=6&subd=katalyn&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:justify;">Una dintre cele mai importante sarcini zilnice pe care administratorii de baze de date trebuie să le execute este aceea de a avea grijă ca sistemul de gestiune a bazelor de date să ruleze cât mai repede. Cu cât mai mulţi utilizatori se conectază la server-ul de baze de date, acestea vor creşte ca dimensiune de stocare iar scăderea performanţelor este inevitabilă. Conform acestei idei, administratorii şi dezvoltatorii ar trebui să ia in considerare posibilităţile de optimizare încă de la început. Acest lucru nu este însă uşor de făcut, datorită modificărilor în timp dar sunt câteva lucuri de care se poate ţine cont.</p>
<p style="text-align:justify;">Uneori, chiar şi lucrurile simple pot face diferenţa. Unul dintre aceste lucruri care ar trebui să facă parte din fiecare procedură stocată este SET NOCOUNT ON. Această linie de cod, pusă la începutul codului din proceduri are ca efect suprimarea mesajelor trimise de SQL Server, clientului, după ce un lot de instrucţiuni a fost executat. Aceasta se realizează după ce loturi de instrucţiuni SELECT, INSERT, UPDATE şi DELETE au fost executate. Această informaţie este utilă atunci cand executăm cod T-SQL din consolă (ex. Management Studio) dar când executăm proceduri stocate, informaţia nu este necesară pentru aplicaţia client.</p>
<p style="text-align:justify;">Înlăturând traficul din reţea care conţine această informaţie, se poate obţine o creştere de performanţă a aplicaţiilor si a bazelor de date.</p>
<p style="text-align:justify;">Dacă avem nevoie de numărul de rânduri afectate de loturile de instrucţiuni, putem obţine această informaţie cu ajutorul @@ROWCOUNT. Aşadar, dacă executăm o procedură care conţine SET NOCOUNT ON putem să abţinem numărul de rânduri afectate apelând la @@ROWCOUNT.</p>
<p style="text-align:justify;">Microsoft a ţinut cont de acastă optimizare şi a modificat codul generat pentru crearea de noi proceduri, astfel încât, acesta să conţină şi linia SET NOCOUNT ON.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/katalyn.wordpress.com/6/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/katalyn.wordpress.com/6/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/katalyn.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/katalyn.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/katalyn.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/katalyn.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/katalyn.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/katalyn.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/katalyn.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/katalyn.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/katalyn.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/katalyn.wordpress.com/6/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=katalyn.wordpress.com&blog=882444&post=6&subd=katalyn&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://katalyn.wordpress.com/2007/04/25/set-nocount-on/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/cb331d7e43eb6a51dcbcd5663466d8f0?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">katalyn</media:title>
		</media:content>
	</item>
		<item>
		<title>Index clustered si non-clustered</title>
		<link>http://katalyn.wordpress.com/2007/03/29/index-clustered-si-non-clustered/</link>
		<comments>http://katalyn.wordpress.com/2007/03/29/index-clustered-si-non-clustered/#comments</comments>
		<pubDate>Thu, 29 Mar 2007 13:23:05 +0000</pubDate>
		<dc:creator>Catalin Dumitru</dc:creator>
				<category><![CDATA[SQL Server]]></category>

		<guid isPermaLink="false">http://katalyn.wordpress.com/2007/03/29/index-clustered-si-non-clustered/</guid>
		<description><![CDATA[SQL Server este un domeniu foarte vast şi majoritatea sunt grabiţi în a parcurge cât mai mult din documentaţii astfel uneori pot trece peste câteva lucruri de bază cum ar fi indecşii clustered sau non-clustered. SQL Server 2005 oferă două tipuri de indecşi clustered si non-clustered. Din definiţie se poate spune ca un index clustered este un index [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=katalyn.wordpress.com&blog=882444&post=5&subd=katalyn&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>SQL Server este un domeniu foarte vast şi majoritatea sunt grabiţi în a parcurge cât mai mult din documentaţii astfel uneori pot trece peste câteva lucruri de bază cum ar fi indecşii clustered sau non-clustered. SQL Server 2005 oferă două tipuri de indecşi <u>clustered</u> si <u>non-clustered.</u> Din definiţie se poate spune ca un index clustered este un index care stochează datele ce formează indexul iar un index non-clustered reţine doar un pointeri (adrese de memorie la care se găsesc datele).</p>
<p>O tabelă poate conţine doar un index clustered şi până la 249 de indecşi non-clustered. Principalul motiv pentru care se utilizează un index este acela de a se putea accesa mai rapid datele pe care o interogare încearcă să le acceseze. Acest index poate să fie atât clustered cât şi non-clustered. Fără un index, SQL Server ar trebui să parcurgă întreaga tabelă până ajunge la rândul care trebuie accesat sau chiar să parcurgă întreaga tabelă. Acest lucru se poate evidenţia cu ajutorul planului de interogare (execution plan) care va utiliza Index Seek (dacă există index) sau Table Scan (dacă nu există).</p>
<p> Ca metodă de practică ar fi să utilizez index clustered dar numai acolo unde indexul este o coloană ce conţine date, totuşi sunt limitat la un singur astfel de index în fiecare tabelă. O a doua metodă ar fi indexarea tuturor coloanelor dar ar conduce la supraindexare şi ar fi greu de întreţinut toţi indecşi mai ales când se lucrează cu multe instrucţiuni de actualizare (insert, update, delete).</p>
<p>Ca sfat, se poate spune că este mai bine să se creeze index non-clustered acolo unde coloana intră în setul de rezultate pentru că accesarea paginilor de date este mai înceată.</p>
<p>Ca instrumente de depistare a cazurilor în care indexarea nu este corespunzătoare (prea puţin indexată sau supraindexată), se poate utiliza Database engine Tuning Advisor</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/katalyn.wordpress.com/5/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/katalyn.wordpress.com/5/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/katalyn.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/katalyn.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/katalyn.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/katalyn.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/katalyn.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/katalyn.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/katalyn.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/katalyn.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/katalyn.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/katalyn.wordpress.com/5/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=katalyn.wordpress.com&blog=882444&post=5&subd=katalyn&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://katalyn.wordpress.com/2007/03/29/index-clustered-si-non-clustered/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/cb331d7e43eb6a51dcbcd5663466d8f0?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">katalyn</media:title>
		</media:content>
	</item>
		<item>
		<title>OLAP (On Line Analytical Processing)</title>
		<link>http://katalyn.wordpress.com/2007/03/19/olap-on-line-analytical-processing/</link>
		<comments>http://katalyn.wordpress.com/2007/03/19/olap-on-line-analytical-processing/#comments</comments>
		<pubDate>Mon, 19 Mar 2007 13:34:42 +0000</pubDate>
		<dc:creator>Catalin Dumitru</dc:creator>
				<category><![CDATA[OLAP]]></category>

		<guid isPermaLink="false">http://katalyn.wordpress.com/2007/03/19/olap-on-line-analytical-processing/</guid>
		<description><![CDATA[OLAP este acronimul pentru  (On Line Analytical Processing). OLAP realizeaza analize multidimensionale pentru datele de afaceri (business data) si asigura posibilitatea calculelor complexe, analize de trend si modelarea sofisticata a datelor. OLAP a devenit rapid fundamentul solutiilor inteligente incluzand aici si managemnt performat pentru mediul de afaceri, planificare, alocari de buget, previziuni, rapoarte financiare, analize, simulare [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=katalyn.wordpress.com&blog=882444&post=4&subd=katalyn&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:justify;"><span style="color:#000000;"><strong><span style="font-family:Times;">OLAP </span></strong><span style="font-family:Times;">este acronimul pentru  (<strong><span style="font-family:Times;">O</span></strong>n <strong><span style="font-family:Times;">L</span></strong>ine <strong><span style="font-family:Times;">A</span></strong>nalytical <strong><span style="font-family:Times;">P</span></strong>rocessing). OLAP realizeaza analize multidimensionale pentru datele de afaceri (business data) si asigura posibilitatea calculelor complexe, analize de trend si modelarea sofisticata a datelor. </span><span style="font-family:Times;">OLAP a devenit rapid fundamentul solutiilor inteligente incluzand aici si managemnt performat pentru mediul de afaceri, planificare, alocari de buget, previziuni, rapoarte financiare, analize, simulare prin modele, descoperiri de date si raportare din depozite de date. OLAP permite utilizatorilor sa realizeze analize ad-hoc din mai multe dimensiuni, asigurand buna intelegere a nevoilor de cunostiinte pentru luarea celor mai bune decizii.</span></span></p>
<p style="text-align:justify;"><span style="color:#000000;"><em><strong><span style="font-family:Times;">Sistemele OLAP</span></strong></em><span style="font-family:Times;"> au ca rol, in cadrul organizatiilor, acela de a oferi un acces interactiv si usor la resursele analitice necesare procesului decizional si de conducere. In cadrul sistemelor suport de decizie (SSD) sunt recunoscute doua tipuri de resurse analitice: datele (informatii statice) si modele (informatii dinamice).</span><span style="font-family:Times;">Deocamdata nu exista o teorie proprie pentru OLAP universal acceptata insa exista o serie de reguli (principii) care pun in evidenta potentialul sistemelor OLAP:</span></span></p>
<p style="text-align:justify;"><span style="color:#000000;"><em><strong><span style="font-family:Times;">La baza tuturor activitatilor dintro organizatie se afla prelucrarea informatiilor </span></strong></em><span style="font-family:Times;">(colectarea, stocarea, comunicarea si manipularea datelor)</span></span></p>
<p style="text-align:justify;"><span style="color:#000000;"><strong><em><span style="font-family:Times;">Teoria sistemelor suport de decizie</span></em></strong><span style="font-family:Times;"> (sistem informatic interactiv, flexibil si adaptabil, special proiectat pentru a oferi suport in solutionarea unor probleme manageriale nestructurate sau semistructurate, cu scopul de a imbunatati procesul decizional, ce utilizeaza date si modele, ofera o interfata simpla si usor de folosit, permite decidentului sa controleze procesul decizional si ofera suport pentru toate etapele procesului decizional)</span></span></p>
<p style="text-align:justify;"><span style="color:#000000;"><strong><em><span style="font-family:Times;">Acces rapid şi calcule rapide </span></em></strong><span style="font-family:Times;">(sistemele OLAP ofera suport pentru cereri analitice ad-hoc, obiectivul principal al sistemelor OLAP fiind acela de <em><span style="font-family:Times;">a furniza un timp de răspuns de cinci secunde sau mai puţin, indiferent de tipul de cerere sau de dimensiunea bazei de date, într-un mediu multiutilizator şi distribuit)</span></em></span></span></p>
<p style="text-align:justify;"><span style="font-family:Times;"><em></em></span><span style="color:#000000;"><em><strong><span style="font-family:Times;">Facilităţi analitice puternice </span></strong></em><span style="font-family:Times;">(sistemele OLAP permit navigarea interactiva la niveluri diferite de agregare si viziuni multidimensionale ale datelor)</span></span></p>
<p style="text-align:justify;"><span style="color:#000000;"><em><strong><span style="font-family:Times;">Flexibilitate </span></strong></em><span style="font-family:Times;">(sistemele OLAP trebuie sa dispuna de prezentari, grafice, definitii, analize, interfete)</span><em><strong><span style="font-family:Times;">Suport multiutilizator </span></strong></em></span></p>
<p style="text-align:justify;"><em><strong></strong></em><em><strong><span style="font-family:Times;"><span style="color:#000000;">Sistemele OLAP sunt o aplicatie a combinarii între algoritmi si structuri de date in scopul de a creste puterea de calcul</span></span></strong></em></p>
<p style="text-align:justify;"><em><strong></strong></em><span style="color:#000000;"><em><strong><span style="font-family:Times;">Sistemele OLAP sunt cel mai potrivit mediu pentru implementarea modelelor de afaceri (business models) ce aplica principiile dinamice ale sistemelor</span></strong></em><span style="font-family:Times;">.</span><span style="font-family:Times;"> </span></span></p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/katalyn.wordpress.com/4/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/katalyn.wordpress.com/4/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/katalyn.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/katalyn.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/katalyn.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/katalyn.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/katalyn.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/katalyn.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/katalyn.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/katalyn.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/katalyn.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/katalyn.wordpress.com/4/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=katalyn.wordpress.com&blog=882444&post=4&subd=katalyn&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://katalyn.wordpress.com/2007/03/19/olap-on-line-analytical-processing/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/cb331d7e43eb6a51dcbcd5663466d8f0?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">katalyn</media:title>
		</media:content>
	</item>
	</channel>
</rss>