Comment déplacer des fichiers de base de données SQL Server vers un nouvel emplacement – MlakarTechTalk – Bien choisir son serveur d impression
Author: Titanfall —
Short summary: Avez-vous déjà eu à déplacer des bases de données et leurs fichiers? Une migration de base de données implique des temps d'arrêt et les erreurs commises peuvent certainement gâcher votre journée. Vous ne voulez pas être en pleine migration et ne pas savoir quoi faire. Poursuivez votre lecture pour apprendre à déplacer des fichiers de […]
Quick overview
- Site
- Tutos GameServer
- Canonical URL
- https://tutos-gameserver.fr/2019/05/02/comment-deplacer-des-fichiers-de-base-de-donnees-sql-server-vers-un-nouvel-emplacement-mlakartechtalk-bien-choisir-son-serveur-d-impression/
- LLM HTML version
- https://tutos-gameserver.fr/2019/05/02/comment-deplacer-des-fichiers-de-base-de-donnees-sql-server-vers-un-nouvel-emplacement-mlakartechtalk-bien-choisir-son-serveur-d-impression/llm
- LLM JSON version
- https://tutos-gameserver.fr/2019/05/02/comment-deplacer-des-fichiers-de-base-de-donnees-sql-server-vers-un-nouvel-emplacement-mlakartechtalk-bien-choisir-son-serveur-d-impression/llm.json
- Manifest
- https://tutos-gameserver.fr/llm-endpoints-manifest.json
- Estimated reading time
- 24 minutes (1385 seconds)
- Word count
- 4616
Key points
- Avez-vous déjà eu à déplacer des bases de données et leurs fichiers?
- Une migration de base de données implique des temps d'arrêt et les erreurs commises peuvent certainement gâcher votre journée.
- Vous ne voulez pas être en pleine migration et ne pas savoir quoi faire.
- Poursuivez votre lecture pour apprendre à déplacer des fichiers de base de données SQL Server et à visionner des démos.
Primary visual
Structured content
Avez-vous déjà eu à déplacer des bases de données et leurs fichiers? Une migration de base de données implique des temps d'arrêt et les erreurs commises peuvent certainement gâcher votre journée. Vous ne voulez pas être en pleine migration et ne pas savoir quoi faire. Poursuivez votre lecture pour apprendre à déplacer des fichiers de base de données SQL Server et à visionner des démos. Pourquoi aurions-nous besoin / envie de déplacer des fichiers de base de données? Il existe certains scénarios dans lesquels une migration est effectuée.
Le disque est à court d'espace
Parfois, lorsqu'un administrateur dort au travail, les disques pleins passent inaperçus jusqu'à ce qu'il soit trop tard. Dans ces cas, certaines bases de données peuvent être déplacées vers un autre disque, volume, point de montage, etc.
Déménagement dans un nouvel entrepôt
Un nouvel espace de stockage pour la base de données arrive et nous devons déplacer certaines (ou toutes les) bases de données doivent être déplacées.
Séparer les fichiers de base de données
Suivre les meilleures pratiques pour séparer les fichiers de base de données – fichier de données (mdf), journal des transactions (ldf), tempdb, sauvegardes, fichiers de trace, etc. J'ai écrit à ce sujet ici et plus précisément ici dans la section intitulée «Configuration du disque».
La base de données sera indisponible pendant cette opération, nous devons donc en informer nos utilisateurs finaux. Prenez en compte les ramifications si une application utilise la base de données. Nous voudrons peut-être arrêter les services d'application ou entreprendre une autre action personnalisée lors du déplacement. Planifiez à l'avance avant de commencer le travail. Sachez ce que vous allez faire avant de le faire. Si vous pouvez tester votre méthode sur une base de données de laboratoire ou de développement, cela vous aidera également.
Une fois que nous avons le plan de match, nous pouvons commencer à le mettre en œuvre. Regardons quelques détails. Migration – Manières générales de déplacer des fichiers de base de données Il existe quelques méthodes que nous pouvons employer pour faire ce travail:
Détacher la base de données / Déplacer les fichiers / Attacher la base de données Définir la base de données hors connexion / Déplacer les fichiers / Modifier la base de données Modifier le fichier / Définir en ligne Sauvegarde / restauration ailleurs
Voici quelques bases de connaissances Microsoft pour vous aider tout au long du processus.
Joindre une base de données – explique CREATE DATABASE FOR ATTACH sp_attach_db – obsolète! Veuillez utiliser la méthode ci-dessus pour attacher Créer une base de données – plus d'informations sur la clause FOR ATTACH Déplacer les bases de données utilisateur – met en évidence ALTER DATABASE MODIFY FILE sp_detach_db – mises en garde concernant le détachement
Regardons en profondeur dans chaque sens. Méthode 1: détacher la base de données / déplacer des fichiers / créer une base de données pour l'attachement Nous créons quelques bases de données pour le tester.
UTILISER le maître; ALLER / *************************************** Créer des exemples de bases de données **************************************** / –DB1 CREATE DATABASE [DB1] SUR PRIMAIRE (NOM = N'DB1 ', NOMFICHIER = N'C: Program Files Serveur SQL Microsoft MSSQL13.MSSQLSERVER MSSQL DATA DB1.mdf', TAILLE = 8192 Ko, FILEGROWTH = 65536 Ko) SE CONNECTER (NAME = N'DB1_log ', FILENAME = N'C: Program Files Microsoft Serveur SQL MSSQL13.MSSQLSERVER MSSQL DATA DB1_log.ldf', SIZE = 8192 Ko, FILEGROWTH = 65536 Ko) ALLER –DB2 CREATE DATABASE [DB2] SUR PRIMAIRE (NOM = N'DB2 ', NOMFICHIER = N'C: Program Files Microsoft Serveur SQL MSSQL13.MSSQLSERVER MSSQL DATA DB2.mdf', SIZE = 8192 Ko, FILEGROWTH = 65536 Ko) SE CONNECTER (NAME = N'DB2_log ', FILENAME = N'C: Program Files Microsoft Serveur SQL MSSQL13.MSSQLSERVER MSSQL DATA DB2_log.ldf', SIZE = 8192 Ko, FILEGROWTH = 65536 Ko) ALLER –DB3 CREATE DATABASE [DB3] SUR PRIMAIRE (NOM = N'DB3 ', NOMFICHIER = N'C: Program Files Microsoft Serveur SQL MSSQL13.MSSQLSERVER MSSQL DATA DB3.mdf', TAILLE = 8192 Ko, FILEGROWTH = 65536 Ko) SE CONNECTER (NOM = N'DB3_log ', NOMFICHIER = N'C: Program Files Microsoft SQL Server MSSQL13.MSSQLSERVER MSSQL DATA DB3_log.ldf', SIZE = 8192 Ko, FILEGROWTH = 65536 Ko) ALLER
1 2 3 4 5 6 7 8 9 dix 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
UTILISATION maîtriser; ALLER
/ *************************************** Créer des exemples de bases de données **************************************** / –DB1 CRÉER BASE DE DONNÉES [[[[DB1] SUR PRIMAIRE ( PRÉNOM = N'DB1', NOM DE FICHIER = N'C: Programmes Microsoft SQL Server MSSQL13.MSSQLSERVER MSSQL DATA DB1.mdf' , TAILLE = 8192 Ko , FILEGROWTH = 65536KB ) BÛCHE SUR ( PRÉNOM = N'DB1_log', NOM DE FICHIER = N'C: Programmes Microsoft SQL Server MSSQL13.MSSQLSERVER MSSQL DATA DB1_log.ldf' , TAILLE = 8192 Ko , FILEGROWTH = 65536KB ) ALLER
–DB2 CRÉER BASE DE DONNÉES [[[[DB2] SUR PRIMAIRE ( PRÉNOM = N'DB2', NOM DE FICHIER = N'C: Programmes Microsoft SQL Server MSSQL13.MSSQLSERVER MSSQL DATA DB2.mdf' , TAILLE = 8192 Ko , FILEGROWTH = 65536KB ) BÛCHE SUR ( PRÉNOM = N'DB2_log', NOM DE FICHIER = N'C: Programmes Microsoft SQL Server MSSQL13.MSSQLSERVER MSSQL DATA DB2_log.ldf' , TAILLE = 8192 Ko , FILEGROWTH = 65536KB ) ALLER
–DB3 CRÉER BASE DE DONNÉES [[[[DB3] SUR PRIMAIRE ( PRÉNOM = N'DB3', NOM DE FICHIER = N'C: Programmes Microsoft SQL Server MSSQL13.MSSQLSERVER MSSQL DATA DB3.mdf' , TAILLE = 8192 Ko , FILEGROWTH = 65536KB ) BÛCHE SUR ( PRÉNOM = N'DB3_log', NOM DE FICHIER = N'C: Programmes Microsoft SQL Server MSSQL13.MSSQLSERVER MSSQL DATA DB3_log.ldf' , TAILLE = 8192 Ko , FILEGROWTH = 65536KB ) ALLER
Vérifier les informations du fichier de base de données.
–Vérifier les informations du fichier DB sélectionnez * parmi DB1.sys.database_files; select * from DB2.sys.database_files; select * from DB3.sys.database_files;
–Vérifier les informations du fichier DB sélectionner * de DB1.sys.fichiers_base_de_données; sélectionner * de DB2.sys.fichiers_base_de_données; sélectionner * de DB3.sys.fichiers_base_de_données;
Il ressemblera à ceci:
Maintenant, nous faisons certaines choses préliminaires avant de déplacer des fichiers. Nous devons spécifier les bases de données que nous voulons déplacer. C'est une façon très simpliste de le faire – codé en dur dans une table temporaire.
/ *************************************** Pré étapes **************************************** / –voir les bases de données que vous voulez déplacer SELECT * FROM sys.databases WHERE [name] IN ('DB1', 'DB2', 'DB3'); –définit les bases de données à détacher / attacher SÉLECTIONNER [name] INTO #DBsToMove FROM sys.databases WHERE [name] IN ('DB1', 'DB2', 'DB3'); –doit rassembler les informations sur le fichier AVANT de détacher la base de données SELECT database_id, [type_desc], [name], nom physique INTO #DBfiles FROM sys.master_files WHERE database_id IN (DB_ID ('DB1'), DB_ID ('DB2'), DB_ID ('DB3')); –check file configuration – pourrait vouloir copier ceci ailleurs pour garder des traces de notre travail SELECT * FROM #DBfiles;
1 2 3 4 5 6 7 8 9 dix 11 12 13 14 15 16 17 18
/ *************************************** Pré étapes **************************************** /
–Voir les bases de données que vous souhaitez déplacer SÉLECTIONNER * DE sys.bases de données OÙ [[[[prénom] DANS('DB1','DB2','DB3');
–définit les bases de données à détacher / attacher SÉLECTIONNER [[[[prénom] DANS #DBsToMove DE sys.bases de données OÙ [[[[prénom] DANS('DB1','DB2','DB3');
–doit rassembler les informations sur le fichier AVANT de détacher la base de données SÉLECTIONNER base_de_données, [[[[type_desc], [[[[prénom], nom_périphérique DANS #DBfiles DE sys.master_files OÙ base_de_données DANS(DB_ID('DB1'),DB_ID('DB2'),DB_ID('DB3'));
–check file configuration – pourrait vouloir copier ceci ailleurs pour garder des traces de notre travail SÉLECTIONNER * DE #DBfiles;
Maintenant que nous avons ce dont nous avons besoin, nous pouvons commencer à détacher les bases de données.
/ ************************************************ ***************************************** Méthode 1: détacher la base de données / déplacer des fichiers / créer une base de données pour l'attachement ************************************************* ***************************************** / –Détachez les bases de données DECLARE @DBName varchar (500); DÉCLARE @sql NVARCHAR (MAX); DECLARE curDetachDBs CURSOR FAST_FORWARD READ_ONLY POUR SÉLECTIONNER [name] DE #DBsToMove OUVRIR curDetachDBs FETCH NEXT DE curDetachDBs DANS @DBName WHILE @@ FETCH_STATUS = 0 COMMENCER CARTE D'IMPRESSION (13) + CHAR (10) IMPRESSION '———————————————— ——— ' PRINT '-' + @DBName IMPRESSION '———————————————— ——— ' SET @sql = 'ALTER DATABASE [‘ + @DBName + ‘] SET SINGLE_USER AVEC ROLLBACK IMMEDIATE; ' IMPRIMER @sql EXEC sys.sp_executesql @sql SET @sql = 'EXEC sp_detach_db' + @DBName + ',' 'true' ';' IMPRIMER @sql EXEC sys.sp_executesql @sql FETCH NEXT DE curDetachDBs DANS @DBName FIN FERMER curDetachDBs DEALLOCATE curDetachDBs
1 2 3 4 5 6 7 8 9 dix 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
/ ************************************************ ***************************************** Méthode 1: détacher la base de données / déplacer des fichiers / créer une base de données pour l'attachement ************************************************* ***************************************** /
–Détachez les bases de données DÉCLARER @DBName varchar(500); DÉCLARER @sql NVARCHAR(MAX); DÉCLARER curDetachDBs LE CURSEUR AVANCE RAPIDE LECTURE SEULEMENT POUR SÉLECTIONNER [[[[prénom] DE #DBsToMove OUVRIR curDetachDBs FETCH SUIVANT DE curDetachDBs DANS @DBName TANDIS QUE @@FETCH_STATUS = 0 COMMENCER IMPRESSION CARBONISER(13) + CARBONISER(dix) IMPRESSION '—————————————————– ——– ' IMPRESSION '-' + @DBName IMPRESSION '—————————————————– ——– ' ENSEMBLE @sql = 'ALTER DATABASE['['[‘[‘ + @DBName + ']SET SINGLE_USER AVEC ROLLBACK IMMEDIATE; ' IMPRESSION @sql EXEC sys.sp_executesql @sql ENSEMBLE @sql = 'EXEC sp_detach_db' + @DBName + ',''vrai'';' IMPRESSION @sql EXEC sys.sp_executesql @sql FETCH SUIVANT DE curDetachDBs DANS @DBName FIN FERMER curDetachDBs DÉALLOCATE curDetachDBs
Vérifiez les modifications. Notez que les DB sont totalement partis. Vous ne les trouverez pas dans l'explorateur d'objets dans SSMS ou dans les tables système.
–verify changements SELECT * FROM sys.databases WHERE nom IN ('DB1', 'DB2', 'DB3'); – Les BD sont partis maintenant! c'est ce que détache fait et comment il est différent de la mise hors ligne
–verify changements SÉLECTIONNER * DE sys.bases de données OÙ prénom DANS('DB1','DB2','DB3'); – Les BD sont partis maintenant! c'est ce que détache fait et comment il est différent de la mise hors ligne
Vient maintenant le moment de déplacer les fichiers de base de données. Vous pouvez utiliser votre technique préférée pour déplacer des fichiers. J'aime utiliser robocopy dans un fichier .bat, mais il en existe beaucoup d'autres, tels que PowerShell, XCopy ou un clic droit pour couper / coller. Voici quelques actions de robocopy:
robocopy "C: Programmes Microsoft SQL Server MSSQL13.MSSQLSERVER MSSQL DONNÉES" "G: MSSQL Data" "DB1.mdf" / L robocopy "C: Programmes Microsoft SQL Server MSSQL13.MSSQLSERVER MSSQL DONNÉES" "G: MSSQL Data" "DB1_log.ldf" / L robocopy "C: Programmes Microsoft SQL Server MSSQL13.MSSQLSERVER MSSQL DONNÉES" "G: MSSQL Data" "DB2.mdf" / L robocopy "C: Programmes Microsoft SQL Server MSSQL13.MSSQLSERVER MSSQL DONNÉES" "G: MSSQL Data" "DB2_log.ldf" / L robocopy "C: Programmes Microsoft SQL Server MSSQL13.MSSQLSERVER MSSQL DONNÉES" "G: MSSQL Data" "DB3.mdf" / L robocopy "C: Programmes Microsoft SQL Server MSSQL13.MSSQLSERVER MSSQL DONNÉES" "G: MSSQL Data" "DB3_log.ldf" / L
robocopier "C: Program Files Microsoft SQL Server MSSQL13.MSSQLSERVER MSSQL DATA" "G: MSSQL Data" "DB1.mdf" /L robocopier "C: Program Files Microsoft SQL Server MSSQL13.MSSQLSERVER MSSQL DATA" "G: MSSQL Data" "DB1_log.ldf" /L robocopier "C: Program Files Microsoft SQL Server MSSQL13.MSSQLSERVER MSSQL DATA" "G: MSSQL Data" "DB2.mdf" /L robocopier "C: Program Files Microsoft SQL Server MSSQL13.MSSQLSERVER MSSQL DATA" "G: MSSQL Data" "DB2_log.ldf" /L robocopier "C: Program Files Microsoft SQL Server MSSQL13.MSSQLSERVER MSSQL DATA" "G: MSSQL Data" "DB3.mdf" /L robocopier "C: Program Files Microsoft SQL Server MSSQL13.MSSQLSERVER MSSQL DATA" "G: MSSQL Data" "DB3_log.ldf" /L
Le drapeau “/ L” est la première façon dont je gère les choses. En réalité, il ne copie rien, mais listera les fichiers. C'est une bonne pré-vérification avant d'exécuter un lot. Supprimez simplement le drapeau “/ L” et exécutez-le une fois vérifié. Voici la première partie de la sortie de l’exécution d’un fichier .bat avec des instructions robocopy:
Une fois que les fichiers sont physiquement déplacés vers le nouvel emplacement, nous pouvons continuer.
– attacher les bases de données DECLARE @targetMDF NVARCHAR (128); DECLARE @targetLDF NVARCHAR (128); DECLARE @DBName varchar (500); DÉCLARE @sql NVARCHAR (MAX); DECLARE @rowFile NVARCHAR (128); DECLARE @logFile NVARCHAR (128); DECLARE curAttachDBs CURSOR FAST_FORWARD READ_ONLY POUR SELECT nom FROM #DBsToMove OUVRIR curAttachDBs FETCH NEXT FROM curAttachDBs INTO @DBName WHILE @@ FETCH_STATUS = 0 COMMENCER SET @targetMDF = 'G: MSSQL Data'; SET @targetLDF = 'G: MSSQL Data'; CARTE D'IMPRESSION (13) + CHAR (10) IMPRESSION '———————————————— ——— ' PRINT '-' + @DBName IMPRESSION '———————————————— ——— ' SELECT @targetMDF + = '' + [name] + '.mdf' DE #DBfiles WHERE REMPLACE ([name], '_ log', '') = @DBName AND [type_desc] = 'ROWS'; SELECT @targetLDf + = '' + [name] + '.ldf' DE #DBfiles WHERE REMPLACE ([name], '_ log', '') = @DBName AND [type_desc] = 'LOG'; –attache la base de données SELECT @sql = 'CREATE DATABASE [‘ + @DBName + ‘] SUR (FILENAME = '' ' + @targetMDF + '' '), (FILENAME = '' '+ @targetLDF +' '') POUR ATTACHER ' FROM #DBfiles; PRINT @sql; EXEC sys.sp_executesql @sql; SET @targetMDF = ''; SET @targetLDF = ''; FETCH NEXT FROM curAttachDBs INTO @DBName FIN CLOSE curAttachDBs DEALLOCATE curAttachDBs
1 2 3 4 5 6 7 8 9 dix 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
– attacher les bases de données DÉCLARER @targetMDF NVARCHAR(128); DÉCLARER @targetLDF NVARCHAR(128); DÉCLARER @DBName varchar(500); DÉCLARER @sql NVARCHAR(MAX); DÉCLARER @rowFile NVARCHAR(128); DÉCLARER @fichier journal NVARCHAR(128); DÉCLARER curAttachDBs LE CURSEUR AVANCE RAPIDE LECTURE SEULEMENT POUR SÉLECTIONNER prénom DE #DBsToMove OUVRIR curAttachDBs FETCH SUIVANT DE curAttachDBs DANS @DBName TANDIS QUE @@FETCH_STATUS = 0 COMMENCER ENSEMBLE @targetMDF = 'G: MSSQL Data'; ENSEMBLE @targetLDF = 'G: MSSQL Data'; IMPRESSION CARBONISER(13) + CARBONISER(dix) IMPRESSION '—————————————————– ——– ' IMPRESSION '-' + @DBName IMPRESSION '—————————————————– ——– ' SÉLECTIONNER @targetMDF + = '' + [name] + '.mdf'FROM #DBfiles O REMPLACER ([name]'_bûche','') = @DBNAME AND [type_desc] = 'ROWS'; SELECT @targetLDf + = '' + [[[[prénom] + '.ldf' DE #DBfiles OÙ REMPLACER([[[[prénom],'_bûche','') = @DBName ET [[[[type_desc] = 'BÛCHE'; –attache la base de données SÉLECTIONNER @sql = 'CREATE DATABASE['['[‘[‘ + @DBName + ']SUR (FILENAME = ''' + @targetMDF + '''), (FILENAME = ''' + @targetLDF + ''') POUR ATTACHER ' DE #DBfiles; IMPRESSION @sql; EXEC sys.sp_executesql @sql; ENSEMBLE @targetMDF = ''; ENSEMBLE @targetLDF = ''; FETCH SUIVANT DE curAttachDBs DANS @DBName FIN FERMER curAttachDBs DÉALLOCATE curAttachDBs
Vérifiez les nouveaux emplacements de fichiers.
–Vérifier les informations du fichier DB sélectionnez * parmi DB1.sys.database_files; select * from DB2.sys.database_files; select * from DB3.sys.database_files;
–Vérifier les informations du fichier DB sélectionner * de DB1.sys.fichiers_base_de_données; sélectionner * de DB2.sys.fichiers_base_de_données; sélectionner * de DB3.sys.fichiers_base_de_données;
Auparavant, nos fichiers pointaient vers C: mais sont maintenant sur G: – la migration est terminée. Méthode 2: Définir la base de données hors connexion / déplacer des fichiers / modifier la base de données / définir en ligne Continuons dans ce sens, déplaçons les 3 exemples de bases de données que nous avons créées et que nous venons de revenir des disques G: à C:. Ici, nous commençons par définir nos bases de données et en définissant un nouveau chemin.
UTILISER le maître; ALLER / *************************************** Pré étapes **************************************** / –voir les bases de données que vous voulez déplacer SELECT * FROM sys.databases WHERE [name] IN ('DB1', 'DB2', 'DB3'); –définit les bases de données à détacher / attacher SÉLECTIONNER [name] INTO #DBsToMove FROM sys.databases WHERE [name] IN ('DB1', 'DB2', 'DB3'); –doit rassembler les informations sur le fichier AVANT de détacher la base de données SELECT database_id, [type_desc], [name], nom physique INTO #DBfiles FROM sys.master_files WHERE database_id IN (DB_ID ('DB1'), DB_ID ('DB2'), DB_ID ('DB3')); alter table #DBfiles add NewPath varchar (500); – charger de nouveaux chemins DECLARE @targetMDF NVARCHAR (128); DECLARE @targetLDF NVARCHAR (128); SET @targetMDF = 'C: Fichiers de programme Microsoft SQL Server MSSQL13.MSSQLSERVER MSSQL DATA '; SET @targetLDF = 'C: Programmes Microsoft SQL Server MSSQL13.MSSQLSERVER MSSQL DATA '; –SET @targetMDF = 'G: MSSQL Data '; –SET @targetLDF = 'G: MSSQL Data '; mettre à jour les fichiers définir NewPath = case quand [type_desc] = 'ROWS' puis @targetMDF + [name] + '.mdf' quand [type_desc] = 'LOG' puis @targetLDF + [name] + '.ldf' fin à partir des fichiers #DBfiles; –check file configuration – pourrait vouloir copier ceci ailleurs pour garder des traces de notre travail SELECT * FROM #DBfiles;
1 2 3 4 5 6 7 8 9 dix 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
UTILISATION maîtriser; ALLER
/ *************************************** Pré étapes **************************************** /
–voir les bases de données que vous voulez déplacer SÉLECTIONNER * DE sys.bases de données OÙ [[[[prénom] DANS('DB1','DB2','DB3');
–définit les bases de données à détacher / attacher SÉLECTIONNER [[[[prénom] DANS #DBsToMove DE sys.bases de données OÙ [[[[prénom] DANS('DB1','DB2','DB3');
–doit rassembler les informations sur le fichier AVANT de détacher la base de données SÉLECTIONNER base_de_données, [[[[type_desc], [[[[prénom], nom_périphérique DANS #DBfiles DE sys.master_files OÙ base_de_données DANS(DB_ID('DB1'),DB_ID('DB2'),DB_ID('DB3'));
modifier table #DBfiles ajouter Nouveau chemin varchar(500);
– charger de nouveaux chemins DÉCLARER @targetMDF NVARCHAR(128); DÉCLARER @targetLDF NVARCHAR(128); ENSEMBLE @targetMDF = 'C: Programmes Microsoft SQL Server MSSQL13.MSSQLSERVER MSSQL DATA '; SET @targetLDF = 'C:Programme Des dossiersMicrosoft SQL ServeurMSSQL13.MSSQLSERVERMSSQLLES DONNÉES'; –SET @targetMDF = 'G: MSSQL Data '; –SET @targetLDF = 'G: MSSQL Data ';
mettre à jour des dossiers ensemble Nouveau chemin = Cas quand [[[[type_desc] = 'ROWS' puis @targetMDF + [[[[prénom] + '.mdf' quand [[[[type_desc] = 'BÛCHE' puis @targetLDF + [[[[prénom] + '.ldf' fin de #DBfiles des dossiers;
–check file configuration – pourrait vouloir copier ceci ailleurs pour garder des traces de notre travail SÉLECTIONNER * DE #DBfiles;
Voici le résultat de #DBFiles:
Maintenant, au lieu de vous détacher comme dans l'exemple précédent, plaçons simplement les bases de données hors ligne.
/ ************************************************ ***************************************** Méthode 2: Définir la base de données hors connexion / déplacer des fichiers / modifier la base de données / définir en ligne ************************************************* ***************************************** / –set DBs hors ligne DECLARE @DBName varchar (500); DÉCLARE @sql NVARCHAR (MAX); DECLARE curDetachDBs CURSOR FAST_FORWARD READ_ONLY POUR SÉLECTIONNER [name] DE #DBsToMove OUVRIR curDetachDBs FETCH NEXT DE curDetachDBs DANS @DBName WHILE @@ FETCH_STATUS = 0 COMMENCER CARTE D'IMPRESSION (13) + CHAR (10) IMPRESSION '———————————————— ——— ' PRINT '-' + @DBName IMPRESSION '———————————————— ——— ' SET @sql = 'ALTER DATABASE [‘ + @DBName + ‘] SET OFFLINE; ' IMPRIMER @sql EXEC sys.sp_executesql @sql FETCH NEXT DE curDetachDBs DANS @DBName FIN FERMER curDetachDBs DEALLOCATE curDetachDBs –verify changements SELECT * FROM sys.databases WHERE nom IN ('DB1', 'DB2', 'DB3'); – Les BD sont toujours présentes – contrairement à détachement
1 2 3 4 5 6 7 8 9 dix 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
/ ************************************************ ***************************************** Méthode 2: Définir la base de données hors connexion / déplacer des fichiers / modifier la base de données / définir en ligne ************************************************* ***************************************** /
–set DBs hors ligne DÉCLARER @DBName varchar(500); DÉCLARER @sql NVARCHAR(MAX); DÉCLARER curDetachDBs LE CURSEUR AVANCE RAPIDE LECTURE SEULEMENT POUR SÉLECTIONNER [[[[prénom] DE #DBsToMove OUVRIR curDetachDBs FETCH SUIVANT DE curDetachDBs DANS @DBName TANDIS QUE @@FETCH_STATUS = 0 COMMENCER IMPRESSION CARBONISER(13) + CARBONISER(dix) IMPRESSION '—————————————————– ——– ' IMPRESSION '-' + @DBName IMPRESSION '—————————————————– ——– ' ENSEMBLE @sql = 'ALTER DATABASE['['[‘[‘ + @DBName + ']SET OFFLINE; ' IMPRESSION @sql EXEC sys.sp_executesql @sql FETCH SUIVANT DE curDetachDBs DANS @DBName FIN FERMER curDetachDBs DÉALLOCATE curDetachDBs
–verify changements SÉLECTIONNER * DE sys.bases de données OÙ prénom DANS('DB1','DB2','DB3'); – Les BD sont toujours présentes – contrairement à détachement
Les bases de données sont toujours présentes mais sont hors ligne. Ils ne peuvent pas être lus ou écrits.
Après avoir défini les bases de données hors ligne, déplacez les fichiers de données vers leur nouvel emplacement. Enfin, nous modifions les bases de données pour modifier leurs fichiers, nous les pointons vers le nouvel emplacement, puis nous remettons les bases de données en ligne.
–Alter DB pour modifier les fichiers puis les mettre en ligne DECLARE @DBName varchar (500); DÉCLARE @sql NVARCHAR (MAX); DECLARE @rowFile NVARCHAR (128); DECLARE @logFile NVARCHAR (128); DECLARE @fileType varchar (4); DÉCLARE @DBID int; DECLARE @NewPath varchar (500); DECLARE @fileName varchar (128); DECLARE curAttachDBs CURSOR FAST_FORWARD READ_ONLY POUR SELECT database_id, [type_desc], [name], NewPath DE #DBfiles OUVRIR curAttachDBs FETCH NEXT FROM curAttachDBs IN @DBID, @fileType, @fileName, @NewPath WHILE @@ FETCH_STATUS = 0 COMMENCER SELECT @DBName = DB_NAME (@DBID); CARTE D'IMPRESSION (13) + CHAR (10) IMPRESSION '———————————————— ——— ' PRINT '-' + @DBName IMPRESSION '———————————————— ——— ' sélectionnez @DBID, @fileType, @fileName, @NewPath –changez les emplacements de fichiers SELECT @sql = 'ALTER DATABASE [‘ + @DBName + ‘] MODIFIER LE FICHIER ( NAME = '' '+ @fileName +' '', FILENAME = '' '+ @NewPath +' '' '' FROM #DBfiles; PRINT @sql; EXEC sys.sp_executesql @sql; –set DB en ligne SELECT @sql = 'ALTER DATABASE' + @DBName + 'SET ONLINE'; print @sql; EXEC sys.sp_executesql @sql; FETCH NEXT FROM curAttachDBs IN @DBID, @fileType, @fileName, @NewPath FIN CLOSE curAttachDBs DEALLOCATE curAttachDBs –Vérifier les informations du fichier DB sélectionnez database_id, DB_NAME (database_id) comme "DBName", [type_desc], [name], nom_ physiques, code_état de sys.master_files où DB_NAME (id_bdd) dans ('DB1', 'DB2', 'DB3');
1 2 3 4 5 6 7 8 9 dix 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
–Alter DB pour modifier les fichiers puis les mettre en ligne DÉCLARER @DBName varchar(500); DÉCLARER @sql NVARCHAR(MAX); DÉCLARER @rowFile NVARCHAR(128); DÉCLARER @fichier journal NVARCHAR(128); DÉCLARER @Type de fichier varchar(4); DÉCLARER @DBID int; DÉCLARER @Nouveau chemin varchar(500); DÉCLARER @nom de fichier varchar(128); DÉCLARER curAttachDBs LE CURSEUR AVANCE RAPIDE LECTURE SEULEMENT POUR SÉLECTIONNER base_de_données, [[[[type_desc], [[[[prénom], Nouveau chemin DE #DBfiles OUVRIR curAttachDBs FETCH SUIVANT DE curAttachDBs DANS @DBID, @Type de fichier, @nom de fichier, @Nouveau chemin TANDIS QUE @@FETCH_STATUS = 0 COMMENCER SÉLECTIONNER @DBName = DB_NAME(@DBID);
IMPRESSION CARBONISER(13) + CARBONISER(dix) IMPRESSION '—————————————————– ——– ' IMPRESSION '-' + @DBName IMPRESSION '—————————————————– ——– ' sélectionner @DBID, @Type de fichier, @nom de fichier, @Nouveau chemin –changez les emplacements de fichiers SÉLECTIONNER @sql = 'ALTER DATABASE['['[‘[‘ + @DBName + ']MODIFIER LE FICHIER ( NOM = ''' + @nom de fichier + ''', FILENAME = ''' + @Nouveau chemin + ''')' DE #DBfiles; IMPRESSION @sql; EXEC sys.sp_executesql @sql;
–set DB en ligne SÉLECTIONNER @sql = 'ALTER DATABASE' + @DBName + 'SET ONLINE'; impression @sql; EXEC sys.sp_executesql @sql;
FETCH SUIVANT DE curAttachDBs DANS @DBID, @Type de fichier, @nom de fichier, @Nouveau chemin FIN FERMER curAttachDBs DÉALLOCATE curAttachDBs
–Vérifier les informations du fichier DB sélectionner base_de_données, DB_NAME(base_de_données) comme 'DBName', [[[[type_desc], [[[[prénom], nom_périphérique, state_desc de sys.master_files où DB_NAME(base_de_données) dans('DB1','DB2','DB3');
Voici le résultat de la vérification ci-dessus. Il montre les fichiers de base de données dans un nouvel emplacement et en ligne.
Méthode 3: Sauvegarder / détacher et supprimer / restaurer ailleurs La sauvegarde sera comme toutes les autres.
UTILISER le maître; ALLER –Base de sauvegarde BASE DE DONNEES DE SAUVEGARDE [DB1] TO DISK = N'C: Program Files Microsoft SQL Server MSSQL13.MSSQLSERVER MSSQL Backup DB1.bak '; ALLER BASE DE DONNEES DE SAUVEGARDE [DB2] TO DISK = N'C: Program Files Microsoft SQL Server MSSQL13.MSSQLSERVER MSSQL Backup DB2.bak '; ALLER BASE DE DONNEES DE SAUVEGARDE [DB3] TO DISK = N'C: Program Files Microsoft SQL Server MSSQL13.MSSQLSERVER MSSQL Backup DB3.bak '; ALLER
UTILISATION maîtriser; ALLER
–Base de sauvegarde SAUVEGARDE BASE DE DONNÉES [[[[DB1] À DISQUE = N'C: Programmes Microsoft SQL Server MSSQL13.MSSQLSERVER MSSQL Backup DB1.bak'; ALLER
SAUVEGARDE BASE DE DONNÉES [[[[DB2] À DISQUE = N'C: Programmes Microsoft SQL Server MSSQL13.MSSQLSERVER MSSQL Backup DB2.bak'; ALLER
SAUVEGARDE BASE DE DONNÉES [[[[DB3] À DISQUE = N'C: Programmes Microsoft SQL Server MSSQL13.MSSQLSERVER MSSQL Backup DB3.bak'; ALLER
À ce stade, nous sommes libres de détacher les bases de données et de disposer des fichiers de base de données. Il serait peut-être bon de conserver les fichiers jusqu'à ce que nous ayons vérifié que la restauration a fonctionné. Comme il s’agit d’un exemple artificiel, passons à la restauration.
– Restaurer des bases de données RESTORE DATABASE [DB1] FROM DISK = N'C: Program Files Microsoft SQL Server MSSQL13.MSSQLSERVER MSSQL Backup DB1.bak ' WITH REPLACE, FILE = 1, DÉPLACEZ N'DB1 'À N'C: Program Files Microsoft Serveur SQL MSSQL13.MSSQLSERVER MSSQL DATA DB1.mdf', DÉPLACER N'DB1_log 'À N'C: Program Files Microsoft Serveur SQL MSSQL13.MSSQLSERVER MSSQL DATA DB1_log.ldf', NOUNLOAD, STATS = 5 ALLER RESTORE DATABASE [DB2] FROM DISK = N'C: Program Files Microsoft SQL Server MSSQL13.MSSQLSERVER MSSQL Backup DB2.bak ' WITH REPLACE, FILE = 1, DÉPLACEZ N'DB2 'À N'C: Program Files Microsoft Serveur SQL MSSQL13.MSSQLSERVER MSSQL DATA DB2.mdf', DÉPLACER N'DB2_log 'À N'C: Program Files Microsoft Serveur SQL MSSQL13.MSSQLSERVER MSSQL DATA DB2_log.ldf', NOUNLOAD, STATS = 5 ALLER RESTORE DATABASE [DB3] FROM DISK = N'C: Program Files Microsoft SQL Server MSSQL13.MSSQLSERVER MSSQL Backup DB3.bak ' WITH REPLACE, FILE = 1, DÉPLACEZ N'DB3 'À N'C: Program Files Microsoft Serveur SQL MSSQL13.MSSQLSERVER MSSQL DATA DB3.mdf', DÉPLACER N'DB3_log 'À N'C: Program Files Microsoft Serveur SQL MSSQL13.MSSQLSERVER MSSQL DATA DB3_log.ldf', NOUNLOAD, STATS = 5 ALLER
– Restaurer des bases de données RESTAURER BASE DE DONNÉES [[[[DB1] DE DISQUE = N'C: Programmes Microsoft SQL Server MSSQL13.MSSQLSERVER MSSQL Backup DB1.bak' AVEC REMPLACER, FICHIER = 1, BOUGE TOI N'DB1' À N'C: Programmes Microsoft SQL Server MSSQL13.MSSQLSERVER MSSQL DATA DB1.mdf', BOUGE TOI N'DB1_log' À N'C: Programmes Microsoft SQL Server MSSQL13.MSSQLSERVER MSSQL DATA DB1_log.ldf', NOUNLOAD, STATISTIQUES = 5 ALLER
RESTAURER BASE DE DONNÉES [[[[DB2] DE DISQUE = N'C: Programmes Microsoft SQL Server MSSQL13.MSSQLSERVER MSSQL Backup DB2.bak' AVEC REMPLACER, FICHIER = 1, BOUGE TOI N'DB2' À N'C: Programmes Microsoft SQL Server MSSQL13.MSSQLSERVER MSSQL DATA DB2.mdf', BOUGE TOI N'DB2_log' À N'C: Programmes Microsoft SQL Server MSSQL13.MSSQLSERVER MSSQL DATA DB2_log.ldf', NOUNLOAD, STATISTIQUES = 5 ALLER
RESTAURER BASE DE DONNÉES [[[[DB3] DE DISQUE = N'C: Programmes Microsoft SQL Server MSSQL13.MSSQLSERVER MSSQL Backup DB3.bak' AVEC REMPLACER, FICHIER = 1, BOUGE TOI N'DB3' À N'C: Programmes Microsoft SQL Server MSSQL13.MSSQLSERVER MSSQL DATA DB3.mdf', BOUGE TOI N'DB3_log' À N'C: Programmes Microsoft SQL Server MSSQL13.MSSQLSERVER MSSQL DATA DB3_log.ldf', NOUNLOAD, STATISTIQUES = 5 ALLER
Branchez le nouveau chemin de la clause MOVE TO et la restauration y placera les fichiers. Après avoir migré certaines bases de données, nous voulons être certains que tout va bien et que le système est opérationnel. Quelques contrôles simples permettent de mettre vos parties prenantes à l'aise. Après la migration des fichiers de base de données, il est bon de procéder comme suit:
Vérifiez sys.database_files pour vous assurer qu'ils sont dirigés au bon endroit Exécuter DBCC CHECKDB sur les bases de données déplacées
Le déplacement des fichiers de base de données peut créer des problèmes qu'une vérification de cohérence rapide peut atténuer.
Chacune des méthodes présentées ci-dessus présente des avantages et des inconvénients pour déplacer des fichiers de base de données. Assurez-vous que, quelle que soit la technique que vous choisissez d'utiliser, vous la testez d'abord sur un serveur hors production. Ce n'est pas le point que vous voulez rencontrer des surprises inconnues. La méthode la plus sûre est probablement # 2 – mettre en mode hors connexion, déplacer des fichiers, modifier le fichier, le mettre en ligne. Le détachement risque de permettre la suppression des fichiers, mais si c'est ce que vous voulez, détachez comme il convient. La méthode de sauvegarde est probablement mieux conservée pour la veille chaud / froid, mais pourrait fonctionner en fonction de l'utilisation du système et des contraintes.
Comme ça: Comme Chargement…
Click to rate this post! [Total: 0 Average: 0]
Topics and keywords
Themes: Serveur d'impression
License & attribution
License: CC BY-ND 4.0.
Attribution required: yes.
Manifest: https://tutos-gameserver.fr/llm-endpoints-manifest.json
LLM Endpoints plugin version 1.1.2.