2009-06-06 12 views
2

J'exécute un travail SQL Server Agent qui zippe mes sauvegardes de base de données. L'application que je lance est une application Windows C# qui prend en argument le chemin de la base de données. Lorsque j'exécute le formulaire d'application, une invite de commande fonctionne bien. Toutefois, lorsque je l'exécute à partir d'un travail de serveur SQL à l'aide du système d'exploitation (CmdExec) en tant que type, j'obtiens l'erreur suivante.Travail sur le serveur SQL - Le système ne trouve pas le fichier spécifié

« Le système ne peut pas trouver le fichier spécifié »

Dans le travail que je suis ce qui suit comme la commande:

D: \ DatabaseBackups \ DatabaseBackupManager.exe D: \ DatabaseBackups \ SubDit \ Database.bak

J'ai essayé de définir des autorisations de répertoire spécifiques pour le compte SQL Server Agent sur le dossier DatabaseBackups, mais toujours la même erreur.

Quelqu'un peut-il jeter de la lumière sur celui-ci comme Google n'a pas vomi tout ce qui a fonctionné et commence à me rendre fou.

Merci

+0

fichier qui n'est pas trouvé? L'exécutable ou la sauvegarde de la base de données? –

Répondre

1

Merci pour votre aide les gars. J'ai essayé tout ce que vous avez suggéré et découvert qu'il cherchait dans le dossier C: \ Windows \ System32 pour le 7za.exe que j'utilisais pour compresser mes sauvegardes. Je l'avais fait référence à l'exe comme si elle était appelée dans le même répertoire que ma demande était en cours d'exécution dans.

Merci encore

0

d'abord, assurez-vous que votre .exe est effectivement trouvé par SQL. Si c'est le cas, la prochaine chose que je ferais est de mettre une certaine logique dans DatabaseBackupManager.exe pour rassembler les ACL que le thread a sur ce fichier (par exemple DirectorySecurity DirSec = di.GetAccessControl (AccessControlSections.All);). Très probablement, SQL coupe les listes de contrôle d'accès lors du lancement de votre processus. Si tel est le cas, vous devrez peut-être emprunter l'identité de ce thread pour accéder à ce fichier, ou bien, découvrir où ce processus est autorisé à accéder r/w par exemple. % temp%.

1

Le lecteur D: doit exister en tant que lecteur local et non en tant que lecteur mappé. (À moins qu'il y ait un moyen de forcer mappage pour les autres utilisateurs qui ne sont pas connectés dont je ne suis pas au courant)

Aussi, en ce qui concerne les autorisations, il pourrait s'agir de tout ce qui concerne le compte que l'agent tourne sous.

Vous devrez peut-être mettre un peu de journalisation dans votre processus C# en supposant qu'il démarre votre processus. S'il ne démarre pas votre processus, il peut s'agir d'autorisations sur ce compte liées au répertoire ou même aux paramètres du framework .NET.

En outre, vous pouvez utiliser Windows pour vérifier les échecs afin de voir quel fichier il tente d'ouvrir. Si vous ajoutez le compte d'agent temporairement au groupe d'administrateurs et que cela fonctionne, cela indique que les autorisations sont à l'origine de l'erreur "Le système ne trouve pas le fichier spécifié".

Questions connexes