Activer SQL Server pour la sauvegarde sur des machines / lecteurs distants

8

J'ai un serveur SQL (2000, 2005 et 2008) et je voudrais utiliser SQL Agent (ou même une simple base de données de sauvegarde 'xxx' sur disk = 'yyy'), pour sauvegarder sur des disques distants.

C'est-à-dire: j'ai un lecteur mappé dans la machine SQL, par exemple: "M:" qui correspond à \\ otherbox \ someshare

Par défaut, SQL Server ne vous permettra pas de sauvegarder sur de tels disques, mais je pense qu'il existe un moyen d'activer cela. Quelqu'un peut-il m'indiquer les documents?

Merci d'avance.

Martin Marconcini
la source
1
Vous pouvez simplement utiliser un outil tiers, comme SQLBackupAndFTP pour sauvegarder votre serveur SQL à distance? sqlbackupandftp.com/blog/…
Nick Taylor

Réponses:

8

Utilisez le chemin UNC lorsque vous spécifiez la destination - l'Agent SQL n'a pas de concept de «lecteurs» «mappés».

En outre, SQL Agent s'exécute généralement en tant que «service local» ou «système local» et, en tant que tel, n'a pas de droits sur les partages distants sur d'autres ordinateurs.

Vous avez deux choix:

  • Exécutez l'Agent SQL en tant que compte de rôle dans le domaine. Accordez à ce compte l'autorisation d'écrire dans le répertoire / partage où vous souhaitez stocker les sauvegardes.

  • Exécutez l'Agent SQL en tant que "Service réseau". Il s'authentifiera sur le serveur de partage avec le compte d'ordinateur de domaine de la machine sur laquelle le service s'exécute. Accordez à ce compte l'autorisation d'écrire dans le répertoire / partage où vous souhaitez stocker la sauvegarde.

  • Si vous n'avez pas de domaine, créez un compte avec le même nom d'utilisateur et le même mot de passe sur la machine hébergeant SQL Agent et la machine hébergeant les fichiers de sauvegarde. Modifiez l'agent SQL pour qu'il s'exécute en tant que compte "rôle" et accordez à ce compte l'autorisation d'écrire dans le répertoire / partage où vous souhaitez stocker la sauvegarde. (Le "domaine du pauvre" ...)

Evan Anderson
la source
En plus de mentionner les chemins UNC, je recommanderais à l'utilisateur de se CONNECTER au chemin UNC. Le moyen rapide / facile de le faire est d'ouvrir simplement un navigateur Web et de le saisir. Vous serez invité à entrer un nom d'utilisateur / mot de passe et vous pourrez généralement dire que vous vous souvenez de cet utilisateur / passe pour l'avenir. J'ai vu trop de gens qui étaient à 99% du chemin et qui n'arrivaient pas à comprendre pourquoi les choses ne fonctionnaient pas. TESTEZ VOTRE CONNEXION! LOL! :-)
KPWINC
C'est ce que je cherchais (La partie "domaine du pauvre");) Merci!
Martin Marconcini
4

Je suis totalement d'accord avec les deux réponses sur le chemin UNC.

Je voudrais également ajouter que même avec des lecteurs mappés, vous avez une solution de contournement simple. Vous pouvez exécuter une sauvegarde sur n'importe quel lecteur normal de votre serveur. Et puis vous pouvez ajouter

xp_cmdshell 'XCOPY [source] [destination] \flags'

Commande SQL au travail ou au script SQL que vous exécutez.

Avec xp_cmdshell, vous pouvez faire encore plus - par exemple, exécuter un outil de ligne de commande d'archivage externe, comme 7z pour compresser le fichier avant de le copier sur le lecteur mappé (lorsque la connexion à distance est trop lente ...)

PS: J'ai oublié de mentionner que xp_cmdshell peut être activé et désactivé en utilisant l'outil de configuration de la surface d'exposition et en exécutant sp_configure (et par défaut, il est désactivé)

Bogdan_Ch
la source
L'utilitaire ROBOCOPY du Kit de ressources Win2003 fournit des options supplémentaires sur XCOPY, qui sont utiles dans ce type d'opération. Dans mon cas, la possibilité de ne pas écraser les sauvegardes précédemment copiées ou de mettre en miroir deux répertoires de sauvegarde est facilement implémentée sans script supplémentaire.
kermatt
1

Votre agent doit avoir accès aux partages réseau. Ils n'ont pas besoin d'être cartographiés au préalable.

Vous le faites comme ceci:

BACKUP DATABASE myDB TO DISK = '\\machine\share\dir\file.bak'

Je crois que si l'utilisateur propriétaire du travail est un administrateur système SQL, il s'exécute sous l'agent, sinon il s'exécute en tant qu'utilisateur non administrateur système.

Sam
la source
1

Si SQL Server ne s'exécute pas sous un compte de domaine, vous pouvez mapper un lecteur réseau pour le compte sqlserver (pas votre compte) comme décrit dans cette réponse stackoverflow

Vous devez d'abord activer xp_cmdshell

-- allow changes to advanced options 
EXEC sp_configure 'show advanced options', 1
GO
-- Update currently configured values for advanced options.
RECONFIGURE
GO
-- To enable xp_cmdshell
EXEC sp_configure 'xp_cmdshell', 1
GO
-- Update currently configured values for advanced options.
RECONFIGURE
GO

Ensuite, vous pouvez mapper un lecteur en utilisant:

EXEC xp_cmdshell 'NET USE Z: \\Srv\Path password1 /USER:Domain\UserName'

Enfin, vous pouvez sauvegarder sur ce lecteur mappé:

BACKUP DATABASE myDB TO DISK = 'z:\file.bak'
Yepeekai
la source
0

Gardez à l'esprit ici que SQL Server est très intolérant aux retards réseau. S'ils se produisent, et ils ont tendance à le faire, la sauvegarde échouera. Je ne recommande pas du tout cette pratique pour les environnements de production.

Mieux vaut sauvegarder localement puis copier.

Steve Jones
la source
0

Le moyen le plus simple consiste à créer un lecteur .vhd sur un partage réseau via la gestion des disques et à lui attribuer une lettre de lecteur. SQL peut accéder à ce lecteur sans aucune modification.

Ajoutez simplement un script diskpart.exe au planificateur au démarrage afin de l'attacher automatiquement au redémarrage.

exemple, sélectionnez vdisk file = "\ {ip address / server} {networkshare} {filenamep.vhd}" attach vdisk // se souvient de la dernière lettre de lecteur affectée à.

Kimon
la source