Bonjour,

Je fait un programme de copie de base Oracle, j'execute le programme tout les soir grâce à une tâche planifier.

Problème : les copies sont très longue et les tables très grosses.

J'aimerais savoir s'il y a une méthode plus optimisé que celle que j'ai :

En gros je crée une connection sur les 2 bases, (pour l'instant c'est dans une base access que j'envoie mes données c'est pour les test)


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
 
Dim LDaOracle As OleDbDataAdapter
        Dim LDtOracle As New DataTable
        Dim LDrOracle As DataRow
        Dim cmd, cmd2 As New OleDb.OleDbCommand
        P_cnOracle = New OleDbConnection("Provider=MSDAORA.0; Data Source=Base1;User Id=****;Password=*****;")
        P_cnAccess.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= C:\mabase2.mdb;"
        P_cnAccess.Open()
        If P_cnOracle.State = ConnectionState.Broken Then P_cnOracle.Close()
        If P_cnOracle.State = ConnectionState.Closed Then
            Try
                P_cnOracle.Open()
            Catch
                MsgBox("Impossible de se connecter à la base : Base1", vbAbort, "ERREUR")
            End Try
        End If
        cmd.Connection() = P_cnAccess
        LDaOracle = New OleDbDataAdapter("SELECT * FROM tablebase1", P_cnOracle)
        LDaOracle.Fill(LDtOracle)
 
        If LDtOracle.Rows.Count > 0 Then
            For Each LDrOracle In LDtOracle.Rows
 
                cmd.CommandText = "INSERT INTO TableBase2Access (colonne1, colonne2, colenne3, colonne4,colonne5, colonne6, colonne7, colenne8, colonne9, colonne10, colonne11, colonne12, colonne13, colonne14, colenne15) VALUES " & _
                                   "('" & LDrOracle("colonne1").ToString & "'" & _
                                   ", '" & LDrOracle("colonne2").ToString & "'" & _
                                  ", '" & LDrOracle("colonne3").ToString & "'" & _
                                   ", '" & LDrOracle("colonne4").ToString & "'" & _
                                    ", '" & LDrOracle("colonne5").ToString & "'" & _
                                    ", '" & LDrOracle("colonne6").ToString & "'" & _
                                    ", '" & LDrOracle("colonne7").ToString & "'" & _
                                   ", '" & LDrOracle("colonne8").ToString & "'" & _
                                    ", '" & LDrOracle("colonne9").ToString & "'" & _
                                    ", '" & LDrOracle("colonne10").ToString & "'" & _
                                    ", '" & LDrOracle("colonne11").ToString & "'" & _
                                    ", '" & LDrOracle("colonne12").ToString & "'" & _
                                    ", '" & LDrOracle("colonne13").ToString & "'" & _
                                    ", '" & LDrOracle("colonne14").ToString & "'" & _
                                    ", '" & LDrOracle("colonne15").ToString & "')"
                cmd.ExecuteNonQuery()
            Next
        End If
    End Sub
Imaginez ce code pour 50 tables de ma base 1, c'est un peu lourd (un peu )
Peut être y'a t-il mieux à faire ?

En faite j'ai ma première base qui est purger tout les 2 mois pour que les requêtes soit plus rapide pour les utilisateurs, et pour avoir un historique il faut avoir une base qui est une fourchette de donnée d'environ 3 ans, il faut donc que tout les jours j'envoie les données d'une base vers l'autre ( c'est envoie doit être planifier vers 00h)

Merci d'avance