Welcome to Sign in | Help
in Search

Sincronizare SQLServer Express

Last post 10-26-2009, 8:03 PM by BGeo. 60 replies.
Page 4 of 5 (61 items)   < Previous 1 2 3 4 5 Next >
Sort Posts: Previous Next
  •  08-27-2007, 11:12 AM 2563 in reply to 2562

    Re: Sincronizare SQLServer Express

    @msgtype trebuie sa fie SYSNAME sau NVARCHAR(128), nu VARCHAR(10)
    http://rusanu.com
  •  08-27-2007, 11:45 AM 2564 in reply to 2563

    Re: Sincronizare SQLServer Express

    am facut asa :

    declare @msg xml,@msgtype nvarchar(128)

    dar tot nu merge adica tot nule sunt amandoua Sad

    De fapt cred ca procedura nici nu se mai lanseaza acu cand intra ceva in coada desi am schimbat activate la coada pe on


    Secolul XXI ori va fi religios ori nu va fi deloc
  •  08-29-2007, 11:57 AM 2583 in reply to 2564

    Re: Sincronizare SQLServer Express

    Codul nu o ia pe latura ELSE, ci pe IF, insa functia dbo.boys este incorecta. Recomandarea mea este sa executzi procedura manual, din Management Studio cu exec [dbo].[repl_insert] pina cind este corecta si abia apoi sa activezi procedura pe queue.


    http://rusanu.com
  •  08-29-2007, 2:38 PM 2585 in reply to 2583

    Re: Sincronizare SQLServer Express

    Am executat functia boys am testat-o si-mi face shreding la xml-ul cu datele inserate.

    Adica am testat-o cuun xml generat cu select for xml de forma aia ,din baza de pe sender.Ar insemna ca,crapa la insertul ala da nu itneleg de ce ,o sa mai sap

    Multumesc mult


    Secolul XXI ori va fi religios ori nu va fi deloc
  •  08-31-2007, 3:48 PM 2587 in reply to 2195

    Re: Sincronizare SQLServer Express

    Am creat pe receptor o tabela cu doua coloane msg xml si msgtyoe nvarchar(10)

    AM comentat inserturile alea,si am pus sa-mi insereze in tabela asta mesgtype si msg care le primeste,si am null imi insereaza de fiecare data cand trimit un mesaj un rand null.

    Asta e codul proceduri de activare

    ALTER PROCEDURE [dbo].[repl_insert]

     

    AS

    BEGIN

    -- SET NOCOUNT ON added to prevent extra result sets from

    -- interfering with SELECT statements.

    declare @conversation uniqueidentifier

    declare @msg xml,@msgtype nvarchar(128)

    SET NOCOUNT ON;

    begin transaction

    ;receive top(1) @conversation=conversation_handle,@msgtype=message_type_name,@msg=message_body from replicare

    --if (@msgtype='insertie')

    --insert into tbl_boy select * from boys(@msg)

    -- -- Insert statements for procedure here

    --else

    --insert into tbl_boy values(@msgtype,-1,-1)

    insert into mesaje values(@msg,@msgtype)

    commit

    end conversation @conversation

    END

    Nu-mi dau seama care e buba Sleep


    Secolul XXI ori va fi religios ori nu va fi deloc
  •  09-03-2007, 1:26 PM 2590 in reply to 2587

    Re: Sincronizare SQLServer Express

    Tabela mesaje are o singura coloana numita [mesaj] de tip XML. Deci insert-ul nu se poate compila:

    Msg 213, Level 16, State 1, Procedure repl_insert, Line 17
    Insert Error: Column name or number of supplied values does not match table definition.

    Ca sa pot sa te ajut te rog sa te asiguri ca codul SQL care-l postezi poate fi compilat. Problema trebuie sa fie in continuare in codul tau pentru ca variabilele au valoarea corecta, dupa cum se poate vedea cu un simplu SELECT:

    ALTER PROCEDURE [dbo].[repl_insert]
    AS
    BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.

    declare @conversation uniqueidentifier
    declare @msg xml,@msgtype nvarchar(128)
    SET NOCOUNT ON;
    begin transaction
    ;receive top(1) @conversation=conversation_handle,@msgtype=message_type_name,@msg=message_body from replicare
    select @conversation, @msgtype, @msg
    commit
    END

    GO

    exec [repl_insert]

    Resulta:

    5728A4E5-3A52-DC11-AC20-0013723DF0DA insertie <boys><boy FirstName="dfdfdf" Counter="0" Year="88" /></boys> 

     


    http://rusanu.com
  •  09-03-2007, 9:40 PM 2593 in reply to 2590

    Re: Sincronizare SQLServer Express

    rremus:

    Tabela mesaje are o singura coloana numita [mesaj] de tip XML. Deci insert-ul nu se poate compila:

    Msg 213, Level 16, State 1, Procedure repl_insert, Line 17
    Insert Error: Column name or number of supplied values does not match table definition.

    Ca sa pot sa te ajut te rog sa te asiguri ca codul SQL care-l postezi poate fi compilat. Problema trebuie sa fie in continuare in codul tau pentru ca variabilele au valoarea corecta, dupa cum se poate vedea cu un simplu SELECT:

    ALTER PROCEDURE [dbo].[repl_insert]
    AS
    BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.

    declare @conversation uniqueidentifier
    declare @msg xml,@msgtype nvarchar(128)
    SET NOCOUNT ON;
    begin transaction
    ;receive top(1) @conversation=conversation_handle,@msgtype=message_type_name,@msg=message_body from replicare
    select @conversation, @msgtype, @msg
    commit
    END

    GO

    exec [repl_insert]

    Resulta:

    5728A4E5-3A52-DC11-AC20-0013723DF0DA insertie <boys><boy FirstName="dfdfdf" Counter="0" Year="88" /></boys> 

     

    Pai am modifcat-o si i-am pus si tip mesaj si-mi insereaza rand null.

    O sa pun o coloana vbarchar pt idconversatie sa-l inreg si pe ala ca sa fiu sigur


    Secolul XXI ori va fi religios ori nu va fi deloc
  •  09-07-2007, 8:49 AM 2623 in reply to 2593

    Re: Sincronizare SQLServer Express

    Party!!! finally a ,ers se insereaza

    asta e codul castigator

    begin transaction

    ;receive top(1) @conversation=conversation_handle,@msgtype=message_type_name,@msg=message_body from replicare

    select @msgtype

    select @msg

    if (@msgtype='insertie')

    begin

    exec sp_xml_preparedocument @idoc output,@msg

    insert into tbl_boy select * from openxml(@idoc,'/boys/boy') with (FirstName varchar(20),Counter int,Year int,id int)

    exec sp_xml_removedocument @idoc

    end

    -- Insert statements for procedure here

    --else

    --insert into tbl_boy values(@msgtype,-1,-1)

    --insert into mesaje values(@msg,@msgtype)

    commit

    end conversation @conversation

    Inca o intrebare la contractul respectiv vreau sa ma adaug doua tipuri de mesaje stergere si actualizare ca sa fac replicarea complet.

    AM vazut ca nu am alter contract cum pot face asta trebuie neaparat sa creez contractul dinnou?

    Multumesc


    Secolul XXI ori va fi religios ori nu va fi deloc
  •  10-02-2007, 1:25 PM 2830 in reply to 2623

    Re: Sincronizare SQLServer Express

    O discutie despre "synchronous application scenario " legata de subiectul acestei postari : http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2218160&SiteID=1
    Gheorghe Ciubuc,SQL Server Influencer, MCP(SQL 2000), MCTS (SQL Server 2005) , OCA(Oracle 9i), Sybase(Brainbench)
  •  06-11-2009, 1:05 PM 7298 in reply to 2830

    Re: Sincronizare SQLServer Express

    Salutare, poate ma ajutati putin sa readuc la viata acest topic...
    In primul rand, multumiri lui Remus si tuturor celor care au ajutat la acest subiect. Fara informatiile oferite de ei nu cred ca ma descurcam...
    M-am jucat putin cu Service Broker, mi se pare foarte interesant si puternic. Este exact ce aveam nevoie pentru "plimbat" informatii intre o instanta de SQL Server normala si mai multe instante Express Edition (un fel de replicare a datelor).
    Acum am o intrebare, cum este recomandat sa implementezi (la nivel de cozi, contracte, proceduri stocate) aceasta sincronizare ?
    Mai clar spus, sa las o singura coada, si din toate triggerele de pe tabele, sa trimit mesajele si XML-ul cu datele efective pentru replicare prin acea coada, iar la destinatie, sa actualizez datele in functie de tabela din care au venit ?
    Sau este mai bine sa fac cate o coada / contract pentru fiecare tabela din care vreau sa plimb datele ?

    Drive safe !
  •  06-15-2009, 1:13 PM 7303 in reply to 7298

    Re: Sincronizare SQLServer Express

    Pai intai iti definesti endpointurile prin care o sa comunice cele doua instante ssb apoi O instanta ssb pt receptor si sender. Si din ce imi aduc eu aminte o instanta service broker implementeaza numai un contract si foloseste numai o coada. Cred,ca corespondenta e de unu la unu adica contract->ssb instance->queue
    Secolul XXI ori va fi religios ori nu va fi deloc
  •  07-17-2009, 6:09 PM 7403 in reply to 7303

    Re: Sincronizare SQLServer Express

    Toate bune si frumoase, m-am documentat, m-am jucat, si mi-a iesit jumatate din problema, adica trimiterea datelor intr-un scenariu "many-to-one".
    Exemplele de aici : http://www.sqlteam.com/article/centralized-asynchronous-auditing-across-instances-and-servers-with-service-broker mi-au fost foarte utile.
    La ce m-am blocat acum, este partea "one-to-many"; nu stiu cum sa trimit datele de la "sediul central" catre "filiale".
    Am sa zicem 3 tabele "nomenclator", pe care vreau sa le trimit la "filiale". Am facut acelasi lucru cu trigger pe tabele, care genereaza un XML, XML-ul asta este trimis catre procedura catre trimite dialogurile catre serviciile "filialelor". Insa nu-mi dau seama cum sa editez aceasta procedura, ca sa trimit datele modificate dintr-o tabela "nomenclator", catre toate filialele.
    Banuiesc ca aici este spilul :
                -- Begin the dialog, with the new Id
                BEGIN DIALOG CONVERSATION @dlgId
                    FROM SERVICE    [tcp://10.0.3.160:4022/TestDb1/Audit/DataSender]
                    TO SERVICE      '//Audit/DataWriter',
                                    -- this is a MasterAuditDatabase Service Broker Id
                                    -- (change it to yours and remove < and >)
                                    '5E929454-43FA-4793-98FA-EB8647E1D313'
                    ON CONTRACT     [//Audit/Contract]
                    WITH ENCRYPTION = OFF;
    sa trimit la fiecare serviciu de la filiale (stiind acel service broker ID). Insa nu-mi iese !
    Plus ca n-as vrea ca de fiecare data cand adaug o filiala, sa modific aceasta procedura stocata (adica sa scriu "in clar" acel id, si sa fac send pentru fiecare id)...
    Ce ma sfatuiti ?

    Drive safe !
  •  07-18-2009, 3:31 AM 7404 in reply to 7403

    Re: Sincronizare SQLServer Express

    Uite cum te sfatuiesc eu sa faci: fiecare filiala incepe ea o conversatie cu sediul central si trimite un mesaj cu semnificatia de 'subscriu la nomenclatoare'. Sediul central primeste mesajul si depoziteaza conversatia intr-o tabela de 'subscrisi'.

    Cind se fac modificari la nomenclator, se trimite cite un update la fiecare conversatie din 'subscrisi'. In felul asta sediul central nu are hard-coded filialele. Pe massura ce noi filiale sint deschis, ele 'subscriu' si apoi incep sa primeasca innapoi nomenclatorul la care au 'subscris'. Mesajele de update de nomenclator curg de la 'target' (sediul central) la 'initiator' (la filiale), ca mesaje de raspuns la mesajul original de 'subscriu'. I-tzi poti permite asta pentru ca conversatiile SSB sint de lunga durata si pot dura si ani de zile.

    Cind o filiala se modifica, desfiinteaza etc ea inchide conversatia si sediul central primeste mesajul de erroare sau de EndConversation, si sterge conevrsatia din atbela de 'subscrisi'.

    http://rusanu.com
  •  10-26-2009, 5:27 PM 7745 in reply to 7403

    Indifferent [:|] Re: Sincronizare SQLServer Express

    Dupa lupte seculare, am pus pe picioare "replicarea" intre instante diferite. Toate bune si frumoase, datele se transmit, conversatiile se inchid, etc... Insa ma roade ceva, ma uit in profiler, si dupa ce curg toate mesajele cum ar trebui sa curga (bine, ma rog, dupa cate ma pricep eu) vine si un mesaj Broker :: Connection, subclass "4 - Closing", cu textul "An error occurred while receiving data: '64(The specified network name is no longer available.)'."
    Asta doar pe sender, pe receiver totul pare ok, niciun mesaj de eroare.
    Ce se intampla mai exact ?
    In plus, mi se pare ciudat, ca la sender apare in campul ObjectName, adresa IP corecta a receiverului, cu portul aferent, exact cum le-am setat eu. Insa la receiver, sender-ul apare pe portul 0 ! Cu toate ca sunt puse amandoua pe 4022....

    Sender :
    Receiver :

    P.S. Folosesc tehnicile descrise de Remus (inca odata multumesc, pentru toate explicatiile date !), si dupa 5 minute, timer-ul inchide conversatia.

    Later edit : M-am jucat si am rutat mesajele prin alta instanta. Acum, si pe sender, si pe receiver, imi apare acea eroare la evenimentul de closing... Pe "router" nu-mi apare nicio eroare in profiler ! Si la fel, in campul object, sender-ul apare de forma tcp://IP:0, iar receiver-ul are si portul corect (tcp://IP:4022)... nu mai inteleg nimic !



    Drive safe !
  •  10-26-2009, 7:37 PM 7746 in reply to 7745

    Re: Sincronizare SQLServer Express

    Poti ignora mesajul asta fara, nu indica o problema. SSB inchide conexiunile automat (dupa 1 minut de non-activate parca). Unul din servere va fi totdeuna primul care inchide, si cind se intimpla asta celalat va raporta evenimentul care-l vezi tu.

    Despre tcp://IP:0 este tot OK. Serverul care accepta o conexiune va pune '0' ca portul la 'peer'.
    http://rusanu.com
Page 4 of 5 (61 items)   < Previous 1 2 3 4 5 Next >
View as RSS news feed in XML
Powered by Community Server (Commercial Edition), by Telligent Systems