Je fais des recherches et google depuis 10 heures et je n'ai rien trouvé, alors j'ai décidé de demander ici. Je recherche un outil en ligne de commande ou un script (fonctionnant sous Windows) qui peut sauvegarder un serveur SQL distant dans un fichier local (.sql, sauvegarde SQL Server, même CSV, tous les formats sont acceptables).
P.S. Je ne peux pas utiliser le partage à distance SMB pour sauvegarder la base de données. Aussi pas d'interface graphique, juste une ligne de commande ou des scripts
P.P.S. La base de données se trouve à distance et je souhaite sauvegarder les données de la base de données dans n'importe quel format possible sur ma machine locale (serveur Windows, pas SMB partage la connexion entre disponible/possible)
Il existe deux façons courantes de procéder:
Un moyen simple - avec des sauvegardes de base de données "normales" - lorsque vous exécutez la commande BACKUP DATABASE, le service SQL Server sur la boîte distante doit écrire la sauvegarde dans un fichier. Le service doit pouvoir écrire sur le chemin de destination. Pour faire ça:
Si vous le faites via T-SQL, cela pourrait ressembler à:
BACKUP DATABASE MyReallyImportantDB TO DISK = '\\MyDesktop\SharedFolderName\MyBackup.bak'
Difficile - exportation des données - si le serveur SQL distant ne peut pas écrire sur votre machine locale pour une raison quelconque, comme les pare-feu réseau ou les autorisations, alors vous peut exporter les données. Quelques outils courants sont:
Mais sachez que ces méthodes peuvent être beaucoup plus lentes et non cohérentes sur le plan des transactions. Ils conviennent mieux aux petites bases de données - par exemple, moins de 10 Go.
Exigences mises à jour - vous n'avez noté aucune interface graphique, aucun accès au système de fichiers et aucune sauvegarde. Compte tenu de ces exigences, vous effectuerez un travail manuel:
Vos besoins nécessitent l'utilisation des deux outils suivants:
Vous devez d'abord avoir une commande SQLCMD valide. Cela pourrait ressembler à ceci:
intentionnellement répertorié sur plusieurs lignes
sqlcmd
-S .
-U sa
-P ThisIsNotMyPassword
-d master
-Q "Backup Database StackExchange TO DISK='\\127.0.0.1\C$\Temp\StackExchange' WITH COPY_ONLY"
Les différents paramètres sont les suivants:
-S : The server you are connecting to. (IP or Hostname or Localhost [.])
-U : The SQL Login you are using to connect with
-P : The password of the SQL Login
-E : Trusted connection (Log in using your current Windows Account)
[to be used instead of -U and -P]
-d : The [initial] database you are connecting to
-Q : The command (in quotes) that you wish to execute
Le disque distant (du point de vue de la cible) sur lequel vous sauvegardez doit être accessible à partir de l'ordinateur/serveur à partir duquel vous sauvegardez.
Vous avez donc la commande ensemble, maintenant il vous suffit de l'envoyer de votre ordinateur vers l'ordinateur distant. Et c'est là que cela peut devenir compliqué.
Nous utiliserons SysInternals PSEXEC.exe
outil pour exécuter à distance le SQLCMD.EXE
.
Une commande pour exécuter la commande à distance pourrait ressembler à ceci:
intentionnellement répertorié sur plusieurs lignes
psexec
\\192.168.1.23
-p ThisIsNotMyWindowsPassword
-u Domain\User
-accepteula
SQLCMD (from above)
Les différents paramètres sont assez explicites.
Si vous ne fournissez pas de nom d'utilisateur (-u) et de mot de passe (-p), vous vous connecterez à l'aide de vos informations d'identification actuelles.
La commande entière ressemblera alors à ceci:
Pas de sauts de ligne pour augmenter la portabilité.
psexec \\127.0.0.1 -accepteula sqlcmd -S RemoteServer -U sa -P ThisIsNotMyPassword -d master -Q "Backup Database StackExchange TO DISK='\\127.0.0.1\C$\Temp\StackExchange' WITH COPY_ONLY"
Cet exemple fonctionne sur ma machine locale à des fins de démonstration et peut nécessiter quelques ajustements en fonction de votre environnement.
C:\work\SITools>psexec -accepteula sqlcmd -S . -U sa -P ThisIsNotMyPassword -d master -Q "Backup Database StackExchange TO DISK='\\127.0.0.1\C$\Temp\StackExchange.bak' WITH COPY_ONLY"
PsExec v2.2 - Execute processes remotely
Copyright (C) 2001-2016 Mark Russinovich
Sysinternals - www.sysinternals.com
sqlcmd exited with error code 0.
Cela ressemble à l'utilisation parfaite d'un nouvel outil par Microsoft, mssql-scriptter . Cette open source, python bad bad boy devrait pouvoir faire tout ce dont vous avez besoin. Attention: elle est toujours techniquement en alpha.
# script the database schema and data piped to a file.
mssql-scripter -S localhost -d AdventureWorks -U sa --schema-and-data > ./adventureworks.sql
# execute the generated above script with sqlcmd
sqlcmd -S mytestserver -U sa -i ./adventureworks.sql
documentation est disponible sur GitHub.
Je ne sais pas exactement de quoi vous parlez lorsque vous parlez d'un fichier local. Est-ce local sur le serveur SQL ou local sur la machine à partir de laquelle vous exécutez le script?
S'il s'agit de ce dernier, vous pouvez utiliser PowerShell pour sauvegarder les fichiers sur un chemin local sur le serveur SQL, puis RoboCopy les fichiers sur la machine exécutant le script.