IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Réplication de données


Sujet :

Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 9
    Points : 5
    Points
    5
    Par défaut Réplication de données
    Bonjour tout le monde,

    j'espère que vous digérez bien votre dinde de noël

    Voilà j'ai une petite question, je travaille actuellement sur un projet de réplication de données totalement programmer en Java (c'est un "mini-projet" que l'on m'a donné en cours), or j'ai un petit soucis je suis à la recherche d'une solution pour transférer des fichiers volumineux entre un client et un serveur (sans saturer la mémoire de ma JVM). Pour communiquer j'utilise actuellement un protocole TCP et lorsque je veux envoyer un fichier j'instancie une classe dans laquelle j'aurais un tableau qui contiendra tout le contenu du fichier que je veux envoyer, puis je serialiserai cette classe et l'enverrai. Or cette méthode marche bien mais pour de petits dossier mais dés que je veux envoyer fichier de par exemple 1Go toute ma technique tombe à l'eau ... je ne vois pas comment envoyer un fichier volumineux du coup ...

    Une autre petite question car après avoir parler avec mon prof j'ai un gros doute, peut on utiliser le protocole TCP lorsque l'on veut communiquer entre plusieurs architectures distantes ou est on obliger d'utiliser l'UDP pour pouvoir traverser l' "internet"?

    Je vous remercie pour vos réponse et j'espère avoir été le plus clair possible (je peux fournir une javadoc si vous en avez besoin)

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par fractis Voir le message
    lorsque je veux envoyer un fichier j'instancie une classe dans laquelle j'aurais un tableau qui contiendra tout le contenu du fichier que je veux envoyer, puis je serialiserai cette classe et l'enverrai. Or cette méthode marche bien mais pour de petits dossier mais dés que je veux envoyer fichier de par exemple 1Go toute ma technique tombe à l'eau ...
    Ben oui, si tu veux faire tenir tout ton fichier en mémoire bonne chance. Tu va avoir deux problèmes majeurs:

    si le fichier est très gros, il tiendra pas en mémoire,
    si tu as plein de petits fichiers, n'oublie pas que ObjectOutputStream / ObjectInputStream gardent un cache de tous les objets qui sont passés dans le stream, ce qui te ramènera au même problème de mémoire.


    Mon conseil c'est d'oublier ces classes, elles ne sont pas prévues pour ça. Utilise directement les outpustStream / inputStream de la socket pour communiquer de façon simple. Les classes DataInputStream / DataOutputStream peuvent t'aider à structurer les données sur ce stream. Ensuite, basiquement, il suffit que l'émetteur envoie au récepteur un message disant en gros "bonjour, je vais t'evoyer une fichier de xxx octets"

    Suivi d'un fluxde xxx octets à tapper directement dans le fichier destination. Pas besoin du coup que ça tienne en mémoire, tu peux lire du ficheir et écrire sur la socket progressivement et pour la lecture, même choses. Avec commons io, on aurait coté émetteur un truc du style


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    DataOutputStream dataOut = new DataOutputStream(socket.getOutputStream());
     
     
    // ....
     
    public void sendFile (File f, DataOutputStream dataOut) throws IOException{
        dataOut.writeUTF("File");
        dataOut.write(f.getName());
        dataOut.writeLong(f.length());
        IOUtils.copyLarge(new FileInputStream(f),dataOut);
    }
    et coté lecture:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    DataInputStream dataIn = new DataInputStream(socket.getInputStream());
     
     
    // ....
     
    String command =dataIn.readUTF();
    if (command.equals("File"))
       readFile(datain);
     
    //....
     
    public void readFile (DataInputStream dataIn) throws IOException{
        String name = dataIn.readUTF();
        File f = new File(folder,name);
        long size = dataIn.readLong();
        OutputStream out = new FileOutputStream(f);
        IOUtils.copyLarge(out,dataIn,0L,size);
        out.close();
    }

    Bien entendu, reste à gérer les cloture de flux les erreurs, etc. C'est juste un bout de code en exemple

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Ha merci de ta réponse , tu es un peu un père noël mais du 26 décembre Donc d'après ce que je comprends je peux continuer à utiliser comme protocole de communication le TCP, enfin si j'ai bien tous compris. Mais mon autre question est "puis je utiliser le TCP pour communiquer entre deux serveurs géographiquement distant (je pense que la question peut paraitre bête mais depuis le dernier échange avec mon prof j'ai un gros doute ...)"?

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Oui, pour autant que la machine qui instancie la connexion puisse "voir" la machine distante. De toutes façons, tu devra utiliser du TCP ou de l'UDP, ce sont le deux seuls protocole basés sur IP utilisables pour ton cas, et l'IP est le seul moyen de router des données entre deux machine distantes

    Tu as pas mal de restrictions à prendre en compte à distance:

    si le deux machines sont dans un NAT, elles ont avoir beaucoup de mal à se voir mutuellement, puisqu'elles sont toutes les deux "privées" et dans des zones réseau différentes. Mais si au moins une des machines a un ip publuque et pour autant que le firewall ne vienne pas foutre le bordel, ça ira sans soucis.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Je te remercie de ta réponse tchize_, tu as levé les quelques doutes que j'avais, en fait si je comprends tout bien pour communiquer avec une architecture distante si ce serveur est dans un NAT alors je devrais connaitre l'adresse IP que le NAT lui attribue ?

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 547
    Points : 21 602
    Points
    21 602
    Par défaut
    Non, tu devras configurer le NAT pour autoriser ce genre de communication avec le serveur.
    L'usage, la manière dont on apprend, étant de ne pas être derrière un NAT.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Ha oui d'accord donc je m'occuperais de cela en post devellopement alors. Par contre voilà, j'ai essayé le code que m'a donné tchize_, j'ai bien compris comment il marchait, j'ai testé celui ci sans créer de fichier, jusque là tout marchait bien... mais à partir du moment ou j'ai rajouté la ligne
    IOUtils.copyLarge(out,dataIn,0L,size);
    pour copier le flux dataIn(flux de type DataInputStream) dans out (flux de type FileOutputStream ), plus rien ne marchait. J'ai tenté de trouver une solution en téléchargeant et ajoutant le bibliothéque "commons-io-2.4.jar", mais rien... j'ai googlé ça mais pas vraiment de solution convaincante.

    le code incriminé!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    package replication;
     
     
     
     
     
    import java.io.DataInputStream;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.net.Socket;
    import sun.misc.IOUtils;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    import org.apache.commons.compress.utils.IOUtils; 
    /**
     *
     * @author theault
     * @version 0.1
     */
    public class ThreadConnection extends Thread{
     
     
        private Socket socketClient;
        private String command; 
        private DataInputStream dataIn ;
        /**
         * Initialise le socket de communication avec le client, ouvre le flux d'entrée pour recevoir les données venant du client   
         * @param socketCommunication
         * Socket du client avec lequel on doit communiquer 
         */
        public ThreadConnection(Socket socketCommunication) throws IOException // ThreadConnection initilized with socket for communication with the client 
        {
            this.socketClient=socketCommunication; 
            this.command="";
            DataInputStream dataIn = new DataInputStream(socketClient.getInputStream());
     
        }
     
     
        /**
         * Cette méthode va nous permettre de maintenir la communication avec le client tant que celui n'envoie pas le mot "end" seul.
         */
        public void run() 
        {
            System.out.println("New communication Server:Client With : "+ socketClient.getInetAddress());
     
            while(!"end".equals(command))
            {
                try {
                    command = dataIn.readUTF();
                } catch (IOException ex) {
                    System.err.println("WARNING : COMMUNICATION : problem during the reading :"+ex);
                    System.exit(-1);
                }
     
                System.out.println("New message :: "+command);
     
                if (command.equals("File"))
                    try {
                        readFile();
                } catch (IOException ex) {
                    Logger.getLogger(ThreadConnection.class.getName()).log(Level.SEVERE, null, ex);
                }
             }
     
        try {  
                dataIn.close();
                socketClient.close();
            } catch (IOException ex) {
    //            System.err.println("WARNING : COMMUNICATION : error with closure of socketClient or output/intput streams : "+ex);
                System.exit(-1);
            }
        }
     
        public void readFile() throws IOException
        {
     
             String name = dataIn.readUTF();
             File f = new File("./Database/",name);
             long size = dataIn.readLong();
             OutputStream out = new FileOutputStream(f);
             IOUtils.copyLarge(out,dataIn,0L,size);
             out.close();
        }
     
     
    }
    le résultat de la compilation avec -Xlint

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    ThreadConnection.java:13: warning: IOUtils is internal proprietary API and may be removed in a future release
    import sun.misc.IOUtils;
                   ^
    ThreadConnection.java:16: error: package org.apache.commons.compress.utils does not exist
    import org.apache.commons.compress.utils.IOUtils; 
                                            ^
    ThreadConnection.java:84: warning: IOUtils is internal proprietary API and may be removed in a future release
             IOUtils.copyLarge(out,dataIn,0L,size);
             ^
    ThreadConnection.java:84: error: cannot find symbol
             IOUtils.copyLarge(out,dataIn,0L,size);
                    ^
      symbol:   method copyLarge(OutputStream,DataInputStream,long,long)
      location: class IOUtils
    2 errors
    2 warnings
    Et pour finir je ne sais si cela vous sera utile mais voici mon fichier build.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
     
    <?xml version="1.0" encoding="UTF-8"?>
    <!-- You may freely edit this file. See commented blocks below for -->
    <!-- some examples of how to customize the build. -->
    <!-- (If you delete it and reopen the project it will be recreated.) -->
    <!-- By default, only the Clean and Build commands use this build script. -->
    <!-- Commands such as Run, Debug, and Test only use this build script if -->
    <!-- the Compile on Save feature is turned off for the project. -->
    <!-- You can turn off the Compile on Save (or Deploy on Save) setting -->
    <!-- in the project's Project Properties dialog box.-->
    <project name="replication" default="default" basedir=".">
        <description>Builds, tests, and runs the project replication.</description>
        <import file="nbproject/build-impl.xml"/>
        <!--
     
        There exist several targets which are by default empty and which can be 
        used for execution of your tasks. These targets are usually executed 
        before and after some main targets. They are: 
     
          -pre-init:                 called before initialization of project properties
          -post-init:                called after initialization of project properties
          -pre-compile:              called before javac compilation
          -post-compile:             called after javac compilation
          -pre-compile-single:       called before javac compilation of single file
          -post-compile-single:      called after javac compilation of single file
          -pre-compile-test:         called before javac compilation of JUnit tests
          -post-compile-test:        called after javac compilation of JUnit tests
          -pre-compile-test-single:  called before javac compilation of single JUnit test
          -post-compile-test-single: called after javac compilation of single JUunit test
          -pre-jar:                  called before JAR building
          -post-jar:                 called after JAR building
          -post-clean:               called after cleaning build products
     
        (Targets beginning with '-' are not intended to be called on their own.)
     
        Example of inserting an obfuscator after compilation could look like this:
     
            <target name="-post-compile">
                <obfuscate>
                    <fileset dir="${build.classes.dir}"/>
                </obfuscate>
            </target>
     
        For list of available properties check the imported 
        nbproject/build-impl.xml file. 
     
     
        Another way to customize the build is by overriding existing main targets.
        The targets of interest are: 
     
          -init-macrodef-javac:     defines macro for javac compilation
          -init-macrodef-junit:     defines macro for junit execution
          -init-macrodef-debug:     defines macro for class debugging
          -init-macrodef-java:      defines macro for class execution
          -do-jar:                  JAR building
          run:                      execution of project 
          -javadoc-build:           Javadoc generation
          test-report:              JUnit report generation
     
        An example of overriding the target for project execution could look like this:
     
            <target name="run" depends="replication-impl.jar">
                <exec dir="bin" executable="launcher.exe">
                    <arg file="${dist.jar}"/>
                </exec>
            </target>
     
        Notice that the overridden target depends on the jar target and not only on 
        the compile target as the regular run target does. Again, for a list of available 
        properties which you can use, check the target you are overriding in the
        nbproject/build-impl.xml file. 
     
        -->
    </project>
    merci pour vos futures réponses.

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    J'ai trouvé une "méthode" temporaire, du coup j'ai implémenté une fonction simplifié (pas d'offset ni de taille ...) de copyLarge, elle est sympa fais son affaire sur des petits fichiers de 400 Mo, mais j'ai peur que pour des fichiers plus gros l'intégrité des données ne soit pas conservée. J'aurais du coup bien voulu votre avis sur ce fait? et si celle ci ne conserve pas l'intégrité des données, j'aurais bien voulu avoir quelques uns de vos conseils


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    public class streamcopy {
     
        /**
         * Cette méthode va nous permettre de pouvoir copier un flux dans un autre, par exemple grâce à celle ci je pourrais à partir d'un flux de données envoyé par un autre ordinateur je pourrais reconstituer fichier (pour pallier les soucis rencontrer avec la classe IOUtils) 
         * @param in flux de données entrante
         * @param out flux de données sortante
         * @return entier pour dire que le transfert est terminé
         * @throws IOException 
         */
        public static int forward(InputStream in, OutputStream out) throws IOException
        {
        	System.out.println("debut de trasnfert");
            byte buf[] = new byte[1024];
     
            int n;
            while((n=in.read(buf))!=-1)
                out.write(buf,0,n);
            System.out.println("fin de trasnfert");    
                return 1;
        }
     
    }

  9. #9
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    La librairie en question est commons-io http://commons.apache.org/proper/com...o/IOUtils.html

    et l'import est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    import org.apache.commons.io.IOUtils
    Les import en sun, tu laisse tomber, c'est jamais bon à faire. Quand à commons compress, il est évident que l'on ne fais pas de la compression là

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Bon aller dernier problème et promis j’arrête de vous embêter Bon j'ai téléchargé la librairie "Commons IO 2.4" et je l'ai ajouté à ma librairie (vu que je suis sur netbeans : j'ai fais clique droit sur libraries et puis j'ai cliquer sur Add JAR/folder et ajouter "commons-io-2.4.jar"), puis j'ai fais l'import que tu m'avais conseiller (j'avais même pas tilter sur pour le compress ). Mais voilà je ne comprends pas pourquoi il ne trouve pas la méthode copyLarge, voilà ce que j'obtiens lorsque je compile :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    /home/theault/NetBeansProjects/replication/src/replication/ThreadConnection.java:90: error: no suitable method found for copyLarge(OutputStream,DataInputStream,long,long)
             IOUtils.copyLarge(out,dataIn,0L,size);
        method IOUtils.copyLarge(Reader,Writer,long,long,char[]) is not applicable
          (actual and formal argument lists differ in length)
        method IOUtils.copyLarge(Reader,Writer,long,long) is not applicable
          (actual argument OutputStream cannot be converted to Reader by method invocation conversion)
        method IOUtils.copyLarge(Reader,Writer,char[]) is not applicable
          (actual and formal argument lists differ in length)
        method IOUtils.copyLarge(Reader,Writer) is not applicable
          (actual and formal argument lists differ in length)
        method IOUtils.copyLarge(InputStream,OutputStream,long,long,byte[]) is not applicable
          (actual and formal argument lists differ in length)
        method IOUtils.copyLarge(InputStream,OutputStream,long,long) is not applicable
          (actual argument OutputStream cannot be converted to InputStream by method invocation conversion)
        method IOUtils.copyLarge(InputStream,OutputStream,byte[]) is not applicable
          (actual and formal argument lists differ in length)
        method IOUtils.copyLarge(InputStream,OutputStream) is not applicable
          (actual and formal argument lists differ in length)
    Note: /home/theault/NetBeansProjects/replication/src/replication/ServerPeertoPeer.java uses unchecked or unsafe operations.
    Note: Recompile with -Xlint:unchecked for details.
    1 error
    Après promis j'arrête d'être chiant

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Alors j'ai réécris la ligne, mais vraiment exactement la même " IOUtils.copyLarge(out,dataIn,0L,size); ", et je ne sais pas par quel maléfice cela a marché En tout cas merci à tous pour vos réponses

  12. #12
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    no suitable method found for copyLarge(OutputStream,DataInputStream,long,long)
    La méthode, c'est copyLarge(input,output,offset,length), visiblement, l'input et l'output sont inversé dans l'appel

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réplication de données
    Par Romers dans le forum Réplications
    Réponses: 3
    Dernier message: 15/05/2008, 12h57
  2. Réplication de données MS-SQL
    Par malves dans le forum Réplications
    Réponses: 3
    Dernier message: 16/01/2008, 12h19
  3. Réplication de données via des MV entre 9i et 10g
    Par jml50 dans le forum Administration
    Réponses: 1
    Dernier message: 15/06/2007, 13h10
  4. Réplication de données ACCESS - ORACLE
    Par pyfux69 dans le forum Access
    Réponses: 2
    Dernier message: 01/03/2007, 22h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo