Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

COPIE D'UNE BASE SQL SERVER 2005

1 réponse
Avatar
Paulin BANTO
Bonjour à tous

Je développe une application avec un frontal Access ADP et une base SQL
SERVEUR 2005.
Je dois écrire une routine qui effectue une copie de ma base B1 en une base
historique B2 sur le même serveur.
Les fichiers MDF et LOG doivent être dans le même dossier que la base B1 et
la base B2 doit être attaché au même serveur.
J'ai cherché j'ai fini par utiliser le composant SQL DMO dans le code
suivant.

Public Function CopyDB(ByVal strServer, ByVal strSourceDB As String, ByVal
strDestDB As String)

Dim oSQLServer As SQLDMO.SQLServer2
Dim oDB As SQLDMO.Database2
Dim oTransSpec As SQLDMO.Transfer
Dim dbSrc As New SQLDMO.Database
Set oSQLServer = New SQLDMO.SQLServer2
Set oDB = New SQLDMO.Database2

Set oTransSpec = New SQLDMO.Transfer
With oTransSpec
.DestServer = strServer
.DestDatabase = strDestDB
.DestUseTrustedConnection = True
.CopyAllObjects = True
.CopyData = SQLDMOCopyData_Replace
.DropDestObjectsFirst = True
.Script2Type = SQLDMOScript2_AnsiFile
.CopySchema = True
End With

oSQLServer.LoginSecure = True
oSQLServer.Connect strServer
Set dbSrc = objSQLServerDMO.Databases(strSourceDB)
oSQLServer.Databases.Add oDB
oSQLServer.Databases(strSourceDB).ScriptTransfer oTransSpec

'============================================================="
oSQLServer.Databases(strSourceDB).Transfer oTransSpec
"============================================================="

oSQLServer.Disconnect

Set oDB = Nothing
Set dbSrc = Nothing
Set oTransSpec = Nothing
Set oSQLServer = Nothing

End Function


Quand exécute cette routine (trouvée sur internet) la base B2 est créé avec
tous les objets (Tables vides, et tous les autre objets). Mais
l'instruction de transfert des données
(oSQLServer.Databases(strSourceDB).Transfer oTransSpec)
et rien ne se passe. Je ne comprends pas et je rame depuis trois semaines la
dessus.

Quelqu'un pourrait il m'aider ? Avez vous déjà rencontré un problème
similaire ?

Je vous remercie par avance.

1 réponse

Avatar
Fred BROUARD
Il serait infiniment plus simple de faire cela en Transact SQL...

Exemple : (votre base s'apelle B1.

DECLARE @SQL VARCHAR(8000);

SET @SQL = 'RESTORE DATABASE B2 '
+ 'FROM DISK = ''C:SAUVERGARDES_DB_SQLMaSauvegardeB1.BAK'' '
+ 'WITH REPLACE, ';

SELECT @SQL = @SQL + ' MOVE ''' + RTRIM(name) +''' TO '''
+ SUBSTRING(filename, 1, LEN(filename) - 4) + '_copy'
+ SUBSTRING(filename, LEN(filename) - 3, 4) +''', '
FROM B1.dbo.sysfiles;

BACKUP DATABASE B1 TO DISK = 'C:SAUVERGARDES_DB_SQLMaSauvegardeB1.BAK'
WITH INIT, FORMAT;

SET @SQL = SUBSTRING(@SQL, 1, LEN(@SQL) -1);

EXEC (@SQL);


Ce script est valable pour 2000 comme 2005. SI vous voulez une version
2005 => 2008 changez la table sysfiles par sa nouvelle version 2005.

A +

--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
*********************** http://www.sqlspot.com *************************



Paulin BANTO a écrit :
Bonjour à tous

Je développe une application avec un frontal Access ADP et une base SQL
SERVEUR 2005.
Je dois écrire une routine qui effectue une copie de ma base B1 en une base
historique B2 sur le même serveur.
Les fichiers MDF et LOG doivent être dans le même dossier que la base B1 et
la base B2 doit être attaché au même serveur.
J'ai cherché j'ai fini par utiliser le composant SQL DMO dans le code
suivant.

Public Function CopyDB(ByVal strServer, ByVal strSourceDB As String, ByVal
strDestDB As String)

Dim oSQLServer As SQLDMO.SQLServer2
Dim oDB As SQLDMO.Database2
Dim oTransSpec As SQLDMO.Transfer
Dim dbSrc As New SQLDMO.Database
Set oSQLServer = New SQLDMO.SQLServer2
Set oDB = New SQLDMO.Database2

Set oTransSpec = New SQLDMO.Transfer
With oTransSpec
.DestServer = strServer
.DestDatabase = strDestDB
.DestUseTrustedConnection = True
.CopyAllObjects = True
.CopyData = SQLDMOCopyData_Replace
.DropDestObjectsFirst = True
.Script2Type = SQLDMOScript2_AnsiFile
.CopySchema = True
End With

oSQLServer.LoginSecure = True
oSQLServer.Connect strServer
Set dbSrc = objSQLServerDMO.Databases(strSourceDB)
oSQLServer.Databases.Add oDB
oSQLServer.Databases(strSourceDB).ScriptTransfer oTransSpec

'============================================================="
oSQLServer.Databases(strSourceDB).Transfer oTransSpec
"============================================================="

oSQLServer.Disconnect

Set oDB = Nothing
Set dbSrc = Nothing
Set oTransSpec = Nothing
Set oSQLServer = Nothing

End Function


Quand exécute cette routine (trouvée sur internet) la base B2 est créé avec
tous les objets (Tables vides, et tous les autre objets). Mais
l'instruction de transfert des données
(oSQLServer.Databases(strSourceDB).Transfer oTransSpec)
et rien ne se passe. Je ne comprends pas et je rame depuis trois
semaines la
dessus.

Quelqu'un pourrait il m'aider ? Avez vous déjà rencontré un problème
similaire ?

Je vous remercie par avance.