<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://sqlserver.ro/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Intrebari</title><link>http://sqlserver.ro/forums/14/ShowForum.aspx</link><description /><dc:language>en</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61129.1)</generator><item><title>Re: Oglindire tabela pe servere diferite</title><link>http://sqlserver.ro/forums/thread/3254.aspx</link><pubDate>Sat, 10 Nov 2007 19:42:54 GMT</pubDate><guid isPermaLink="false">963f3a18-65dd-4aad-905c-b785cfe1d7c7:3254</guid><dc:creator>B_gd_n[ ]Sahlean</dc:creator><slash:comments>0</slash:comments><comments>http://sqlserver.ro/forums/thread/3254.aspx</comments><wfw:commentRss>http://sqlserver.ro/forums/commentrss.aspx?SectionID=14&amp;PostID=3254</wfw:commentRss><description>&lt;P&gt;Pe server-ul unde este baza de date sursă:&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;CREATE DATABASE PseudoSincronizareSursa&lt;/SPAN&gt;&lt;BR style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;&lt;SPAN style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;GO&lt;/SPAN&gt;&lt;BR style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;&lt;BR style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;&lt;SPAN style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;USE PseudoSincronizareSursa&lt;/SPAN&gt;&lt;BR style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;&lt;SPAN style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;GO&lt;/SPAN&gt;&lt;BR style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;&lt;BR style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;&lt;SPAN style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;CREATE TABLE Produs&lt;/SPAN&gt;&lt;BR style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;&lt;SPAN style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;(&lt;/SPAN&gt;&lt;BR style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;&lt;SPAN style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CodProdus INT PRIMARY KEY,&lt;/SPAN&gt;&lt;BR style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;&lt;SPAN style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DenumireProdus VARCHAR(50) NOT NULL,&lt;/SPAN&gt;&lt;BR style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;&lt;SPAN style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN&gt;Stare ROWVERSION NOT NULL --ROWVERSION &amp;lt;=&amp;gt; TIMESTAMP&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;BR style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;&lt;SPAN style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;)&lt;/SPAN&gt;&lt;BR style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;&lt;SPAN style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;GO&lt;/SPAN&gt;&lt;BR style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;&lt;BR style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;&lt;SPAN style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;CREATE UNIQUE INDEX idx_produs_stare&lt;/SPAN&gt;&lt;BR style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;&lt;SPAN style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;ON Produs (Stare)&lt;/SPAN&gt;&lt;BR style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;&lt;SPAN style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;GO&lt;/SPAN&gt;&lt;BR style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;&lt;BR style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;&lt;SPAN style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;/*&lt;/SPAN&gt;&lt;BR style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;&lt;SPAN style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;--Ai posibilitatea sa se defineste un index care sa includa toate campurile&lt;/SPAN&gt;&lt;BR style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;&lt;SPAN style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;--care trebuiesc exportate din sursa in destinatie&lt;/SPAN&gt;&lt;BR style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;&lt;SPAN style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;CREATE INDEX idx_produs_stare&lt;/SPAN&gt;&lt;BR style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;&lt;SPAN style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;ON Produs (Stare,CodProdus,DenumireProdus)&lt;/SPAN&gt;&lt;BR style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;&lt;SPAN style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;*/&lt;/SPAN&gt;&lt;BR style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;&lt;BR style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;&lt;SPAN style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;INSERT INTO Produs (CodProdus,DenumireProdus) VALUES (1,'Mere')&lt;/SPAN&gt;&lt;BR style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;&lt;SPAN style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;INSERT INTO Produs (CodProdus,DenumireProdus) VALUES (2,'Portocale')&lt;/SPAN&gt;&lt;BR style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;&lt;SPAN style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;INSERT INTO Produs (CodProdus,DenumireProdus) VALUES (3,'Lamai')&lt;/SPAN&gt;&lt;BR style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;&lt;SPAN style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;INSERT INTO Produs (CodProdus,DenumireProdus) VALUES (4,'Pere')&lt;/SPAN&gt;&lt;BR style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;&lt;SPAN style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;GO &lt;/SPAN&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;Pe fiecare server unde există câte o bază de date destinaţie:&lt;/P&gt;
&lt;P style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;CREATE DATABASE PseudoSincronizareDestinatie&lt;BR&gt;GO&lt;BR&gt;&lt;BR&gt;USE PseudoSincronizareDestinatie&lt;BR&gt;GO&lt;BR&gt;&lt;BR&gt;CREATE TABLE Produs&lt;BR&gt;(&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CodProdus INT PRIMARY KEY,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DenumireProdus VARCHAR(50) NOT NULL,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Stare BINARY(8)&amp;nbsp; NOT NULL&lt;BR&gt;)&lt;BR&gt;GO&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;EXEC sp_addlinkedserver&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @server = 'LINK_SQLSERVER_SURSA', &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @srvproduct = '',&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @provider = 'SQLNCLI', &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @datasrc = 'OOSQL\SQLEXPRESS', &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @catalog = 'PseudoSincronizareSursa' &lt;BR&gt;GO&lt;BR&gt;&lt;BR&gt;--activezi optiunea RPC OUT pentru serverul "linked"&lt;BR&gt;EXEC master.dbo.sp_serveroption&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @server='LINK_SQLSERVER_SURSA',&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @optname='rpc out', &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @optvalue='true'&lt;BR&gt;GO&lt;BR&gt;&lt;BR&gt;EXEC sp_addlinkedsrvlogin&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @rmtsrvname = 'LINK_SQLSERVER_SURSA',&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @useself = 'TRUE',&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @locallogin = 'oosql\bgdn'&lt;BR&gt;GO&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;CREATE PROCEDURE spSincronizare&lt;BR&gt;AS&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DECLARE @tbl TABLE ( CodProdus INT, DenumireProdus VARCHAR(50), Stare BINARY(8) )&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DECLARE @max ROWVERSION&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SET @max = ISNULL( (SELECT MAX(Stare) FROM Produs) , 0x0 )&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; INSERT INTO @tbl (CodProdus, DenumireProdus, Stare)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SELECT CodProdus, DenumireProdus, Stare&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FROM LINK_SQLSERVER_SURSA.&lt;FONT style="BACKGROUND-COLOR:#ffff00;" color=#ff0000&gt;PseudoSincronizareSursa&lt;/FONT&gt;.dbo.Produs&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; WHERE Stare &amp;gt; @max&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; UPDATE Produs&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SET Produs.DenumireProdus = T.DenumireProdus, Produs.Stare = T.Stare&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FROM @tbl AS T&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; WHERE Produs.CodProdus = T.CodProdus&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; INSERT INTO Produs (CodProdus, DenumireProdus, Stare)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SELECT CodProdus, DenumireProdus, Stare&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FROM @tbl AS T&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; WHERE T.CodProdus NOT IN (SELECT CodProdus FROM Produs)&lt;BR&gt;GO&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;În mod asemănător cu exemplul anterior, pentru sincronizare apelezi procedura stocată&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;EXEC spSincronizare&lt;/SPAN&gt; &amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;În continuare, poti adăuga şi modifica date în baza de date sursă:&lt;/P&gt;
&lt;P style="FONT-WEIGHT:bold;"&gt;&lt;SPAN style="FONT-FAMILY:courier new,courier;"&gt;INSERT INTO Produs (CodProdus,DenumireProdus) VALUES (5,'Soareci optici')&lt;/SPAN&gt;&lt;BR style="FONT-FAMILY:courier new,courier;"&gt;&lt;SPAN style="FONT-FAMILY:courier new,courier;"&gt;UPDATE Produs SET DenumireProdus = 'Ala bala portocala' WHERE CodProdus = 2&lt;/SPAN&gt; &lt;/P&gt;
&lt;P&gt;si sa realizezi sincronizarea din nou &lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;EXEC spSincronizare&lt;/SPAN&gt;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;Observaţii: &lt;/P&gt;
&lt;P&gt;[1] În tabela sursă se defineşte un câmp Stare de tip timestamp / rowversion. Valorile acestui câmp sunt coduri unice generate automat de server crescător (conform BOL). Avantajul acestui tip de date - în acest caz - vine din faptul că în momentul modificării unei înregistrări în baza de date sursă (bd &lt;SPAN style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;PseudoSincronizareSursa&lt;/SPAN&gt;) se modifică automat şi valoarea din câmpul timestamp / rowversion Stare, generându-se un nou cod pentru înregistrarea respectivă.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;[2] Plecându-se de la valoarea maximă rowversion/timestamp din campul Stare a tabelei destinaţie Produs (bd &lt;SPAN style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;PseudoSincronizareDestinatie&lt;/SPAN&gt;) se pot filtra datele din tabela&amp;nbsp; sursă Produs (bd &lt;SPAN style="FONT-WEIGHT:bold;FONT-FAMILY:courier new,courier;"&gt;PseudoSincronizareSursa&lt;/SPAN&gt;). Daca în baza de date sursă se modifică/inserează 100 de înregistrari dintr-un total de 10.000 prin această filtrare, server-ul destinaţie primeşte de server-ul sursă doar 1% din înregistrări (adică 100 de înregistrări) spre deosebire de implementarea anterioară în care server-ul destinaţie primeşte de la serverul sursă toate înregistrarile: 100% (adică 10000). Lucru acesta se poate observa&amp;nbsp; analizând planurile de execuţie.&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;[3] Soluţia se aplică doar pentru inserarea şi modificarea produsele, dar se poate adapta şi&amp;nbsp; pentru cazul în care se doreşte ştergerea de produse.&lt;/P&gt;
&lt;P&gt;[4] Parţial - doar pentru sincronizarea produselor noi inserate - soluţia poate fi aplicată daca există doar un câmp numeric IDENTITY care nu contine valori nule.&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>Re: Oglindire tabela pe servere diferite</title><link>http://sqlserver.ro/forums/thread/3240.aspx</link><pubDate>Fri, 09 Nov 2007 09:21:43 GMT</pubDate><guid isPermaLink="false">963f3a18-65dd-4aad-905c-b785cfe1d7c7:3240</guid><dc:creator>alinescoo</dc:creator><slash:comments>0</slash:comments><comments>http://sqlserver.ro/forums/thread/3240.aspx</comments><wfw:commentRss>http://sqlserver.ro/forums/commentrss.aspx?SectionID=14&amp;PostID=3240</wfw:commentRss><description>&lt;P&gt;Multumesc mult pentru solutie si mai ales pentru timpul necesar acordat pentru crearea solutiei. &lt;/P&gt;&lt;P&gt;Sunt perfect convins, asa o sa fac. Intr-adevar, celelalte servere au linked pe server 1, nu m-am exprimat eu bine&lt;/P&gt;</description></item><item><title>Re: Oglindire tabela pe servere diferite</title><link>http://sqlserver.ro/forums/thread/3237.aspx</link><pubDate>Thu, 08 Nov 2007 18:18:32 GMT</pubDate><guid isPermaLink="false">963f3a18-65dd-4aad-905c-b785cfe1d7c7:3237</guid><dc:creator>rsocol</dc:creator><slash:comments>0</slash:comments><comments>http://sqlserver.ro/forums/thread/3237.aspx</comments><wfw:commentRss>http://sqlserver.ro/forums/commentrss.aspx?SectionID=14&amp;PostID=3237</wfw:commentRss><description>&lt;p&gt;Bogdan,&lt;/p&gt;&lt;p&gt;Sunt complet de acord.&lt;/p&gt;&lt;p&gt;Răzvan&amp;nbsp;&lt;/p&gt;</description></item><item><title>Re: Oglindire tabela pe servere diferite</title><link>http://sqlserver.ro/forums/thread/3235.aspx</link><pubDate>Thu, 08 Nov 2007 17:29:25 GMT</pubDate><guid isPermaLink="false">963f3a18-65dd-4aad-905c-b785cfe1d7c7:3235</guid><dc:creator>B_gd_n[ ]Sahlean</dc:creator><slash:comments>0</slash:comments><comments>http://sqlserver.ro/forums/thread/3235.aspx</comments><wfw:commentRss>http://sqlserver.ro/forums/commentrss.aspx?SectionID=14&amp;PostID=3235</wfw:commentRss><description>&lt;p&gt;Fara suparare, dar uptate-ul ar putea fi costisitor mai ales daca:&lt;/p&gt;&lt;p&gt;[1] sunt multe produse&lt;/p&gt;&lt;p&gt;si&lt;/p&gt;&lt;p&gt;[2] conexiunea dintre cele 2 servere este lenta. &lt;/p&gt;&lt;p&gt;&lt;br&gt;Repet: este doar o părere.&lt;br&gt;In ceea ce priveste implementarea ta, o solutie cred ca au fi ca in procedura &lt;span style="font-size:10pt;font-family:'Courier New';"&gt;SincronizareProduse sa fie inserate intr-o tabela temporara (#prod) produsele de pe server1 iar UPDATE-ul si INSERT-ul sa se realizeze plecand de la datele din tabela temporara. Pe de alta parte, exista posibilitatea ca optimizarile realizate de SQL Server sa faca inutila tabela temporara ...&lt;/span&gt;&lt;br&gt;&amp;nbsp;&lt;/p&gt;</description></item><item><title>Re: Oglindire tabela pe servere diferite</title><link>http://sqlserver.ro/forums/thread/3234.aspx</link><pubDate>Thu, 08 Nov 2007 16:48:00 GMT</pubDate><guid isPermaLink="false">963f3a18-65dd-4aad-905c-b785cfe1d7c7:3234</guid><dc:creator>rsocol</dc:creator><slash:comments>0</slash:comments><comments>http://sqlserver.ro/forums/thread/3234.aspx</comments><wfw:commentRss>http://sqlserver.ro/forums/commentrss.aspx?SectionID=14&amp;PostID=3234</wfw:commentRss><description>&lt;p&gt;Presupun că pe server-ele linked1, linked2, etc, utilizatorii nu pot modifica/adăuga produse (pot să aleagă doar din cele existente atunci când fac facturi, etc), nu-i aşa?&lt;/p&gt;&lt;p&gt;Pe de altă parte, mi s-ar părea mai normal ca server-ele secundare să aibă un linked server către server-ul principal (nu invers, cum ai propus tu). Dar dacă trebuie să fie invers (din motive de securitate), nu-i nicio problemă (se modifică în mod corespunzător numele tabelelor). Să luăm un exemplu. Pe server1, avem:&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;&lt;br&gt;CREATE&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; &lt;span style="color:blue;"&gt;TABLE&lt;/span&gt; Produse &lt;span style="color:gray;"&gt;(&lt;br&gt;
&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ID_Produs &lt;span style="color:blue;"&gt;int&lt;/span&gt; &lt;span style="color:blue;"&gt;IDENTITY&lt;/span&gt; &lt;span style="color:blue;"&gt;PRIMARY&lt;/span&gt; &lt;span style="color:blue;"&gt;KEY&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;br&gt;
&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Denumire &lt;span style="color:blue;"&gt;nvarchar&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;50&lt;span style="color:gray;"&gt;)&lt;/span&gt; &lt;span style="color:gray;"&gt;NOT&lt;/span&gt; &lt;span style="color:gray;"&gt;NULL&lt;/span&gt; &lt;span style="color:blue;"&gt;UNIQUE&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;br&gt;
&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;UM varchar&lt;span style="color:gray;"&gt;(&lt;/span&gt;5&lt;span style="color:gray;"&gt;)&lt;/span&gt; &lt;span style="color:gray;"&gt;NULL&lt;br&gt;
)&lt;br&gt;
&lt;br&gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;INSERT&lt;/span&gt; &lt;span style="color:blue;"&gt;INTO&lt;/span&gt;
Produse &lt;span style="color:gray;"&gt;(&lt;/span&gt;Denumire&lt;span style="color:gray;"&gt;,&lt;/span&gt;
UM&lt;span style="color:gray;"&gt;)&lt;/span&gt; &lt;span style="color:blue;"&gt;VALUES&lt;/span&gt; &lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'Mere'&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt; &lt;span style="color:red;"&gt;'KG'&lt;/span&gt;&lt;span style="color:gray;"&gt;)&lt;br&gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;INSERT&lt;/span&gt; &lt;span style="color:blue;"&gt;INTO&lt;/span&gt;
Produse &lt;span style="color:gray;"&gt;(&lt;/span&gt;Denumire&lt;span style="color:gray;"&gt;,&lt;/span&gt;
UM&lt;span style="color:gray;"&gt;)&lt;/span&gt; &lt;span style="color:blue;"&gt;VALUES&lt;/span&gt; &lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'Pere'&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt; &lt;span style="color:red;"&gt;'KG'&lt;/span&gt;&lt;span style="color:gray;"&gt;)&lt;br&gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;INSERT&lt;/span&gt; &lt;span style="color:blue;"&gt;INTO&lt;/span&gt;
Produse &lt;span style="color:gray;"&gt;(&lt;/span&gt;Denumire&lt;span style="color:gray;"&gt;,&lt;/span&gt;
UM&lt;span style="color:gray;"&gt;)&lt;/span&gt; &lt;span style="color:blue;"&gt;VALUES&lt;/span&gt; &lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'Capsator'&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt; &lt;span style="color:red;"&gt;'BUC'&lt;/span&gt;&lt;span style="color:gray;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Pe linked1, linked2, etc, avem:&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;CREATE&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; &lt;span style="color:blue;"&gt;TABLE&lt;/span&gt; Produse &lt;span style="color:gray;"&gt;(&lt;br&gt;
&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ID_Produs &lt;span style="color:blue;"&gt;int&lt;/span&gt; &lt;span style="color:blue;"&gt;PRIMARY&lt;/span&gt; &lt;span style="color:blue;"&gt;KEY&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;br&gt;
&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Denumire &lt;span style="color:blue;"&gt;nvarchar&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;50&lt;span style="color:gray;"&gt;)&lt;/span&gt; &lt;span style="color:gray;"&gt;NOT&lt;/span&gt; &lt;span style="color:gray;"&gt;NULL&lt;/span&gt; &lt;span style="color:blue;"&gt;UNIQUE&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;br&gt;
&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;UM varchar&lt;span style="color:gray;"&gt;(&lt;/span&gt;5&lt;span style="color:gray;"&gt;)&lt;/span&gt; &lt;span style="color:gray;"&gt;NULL,&lt;br&gt;
&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;StocMinim &lt;span style="color:blue;"&gt;numeric&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;15&lt;span style="color:gray;"&gt;,&lt;/span&gt;3&lt;span style="color:gray;"&gt;)&lt;/span&gt; &lt;span style="color:gray;"&gt;NULL&lt;br&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:gray;"&gt;)&lt;br&gt;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Pentru început, să presupunem că avem toate datele din server1:&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;INSERT&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; &lt;span style="color:blue;"&gt;INTO&lt;/span&gt; Produse &lt;span style="color:gray;"&gt;(&lt;/span&gt;ID_Produs&lt;span style="color:gray;"&gt;,&lt;/span&gt; Denumire&lt;span style="color:gray;"&gt;,&lt;/span&gt; UM&lt;span style="color:gray;"&gt;)&lt;br&gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT&lt;/span&gt; ID_Produs&lt;span style="color:gray;"&gt;,&lt;/span&gt;
Denumire&lt;span style="color:gray;"&gt;,&lt;/span&gt; UM &lt;span style="color:blue;"&gt;FROM&lt;/span&gt;
server1.YourDB.dbo.Produse&lt;br&gt;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;şi avem în plus ceva informaţii completate pe coloana StocMinim:&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span style="color:blue;"&gt;UPDATE&lt;/span&gt; Produse &lt;span style="color:blue;"&gt;SET&lt;/span&gt;
StocMinim&lt;span style="color:gray;"&gt;=&lt;/span&gt;10 &lt;span style="color:blue;"&gt;WHERE&lt;/span&gt;
Denumire&lt;span style="color:gray;"&gt;=&lt;/span&gt;&lt;span style="color:red;"&gt;'Mere'&lt;br&gt;
&lt;br&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Atunci creăm urmatoarea procedură:&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;CREATE&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; &lt;span style="color:blue;"&gt;PROCEDURE&lt;/span&gt;
SincronizareProduse&lt;br&gt;
&lt;span style="color:blue;"&gt;AS&lt;br&gt;
UPDATE&lt;/span&gt; Produse &lt;span style="color:blue;"&gt;SET&lt;/span&gt; Denumire&lt;span style="color:gray;"&gt;=&lt;/span&gt;n&lt;span style="color:gray;"&gt;.&lt;/span&gt;Denumire&lt;span style="color:gray;"&gt;,&lt;/span&gt; UM&lt;span style="color:gray;"&gt;=&lt;/span&gt;n&lt;span style="color:gray;"&gt;.&lt;/span&gt;UM&lt;br&gt;
&lt;span style="color:blue;"&gt;FROM&lt;/span&gt; Produse v &lt;span style="color:gray;"&gt;INNER&lt;/span&gt;
&lt;span style="color:gray;"&gt;JOIN&lt;/span&gt; server1.YourDB.dbo.Produse n &lt;span style="color:blue;"&gt;ON&lt;/span&gt;
v&lt;span style="color:gray;"&gt;.&lt;/span&gt;ID_Produs&lt;span style="color:gray;"&gt;=&lt;/span&gt;n&lt;span style="color:gray;"&gt;.&lt;/span&gt;ID_Produs&lt;br&gt;
&lt;span style="color:blue;"&gt;WHERE&lt;/span&gt; v&lt;span style="color:gray;"&gt;.&lt;/span&gt;Denumire&lt;span style="color:gray;"&gt;&amp;lt;&amp;gt;&lt;/span&gt;n&lt;span style="color:gray;"&gt;.&lt;/span&gt;Denumire&lt;br&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:gray;"&gt;OR&lt;/span&gt; v&lt;span style="color:gray;"&gt;.&lt;/span&gt;UM&lt;span style="color:gray;"&gt;&amp;lt;&amp;gt;&lt;/span&gt;n&lt;span style="color:gray;"&gt;.&lt;/span&gt;UM &lt;br&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:gray;"&gt;OR&lt;/span&gt; v&lt;span style="color:gray;"&gt;.&lt;/span&gt;UM &lt;span style="color:gray;"&gt;IS&lt;/span&gt; &lt;span style="color:gray;"&gt;NULL&lt;/span&gt; &lt;span style="color:gray;"&gt;AND&lt;/span&gt; n&lt;span style="color:gray;"&gt;.&lt;/span&gt;UM &lt;span style="color:gray;"&gt;IS&lt;/span&gt; &lt;span style="color:gray;"&gt;NOT&lt;/span&gt; &lt;span style="color:gray;"&gt;NULL&lt;br&gt;
&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:gray;"&gt;OR&lt;/span&gt;
v&lt;span style="color:gray;"&gt;.&lt;/span&gt;UM &lt;span style="color:gray;"&gt;IS&lt;/span&gt; &lt;span style="color:gray;"&gt;NOT&lt;/span&gt; &lt;span style="color:gray;"&gt;NULL&lt;/span&gt; &lt;span style="color:gray;"&gt;AND&lt;/span&gt; n&lt;span style="color:gray;"&gt;.&lt;/span&gt;UM &lt;span style="color:gray;"&gt;IS&lt;/span&gt; &lt;span style="color:gray;"&gt;NULL&lt;br&gt;
&lt;br&gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;INSERT&lt;/span&gt; &lt;span style="color:blue;"&gt;INTO&lt;/span&gt; Produse &lt;span style="color:gray;"&gt;(&lt;/span&gt;ID_Produs&lt;span style="color:gray;"&gt;,&lt;/span&gt;
Denumire&lt;span style="color:gray;"&gt;,&lt;/span&gt; UM&lt;span style="color:gray;"&gt;)&lt;br&gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT&lt;/span&gt; ID_Produs&lt;span style="color:gray;"&gt;,&lt;/span&gt;
Denumire&lt;span style="color:gray;"&gt;,&lt;/span&gt; UM &lt;span style="color:blue;"&gt;FROM&lt;/span&gt;
&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;server1.YourDB.dbo.&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;Produse&lt;br&gt;
&lt;span style="color:blue;"&gt;WHERE&lt;/span&gt; ID_Produs &lt;span style="color:gray;"&gt;NOT&lt;/span&gt;
&lt;span style="color:gray;"&gt;IN&lt;/span&gt; &lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT&lt;/span&gt; ID_Produs &lt;span style="color:blue;"&gt;FROM&lt;/span&gt; Produse&lt;span style="color:gray;"&gt;)&lt;br&gt;
&lt;br&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Şi să zicem că între timp se întâmplă nişte modificări pe server1:&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;UPDATE&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; Produse &lt;span style="color:blue;"&gt;SET&lt;/span&gt; Denumire&lt;span style="color:gray;"&gt;=&lt;/span&gt;&lt;span style="color:red;"&gt;'Mere ionatane'&lt;/span&gt; &lt;span style="color:blue;"&gt;WHERE&lt;/span&gt; Denumire&lt;span style="color:gray;"&gt;=&lt;/span&gt;&lt;span style="color:red;"&gt;'Mere'&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span style="color:red;"&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;INSERT&lt;/span&gt; &lt;span style="color:blue;"&gt;INTO&lt;/span&gt;
Produse &lt;span style="color:gray;"&gt;(&lt;/span&gt;Denumire&lt;span style="color:gray;"&gt;,&lt;/span&gt;
UM&lt;span style="color:gray;"&gt;)&lt;/span&gt; &lt;span style="color:blue;"&gt;VALUES&lt;/span&gt; &lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'Mere golden'&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt; &lt;span style="color:red;"&gt;'KG'&lt;/span&gt;&lt;span style="color:gray;"&gt;)&lt;br&gt;
&lt;br&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Atunci când executăm:&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;EXEC&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; SincronizareProduse&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;br&gt;
&lt;/span&gt;Ar trebui ca datele modificate să se transfere de pe server. Ce probleme pot apare:&lt;/p&gt;&lt;p&gt;1. dacă în linked1  utilizatorii ar fi adăugat un alt produs, "Perforator", să zicem, care are ID-ul 4, atunci când apelăm procedura de sincronizare denumirea acestui produs s-ar modifica fiind acum "Mere ionatane" (şi dacă aveam o factură de vânzare pentru 3 buc Perforator, atunci aceasta devine 3 kg Mere ionatane)&lt;/p&gt;&lt;p&gt;2. dacă în linked1 utilizatorii au adăugat un alt produs numit "Mere ionatane" (în afară de produsul numit "Mere"), atunci când apelăm procedura de sincronizare vom obţine eroare "Violation of unique key ...", pentru că se încearcă modificarea denumirii produsului "Mere" în "Mere ionatane", &lt;br&gt;deşi există deja un alt produs cu acest nume.&lt;/p&gt;&lt;p&gt;Dacă se stabileşte de la început regula că în celelalte servere utilizatorii nu modifică datele din tabela Produse, atunci aceste probleme sunt excluse. Dacă este nevoie ca utilizatorii să adauge sau să modifice date în tabela Produse şi pe celelate server-e, atunci s-ar putea face sincronizarea folosind în join coloana Denumire în loc de ID, dar şi aşa ar putea apare probleme (de exemplu dacă s-au folosit unităţi de măsură diferite).&lt;/p&gt;&lt;p&gt;Răzvan&lt;/p&gt;</description></item><item><title>Re: Oglindire tabela pe servere diferite</title><link>http://sqlserver.ro/forums/thread/3232.aspx</link><pubDate>Thu, 08 Nov 2007 15:54:18 GMT</pubDate><guid isPermaLink="false">963f3a18-65dd-4aad-905c-b785cfe1d7c7:3232</guid><dc:creator>ggciubuc</dc:creator><slash:comments>0</slash:comments><comments>http://sqlserver.ro/forums/thread/3232.aspx</comments><wfw:commentRss>http://sqlserver.ro/forums/commentrss.aspx?SectionID=14&amp;PostID=3232</wfw:commentRss><description>&lt;P&gt;Pentru asta rezolvarea ar fi astfel :&lt;/P&gt;
&lt;P&gt;un trigger pune intr-o tabela codurile(valorile cheii primare) tabelei vizate detinute de liniile care au fost inserate sau modificate ( se utilizeaza tabela inserted); pe urma la apasarea butonului respectiv acel query va fi un join intre tabela cu coduri si tabela vizata (relatie 1 la 1 facuta prin cheia primara); in continuare se sterg (delete from ...) liniile din tabelele cu coduri pentru a fi pregatita pentru urmatoarea operatie &lt;/P&gt;</description></item><item><title>Re: Oglindire tabela pe servere diferite</title><link>http://sqlserver.ro/forums/thread/3230.aspx</link><pubDate>Thu, 08 Nov 2007 14:27:48 GMT</pubDate><guid isPermaLink="false">963f3a18-65dd-4aad-905c-b785cfe1d7c7:3230</guid><dc:creator>alinescoo</dc:creator><slash:comments>0</slash:comments><comments>http://sqlserver.ro/forums/thread/3230.aspx</comments><wfw:commentRss>http://sqlserver.ro/forums/commentrss.aspx?SectionID=14&amp;PostID=3230</wfw:commentRss><description>&lt;P&gt;Dar chestia cu insert din view... nu stiu cum sa am in view doar codurile noi sau cele modificate... tinand cont ca nu am flag sau altceva... si nici nu as vrea sa modific nimic pe server1... la toate linked server se pot face orice modificari...&lt;/P&gt;&lt;P&gt;Interesanta chestia cu service brooker... analizez sa vad despre ce e vorba.&lt;/P&gt;</description></item><item><title>Re: Oglindire tabela pe servere diferite</title><link>http://sqlserver.ro/forums/thread/3224.aspx</link><pubDate>Thu, 08 Nov 2007 11:32:59 GMT</pubDate><guid isPermaLink="false">963f3a18-65dd-4aad-905c-b785cfe1d7c7:3224</guid><dc:creator>ggciubuc</dc:creator><slash:comments>0</slash:comments><comments>http://sqlserver.ro/forums/thread/3224.aspx</comments><wfw:commentRss>http://sqlserver.ro/forums/commentrss.aspx?SectionID=14&amp;PostID=3224</wfw:commentRss><description>&lt;P&gt;Chestia asta poate fi implementata asincron si automatizat&amp;nbsp;prin tehnologia service broker in SQL 2005 sau replicare&lt;/P&gt;
&lt;P&gt;Insa daca e vorba de o lansare operatie la nivel aplicatie se face un "insert into linkserver.tabel&amp;nbsp;select * from viewCuDateleFiltrate", adica se lanseaza aceasta instructiune prin acel buton; sigur ramane aspectul administrativ care trebuie impus intr-o procedura: la ora 8 in fiecare zi cineva apasa acel buton.&lt;/P&gt;
&lt;P&gt;Daca se doreste automatizare se poate apela la ce am spus mai sus.&lt;/P&gt;</description></item><item><title>Oglindire tabela pe servere diferite</title><link>http://sqlserver.ro/forums/thread/3222.aspx</link><pubDate>Thu, 08 Nov 2007 09:05:13 GMT</pubDate><guid isPermaLink="false">963f3a18-65dd-4aad-905c-b785cfe1d7c7:3222</guid><dc:creator>alinescoo</dc:creator><slash:comments>0</slash:comments><comments>http://sqlserver.ro/forums/thread/3222.aspx</comments><wfw:commentRss>http://sqlserver.ro/forums/commentrss.aspx?SectionID=14&amp;PostID=3222</wfw:commentRss><description>&lt;P&gt;V-as ruga sa va dati cu parerea in urmatoarea situatie... cum s-ar putea face cel mai optimizat:&lt;/P&gt;&lt;P&gt;Am un server principal - server1 - pe care am tabela products - code, name... etc. Am mai multe servere linked catre: el linked1, linked2, linked3 in diferite locatii pe care am o tabela products dar care &lt;U&gt;mai are in plus alte campuri&lt;/U&gt; fata de cele de pe server1. As vrea ca la &lt;STRONG&gt;CEREREA&lt;/STRONG&gt; unui user care are acces pe un server linked sa se oglindeasca produsele noi sau produsele modificate in tabela locala de pe linked. Adica, pe server 1 am adaugat un produs nou - il adaug si pe linked... am modificat o denumire... o modific si pe linked. Insa nu just in time, ci la apasarea unui buton dintr-o aplicatie. Vad ce produse sunt noi, care sunt modificate si le inserez/updatez...&lt;/P&gt;&lt;P&gt;  Ei, cum s-ar face cel mai bine asta ?   &lt;/P&gt;</description></item></channel></rss>