web-dev-qa-db-fra.com

Comment puis-je prendre une sauvegarde de tables particulières dans SQL Server 2008 à l'aide du script T-SQL

Je souhaite effectuer une sauvegarde de tables particulières disponibles dans ma base de données dans un .bak fichier, et tout cela doit être fait en utilisant un script T-SQL.

15
Firoz Tennali

Les types de sauvegarde dépendent du modèle de récupération de SQL Server. Chaque modèle de récupération vous permet de sauvegarder une base de données SQL Server entière ou partielle ou des fichiers individuels ou des groupes de fichiers de la base de données. La sauvegarde au niveau de la table ne peut pas être créée, cette option n'existe pas. Mais il existe une solution à ce problème

Prise de sauvegarde de la table SQL Server possible dans SQL Server. Il existe différentes manières alternatives de sauvegarder une table dans SQL Server SQL

  1. BCP (BULK COPY PROGRAM)
  2. Générer un script de table avec des données
  3. Faire une copie du tableau à l'aide de SELECT INTO
  4. ENREGISTRER les données de table directement dans un fichier plat
  5. Exporter des données à l'aide de SSIS vers n'importe quelle destination

Ici, j'explique seulement le premier repos que vous connaissez peut-être

Méthode 1 - Sauvegarde de la table SQL à l'aide de BCP (BULK COPY PROGRAM)

Pour sauvegarder une table SQL nommée "Person.Contact", qui réside dans SQL Server AdventureWorks, nous devons exécuter le script suivant, qui

-- SQL Table Backup
-- Developed by DBATAG, www.DBATAG.com
DECLARE @table VARCHAR(128),
@file VARCHAR(255),
@cmd VARCHAR(512)
SET @table = 'AdventureWorks.Person.Contact' --  Table Name which you want    to backup
SET @file = 'C:\MSSQL\Backup\' + @table + '_' + CONVERT(CHAR(8), GETDATE(), 112) --  Replace C:\MSSQL\Backup\ to destination dir where you want to place table data backup
+ '.dat'
SET @cmd = 'bcp ' + @table + ' out ' + @file + ' -n -T '
EXEC master..xp_cmdshell @cmd

SORTIE

enter image description here

Remarque -

  1. Vous devez avoir des privilèges d'import/export en masse
  2. Dans le script ci-dessus, -n désigne les types de données SQL natifs, ce qui est essentiel lors de la restauration
  3. -T indique que vous vous connectez à SQL Server à l'aide de l'authentification Windows, au cas où vous souhaitez vous connecter à l'aide de l'authentification SQL Server, utilisez -U -P
  4. Cela vous dira également que vous accélérez le transfert de données, dans mon cas, c'était 212468,08 lignes par seconde.
  5. Une fois ces commandes terminées, cela créera un fichier nommé "AdventureWorks.Person.Contact_20120222" est un dossier de destination spécifié

Alternativement, vous pouvez exécuter le BCP via l'invite de commande et tapez la commande suivante dans l'invite de commande, les deux opérations effectuent la même activité, mais j'aime la méthode mentionnée ci-dessus car c'est le type de sauvegarde en ouvrant une invite de commande et type.

bcp AdventureWorks.Person.Contact out C:\MSSQL\Backup\AdventureWorks.Person.Contact_20120222.dat -n -T

enter image description here

11
Tufan Chand

Méthode 1:

Si vous ne vous souciez que des données des tables et de celles qui doivent être utilisées localement dans la même base de données et le même serveur, vous pouvez utiliser la requête ci-dessous pour effectuer une sauvegarde des tables sélectionnées:

SELECT * INTO newtable1
FROM originalTable1

--- Pour le tableau 2

SELECT * INTO newtable2
FROM originalTable2

et ainsi de suite ... pour n nombre de tables

Cette instruction CREERA les tables appelées newtable1, newtable1, .. vous n'avez donc pas besoin de le créer auparavant.

Remarque * Cette méthode prend la sauvegarde assez rapidement mais l'inconvénient majeur serait qu'elle ne reporte pas les clés, les index et les contraintes de la table et que la sauvegarde est stockée dans la base de données et non quelque part à l'extérieur d'un fichier

Méthode 2:

Si vous souhaitez sauvegarder la table sur un autre serveur pour une solution de récupération après sinistre ou une prévention de perte de données, vous pouvez créer un script pour la table à l'aide de l'option Générer des scripts à partir des tâches.

  1. Tout d'abord, faites un clic droit sur la base de données qui contient les tables que vous souhaitez sauvegarder et choisissez Tâches -> Générer des scripts

  2. Sélectionnez votre base de données dans la liste dont les tables doivent être sauvegardées

  3. L'écran suivant qui apparaît est les options de script.

  4. Faites défiler les options de script jusqu'à ce que vous voyiez Options de table/affichage. Nous voulons que ce qui suit soit vrai: vérifier les contraintes, les données de script, les clés étrangères, les clés primaires, les déclencheurs et les clés uniques. (Ou vous pouvez bien sûr choisir ce dont vous avez besoin). Sélectionnez Suivant et nous sommes présentés avec l'écran Sélectionner les types d'objets

  5. Sélectionnez Tables et appuyez sur suivant. Enfin, choisissez la ou les tables que vous souhaitez sauvegarder et cliquez sur Suivant

Méthode 3:

Vous pouvez également utiliser tilitaire bcp pour les sauvegardes de table.

9
KASQLDBA

En utilisant la fonction d'exportation en masse de SSMS, ici est la méthode la meilleure et la plus simple mentionnée

Assistant d'importation et d'exportation SQL Server: L'assistant d'importation et d'exportation SQL Server fournit une interface utilisateur graphique sur un package SQL Server Integration Services (SSIS). Une fois créé, le package peut être automatisé pour fonctionner selon un calendrier. Il peut être davantage configuré et modifié à l'aide de SQL Server Data Tools (SSDT)

Pour commencer, ouvrez l'assistant d'importation et d'exportation, cliquez avec le bouton droit sur une base de données et sélectionnez le sous-menu Tâches -> commande Exporter les données.

enter image description here

1
Sayyed Dawood

Vous ne pouvez pas sauvegarder des tables spécifiques dans un .bak fichier, vous pouvez les exporter vers csv ou les écrire ou utiliser bcp pour les mettre dans un fichier.

Ce que vous pouvez faire si vous souhaitez sauvegarder des tables spécifiques (et elles sont toujours les mêmes) est de les déplacer dans un file group et sauvegardez ce groupe de fichiers.

Voir Sauvegarder les fichiers et les groupes de fichiers pour la documentation.

Par exemple, si vous souhaitez sauvegarder des fichiers ou des groupes de fichiers spécifiques à l'aide de T-SQL, vous pouvez utiliser (à partir du lien)

--Back up the files in SalesGroup1.
BACKUP DATABASE Sales
   FILEGROUP = 'SalesGroup1',
   FILEGROUP = 'SalesGroup2'
   TO DISK = 'C:\MySQLServer\Backups\Sales\SalesFiles.bck';
GO

et

--Backup the files in the SalesGroup1 secondary filegroup.
BACKUP DATABASE Sales
   FILE = 'SGrp1Fi2', 
   FILE = 'SGrp2Fi2' 
   TO DISK = 'G:\SQL Server Backups\Sales\SalesGroup1.bck';
GO

S'appuyant sur la méthode 1 de la réponse de KASQLDBA:

Créez une base de données distincte pour conserver la copie sauvegardée des tables. Modifiez la requête fournie par KASQLDBA afin de sélectionner dans votre table d'origine et de la copier dans la base de données alternative.

SELECT * INTO MyNewDatabase.dbo.newtable1
FROM OriginalDatabase.dbo.originalTable1

--- For table 2
SELECT * INTO MyNewDatabase.dbo.newtable2
FROM OriginalDatabase.dbo.originalTable2

Vous pouvez créer un script qui supprime les tables dans la nouvelle base de données, puis exécuter les commandes select into pour chaque table requise. Si vous souhaitez avoir des index et d'autres objets disponibles, vous pouvez les créer sur votre nouvelle base de données et tronquer les tables avant de les remplir à nouveau. Si vous préférez la troncature, vous devrez utiliser des instructions d'insertion à la place de select into.

Cette option vous fournira une méthode pour créer un fichier .BAK. Vous exécutez simplement une commande de base de données de sauvegarde après avoir rempli les tables dans la nouvelle base de données.

1
Gary