Documentation > Commandes > Alter
La commande alter permet de modifier un data broker, un serveur, une table ou un utilisateur.
Cette commande permet de modifier l'état d'un broker. Il existe trois états : online offline et lost.
Il faut utiliser un compte administrateur pour modifier un data broker.
Syntaxe: alter databroker DATA_BROKER_NAME set offline;
Le fait de placer un data broker offline va interdire à toute nouvelle requête de lire ou d'écrire dans les segments qu'il porte. L'effet est immédiat pour les prochaines requêtes mais les requêtes en cours peuvent continuer de l'utiliser jusqu'à la fin de leur exécution.
Placer un data broker offline est utile dans deux situations :
- Le data broker va faire l'objet d'une maintenance qui va le rendre indisponible,
- Le data broker a eu un incident et n'est plus disponible.
Dans les deux cas de figure, l'intérêt est de réduire l'effet des erreurs que les requêtes rencontreraient si elles tentaient d'utiliser le databroker concerné.
Notes :
- Si une requête d'écriture qui doit éviter de mettre à jour un segment porté par un un data broker offline elle ne tente pas de le modifier. Si le segment concerné n'a pas dhomologue, la requête échoue. Sinon, le segment est marqué comme étant désynchronisé et ses homologues sont mis à jour.
- Si une requête de lecture doit éviter d'utiliser un segment porté par un un data broker offline, elle utilisera un homologue si possible et échouera sinon.
Syntaxe: alter databroker DATA_BROKER_NAME set online [ force | graceful ];
La première action du synsql server qui reçoit cette instruction est de valider que le data broker est bien disponible. Si tel n'est pas le cas, le data broker reste offline.
Le fait de placer un data broker online va autoriser les prochaines requêtes à utiliser tous les segments qu'ils porte. Ceux qui sont désynchronisés le restent mais le nouvel état du broker autorise leur resynchronisation via la commande repair table.
Pendant que le data broker était offline, des utilisateurs ont pu exécuter des requêtes de supression de tables qui y possédaient des segments. Ces requêtes ont bien été exécutées mais faute de disponibilité du data broker des segments n'ont pas été supprimés. Ils sont dits orphelins. Si un data broker contient des segments orphelins, sa remise en ligne ne peut se faire qu'avec l'option force; elle aura pour effet de les supprimer.
Cette commande permet de déclarer qu'un data broker a subit un incident fatal. Elle a pour effet de marquer tous les segment qu'il portait comme désynchronisés.
Syntaxe: alter databroker DATA_BROKER_NAME set lost
La gestion de la perte complète d'un data broker est décrite au chapitre 9 du guide de l'administrateur.
La commande alter server est dédiée au contrôle du niveau de journalisation.
Syntaxe : alter server set log level Basic|Error|Warning|Info|Debug;
Le changement de niveau de journalisation n'est pertinent que pour le serveur Synsql auquel le client est connecté. Il ne concerne pas les autres synsql serveurs du cluster. Le changement est dynamique, mais en cas de redémarrage du serveur Synsql, il utilisera la valeur du fichier de paramètres if any ou Basic.
Rappel : pour vérifier la valeur actuelle du niveau de journalisation, on peut utiliser la commande show server;.
La commande alter table permet :
- D'ajouter ou de supprimer une colonne à une table.,
- De préparer le déploiement d'une table,
- De gérer ses segments.
Syntax: alter table Table_Name Add column Col_Name Col_type [Column constraint] [NULL|NOT NULL];
Le fonctionnement de cette instruction dépend de l'état du déploiement de la table.
4.1.1 La table n'est pas déployée :
Si la table a été créée à l'aide de la clause empty, le serveur va vérifier le nom de la colonne et enregistrer le type tel quel. Si le type est incorrect ou si l'ajout de la colonne conduit à un dépassement de capacité le futur déploiement échouera mais le serveur ne sait pas l'anticiper.
Si la table a été créée à partir d'une requête, l'instruction va échouer : Le serveur ne sait pas intégrér la nouvelle colonne dans la requête. Dans ce cas, vous pouvez recréer la table avec une requête qui inclut la nouvelle colonne. Vous pouvez aussi recréer la table vide (empty) et lui ajouter les colonnes souhaitées une à une.
4.1.2 La table est déployée
L'objectif est de provoquer l'exécution de la requête d'ajout de colonne sur tous les segments de la table.
Dans un premier temps, le serveur vérifie que toutes les partitions ont au moins un segment sain, porté par un data broker 'en ligne'. Si tel n'est pas le cas, l'instruction échoue.
Dans un second temps, le serveur provoque l'exécution de la requête sur tous les segments de la table qui ne sont pas désynchronisés. Le serveur ne fait aucune analyse préalable de la requête. Si elle comporte une erreur ou si elle conduit à un dépassement de capacité, elle échouera sur tous les segments. Dans ce cas, le serveur laisse la définition de la table inchangée.
Syntax: alter table Table_Name drop column Col_Name
Le fonctionnement de cette instruction dépend de l'état du déploiement de la table.
4.2.1 La table n'est pas déployée :
Si la table a été créée à l'aide de la clause 'empty' et si la colonne existe, le serveur va la supprimer. Dans le cas contraire, la requête échoue.
Si la table a été créée à partir d'une requête, l'instruction va échouer : Le serveur ne sait pas retirer la colonne de la requête. Dans ce cas, vous pouvez recréer la table avec une requête qui exclut la colonne. Vous pouvez aussi recréer la table vide (empty) et lui ajouter les colonnes souhaitées une à une.
4.2.2 La table est déployée
Dans un premier temps, le serveur effectue des vérifications :
- Si la colonne fait partie de la clef de hachage, l'instruction échoue.
- Si au moins une des partitions ne dispose d'aucun data broker 'en ligne', l'instruction échoue.
Dans un second temps, le serveur provoque l'exécution de la commande sur tous les segments de la table qui sont synchronisés et qui disposent d'un serveur en 'ligne'.
Cette instruction permet de définir le datacenter dans lequel la table devra être déployée.
Syntax: alter table Table_Name set datacenter DatacenterName;
Si la table est déjà déployée, l'instruction échoue. Par contre, tant que la table n'est pas déployée le datacenter peut être modifié à volonté.
Rappel : le processus de création d'une table ne prévoit de définir un datacenter par défaut. Il est donc obligatoire de définir un datacenter pour pouvoir déployer une table.
Cette instruction vise toute table qui n'est pas encore déployée. Elle a pour effet de supprimer toutes les colonnes de la table et son éventuelle requête de définition.
Syntax: alter table Table_Name set empty;
Cette instruction est similaire à la suppression de la table et à sa recréation à la différence près que le datacenter et le nombre de réplicats est conservé.
Cette commande permet de définir quel colonnes constitueront la clef de hachage et dans quel ordre.
Syntax: alter table Table_Name set hash key Col_1, Col2, … ;
Tant que la table n'est pas déployée, vous pouvez utiliser cette instruction pour redéfinir la clef de hachage à volonté.
Si vous supprimez une colonne de la table qui faisait partie de la clef de hachage avant le déploiement, vous réduisez la clef de hachage. Si vous supprimez toutes les colonnes qui constituaient la clef de hachage, il faudra la redéfinir pour pouvoir déployer la table.
Cette commande permet de définir le nombre d'images des futurs segments de la table
Syntax: alter table Table_Name set replicate 1 | 2 | 3 ;
Tant que la table n'est pas déployée, le nombre d'images peut être modifié à volonté. Une fois la table déployée, il n'est plus possible de modifier le nombre d'images.
Par défaut, le processus de création d'une table propose une valeur par défaut de 2 images. Si cette valeur vous convient, vous n'avez pas besoin d'utiliser cette commande.
Cette commande est dédiée aux tables qui n'ont qu'un seul replicat. Elle a pour effet de déclarer que tous leurs segments sont disponibles.
Syntax: alter table Table_Name set segments up;
Quand une opération d'écriture échoue sur un segment, ce dernier est marqué comme désynchronisé et l'instruction échoue. Si le data broker est remis en ligne avec ses données, vous ne pouvez pas resynchroniser le segment car il n'a pas d'homologue. Vous pouvez décider de supprimer la table si elle est perdue. Si vous décidez de continuer de l'utiliser dans l'état vous devez utiliser cette commande.
Note : Vous ne pouvez pas utiliser cette commande sur des tables qui possèdent deux ou trois réplicats. A la place, vous devez utiliser la commande repair
| 15 Jan 2026 07:20:45 | English version |