ApsaraDB RDS for SQL Server restreint certaines opérations natives de SQL Server afin de préserver la stabilité des instances et l'intégrité des sauvegardes. Cette rubrique explique comment créer, supprimer et renommer des bases de données en T-SQL, détaille les opérations ALTER DATABASE bloquées et présente les alternatives appropriées pour chaque cas.
Prérequis
Avant de commencer, assurez-vous de disposer :
D'une instance ApsaraDB RDS for SQL Server exécutant SQL Server 2012 ou une version ultérieure
Créer une base de données
Exécutez l'instruction suivante :
CREATE DATABASE TestDb
RDS attribue automatiquement le chemin d'accès aux fichiers de données. Ne spécifiez pas de chemin d'accès dans l'instruction.
Pour afficher les chemins d'accès aux fichiers de données et aux journaux de toutes les bases de données de l'instance :
SELECT db_name(database_id), physical_name
FROM sys.master_files;
Supprimer une base de données
Sauvegardez la base de données avant de la supprimer. Une base de données supprimée ne peut être récupérée qu'à partir d'une sauvegarde.
Exécutez l'instruction suivante :
DROP DATABASE [TestDb]
Si aucune sauvegarde n'existe au moment de la suppression, RDS affiche un message informatif accompagné de la confirmation de réussite :
DROP DATABASE [TestDb]
-------------------------------------------------------------------------------------------------
Kindly reminder:
your database [TestDb] does not exist any backup set.
-------------------------------------------------------------------------------------------------
Login User [Test11] has dropped database [TestDb] .
Renommer une base de données
Utilisez la procédure stockée sp_rds_modify_db_name pour renommer une base de données. Cette procédure ne nécessite aucune autorisation supplémentaire et peut être exécutée par un compte standard. N'utilisez pas la commande native ALTER DATABASE ... MODIFY NAME ni l'interface graphique de SQL Server Management Studio (SSMS) : les deux méthodes échouent avec une erreur d'autorisation, car RDS n'accorde par défaut aux comptes que l'autorisation CREATE DATABASE sur la base de données master, ce qui est insuffisant pour renommer une base de données.
Éditions d'instances prises en charge :
Série Haute disponibilité (HA)
Édition Cluster
Série Basic
Syntaxe :
USE db
GO
EXEC sp_rds_modify_db_name 'db', 'new_db'
GO
|
Paramètre |
Description |
|
Premier paramètre |
Nom d'origine de la base de données |
|
Deuxième paramètre |
Nouveau nom de la base de données |
Sur les instances de la série Haute disponibilité (HA) et de l'édition Cluster, le renommage d'une base de données déclenche une reconstruction automatique de la configuration de réplication entre les instances primaire et secondaire. Durant cette opération, RDS sauvegarde et restaure les données de la base de données. Si la base de données est volumineuse, vérifiez que l'instance dispose d'un espace de stockage libre suffisant avant de la renommer.
Restrictions de modification des bases de données
La plupart des attributs ALTER DATABASE peuvent être modifiés. Les opérations suivantes sont bloquées.
Déplacer une base de données vers un autre chemin d'accès de fichier
La spécification d'un chemin d'accès invalide dans ALTER DATABASE ... MODIFY FILE renvoie une erreur :
ALTER DATABASE [TestDb] MODIFY FILE (NAME = N'TestDb', FILENAME = N'E:\KKKK\DDD\DATA\TestDb.mdf')
Msg 50000, Level 16, State 1, Procedure ******, Line 152
The file path [
E:\KKKK\DDD\DATA\TestDb.mdf ] is invalid, please specify correct path folder [ E:\mmm\gggg\ ].
Msg 3609, Level 16, State 2, Line 2
The transaction ended in the trigger. The batch has been aborted.
Modifier le modèle de récupération pour utiliser un modèle autre que FULL
RDS impose le modèle de récupération FULL afin de maintenir la chaîne des journaux pour les restaurations à un instant donné. Toute tentative de basculement vers SIMPLE :
ALTER DATABASE [TestDb] -- [TestDb] is the database name.
SET RECOVERY SIMPLE
RDS bloque la modification et rétablit le modèle de récupération sur FULL :
Msg 50000, Level 16, State 1, Procedure ******, Line 46
Login User [Test11] can't change database [TestDb] recovery model.
Msg 3609, Level 16, State 2, Line 2
The transaction ended in the trigger. The batch has been aborted.
Si le journal des transactions est saturé, la seule option de réduction consiste à tronquer la chaîne des journaux. Si vous devez impérativement passer au modèle de récupération SIMPLE en situation d'urgence — par exemple pour tronquer un journal trop volumineux — sachez que cette action interrompt la chaîne de sauvegarde. Toutes les tâches de restauration à un instant donné couvrant le moment de l'interruption échoueront. Après l'exécution des instructions, vous pouvez ignorer les messages d'erreur ; la chaîne des journaux est alors interrompue et le modèle est défini sur SIMPLE. Vous assumez la responsabilité des conséquences.
Rétablir une base de données en ligne (ONLINE) après l'avoir mise hors ligne (OFFLINE)
L'exécution directe de ALTER DATABASE [TestDb] SET ONLINE après la mise hors ligne d'une base de données renvoie :
Msg 5011, Level 14, State 9, Line 1
User does not have permission to alter database 'TestDb', the database does not exist, or the database is not in a state that allows access checks.
Msg 5069, Level 16, State 1, Line 1
ALTER DATABASE statement failed.
Utilisez plutôt la procédure stockée sp_rds_set_db_online :
EXEC sp_rds_set_db_online 'TestDb'
Erreurs courantes
Erreur lors de la modification du nom d'une base de données RDS SQL Server avec la commande SQL native ALTER DATABASE ou l'interface graphique SSMS ?
Étapes suivantes
Gérer les bases de données via la console : Créer une base de données et Supprimer une base de données
Gérer les bases de données via l'API : CreateDatabase et DeleteDatabase
Modifier le classement des jeux de caractères et le fuseau horaire : Modifier le classement des jeux de caractères et le fuseau horaire ; API : DescribeCollationTimeZones
Afficher et modifier les propriétés de la base de données, réduire les journaux des transactions ou mettre à jour les statistiques : Gérer les propriétés de la base de données ; API : ModifyDatabaseConfig

