Bonjour à Tous
Il ya quelques semaines je cherchais comment faire la copie d'une base de
données SQL Serveur. En réponse FRED BROUARD m'a donné une des
instructions et j'ai pu mettre au point la procédure stockée suivante :
PROCEDURE [MAster].[dbo].[SAUVEGARDE_DATABASE_ACTIVE]
(
@DBSCR Varchar(800),
@DBDEST Varchar(800),
@ERREUR Int OUTPUT
)
AS
Begin
Declare @SQL Varchar(8000)
Declare @SQLBCKP Varchar(8000)
Declare @DBDOS Varchar(8000)
Declare @FBCKP Varchar(8000)
Declare FInit Cursor For
Select Replace(FileName, Reverse(Substring(Reverse(FileName), 0,
CharIndex('', Reverse(FileName), 1))),'') AS DBDOS,
Substring( Replace(FileName, Reverse(Substring(Reverse(FileName), 0,
CharIndex('', Reverse(FileName), 1))),'') +
Reverse(Substring(Reverse(FileName), 0, CharIndex('', Reverse(FileName),
1))),1, LEN(Replace(FileName, Reverse(Substring(Reverse(FileName), 0,
CharIndex('', Reverse(FileName), 1))),'') +
Reverse(Substring(Reverse(FileName), 0, CharIndex('', Reverse(FileName),
1)))) -4) + '.BAK' AS FBCKP
From master..sysaltfiles Where Name=@DBSCR AND Fileid=1
Set @ERREUR=1
Open FInit
Fetch Next From FInit Into @DBDOS, @FBCKP
If @@Fetch_Status=0
Begin
Set @SQL = 'Restore Database ' + @DBDEST + ' From Disk = ''' + @FBCKP +
''' With Replace, File = 1,'
Select @SQL = @SQL + ' Move ''' + Rtrim(Name) + ''' To ''' + '' +
@DBDOS+@DBDEST + '' + Substring(fileName, LEN(fileName) - 3, 4) + ''','
From master..sysaltfiles Where dbid=(SELECT dbid From SysDatabases Where
Name=@DBSCR);
Set @SQL = Substring(@SQL, 1, LEN(@SQL) -1);
Set @SQLBCKP ='Backup Database ' + @DBSCR + ' TO Disk =''' + @FBCKP + '''
With Init, Format;'
Execute (@SQLBCKP);
If @@Error=0
Begin
Execute (@SQL)
Set @ERREUR=@@Error
Set @SQL = 'master.dbo.xp_cmdshell ''Del '+ @FBCKP +''', NO_OUTPUT '
Execute (@SQL)
End
End
Close FInit
Deallocate FInit
End
Cette procédure reçoit @DBSRC (Nom de base de donnée source) et @DBDEST
(Nom de base de données destination). Elle permet de copier une base B1 en
une base B2 avec les fichiers ldf et mdf de B2 sont dans le même dossier
que les fichier ldf et mdf de B1 puis elle retourne @Erreur pour indiquer
une erreur s'il y en a.
Quand j'execute cette procédure dans Management Studio avec
DELCARE @ERR,
Execute [MAster].[dbo].[SAUVEGARDE_DATABASE_ACTIVE] 'B1','B2', @ERREUR =
@ERR OUTPUT
Select @ERR
Tout ce passe tres bien comme je veux et j'ai en retour 0.
Jusque là pas de soucis....
Par contre quand j'appelle la procedure de mon application VBA par le code
distant suivant :
DBSRC="B1"
DBDEST="B1"
Cmd.CommandType = adCmdStoredProc
Cmd.CommandType = "Master.dbo.SAUVEGARDE_DATABASE_ACTIVE"
Set oParam = Cmd.CreateParameter("DBSCR", adChar, adParamInput,
8000, DBSRC)
Call Cmd.Parameters.Append(oParam)
Set oParam = Cmd.CreateParameter("DBDEST", adChar,
adParamInput, 8000, DBDEST)
Call Cmd.Parameters.Append(oParam)
Set oParam = Cmd.CreateParameter("ERREUR", adInteger,
adParamOutput, , 0)
Call Cmd.Parameters.Append(oParam)
Cmd.Execute
Erreur = Cmd.Parameters.Item("ERREUR").Value
J'ai en retour il commence à me faire un backup puis arrête et me ramène
le code Erreur 3013.(Serveur: Msg 3013, Niveau 16, État 1, Ligne 1
BACKUP DATABASE se termine de façon anormale).
Mon utilisateur a les pleins droits sur la base y compris en Backup
J'ai cherché pendant des heures mais je ne trouve rien qui m'explique que
ca marche dans studio management et que non dans mon code.
Si quelqu'un a une idée j'aimerais qu'il me donne des conseils pour que je
ne m'arrache plus les cheveux (Déjà qu'il n'y en pas beaucoup ....)
Merci par avance.
Bonjour à Tous
Il ya quelques semaines je cherchais comment faire la copie d'une base de
données SQL Serveur. En réponse FRED BROUARD m'a donné une des
instructions et j'ai pu mettre au point la procédure stockée suivante :
PROCEDURE [MAster].[dbo].[SAUVEGARDE_DATABASE_ACTIVE]
(
@DBSCR Varchar(800),
@DBDEST Varchar(800),
@ERREUR Int OUTPUT
)
AS
Begin
Declare @SQL Varchar(8000)
Declare @SQLBCKP Varchar(8000)
Declare @DBDOS Varchar(8000)
Declare @FBCKP Varchar(8000)
Declare FInit Cursor For
Select Replace(FileName, Reverse(Substring(Reverse(FileName), 0,
CharIndex('', Reverse(FileName), 1))),'') AS DBDOS,
Substring( Replace(FileName, Reverse(Substring(Reverse(FileName), 0,
CharIndex('', Reverse(FileName), 1))),'') +
Reverse(Substring(Reverse(FileName), 0, CharIndex('', Reverse(FileName),
1))),1, LEN(Replace(FileName, Reverse(Substring(Reverse(FileName), 0,
CharIndex('', Reverse(FileName), 1))),'') +
Reverse(Substring(Reverse(FileName), 0, CharIndex('', Reverse(FileName),
1)))) -4) + '.BAK' AS FBCKP
From master..sysaltfiles Where Name=@DBSCR AND Fileid=1
Set @ERREUR=1
Open FInit
Fetch Next From FInit Into @DBDOS, @FBCKP
If @@Fetch_Status=0
Begin
Set @SQL = 'Restore Database ' + @DBDEST + ' From Disk = ''' + @FBCKP +
''' With Replace, File = 1,'
Select @SQL = @SQL + ' Move ''' + Rtrim(Name) + ''' To ''' + '' +
@DBDOS+@DBDEST + '' + Substring(fileName, LEN(fileName) - 3, 4) + ''','
From master..sysaltfiles Where dbid=(SELECT dbid From SysDatabases Where
Name=@DBSCR);
Set @SQL = Substring(@SQL, 1, LEN(@SQL) -1);
Set @SQLBCKP ='Backup Database ' + @DBSCR + ' TO Disk =''' + @FBCKP + '''
With Init, Format;'
Execute (@SQLBCKP);
If @@Error=0
Begin
Execute (@SQL)
Set @ERREUR=@@Error
Set @SQL = 'master.dbo.xp_cmdshell ''Del '+ @FBCKP +''', NO_OUTPUT '
Execute (@SQL)
End
End
Close FInit
Deallocate FInit
End
Cette procédure reçoit @DBSRC (Nom de base de donnée source) et @DBDEST
(Nom de base de données destination). Elle permet de copier une base B1 en
une base B2 avec les fichiers ldf et mdf de B2 sont dans le même dossier
que les fichier ldf et mdf de B1 puis elle retourne @Erreur pour indiquer
une erreur s'il y en a.
Quand j'execute cette procédure dans Management Studio avec
DELCARE @ERR,
Execute [MAster].[dbo].[SAUVEGARDE_DATABASE_ACTIVE] 'B1','B2', @ERREUR =
@ERR OUTPUT
Select @ERR
Tout ce passe tres bien comme je veux et j'ai en retour 0.
Jusque là pas de soucis....
Par contre quand j'appelle la procedure de mon application VBA par le code
distant suivant :
DBSRC="B1"
DBDEST="B1"
Cmd.CommandType = adCmdStoredProc
Cmd.CommandType = "Master.dbo.SAUVEGARDE_DATABASE_ACTIVE"
Set oParam = Cmd.CreateParameter("DBSCR", adChar, adParamInput,
8000, DBSRC)
Call Cmd.Parameters.Append(oParam)
Set oParam = Cmd.CreateParameter("DBDEST", adChar,
adParamInput, 8000, DBDEST)
Call Cmd.Parameters.Append(oParam)
Set oParam = Cmd.CreateParameter("ERREUR", adInteger,
adParamOutput, , 0)
Call Cmd.Parameters.Append(oParam)
Cmd.Execute
Erreur = Cmd.Parameters.Item("ERREUR").Value
J'ai en retour il commence à me faire un backup puis arrête et me ramène
le code Erreur 3013.(Serveur: Msg 3013, Niveau 16, État 1, Ligne 1
BACKUP DATABASE se termine de façon anormale).
Mon utilisateur a les pleins droits sur la base y compris en Backup
J'ai cherché pendant des heures mais je ne trouve rien qui m'explique que
ca marche dans studio management et que non dans mon code.
Si quelqu'un a une idée j'aimerais qu'il me donne des conseils pour que je
ne m'arrache plus les cheveux (Déjà qu'il n'y en pas beaucoup ....)
Merci par avance.
Bonjour à Tous
Il ya quelques semaines je cherchais comment faire la copie d'une base de
données SQL Serveur. En réponse FRED BROUARD m'a donné une des
instructions et j'ai pu mettre au point la procédure stockée suivante :
PROCEDURE [MAster].[dbo].[SAUVEGARDE_DATABASE_ACTIVE]
(
@DBSCR Varchar(800),
@DBDEST Varchar(800),
@ERREUR Int OUTPUT
)
AS
Begin
Declare @SQL Varchar(8000)
Declare @SQLBCKP Varchar(8000)
Declare @DBDOS Varchar(8000)
Declare @FBCKP Varchar(8000)
Declare FInit Cursor For
Select Replace(FileName, Reverse(Substring(Reverse(FileName), 0,
CharIndex('', Reverse(FileName), 1))),'') AS DBDOS,
Substring( Replace(FileName, Reverse(Substring(Reverse(FileName), 0,
CharIndex('', Reverse(FileName), 1))),'') +
Reverse(Substring(Reverse(FileName), 0, CharIndex('', Reverse(FileName),
1))),1, LEN(Replace(FileName, Reverse(Substring(Reverse(FileName), 0,
CharIndex('', Reverse(FileName), 1))),'') +
Reverse(Substring(Reverse(FileName), 0, CharIndex('', Reverse(FileName),
1)))) -4) + '.BAK' AS FBCKP
From master..sysaltfiles Where Name=@DBSCR AND Fileid=1
Set @ERREUR=1
Open FInit
Fetch Next From FInit Into @DBDOS, @FBCKP
If @@Fetch_Status=0
Begin
Set @SQL = 'Restore Database ' + @DBDEST + ' From Disk = ''' + @FBCKP +
''' With Replace, File = 1,'
Select @SQL = @SQL + ' Move ''' + Rtrim(Name) + ''' To ''' + '' +
@DBDOS+@DBDEST + '' + Substring(fileName, LEN(fileName) - 3, 4) + ''','
From master..sysaltfiles Where dbid=(SELECT dbid From SysDatabases Where
Name=@DBSCR);
Set @SQL = Substring(@SQL, 1, LEN(@SQL) -1);
Set @SQLBCKP ='Backup Database ' + @DBSCR + ' TO Disk =''' + @FBCKP + '''
With Init, Format;'
Execute (@SQLBCKP);
If @@Error=0
Begin
Execute (@SQL)
Set @ERREUR=@@Error
Set @SQL = 'master.dbo.xp_cmdshell ''Del '+ @FBCKP +''', NO_OUTPUT '
Execute (@SQL)
End
End
Close FInit
Deallocate FInit
End
Cette procédure reçoit @DBSRC (Nom de base de donnée source) et @DBDEST
(Nom de base de données destination). Elle permet de copier une base B1 en
une base B2 avec les fichiers ldf et mdf de B2 sont dans le même dossier
que les fichier ldf et mdf de B1 puis elle retourne @Erreur pour indiquer
une erreur s'il y en a.
Quand j'execute cette procédure dans Management Studio avec
DELCARE @ERR,
Execute [MAster].[dbo].[SAUVEGARDE_DATABASE_ACTIVE] 'B1','B2', @ERREUR =
@ERR OUTPUT
Select @ERR
Tout ce passe tres bien comme je veux et j'ai en retour 0.
Jusque là pas de soucis....
Par contre quand j'appelle la procedure de mon application VBA par le code
distant suivant :
DBSRC="B1"
DBDEST="B1"
Cmd.CommandType = adCmdStoredProc
Cmd.CommandType = "Master.dbo.SAUVEGARDE_DATABASE_ACTIVE"
Set oParam = Cmd.CreateParameter("DBSCR", adChar, adParamInput,
8000, DBSRC)
Call Cmd.Parameters.Append(oParam)
Set oParam = Cmd.CreateParameter("DBDEST", adChar,
adParamInput, 8000, DBDEST)
Call Cmd.Parameters.Append(oParam)
Set oParam = Cmd.CreateParameter("ERREUR", adInteger,
adParamOutput, , 0)
Call Cmd.Parameters.Append(oParam)
Cmd.Execute
Erreur = Cmd.Parameters.Item("ERREUR").Value
J'ai en retour il commence à me faire un backup puis arrête et me ramène
le code Erreur 3013.(Serveur: Msg 3013, Niveau 16, État 1, Ligne 1
BACKUP DATABASE se termine de façon anormale).
Mon utilisateur a les pleins droits sur la base y compris en Backup
J'ai cherché pendant des heures mais je ne trouve rien qui m'explique que
ca marche dans studio management et que non dans mon code.
Si quelqu'un a une idée j'aimerais qu'il me donne des conseils pour que je
ne m'arrache plus les cheveux (Déjà qu'il n'y en pas beaucoup ....)
Merci par avance.
Regarde dans le log SQL Server ou encore Windows s'il n'y a pas un message
plus parlant
D'autre part, appeler ce genre de code depuis VBA n'est pas ce que je
recommendeerais
Tu aurais du utiliser SQLDMO, c'est fait exactement pour ce genre de
besoins
Bien cordialement
Med bouchenafa
"Paulin BANTO" wrote in message
news:Bonjour à Tous
Il ya quelques semaines je cherchais comment faire la copie d'une base de
données SQL Serveur. En réponse FRED BROUARD m'a donné une des
instructions et j'ai pu mettre au point la procédure stockée suivante :
PROCEDURE [MAster].[dbo].[SAUVEGARDE_DATABASE_ACTIVE]
(
@DBSCR Varchar(800),
@DBDEST Varchar(800),
@ERREUR Int OUTPUT
)
AS
Begin
Declare @SQL Varchar(8000)
Declare @SQLBCKP Varchar(8000)
Declare @DBDOS Varchar(8000)
Declare @FBCKP Varchar(8000)
Declare FInit Cursor For
Select Replace(FileName, Reverse(Substring(Reverse(FileName), 0,
CharIndex('', Reverse(FileName), 1))),'') AS DBDOS,
Substring( Replace(FileName, Reverse(Substring(Reverse(FileName), 0,
CharIndex('', Reverse(FileName), 1))),'') +
Reverse(Substring(Reverse(FileName), 0, CharIndex('', Reverse(FileName),
1))),1, LEN(Replace(FileName, Reverse(Substring(Reverse(FileName), 0,
CharIndex('', Reverse(FileName), 1))),'') +
Reverse(Substring(Reverse(FileName), 0, CharIndex('', Reverse(FileName),
1)))) -4) + '.BAK' AS FBCKP
From master..sysaltfiles Where Name=@DBSCR AND Fileid=1
Set @ERREUR=1
Open FInit
Fetch Next From FInit Into @DBDOS, @FBCKP
If @@Fetch_Status=0
Begin
Set @SQL = 'Restore Database ' + @DBDEST + ' From Disk = ''' + @FBCKP +
''' With Replace, File = 1,'
Select @SQL = @SQL + ' Move ''' + Rtrim(Name) + ''' To ''' + '' +
@DBDOS+@DBDEST + '' + Substring(fileName, LEN(fileName) - 3, 4) + ''','
From master..sysaltfiles Where dbid=(SELECT dbid From SysDatabases Where
Name=@DBSCR);
Set @SQL = Substring(@SQL, 1, LEN(@SQL) -1);
Set @SQLBCKP ='Backup Database ' + @DBSCR + ' TO Disk =''' + @FBCKP +
''' With Init, Format;'
Execute (@SQLBCKP);
If @@Error=0
Begin
Execute (@SQL)
Set @ERREUR=@@Error
Set @SQL = 'master.dbo.xp_cmdshell ''Del '+ @FBCKP +''', NO_OUTPUT '
Execute (@SQL)
End
End
Close FInit
Deallocate FInit
End
Cette procédure reçoit @DBSRC (Nom de base de donnée source) et @DBDEST
(Nom de base de données destination). Elle permet de copier une base B1
en une base B2 avec les fichiers ldf et mdf de B2 sont dans le même
dossier que les fichier ldf et mdf de B1 puis elle retourne @Erreur pour
indiquer une erreur s'il y en a.
Quand j'execute cette procédure dans Management Studio avec
DELCARE @ERR,
Execute [MAster].[dbo].[SAUVEGARDE_DATABASE_ACTIVE] 'B1','B2', @ERREUR =
@ERR OUTPUT
Select @ERR
Tout ce passe tres bien comme je veux et j'ai en retour 0.
Jusque là pas de soucis....
Par contre quand j'appelle la procedure de mon application VBA par le
code distant suivant :
DBSRC="B1"
DBDEST="B1"
Cmd.CommandType = adCmdStoredProc
Cmd.CommandType = "Master.dbo.SAUVEGARDE_DATABASE_ACTIVE"
Set oParam = Cmd.CreateParameter("DBSCR", adChar,
adParamInput, 8000, DBSRC)
Call Cmd.Parameters.Append(oParam)
Set oParam = Cmd.CreateParameter("DBDEST", adChar,
adParamInput, 8000, DBDEST)
Call Cmd.Parameters.Append(oParam)
Set oParam = Cmd.CreateParameter("ERREUR", adInteger,
adParamOutput, , 0)
Call Cmd.Parameters.Append(oParam)
Cmd.Execute
Erreur = Cmd.Parameters.Item("ERREUR").Value
J'ai en retour il commence à me faire un backup puis arrête et me ramène
le code Erreur 3013.(Serveur: Msg 3013, Niveau 16, État 1, Ligne 1
BACKUP DATABASE se termine de façon anormale).
Mon utilisateur a les pleins droits sur la base y compris en Backup
J'ai cherché pendant des heures mais je ne trouve rien qui m'explique que
ca marche dans studio management et que non dans mon code.
Si quelqu'un a une idée j'aimerais qu'il me donne des conseils pour que
je ne m'arrache plus les cheveux (Déjà qu'il n'y en pas beaucoup ....)
Merci par avance.
Regarde dans le log SQL Server ou encore Windows s'il n'y a pas un message
plus parlant
D'autre part, appeler ce genre de code depuis VBA n'est pas ce que je
recommendeerais
Tu aurais du utiliser SQLDMO, c'est fait exactement pour ce genre de
besoins
Bien cordialement
Med bouchenafa
"Paulin BANTO" <paulin_banto@hotmail.com> wrote in message
news:7582609E-A9B6-44B4-ADAC-D60BA0EB8902@microsoft.com...
Bonjour à Tous
Il ya quelques semaines je cherchais comment faire la copie d'une base de
données SQL Serveur. En réponse FRED BROUARD m'a donné une des
instructions et j'ai pu mettre au point la procédure stockée suivante :
PROCEDURE [MAster].[dbo].[SAUVEGARDE_DATABASE_ACTIVE]
(
@DBSCR Varchar(800),
@DBDEST Varchar(800),
@ERREUR Int OUTPUT
)
AS
Begin
Declare @SQL Varchar(8000)
Declare @SQLBCKP Varchar(8000)
Declare @DBDOS Varchar(8000)
Declare @FBCKP Varchar(8000)
Declare FInit Cursor For
Select Replace(FileName, Reverse(Substring(Reverse(FileName), 0,
CharIndex('', Reverse(FileName), 1))),'') AS DBDOS,
Substring( Replace(FileName, Reverse(Substring(Reverse(FileName), 0,
CharIndex('', Reverse(FileName), 1))),'') +
Reverse(Substring(Reverse(FileName), 0, CharIndex('', Reverse(FileName),
1))),1, LEN(Replace(FileName, Reverse(Substring(Reverse(FileName), 0,
CharIndex('', Reverse(FileName), 1))),'') +
Reverse(Substring(Reverse(FileName), 0, CharIndex('', Reverse(FileName),
1)))) -4) + '.BAK' AS FBCKP
From master..sysaltfiles Where Name=@DBSCR AND Fileid=1
Set @ERREUR=1
Open FInit
Fetch Next From FInit Into @DBDOS, @FBCKP
If @@Fetch_Status=0
Begin
Set @SQL = 'Restore Database ' + @DBDEST + ' From Disk = ''' + @FBCKP +
''' With Replace, File = 1,'
Select @SQL = @SQL + ' Move ''' + Rtrim(Name) + ''' To ''' + '' +
@DBDOS+@DBDEST + '' + Substring(fileName, LEN(fileName) - 3, 4) + ''','
From master..sysaltfiles Where dbid=(SELECT dbid From SysDatabases Where
Name=@DBSCR);
Set @SQL = Substring(@SQL, 1, LEN(@SQL) -1);
Set @SQLBCKP ='Backup Database ' + @DBSCR + ' TO Disk =''' + @FBCKP +
''' With Init, Format;'
Execute (@SQLBCKP);
If @@Error=0
Begin
Execute (@SQL)
Set @ERREUR=@@Error
Set @SQL = 'master.dbo.xp_cmdshell ''Del '+ @FBCKP +''', NO_OUTPUT '
Execute (@SQL)
End
End
Close FInit
Deallocate FInit
End
Cette procédure reçoit @DBSRC (Nom de base de donnée source) et @DBDEST
(Nom de base de données destination). Elle permet de copier une base B1
en une base B2 avec les fichiers ldf et mdf de B2 sont dans le même
dossier que les fichier ldf et mdf de B1 puis elle retourne @Erreur pour
indiquer une erreur s'il y en a.
Quand j'execute cette procédure dans Management Studio avec
DELCARE @ERR,
Execute [MAster].[dbo].[SAUVEGARDE_DATABASE_ACTIVE] 'B1','B2', @ERREUR =
@ERR OUTPUT
Select @ERR
Tout ce passe tres bien comme je veux et j'ai en retour 0.
Jusque là pas de soucis....
Par contre quand j'appelle la procedure de mon application VBA par le
code distant suivant :
DBSRC="B1"
DBDEST="B1"
Cmd.CommandType = adCmdStoredProc
Cmd.CommandType = "Master.dbo.SAUVEGARDE_DATABASE_ACTIVE"
Set oParam = Cmd.CreateParameter("DBSCR", adChar,
adParamInput, 8000, DBSRC)
Call Cmd.Parameters.Append(oParam)
Set oParam = Cmd.CreateParameter("DBDEST", adChar,
adParamInput, 8000, DBDEST)
Call Cmd.Parameters.Append(oParam)
Set oParam = Cmd.CreateParameter("ERREUR", adInteger,
adParamOutput, , 0)
Call Cmd.Parameters.Append(oParam)
Cmd.Execute
Erreur = Cmd.Parameters.Item("ERREUR").Value
J'ai en retour il commence à me faire un backup puis arrête et me ramène
le code Erreur 3013.(Serveur: Msg 3013, Niveau 16, État 1, Ligne 1
BACKUP DATABASE se termine de façon anormale).
Mon utilisateur a les pleins droits sur la base y compris en Backup
J'ai cherché pendant des heures mais je ne trouve rien qui m'explique que
ca marche dans studio management et que non dans mon code.
Si quelqu'un a une idée j'aimerais qu'il me donne des conseils pour que
je ne m'arrache plus les cheveux (Déjà qu'il n'y en pas beaucoup ....)
Merci par avance.
Regarde dans le log SQL Server ou encore Windows s'il n'y a pas un message
plus parlant
D'autre part, appeler ce genre de code depuis VBA n'est pas ce que je
recommendeerais
Tu aurais du utiliser SQLDMO, c'est fait exactement pour ce genre de
besoins
Bien cordialement
Med bouchenafa
"Paulin BANTO" wrote in message
news:Bonjour à Tous
Il ya quelques semaines je cherchais comment faire la copie d'une base de
données SQL Serveur. En réponse FRED BROUARD m'a donné une des
instructions et j'ai pu mettre au point la procédure stockée suivante :
PROCEDURE [MAster].[dbo].[SAUVEGARDE_DATABASE_ACTIVE]
(
@DBSCR Varchar(800),
@DBDEST Varchar(800),
@ERREUR Int OUTPUT
)
AS
Begin
Declare @SQL Varchar(8000)
Declare @SQLBCKP Varchar(8000)
Declare @DBDOS Varchar(8000)
Declare @FBCKP Varchar(8000)
Declare FInit Cursor For
Select Replace(FileName, Reverse(Substring(Reverse(FileName), 0,
CharIndex('', Reverse(FileName), 1))),'') AS DBDOS,
Substring( Replace(FileName, Reverse(Substring(Reverse(FileName), 0,
CharIndex('', Reverse(FileName), 1))),'') +
Reverse(Substring(Reverse(FileName), 0, CharIndex('', Reverse(FileName),
1))),1, LEN(Replace(FileName, Reverse(Substring(Reverse(FileName), 0,
CharIndex('', Reverse(FileName), 1))),'') +
Reverse(Substring(Reverse(FileName), 0, CharIndex('', Reverse(FileName),
1)))) -4) + '.BAK' AS FBCKP
From master..sysaltfiles Where Name=@DBSCR AND Fileid=1
Set @ERREUR=1
Open FInit
Fetch Next From FInit Into @DBDOS, @FBCKP
If @@Fetch_Status=0
Begin
Set @SQL = 'Restore Database ' + @DBDEST + ' From Disk = ''' + @FBCKP +
''' With Replace, File = 1,'
Select @SQL = @SQL + ' Move ''' + Rtrim(Name) + ''' To ''' + '' +
@DBDOS+@DBDEST + '' + Substring(fileName, LEN(fileName) - 3, 4) + ''','
From master..sysaltfiles Where dbid=(SELECT dbid From SysDatabases Where
Name=@DBSCR);
Set @SQL = Substring(@SQL, 1, LEN(@SQL) -1);
Set @SQLBCKP ='Backup Database ' + @DBSCR + ' TO Disk =''' + @FBCKP +
''' With Init, Format;'
Execute (@SQLBCKP);
If @@Error=0
Begin
Execute (@SQL)
Set @ERREUR=@@Error
Set @SQL = 'master.dbo.xp_cmdshell ''Del '+ @FBCKP +''', NO_OUTPUT '
Execute (@SQL)
End
End
Close FInit
Deallocate FInit
End
Cette procédure reçoit @DBSRC (Nom de base de donnée source) et @DBDEST
(Nom de base de données destination). Elle permet de copier une base B1
en une base B2 avec les fichiers ldf et mdf de B2 sont dans le même
dossier que les fichier ldf et mdf de B1 puis elle retourne @Erreur pour
indiquer une erreur s'il y en a.
Quand j'execute cette procédure dans Management Studio avec
DELCARE @ERR,
Execute [MAster].[dbo].[SAUVEGARDE_DATABASE_ACTIVE] 'B1','B2', @ERREUR =
@ERR OUTPUT
Select @ERR
Tout ce passe tres bien comme je veux et j'ai en retour 0.
Jusque là pas de soucis....
Par contre quand j'appelle la procedure de mon application VBA par le
code distant suivant :
DBSRC="B1"
DBDEST="B1"
Cmd.CommandType = adCmdStoredProc
Cmd.CommandType = "Master.dbo.SAUVEGARDE_DATABASE_ACTIVE"
Set oParam = Cmd.CreateParameter("DBSCR", adChar,
adParamInput, 8000, DBSRC)
Call Cmd.Parameters.Append(oParam)
Set oParam = Cmd.CreateParameter("DBDEST", adChar,
adParamInput, 8000, DBDEST)
Call Cmd.Parameters.Append(oParam)
Set oParam = Cmd.CreateParameter("ERREUR", adInteger,
adParamOutput, , 0)
Call Cmd.Parameters.Append(oParam)
Cmd.Execute
Erreur = Cmd.Parameters.Item("ERREUR").Value
J'ai en retour il commence à me faire un backup puis arrête et me ramène
le code Erreur 3013.(Serveur: Msg 3013, Niveau 16, État 1, Ligne 1
BACKUP DATABASE se termine de façon anormale).
Mon utilisateur a les pleins droits sur la base y compris en Backup
J'ai cherché pendant des heures mais je ne trouve rien qui m'explique que
ca marche dans studio management et que non dans mon code.
Si quelqu'un a une idée j'aimerais qu'il me donne des conseils pour que
je ne m'arrache plus les cheveux (Déjà qu'il n'y en pas beaucoup ....)
Merci par avance.
Bonjour
En effet j'ai été dans le log de SQL serveur et j'ai les détails suivants
1) 12/20/2008 21:34:55,,Unknown,Database backed up. Database: COMPTA<c/>
creation date(time): 2008/10/14(16:50:10)<c/> pages dumped: 112530<c/>
first LSN: 182:4138:37<c/> last LSN: 182:4154:1<c/> number of dump
devices: 1<c/> device information: (FILE=1<c/> TYPE=DISK:
{'D:DATASSQLDATASCOMPTA.BAK'}). This is an informational message only.
No user action is required.,
2) Pour ce qui est de SQLDMO J'avais en effet fait des recherches et
j'avais mis au point une procedure dans VBA qui appelle
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 plusieurs
semaines la
dessus.
3) Pour finir dans ma routine de clôture d'exercice ou de période
commerciale je dois faire une sauvegarde des bases active. Un traitement
doit être effectué afin d'avoir les mouvements de l'exercice N-1 ou de la
période N-1 En ligne pour une consultation.
Je vous serai infiniment reconnaissant si vous pouviez me donner un coup
de main.
Merci par avance
"Med Bouchenafa" a écrit dans le message de
groupe de discussion : #Regarde dans le log SQL Server ou encore Windows s'il n'y a pas un
message plus parlant
D'autre part, appeler ce genre de code depuis VBA n'est pas ce que je
recommendeerais
Tu aurais du utiliser SQLDMO, c'est fait exactement pour ce genre de
besoins
Bien cordialement
Med bouchenafa
"Paulin BANTO" wrote in message
news:Bonjour à Tous
Il ya quelques semaines je cherchais comment faire la copie d'une base
de données SQL Serveur. En réponse FRED BROUARD m'a donné une des
instructions et j'ai pu mettre au point la procédure stockée suivante :
PROCEDURE [MAster].[dbo].[SAUVEGARDE_DATABASE_ACTIVE]
(
@DBSCR Varchar(800),
@DBDEST Varchar(800),
@ERREUR Int OUTPUT
)
AS
Begin
Declare @SQL Varchar(8000)
Declare @SQLBCKP Varchar(8000)
Declare @DBDOS Varchar(8000)
Declare @FBCKP Varchar(8000)
Declare FInit Cursor For
Select Replace(FileName, Reverse(Substring(Reverse(FileName), 0,
CharIndex('', Reverse(FileName), 1))),'') AS DBDOS,
Substring( Replace(FileName, Reverse(Substring(Reverse(FileName), 0,
CharIndex('', Reverse(FileName), 1))),'') +
Reverse(Substring(Reverse(FileName), 0, CharIndex('',
Reverse(FileName), 1))),1, LEN(Replace(FileName,
Reverse(Substring(Reverse(FileName), 0, CharIndex('',
Reverse(FileName), 1))),'') + Reverse(Substring(Reverse(FileName), 0,
CharIndex('', Reverse(FileName), 1)))) -4) + '.BAK' AS FBCKP
From master..sysaltfiles Where Name=@DBSCR AND Fileid=1
Set @ERREUR=1
Open FInit
Fetch Next From FInit Into @DBDOS, @FBCKP
If @@Fetch_Status=0
Begin
Set @SQL = 'Restore Database ' + @DBDEST + ' From Disk = ''' + @FBCKP +
''' With Replace, File = 1,'
Select @SQL = @SQL + ' Move ''' + Rtrim(Name) + ''' To ''' + '' +
@DBDOS+@DBDEST + '' + Substring(fileName, LEN(fileName) - 3, 4) + ''','
From master..sysaltfiles Where dbid=(SELECT dbid From SysDatabases Where
Name=@DBSCR);
Set @SQL = Substring(@SQL, 1, LEN(@SQL) -1);
Set @SQLBCKP ='Backup Database ' + @DBSCR + ' TO Disk =''' + @FBCKP +
''' With Init, Format;'
Execute (@SQLBCKP);
If @@Error=0
Begin
Execute (@SQL)
Set @ERREUR=@@Error
Set @SQL = 'master.dbo.xp_cmdshell ''Del '+ @FBCKP +''', NO_OUTPUT '
Execute (@SQL)
End
End
Close FInit
Deallocate FInit
End
Cette procédure reçoit @DBSRC (Nom de base de donnée source) et
@DBDEST (Nom de base de données destination). Elle permet de copier une
base B1 en une base B2 avec les fichiers ldf et mdf de B2 sont dans le
même dossier que les fichier ldf et mdf de B1 puis elle retourne @Erreur
pour indiquer une erreur s'il y en a.
Quand j'execute cette procédure dans Management Studio avec
DELCARE @ERR,
Execute [MAster].[dbo].[SAUVEGARDE_DATABASE_ACTIVE] 'B1','B2', @ERREUR =
@ERR OUTPUT
Select @ERR
Tout ce passe tres bien comme je veux et j'ai en retour 0.
Jusque là pas de soucis....
Par contre quand j'appelle la procedure de mon application VBA par le
code distant suivant :
DBSRC="B1"
DBDEST="B1"
Cmd.CommandType = adCmdStoredProc
Cmd.CommandType = "Master.dbo.SAUVEGARDE_DATABASE_ACTIVE"
Set oParam = Cmd.CreateParameter("DBSCR", adChar,
adParamInput, 8000, DBSRC)
Call Cmd.Parameters.Append(oParam)
Set oParam = Cmd.CreateParameter("DBDEST", adChar,
adParamInput, 8000, DBDEST)
Call Cmd.Parameters.Append(oParam)
Set oParam = Cmd.CreateParameter("ERREUR", adInteger,
adParamOutput, , 0)
Call Cmd.Parameters.Append(oParam)
Cmd.Execute
Erreur = Cmd.Parameters.Item("ERREUR").Value
J'ai en retour il commence à me faire un backup puis arrête et me
ramène le code Erreur 3013.(Serveur: Msg 3013, Niveau 16, État 1, Ligne
1
BACKUP DATABASE se termine de façon anormale).
Mon utilisateur a les pleins droits sur la base y compris en Backup
J'ai cherché pendant des heures mais je ne trouve rien qui m'explique
que ca marche dans studio management et que non dans mon code.
Si quelqu'un a une idée j'aimerais qu'il me donne des conseils pour que
je ne m'arrache plus les cheveux (Déjà qu'il n'y en pas beaucoup ....)
Merci par avance.
Bonjour
En effet j'ai été dans le log de SQL serveur et j'ai les détails suivants
1) 12/20/2008 21:34:55,,Unknown,Database backed up. Database: COMPTA<c/>
creation date(time): 2008/10/14(16:50:10)<c/> pages dumped: 112530<c/>
first LSN: 182:4138:37<c/> last LSN: 182:4154:1<c/> number of dump
devices: 1<c/> device information: (FILE=1<c/> TYPE=DISK:
{'D:DATASSQLDATASCOMPTA.BAK'}). This is an informational message only.
No user action is required.,
2) Pour ce qui est de SQLDMO J'avais en effet fait des recherches et
j'avais mis au point une procedure dans VBA qui appelle
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 plusieurs
semaines la
dessus.
3) Pour finir dans ma routine de clôture d'exercice ou de période
commerciale je dois faire une sauvegarde des bases active. Un traitement
doit être effectué afin d'avoir les mouvements de l'exercice N-1 ou de la
période N-1 En ligne pour une consultation.
Je vous serai infiniment reconnaissant si vous pouviez me donner un coup
de main.
Merci par avance
"Med Bouchenafa" <com.hotmail@bouchenafa> a écrit dans le message de
groupe de discussion : #t8P0sCZJHA.552@TK2MSFTNGP06.phx.gbl...
Regarde dans le log SQL Server ou encore Windows s'il n'y a pas un
message plus parlant
D'autre part, appeler ce genre de code depuis VBA n'est pas ce que je
recommendeerais
Tu aurais du utiliser SQLDMO, c'est fait exactement pour ce genre de
besoins
Bien cordialement
Med bouchenafa
"Paulin BANTO" <paulin_banto@hotmail.com> wrote in message
news:7582609E-A9B6-44B4-ADAC-D60BA0EB8902@microsoft.com...
Bonjour à Tous
Il ya quelques semaines je cherchais comment faire la copie d'une base
de données SQL Serveur. En réponse FRED BROUARD m'a donné une des
instructions et j'ai pu mettre au point la procédure stockée suivante :
PROCEDURE [MAster].[dbo].[SAUVEGARDE_DATABASE_ACTIVE]
(
@DBSCR Varchar(800),
@DBDEST Varchar(800),
@ERREUR Int OUTPUT
)
AS
Begin
Declare @SQL Varchar(8000)
Declare @SQLBCKP Varchar(8000)
Declare @DBDOS Varchar(8000)
Declare @FBCKP Varchar(8000)
Declare FInit Cursor For
Select Replace(FileName, Reverse(Substring(Reverse(FileName), 0,
CharIndex('', Reverse(FileName), 1))),'') AS DBDOS,
Substring( Replace(FileName, Reverse(Substring(Reverse(FileName), 0,
CharIndex('', Reverse(FileName), 1))),'') +
Reverse(Substring(Reverse(FileName), 0, CharIndex('',
Reverse(FileName), 1))),1, LEN(Replace(FileName,
Reverse(Substring(Reverse(FileName), 0, CharIndex('',
Reverse(FileName), 1))),'') + Reverse(Substring(Reverse(FileName), 0,
CharIndex('', Reverse(FileName), 1)))) -4) + '.BAK' AS FBCKP
From master..sysaltfiles Where Name=@DBSCR AND Fileid=1
Set @ERREUR=1
Open FInit
Fetch Next From FInit Into @DBDOS, @FBCKP
If @@Fetch_Status=0
Begin
Set @SQL = 'Restore Database ' + @DBDEST + ' From Disk = ''' + @FBCKP +
''' With Replace, File = 1,'
Select @SQL = @SQL + ' Move ''' + Rtrim(Name) + ''' To ''' + '' +
@DBDOS+@DBDEST + '' + Substring(fileName, LEN(fileName) - 3, 4) + ''','
From master..sysaltfiles Where dbid=(SELECT dbid From SysDatabases Where
Name=@DBSCR);
Set @SQL = Substring(@SQL, 1, LEN(@SQL) -1);
Set @SQLBCKP ='Backup Database ' + @DBSCR + ' TO Disk =''' + @FBCKP +
''' With Init, Format;'
Execute (@SQLBCKP);
If @@Error=0
Begin
Execute (@SQL)
Set @ERREUR=@@Error
Set @SQL = 'master.dbo.xp_cmdshell ''Del '+ @FBCKP +''', NO_OUTPUT '
Execute (@SQL)
End
End
Close FInit
Deallocate FInit
End
Cette procédure reçoit @DBSRC (Nom de base de donnée source) et
@DBDEST (Nom de base de données destination). Elle permet de copier une
base B1 en une base B2 avec les fichiers ldf et mdf de B2 sont dans le
même dossier que les fichier ldf et mdf de B1 puis elle retourne @Erreur
pour indiquer une erreur s'il y en a.
Quand j'execute cette procédure dans Management Studio avec
DELCARE @ERR,
Execute [MAster].[dbo].[SAUVEGARDE_DATABASE_ACTIVE] 'B1','B2', @ERREUR =
@ERR OUTPUT
Select @ERR
Tout ce passe tres bien comme je veux et j'ai en retour 0.
Jusque là pas de soucis....
Par contre quand j'appelle la procedure de mon application VBA par le
code distant suivant :
DBSRC="B1"
DBDEST="B1"
Cmd.CommandType = adCmdStoredProc
Cmd.CommandType = "Master.dbo.SAUVEGARDE_DATABASE_ACTIVE"
Set oParam = Cmd.CreateParameter("DBSCR", adChar,
adParamInput, 8000, DBSRC)
Call Cmd.Parameters.Append(oParam)
Set oParam = Cmd.CreateParameter("DBDEST", adChar,
adParamInput, 8000, DBDEST)
Call Cmd.Parameters.Append(oParam)
Set oParam = Cmd.CreateParameter("ERREUR", adInteger,
adParamOutput, , 0)
Call Cmd.Parameters.Append(oParam)
Cmd.Execute
Erreur = Cmd.Parameters.Item("ERREUR").Value
J'ai en retour il commence à me faire un backup puis arrête et me
ramène le code Erreur 3013.(Serveur: Msg 3013, Niveau 16, État 1, Ligne
1
BACKUP DATABASE se termine de façon anormale).
Mon utilisateur a les pleins droits sur la base y compris en Backup
J'ai cherché pendant des heures mais je ne trouve rien qui m'explique
que ca marche dans studio management et que non dans mon code.
Si quelqu'un a une idée j'aimerais qu'il me donne des conseils pour que
je ne m'arrache plus les cheveux (Déjà qu'il n'y en pas beaucoup ....)
Merci par avance.
Bonjour
En effet j'ai été dans le log de SQL serveur et j'ai les détails suivants
1) 12/20/2008 21:34:55,,Unknown,Database backed up. Database: COMPTA<c/>
creation date(time): 2008/10/14(16:50:10)<c/> pages dumped: 112530<c/>
first LSN: 182:4138:37<c/> last LSN: 182:4154:1<c/> number of dump
devices: 1<c/> device information: (FILE=1<c/> TYPE=DISK:
{'D:DATASSQLDATASCOMPTA.BAK'}). This is an informational message only.
No user action is required.,
2) Pour ce qui est de SQLDMO J'avais en effet fait des recherches et
j'avais mis au point une procedure dans VBA qui appelle
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 plusieurs
semaines la
dessus.
3) Pour finir dans ma routine de clôture d'exercice ou de période
commerciale je dois faire une sauvegarde des bases active. Un traitement
doit être effectué afin d'avoir les mouvements de l'exercice N-1 ou de la
période N-1 En ligne pour une consultation.
Je vous serai infiniment reconnaissant si vous pouviez me donner un coup
de main.
Merci par avance
"Med Bouchenafa" a écrit dans le message de
groupe de discussion : #Regarde dans le log SQL Server ou encore Windows s'il n'y a pas un
message plus parlant
D'autre part, appeler ce genre de code depuis VBA n'est pas ce que je
recommendeerais
Tu aurais du utiliser SQLDMO, c'est fait exactement pour ce genre de
besoins
Bien cordialement
Med bouchenafa
"Paulin BANTO" wrote in message
news:Bonjour à Tous
Il ya quelques semaines je cherchais comment faire la copie d'une base
de données SQL Serveur. En réponse FRED BROUARD m'a donné une des
instructions et j'ai pu mettre au point la procédure stockée suivante :
PROCEDURE [MAster].[dbo].[SAUVEGARDE_DATABASE_ACTIVE]
(
@DBSCR Varchar(800),
@DBDEST Varchar(800),
@ERREUR Int OUTPUT
)
AS
Begin
Declare @SQL Varchar(8000)
Declare @SQLBCKP Varchar(8000)
Declare @DBDOS Varchar(8000)
Declare @FBCKP Varchar(8000)
Declare FInit Cursor For
Select Replace(FileName, Reverse(Substring(Reverse(FileName), 0,
CharIndex('', Reverse(FileName), 1))),'') AS DBDOS,
Substring( Replace(FileName, Reverse(Substring(Reverse(FileName), 0,
CharIndex('', Reverse(FileName), 1))),'') +
Reverse(Substring(Reverse(FileName), 0, CharIndex('',
Reverse(FileName), 1))),1, LEN(Replace(FileName,
Reverse(Substring(Reverse(FileName), 0, CharIndex('',
Reverse(FileName), 1))),'') + Reverse(Substring(Reverse(FileName), 0,
CharIndex('', Reverse(FileName), 1)))) -4) + '.BAK' AS FBCKP
From master..sysaltfiles Where Name=@DBSCR AND Fileid=1
Set @ERREUR=1
Open FInit
Fetch Next From FInit Into @DBDOS, @FBCKP
If @@Fetch_Status=0
Begin
Set @SQL = 'Restore Database ' + @DBDEST + ' From Disk = ''' + @FBCKP +
''' With Replace, File = 1,'
Select @SQL = @SQL + ' Move ''' + Rtrim(Name) + ''' To ''' + '' +
@DBDOS+@DBDEST + '' + Substring(fileName, LEN(fileName) - 3, 4) + ''','
From master..sysaltfiles Where dbid=(SELECT dbid From SysDatabases Where
Name=@DBSCR);
Set @SQL = Substring(@SQL, 1, LEN(@SQL) -1);
Set @SQLBCKP ='Backup Database ' + @DBSCR + ' TO Disk =''' + @FBCKP +
''' With Init, Format;'
Execute (@SQLBCKP);
If @@Error=0
Begin
Execute (@SQL)
Set @ERREUR=@@Error
Set @SQL = 'master.dbo.xp_cmdshell ''Del '+ @FBCKP +''', NO_OUTPUT '
Execute (@SQL)
End
End
Close FInit
Deallocate FInit
End
Cette procédure reçoit @DBSRC (Nom de base de donnée source) et
@DBDEST (Nom de base de données destination). Elle permet de copier une
base B1 en une base B2 avec les fichiers ldf et mdf de B2 sont dans le
même dossier que les fichier ldf et mdf de B1 puis elle retourne @Erreur
pour indiquer une erreur s'il y en a.
Quand j'execute cette procédure dans Management Studio avec
DELCARE @ERR,
Execute [MAster].[dbo].[SAUVEGARDE_DATABASE_ACTIVE] 'B1','B2', @ERREUR =
@ERR OUTPUT
Select @ERR
Tout ce passe tres bien comme je veux et j'ai en retour 0.
Jusque là pas de soucis....
Par contre quand j'appelle la procedure de mon application VBA par le
code distant suivant :
DBSRC="B1"
DBDEST="B1"
Cmd.CommandType = adCmdStoredProc
Cmd.CommandType = "Master.dbo.SAUVEGARDE_DATABASE_ACTIVE"
Set oParam = Cmd.CreateParameter("DBSCR", adChar,
adParamInput, 8000, DBSRC)
Call Cmd.Parameters.Append(oParam)
Set oParam = Cmd.CreateParameter("DBDEST", adChar,
adParamInput, 8000, DBDEST)
Call Cmd.Parameters.Append(oParam)
Set oParam = Cmd.CreateParameter("ERREUR", adInteger,
adParamOutput, , 0)
Call Cmd.Parameters.Append(oParam)
Cmd.Execute
Erreur = Cmd.Parameters.Item("ERREUR").Value
J'ai en retour il commence à me faire un backup puis arrête et me
ramène le code Erreur 3013.(Serveur: Msg 3013, Niveau 16, État 1, Ligne
1
BACKUP DATABASE se termine de façon anormale).
Mon utilisateur a les pleins droits sur la base y compris en Backup
J'ai cherché pendant des heures mais je ne trouve rien qui m'explique
que ca marche dans studio management et que non dans mon code.
Si quelqu'un a une idée j'aimerais qu'il me donne des conseils pour que
je ne m'arrache plus les cheveux (Déjà qu'il n'y en pas beaucoup ....)
Merci par avance.