Welcome to Sign in | Help
in Search

replicare SQL Server si Postgresql

Last post 02-12-2008, 4:53 PM by cretzu. 15 replies.
Page 1 of 2 (16 items)   1 2 Next >
Sort Posts: Previous Next
  •  12-13-2007, 9:27 AM 3586

    replicare SQL Server si Postgresql

    Salut,

     

    Ma confrunt cu o problema si nu prea stiu cum sa o rezolv.

    Am o aplicatie PHP care ruleaza pe un Postgresql 8.1.3 (si care trebuie sa ramana pe postgresql). Alte doua aplicatii ruleaza pe un SQL Server 2005. Problema este ca anumite tabele din cele doua BD sunt comune (persoane, utilizatori, unitati, organigrama .... ) si ar terbuie sa fie sincronizare runtime cat m automat. Eu m-am gandit sa incerc sa le replic dar in documentatia de la MSDN la replicare pe BD heterogene zicea ca SQL Server ar merge numa cu  Oracle si DB2.

    Va rog .... imi puteti sa vreo idee sau ceva documentatie ...

    Daniel.
     


    MCP (C Sharp)
    Software Engineer,
    Cluj Napoca
  •  12-13-2007, 10:21 AM 3587 in reply to 3586

    Re: replicare SQL Server si Postgresql

    Nu ai precizat sensul replicări: PostgreSQL -> SQL Server sau SQL Server -> PostgreSQL sau în ambele sensuri ?

    Nu ai precizat pe ce platforma este  PostgreSQL : Windows, Linux, etc. (ca fapt divers) şi versiunile de SQL Server şi PostgreSQL ?

    Poate ajută:

    [1] Connecting to PostgreSQL from Windows Platforms

    [2] Application Programming Interfaces: ODBC / OLE DB

    Aş merge pe soluţia unui SSIS 2005 sau DTS 2000 package în SQL Server, conectarea realizându-se prin ODBC. Soluţiile de conectare ODBC la PostgreSQL ar trebuie testate în primul rând pentru a nu avea suprize neplăcute.

  •  12-13-2007, 10:22 AM 3588 in reply to 3586

    Re: replicare SQL Server si Postgresql

    1.Datele dinspre SQL spre Postregresql (dar si invers) s-ar putea duce cu un job pe SQL facut sa verifice daca au aparut date noi din timp in timp;

    • eu as face o tabela de audit cu coloanele: NumeTabela, Data,Replicat (cu yes/No),Tip(inserare/modificare),IDRand
    • un trigger pe tabelele vizate scrie in tabela de mai sus date despre inserari/modificari;
    • jobul de care spuneam verifica tabela de audit si daca apar randuri pe baza IDRand le insereaza/modifica pe serverul celalalt si la sfarsit scrie Replicat pe Yes;

    2.Nu am incercat , dar cred ca se poate construi un LinkServer pe SQl pt Postgresql astfel ca se pot acccesa datele de acolo

     


    Gheorghe Ciubuc,SQL Server Influencer, MCP(SQL 2000), MCTS (SQL Server 2005) , OCA(Oracle 9i), Sybase(Brainbench)
  •  12-13-2007, 10:34 AM 3589 in reply to 3587

    Re: replicare SQL Server si Postgresql

    Versiunile de sistem de operare.

    Pentru SQL Server 2005 un Win Server 2003

    Iar pentru Postgresql 8.1.3. un CentOS 4.1

    Despre sensul replicarii m-as multumi doar cu SQL -> Postgres, dar daca se paote si in ambele sensuri ar fi super.

     

     


    MCP (C Sharp)
    Software Engineer,
    Cluj Napoca
  •  12-13-2007, 10:35 AM 3590 in reply to 3586

    Re: replicare SQL Server si Postgresql

    Ca

    1) Adaugi ca linked server Postgresu

    2) Iti faci niste joburi care fac insertie in tabelele coresounzatoare postgres/sql  a diferentelor cu insert into de ex

    step 1

    insert into persoane select * from Numelinkedserver.Persoane where IDPersoana  not in Persoane

    -- cu insertul asta pui ce ai inplus pe postgres in sql

    -- apoi faci operatiune inversa pui in postgress ce ai in plus pe sql

    step 2

    insert into Numelinkedserver.persoane select * from .Persoane where IDPersoana  not in Persoane

    Si planifici jobul asta sa ruleze pe sqlagent pe serverul sql la un interval de timp stabilit de tine

    Ca alternativa la linked server ai si openrowset cu care poti face diverse operatiuni pe surse de date externe


    Secolul XXI ori va fi religios ori nu va fi deloc
  •  12-13-2007, 10:46 AM 3592 in reply to 3590

    Re: replicare SQL Server si Postgresql

    Merci de idee... Dupa cate am inteles din post-ul tau nu o sa am o sincronizare aprox real time intre BD, pentru ca jobul ala va rula la invervale egale de timp.

     

    Daniel. 


    MCP (C Sharp)
    Software Engineer,
    Cluj Napoca
  •  12-13-2007, 1:06 PM 3595 in reply to 3592

    Re: replicare SQL Server si Postgresql

    Ai putea in plus sa-ti faci un trigger  ,pe tabelele respective, de ambele parti pt insert uodate si delete in care sa trimit datele in el.

    De ex pe sql ai tabelele inserted si deleted accesibile din trigger in care tirmiti datele pe postgress.

    Joburile de sincronizare sunt insa necesare pt ca pot fi situatii cand operatiunea nu se executa cu succes in trigger


    Secolul XXI ori va fi religios ori nu va fi deloc
  •  12-14-2007, 12:11 AM 3596 in reply to 3595

    Re: replicare SQL Server si Postgresql

    Se pare că se poate implementa un anumit tip de replicare SQL Server -> PostgreSQL conform: 

    Replicating from MS SQL Server to PostgreSQL

  •  12-14-2007, 12:28 PM 3597 in reply to 3596

    Re: replicare SQL Server si Postgresql

    Merci pentru link ... e interesant :) insa acolo avem de-a face cu un SQL Server 2000 :(.

    Totusi am incercat si am facut primii pasi din document dar am o problema :(

    am facut linked serverul din cod T-SQL ceva de genu

    CREATE DATABASE origin
    GO

    USE origin
    GO

    CREATE TABLE tab1 (id int identity not null primary key, t varchar(128) not null);

    INSERT INTO tab1 (t) VALUES ('Test 1');
    INSERT INTO tab1 (t) VALUES ('Test 2');


    select * from tab1;

    EXEC sp_addlinkedserver
        @server = 'PGSLAVE',
        @srvproduct = '',
        @provider = 'PostgreSQL',
        @datasrc = 'pgslave'
    GO

    EXEC sp_addlinkedsrvlogin
        @rmtsrvname = 'PGSLAVE',
        @useself = 'FALSE',
        @rmtuser = 'sqlrepl',
        @rmtpassword = 'test'

     

    Problema este ca atunci cand incerc sa ii dau Test Connection sau sa vad tabelele din acest linked server imi da urmatoarea eroare  care chiar ns cum sa o rezolv

    Poate aveti vreo idee :) ca chiar sunt cam blocat 

     

    TITLE: Microsoft SQL Server Management Studio
    ------------------------------
    Failed to retrieve data for this request. (Microsoft.SqlServer.SmoEnum)
    For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&LinkId=20476
    ------------------------------
    ADDITIONAL INFORMATION:
    An exception occurred while executing a Transact-SQL statement or batch. (Microsoft.SqlServer.ConnectionInfo)
    ------------------------------
    The OLE DB provider "PostgreSQL" has not been registered. (Microsoft SQL Server, Error: 7403)
    For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=09.00.3054&EvtSrc=MSSQLServer&EvtID=7403&LinkId=20476
    ------------------------------
    BUTTONS:
    OK
    ------------------------------
     

    Am reusit pe un alt sistem sa inregistrez un driver de Ole DB pe Postgresql  (regsrv32 ...) dar apoi am ajuns la eroarea ca acel provider nu poate fi initializat :( si tot imi da eroare

    :(

     

     

    Multumesc mult tuturor pentru raspunsuri ... si astept propuneri ....

     

    Daniel  


    MCP (C Sharp)
    Software Engineer,
    Cluj Napoca
  •  12-14-2007, 2:28 PM 3598 in reply to 3597

    Re: replicare SQL Server si Postgresql

    Intrebare nu merge pe un ODBC driver?
    Ca driver de ODBC Postgre e beton.
  •  02-12-2008, 10:54 AM 3977 in reply to 3597

    Re: replicare SQL Server si Postgresql

    Problema cu replicarea inca nu am rezolvat-o :(

    Ce am incercat acum ... sa utilizez un SGBD de PostgreSQL local pe acelasi server cu SQL 2005.
    kitul vine atat cu ODBC provider cat si cu PgOleDB provider
    Am vrut sa execut un sql simplu

    select * from
    opendatasource('PostgreSQL', 'Data Source=127.0.0.1:5432;User ID=sqlrepl;Password=sqlrepl').slave..tab1

    dar am primit eroare ca acest provider PostgreSQL nu stie ThreadingMode = 'Both'

    Dupa ce am modificat ThreadingMode = 'Both' in registrii pentru ca imi da urmatorea eroare.

    Msg 7399, Level 16, State 1, Line 2
    The OLE DB provider "PostgreSQL" for linked server "(null)" reported an error. The provider did not give any information about the error.
    Msg 7304, Level 16, State 2, Line 2
    Cannot connect using OLE DB provider "PostgreSQL" to linked server "(null)". Verify the connection parameters or login credentials associated with this linked server.

    Daca stiti unde gresesc .... corectati-ma

    Daniel.



    MCP (C Sharp)
    Software Engineer,
    Cluj Napoca
  •  02-12-2008, 12:09 PM 3978 in reply to 3977

    Re: replicare SQL Server si Postgresql

    Am mai incercat si in felul urmator
    select * from
    opendatasource('PostgreSQL', 'Data Source=localhost:5432;User ID=sqlrepl;Password=sqlrepl').slave..tab1

    cu eroarea
    Msg 7399, Level 16, State 1, Line 1
    The OLE DB provider "PostgreSQL" for linked server "(null)" reported an error. The provider did not give any information about the error.
    Msg 7304, Level 16, State 2, Line 1
    Cannot connect using OLE DB provider "PostgreSQL" to linked server "(null)". Verify the connection parameters or login credentials associated with this linked server.

    apoi am zis sa incerc
    select * from
    opendatasource('MSDASQL', 'Data Source=PGSLAVE').[slave].[public].[tab1]
    unde PGSLAVE este un linked server 

    am primit eroarea:
    OLE DB provider "MSDASQL" for linked server "(null)" returned message "ERROR: syntax error at or near ""Col1004"";
    Error while executing the query".
    Msg 7320, Level 16, State 2, Line 1
    Cannot execute the query "SELECT "Tbl1002"."id" "Col1004","Tbl1002"."t" "Col1005" FROM "slave"."public"."tab1" "Tbl1002"" against OLE DB provider "MSDASQL" for linked server "(null)".


    in schimb daca folosesc
    sp_tables_ex @table_server = 'PGSLAVE',
    @table_catalog = 'slave',
    @table_schema = 'public',
    @table_type = 'TABLE'

    imi da rezultatul asteptat
    slave    public    MSREPL7    TABLE   
    slave    public    tab1    TABLE   

    daca puteti sa imi zicceti pe unde gresesc de nu imi merge opendatasource

    Ma intereseaza dc petnru un linked server cu numele PGSLAVE
    nu imi merge o interogare simpla de genu

    select * from PGSLAVE...tab1

    si imi da eroarea

    Msg 7313, Level 16, State 1, Line 1
    An invalid schema or catalog was specified for the provider "MSDASQL" for linked server "PGSLAVE".




    MCP (C Sharp)
    Software Engineer,
    Cluj Napoca
  •  02-12-2008, 3:17 PM 3979 in reply to 3978

    Re: replicare SQL Server si Postgresql

    Incearcă
    SELECT * FROM PGSlave.bazadedate.schema.tabela
  •  02-12-2008, 3:21 PM 3980 in reply to 3979

    Re: replicare SQL Server si Postgresql

    Am incercat ceva de genu

    SELECT * FROM PGSLAVE.slave.[public].tab1

    dar tot imi da eroare nu ii place chestia asta cu public desi .. pe postgresql schema defautl asa se numeste :(


    MCP (C Sharp)
    Software Engineer,
    Cluj Napoca
  •  02-12-2008, 3:57 PM 3981 in reply to 3980

    Re: replicare SQL Server si Postgresql

    cretzu:

    Am incercat ceva de genu

    SELECT * FROM PGSLAVE.slave.[public].tab1

    dar tot imi da eroare nu ii place chestia asta cu public desi .. pe postgresql schema defautl asa se numeste :(


    Ok.
    Da' creaza-ti o schema in PG si apoi tabela o creezi de asemenea in schema respectiva:

    CREATE SCHEMA myschema;

    CREATE TABLE myschema.mytable (
    ...
    );

    --si apoi

    SELECT *
    FROM server.bazadedate.myschema.mytable

Page 1 of 2 (16 items)   1 2 Next >
View as RSS news feed in XML
Powered by Community Server (Commercial Edition), by Telligent Systems