Tous les articles par Mr COBOL

CICS – Terminologie

Concepts de tâche, multitâche, multithreading, conversation et pseudo conversation

Tâche:

Une tâche est créée pour chaque identifiant de transaction exécuté, TRANSID, reconnu par CICS (trouvé dans la table de contrôle du programme). Une tâche peut inclure un ou plusieurs programmes. Une tâche continue jusqu’à ce qu’un programme rende le contrôle à CICS ou émette une commande RETURN dans un programme pseudo-conversationnel. Une seule tâche peut être en cours d’exécution à un moment donné, mais l’utilisateur peut percevoir que de nombreuses tâches sont en cours d’exécution.

Multitâche :

Le multitâche signifie que le système d’exploitation (OS) permet à plusieurs tâches d’être exécutées simultanément, que les tâches utilisent le même programme ou des programmes différents. Par conséquent, ce n’est pas un concept propre à CICS. Mais CICS gère le multitâche des tâches CICS dans sa propre région. Autrement dit, CICS fournit un environnement multitâche dans lequel plusieurs tâches CICS s’exécutent simultanément.

Multithread :

Le multithreading est l’environnement système dans lequel les tâches partagent le même programme dans l’environnement multitâche. Le multithreading est un sous-ensemble du multitâche, puisqu’il concerne des tâches qui utilisent le même programme.Dans l’environnement multithreading, un programme est partagé par plusieurs tâches simultanément. Pour chaque tâche, le programme (c’est-à-dire les instructions et la zone de données) doit fonctionner comme s’il exécutait des instructions exclusivement pour chaque tâche. Par conséquent, cela nécessite des considérations particulières telles que la réentrance ou la réutilisation en série.Contrairement à l’environnement multithreading, dans l’environnement à thread unique, un programme est utilisé par un seul travail (ou tâche) à la fois. Un exemple typique est un travail par lots.

Terminologie SCIC


Concepts de tâche, multitâche, multithreading, conversation et pseudo conversation

Tâche:

Une tâche est créée pour chaque identifiant de transaction exécuté, TRANSID, reconnu par CICS (trouvé dans la table de contrôle du programme). Une tâche peut inclure un ou plusieurs programmes. Une tâche continue jusqu’à ce qu’un programme rende le contrôle à CICS ou émette une commande RETURN dans un programme pseudo-conversationnel. Une seule tâche peut être en cours d’exécution à un moment donné, mais l’utilisateur peut percevoir que de nombreuses tâches sont en cours d’exécution.


Multitâche :

Le multitâche signifie que le système d’exploitation (OS) permet à plusieurs tâches d’être exécutées simultanément, que les tâches utilisent le même programme ou des programmes différents. Par conséquent, ce n’est pas un concept propre à CICS. Mais CICS gère le multitâche des tâches CICS dans sa propre région. Autrement dit, CICS fournit un environnement multitâche dans lequel plusieurs tâches CICS s’exécutent simultanément.

Multithread :

Le multithreading est l’environnement système dans lequel les tâches partagent le même programme dans l’environnement multitâche. Le multithreading est un sous-ensemble du multitâche, puisqu’il concerne des tâches qui utilisent le même programme.

Dans l’environnement multithreading, un programme est partagé par plusieurs tâches simultanément. Pour chaque tâche, le programme (c’est-à-dire les instructions et la zone de données) doit fonctionner comme s’il exécutait des instructions exclusivement pour chaque tâche. Par conséquent, cela nécessite des considérations particulières telles que la réentrance ou la réutilisation en série.

Contrairement à l’environnement multithreading, dans l’environnement à thread unique, un programme est utilisé par un seul travail (ou tâche) à la fois. Un exemple typique est un travail par lots.


Question d’entretien : Différence entre le multitâche et le multithreading ?

Le système d’exploitation permet l’exécution simultanée de plusieurs tâches, c’est ce qu’on appelle le multitâche. Si la ou les tâches simultanées utilisent la même copie du programme, cela s’appelle le multithreading. Il est donc évident que le multitâche est un sous-ensemble du multithreading.


Modes de programmation d’applications :

  • Conversationnel
  • Pseudo-conversationnel

De la conversation:

  • Le système envoie un message à l’écran
  • Attend la réponse de l’utilisateur.
  • Cela prend un temps considérable en termes de temps système. Ce temps est appelé THINK TIME de l’utilisateur. (Désavantage)
  • Reçoit la réponse
  • Traiter les données reçues.

La programmation conversationnelle est une technique de codage qui entraîne le chargement d’un programme et le reste dans la mémoire principale jusqu’à ce que l’utilisateur ait fini de travailler avec le programme. Le programme n’est pas libéré de la mémoire principale lorsqu’il n’est pas actif, comme dans la programmation pseudo conversationnelle. Par exemple, un programme conversationnel affiche une carte et reste dans la mémoire principale en attendant la réponse d’un utilisateur.

Les applications pratiques de la programmation conversationnelle sont très limitées.

Pseudoconversation :

  • Le système envoie un message
  • Terminer la transaction en spécifiant la prochaine transaction à démarrer
  • Allouer des ressources à d’autres transactions
  • Interroger l’entrée du terminal à intervalle régulier
  • Reçoit les données et démarre la prochaine transaction spécifiée précédemment

CICS permet à de nombreux utilisateurs de se connecter et d’utiliser CICS simultanément. La taille de la mémoire principale de l’ordinateur est finie. Si de nombreux utilisateurs exécutent des transactions nécessitant un stockage principal considérable, une condition de stockage insuffisant peut se produire, entraînant des retards.

La programmation pseudo-conversationnelle est une technique de codage qui se traduit par le chargement d’un programme dans le stockage principal en cas de besoin et sa libération lorsqu’il n’est plus actif. Par exemple, lorsqu’une carte est affichée et que le programme attend la réponse d’un utilisateur, le programme peut être libéré de la mémoire principale et rechargé si nécessaire.

CICS charge et libère automatiquement les programmes d’application de la mémoire principale. Les programmes à forte utilisation sont souvent définis comme résidents du stockage principal et le système les conserve dans le stockage principal. Les tables et les cartes, qui sont considérées comme des programmes par CICS, sont généralement contrôlées par un programme.

Généralement, lors de l’utilisation de la technique de traitement pseudo-conversationnelle, le fait d’appuyer sur une touche AID provoque le chargement d’un programme s’il n’est pas déjà dans la mémoire principale. Lorsqu’un programme a terminé avec un segment logique de traitement, il envoie normalement une carte, enregistre les données requises et rend le contrôle à CICS.


Réentrant et Quasi-réentrant

Si la même copie du programme est utilisée par plusieurs tâches, le système doit s’occuper de la réentrée appropriée après l’interruption SVC/CICS.

Un programme réentrant est défini comme un programme qui ne se modifie pas pour pouvoir se réintégrer et continuer le traitement après une interruption par l’appel SVC de l’OS. Les programmes batch ne sont pas réentrants. La réentrance dans l’environnement CICS est appelée quasi-entrant car l’interruption dans CICS peut impliquer plus d’un appel SVC ou aucun SVC du tout.

Les programmes COBOL doivent être compilés avec l’option RENT pour la réentrance dans un environnement multithreading.

Question d’entretien : Différence entre le multitâche et le multithreading ?

Le système d’exploitation permet l’exécution simultanée de plusieurs tâches, c’est ce qu’on appelle le multitâche. Si la ou les tâches simultanées utilisent la même copie du programme, cela s’appelle le multithreading. Il est donc évident que le multitâche est un sous-ensemble du multithreading.

CICS – Environnement

CICS lui-même agit comme un système d’exploitation. Son travail consiste à fournir un environnement pour l’exécution en ligne des programmes d’application. CICS s’exécute dans une région, une partition ou un espace adresse. CICS gère la planification des programmes qui s’exécutent sous lui. CICS s’exécute comme un travail par lots et nous pouvons le visualiser dans le spool en émettant la commande PREFIX CICS*.

Cinq services principaux sont fournis par le CICS. Tous ces services accomplissent ensemble une tâche:

  1. Services système
  2. Services de communication de données
  3. Services de traitement des données
  4. Services de programmation d’applications
  5. Services de surveillance


Services système :

CICS maintient des fonctions de contrôle pour gérer l’allocation ou la désallocation des ressources au sein du système qui sont les suivantes :

Contrôle des tâches – Le contrôle des tâches fournit des fonctionnalités de planification des tâches et de multitâche. Il prend en charge l’état de toutes les tâches CICS. Le contrôle des tâches répartit le temps processeur entre les tâches CICS simultanées. C’est ce qu’on appelle le multitâche. CICS essaie de donner la priorité au temps de réponse de la tâche la plus importante.

Contrôle du programme – Le contrôle du programme gère le chargement et la libération des programmes d’application. Dès qu’une tâche commence, il devient nécessaire d’associer la tâche au programme d’application approprié. Bien que de nombreuses tâches puissent nécessiter l’utilisation du même programme d’application, CICS ne charge qu’une seule copie du code en mémoire. Chaque tâche chemine indépendamment dans ce code, de sorte que de nombreux utilisateurs peuvent tous exécuter des transactions qui utilisent simultanément la même copie physique d’un programme d’application.

Contrôle du stockage – Le contrôle du stockage gère l’acquisition et la libération du stockage principal. Le contrôle du stockage acquiert, contrôle et libère le stockage dynamique. Le stockage dynamique est utilisé pour les zones d’entrée/sortie, les programmes, etc.

Contrôle d’intervalle – Le contrôle d’intervalle offre des services de minuterie.


Services de communication de données :

Les services de communication de données s’interfacent avec les méthodes d’accès aux télécommunications telles que BTAM, VTAM et TCAM pour gérer les demandes de communication de données des programmes d’application.

  • CICS libère les programmes d’application de la charge de traiter les problèmes matériels du terminal grâce à l’utilisation du support de mappage de base (BMS).
  • CICS fournit un fonctionnement multirégional (MRO) grâce auquel plusieurs régions CICS du même système peuvent communiquer.
  • CICS fournit une communication inter-système (ISC) grâce à laquelle une région CICS d’un système peut communiquer avec la région CICS d’un autre système.

Services de traitement des données :

Interface des services de traitement des données avec les méthodes d’accès aux données telles que BDAM, VSAM, etc.

  • CICS facilite le traitement des demandes de traitement de données provenant des programmes d’application. CICS fournit aux programmeurs d’applications un ensemble de commandes pour gérer l’accès à l’ensemble de données et à la base de données et les opérations associées.
  • Les services de traitement des données s’interfacent avec les méthodes d’accès aux bases de données telles que IMS/DB, DB2, etc. et facilitent le traitement des demandes de base de données à partir des programmes d’application.
  • CICS facilite la gestion de l’intégrité des données en contrôlant les mises à jour simultanées des enregistrements, la protection des données en tant que tâches ABEND et la protection des données en cas de défaillance du système.

Services de programmation d’applications :

Interface des services de programmation d’applications avec les programmes d’application. Les services de programmation d’application de CICS fournissent des fonctionnalités telles que la traduction au niveau de la commande, CEDF (la fonction de débogage) et CECI (la fonction d’interpréteur de commandes). Nous en discuterons plus en détail dans les prochains modules.


Services de surveillance :

Les services de surveillance surveillent divers événements dans l’espace d’adressage CICS. Il fournit une série d’informations statistiques qui peuvent être utilisées pour le réglage du système.

CICS – Programme en ligne VS Programme Batch


Système de traitement par Batch :

Un système de traitement par batch gère de grandes quantités de données traitées selon un calendrier de routine. Le traitement a lieu lorsque l’après l’événement économique se produit et est enregistré. Il nécessite moins de ressources de programmation, de matériel et de formation. Dans ce système, les programmes sont planifiés par le biais de tâches. Il permet le partage de programmes et de fichiers.

Les exemples incluent la requête d’inventaire, la transaction d’achat sur le site Web, le retrait de compte e-Banking, etc.

Avantages :

  • Gère facilement les gros travaux répétés.
  • Les travaux répétés sont effectués rapidement.
  • Les systèmes par batch peuvent fonctionner hors ligne.

Désavantages:

  • Difficile de déboguer les systèmes batch
  • Parfois coûteux
  • Attend pendant une durée inconnue si une erreur se produit avec n’importe quel travail

Système de traitement en ligne :

Un système de traitement en ligne gère les transactions en temps réel et fournit la sortie instantanément. Lorsqu’un événement économique a lieu, le traitement a lieu. Il nécessite plus de ressources matérielles dédiées, des éléments de traitement sont nécessaires. Dans ce système, les programmes sont lancés par le biais de transactions. Il ne permet pas le partage de programmes et de fichiers.

Les exemples incluent le calcul des taxes de fin de mois, la transformation des données, l’analyse des données, la transformation des données, etc.

Avantages :

  • Utile pour les transactions d’argent en ligne
  • Utile pour les achats en ligne
  • Soutien et stabilité

Désavantages:

  • Des millions de demandes deviennent parfois difficiles à gérer
  • beaucoup de personnel nécessaire pour maintenir l’inventaire
  • Les problèmes matériels créent de gros problèmes

En quoi les programmes en ligne diffèrent-ils des programmes batch ?

Système de traitement BATCHSystème en ligne
EntréeDonnées de carte, bande, disque. En BATCH, séquentiel, programmé. Par exemple Keypunch, codage de données.Données du terminal. Aléatoire, concurrent. Peut être saisi au fur et à mesure que les données arrivent.
Update  du fichierRéservé lors d’un travail. D’autres travaux doivent attendre.Concurrent. Instantané.
Entrée/sortie de fichierL’entrée/la sortie doit être en séquenceLes entrées/sorties peuvent être simultanées
Sortie Rapports imprimés, fichiers de sortieMessages envoyés à la console, Fichiers mis à jour Journal système, Rapports.
Début de traitementL’opérateur (ou le système d’exploitation) lance le travailLa saisie de Trans-ID déclenche la transaction
Mode processusTâche unique et thread Priorité dans la planification des tâchesTraitement prioritaire multitâche et multithread
Fin de traitementChaque travailChaque opération
Turn-aroundGénéralement beaucoup plus longtempsPresque instantané
RessourcesMoins d’utilisationPlus d’utilisation
ApplicationRapport de ventes mensuelRéservation de compagnie aérienne

Instruction SQL CREATE INDEX

L’instruction CREATE INDEX est utilisée pour créer des index dans les tables.

Les index sont utilisés pour récupérer les données de la base de données plus rapidement qu’autrement. Les utilisateurs ne peuvent pas voir les index, ils sont juste utilisés pour accélérer les recherches/requêtes.

La mise à jour d’une table avec des index prend plus de temps que la mise à jour d’une table sans (car les index ont également besoin d’une mise à jour). Donc, ne créez des index que sur les colonnes qui seront fréquemment recherchées.

CREATE [UNIQUE] INDEX nom-index
        ON nom-table (nom-colonne [ASC | DESC])
        [CLUSTER | NOT CLUSTER]
        [PARTITIONED]
        [PADDED | NOT PADDED]
        [using-specification]
        [free-specification]
        [DEFINE YES | NO]
        [COMPRESS YES | NO]
        [PARTITION BY RANGE partition-element
                      using-specification
                      free-specification]
        [BUFFERPOOL nom-bp]
        [CLOSE YES | NO]
        [DEFER YES | NO]
        [PIECESIZE integer]
        [COPY YES | NO]


using-specification
        USING
              VCAT nom-catalogue |
              STOGROUP nom-stogroup
                  PRIQTY integer
                  SECQTY integer
                  ERASE YES | NO

free-specification
        FREEPAGE integer
        PCTFREE integer

partition-element
        PARTITION integer
        ENDING AT (constant/MAXVALUE/MINVALUE)

UNIQUE:

Cela empêche la table de contenir deux lignes ou plus avec la même valeur de la clé d’index.

ASC :

  • Spécifie que les entrées d’index doivent être conservées dans l’ordre croissant des valeurs de colonne.
  • Ce sont les paramètres par défauts.

DESC :

Spécifie que les entrées d’index doivent être conservées dans l’ordre décroissant des valeurs de colonne.

CLUSTER ou NOT CLUSTER :

Spécifie si l’index est l’index de clustering de la table ou non.

PARTITIONED :

Spécifie que l’index est des données partitionnées

PADDED ou NOT PADDED :

Spécifie comment les colonnes de chaîne de longueur variable doivent être stockées dans l’index.

  • PADDED : spécifie que les colonnes de chaîne de longueur variable dans l’index sont toujours remplies avec le caractère de remplissage par défaut jusqu’à leur longueur maximale.
  • NOT PADDED : spécifie que les colonnes de chaîne de longueur variable ne doivent pas être remplies à leur longueur maximale dans l’index.

Clause USING :

  • Pour les index non partitionnés, la clause USING indique si les ensembles de données de l’index doivent être gérés par l’utilisateur ou gérés par DB2.
  • VCAT : spécifie que le premier ensemble de données pour l’index est géré par l’utilisateur et que les ensembles de données suivants, si nécessaire, sont également gérés par l’utilisateur.
  • STOGROUP : Spécifie que DB2 définira et gérera les ensembles de données d’index. 
  • PRIQTY : spécifie l’allocation d’espace primaire minimum pour l’ensemble de données gérées DB2.
  • SECQTY : spécifie l’allocation d’espace secondaire minimum pour l’ensemble de données gérées DB2.
  • ERASE : Indique si les ensembles de données gérés par DB2 doivent être effacés lors de la suppression de l’index.

FREEPAGE :

Spécifie la fréquence à laquelle laisser une page d’espace libre lors de la création d’entrées d’index.

PCTFREE :

Détermine le pourcentage d’espace libre à laisser dans chaque page non-feuille et page feuille lorsque des entrées sont ajoutées à l’index.

DEFINE :

Spécifie quand les ensembles de données sous-jacents pour l’index sont physiquement créés.

  • OUI : les ensembles de données sont créés lors de la création de l’index. OUI est la valeur par défaut.
  • NON : les ensembles de données ne sont pas créés tant que les données ne sont pas insérées dans l’index.

COMPRESS :

Spécifie si la compression des données d’index sera utilisée.

  • NO : spécifie qu’aucune compression d’index ne sera utilisée. C’est la valeur par défaut.
  • YES : spécifie que la compression d’index sera utilisée.

PARTITION BY RANGE :

Spécifie que l’index est l’index de partitionnement.

  • PARTITION integer : une clause PARTITION spécifie la valeur la plus élevée de la clé d’index dans une partition d’un index de partitionnement.
  • ENDING AT : Spécifie qu’il s’agit de l’index de partitionnement et indique comment les données seront partitionnées.
    CONSTANT : spécifie une valeur constante avec un type de données qui doit être conforme aux règles d’attribution de cette valeur à la colonne.
    MAXVALUE : spécifie une valeur supérieure à la valeur maximale pour la clé de limite d’une limite de partition.
    MINVALUE : spécifie une valeur inférieure à la valeur minimale de la clé de limite d’une limite de partition.

BUFFERPOOL :

Identifie le pool de mémoire tampon à utiliser pour l’index.

CLOSE :

Spécifie si l’ensemble de données peut ou non être fermé lorsque l’index n’est pas utilisé et que la limite du nombre d’ensembles de données ouverts est atteinte.

  • OUI : Admissible à la fermeture. C’est la valeur par défaut
  • NON : Non éligible à la fermeture.

DEFER :

Indique si l’index est créé lors de l’exécution de l’instruction CREATE INDEX.

  • NON : L’index est construit. C’est la valeur par défaut.
  • OUI : L’index n’est pas construit.

PIECESIZE :

Spécifie l’adressabilité maximale de chaque ensemble de données pour un index.

COPY :

Indique si l’utilitaire COPY est autorisé pour l’index.

  • NON : N’autorise pas l’image complète ou les copies simultanées. NON est la valeur par défaut.
  • OUI : Autorise l’image complète ou les copies simultanées.

Exemple 1:

Créez un index sur la colonne TAB1_COL2 d’une table TB_TAB1.

CREATE INDEX IX_TAB1_COL2
       ON TB_TAB1(TAB1_COL2);

Créez un index nommé NOM_IX_PROJET sur la table TB_PROJET. Le but de l’index est de s’assurer qu’il n’y a pas deux entrées dans la table avec la même valeur pour le nom du projet (NOM_PROJET). Les entrées d’index doivent être dans l’ordre croissant.

CREATE UNIQUE INDEX NOM_IX_PROJET
       ON TB_PROJET(NOM_PROJET);

Créez un index nommé IX_EMPLOYE_JOB_DEPT sur la table TB_EMPLOYE. Organisez les entrées d’index dans l’ordre croissant par intitulé de poste (EMPLOYE_JOB) au sein de chaque département (EMPLOYE_DEPT).

CREATE INDEX IX_EMPLOYE_JOB_DEPT
       ON TB_EMPLOYE (EMPLOYE_DEPT, EMPLOYE_JOB);

Exemple 2 :

Créez un index unique, nommé DSN8910.IX_DEPT, sur la table DSN8910.TB_DEPT. Les entrées d’index doivent être dans l’ordre croissant par la colonne unique DEPT_NO. DB2 doit définir les ensembles de données pour l’index, à l’aide du groupe de stockage DSN8G910.

Chaque ensemble de données doit contenir au maximum 1 Mégaoctet de données. Utilisez 512 Ko comme allocation d’espace primaire pour chaque ensemble de données et 64 Ko comme allocation d’espace secondaire. Remplir l’index.

Les ensembles de données peuvent être fermés lorsque personne n’utilise l’index et n’ont pas besoin d’être effacés si l’index est supprimé.

CREATE UNIQUE INDEX DSN8910.IX_DEPT
        ON DSN8910.TB_DEPT
              (DEPT_NO ASC)
        PADDED
        USING STOGROUP DSN8G910
                       PRIQTY 512
                       SECQTY 64
                       ERASE NO
       BUFFERPOOL BP1
       CLOSE YES
       PIECESIZE 1M;

Explication:

Les ensembles de données sous-jacents pour l’index seront créés immédiatement, ce qui est la valeur par défaut (DEFINE YES). En supposant que la table DSN8910.TB_DEPT est vide, si nous voulions différer la création des ensembles de données jusqu’à ce que les données soient insérées pour la première fois dans l’index, nous spécifierions DEFINE NO au lieu d’accepter le comportement par défaut.

La spécification de PADDED garantit que les colonnes de chaînes de caractères de longueur variable dans l’index sont complétées par des blancs.

Exemple 3 :

Créez un index de cluster, nommé IX_EMP, sur la table TB_EMP dans la base de données DSN8910. Mettez les entrées dans l’ordre croissant par la colonne EMP_NO. Laissez DB2 définir les ensembles de données pour chaque partition à l’aide du groupe de stockage DSN8G910. Faites en sorte que l’allocation d’espace principal soit de 36 kilo-octets et autorisez DB2 à utiliser la valeur par défaut pour SECQTY. Si l’index est supprimé, les ensembles de données n’ont pas besoin d’être effacés.

Il doit y avoir 4 partitions, avec des entrées d’index réparties entre elles comme suit :

  • Partition 1 : entrées jusqu’à H99
  • Partition 2 : entrées au-dessus de H99 jusqu’à P99
  • Partition 3 : entrées au-dessus de P99 jusqu’à Z99
  • Partition 4 : entrées au-dessus de Z99

Associez l’index au pool de mémoire tampon BP1 et autorisez la fermeture des ensembles de données lorsque personne n’utilise l’index. Activez l’utilisation de l’utilitaire COPY pour l’image complète ou les copies simultanées.

CREATE INDEX DSN8910.IX_EMP
        ON DSN8910.TB_EMP
            (EMP_NO ASC)
        USING
            STOGROUP DSN8G910
                PRIQTY 36
                ERASE NO
        CLUSTER
        PARTITION BY RANGE
            (PARTITION 1 ENDING AT('H99'),
             PARTITION 2 ENDING AT('P99'),
             PARTITION 3 ENDING AT('Z99'),
             PARTITION 4 ENDING AT('999'))
        BUFFERPOOL BP1
        CLOSE YES
        COPY YES;

Instruction SQL CREATE TABLE

L’instruction CREATE TABLE est utilisée pour créer une nouvelle table dans la base de données.

Les tables peuvent être créées de deux manières :

  1. En spécifiant explicitement les colonnes et leurs types de données.
  2. Création basée sur la table existante.

Voici la syntaxe de création de table en spécifiant explicitement les colonnes et leurs types de données :

CREATE TABLE table-name
             column-definition
             table-constraint-clause
             physical-storage-clause

column-definition:
nom-colonne data type
    [WITH DEFAULT expression]
    [NULL|NOT NULL]
    [column-constraint-clause]
    [, nom-colonne data type [WITH DEFAULT expression] [NULL|NOT NULL]
    [column-constraint-clause]...]    

Constraint (column-constraint-clause or table-constraint-clause)
[CONSTRAINT constraint-name]
    [REFERENCES table-name [(column-name)]
          [ON DELETE {RESTRICT | CASCADE| SET TO NULL}]
    [UNIQUE]
    [PRIMARY KEY]
    [CHECK (check-condition)]

physical-storage-clause
IN database-name.tablespace-name

Default:

  • Lorsqu’une ligne est insérée dans la table et qu’aucune valeur n’est fournie pour la colonne, la valeur spécifiée dans la clause par défaut est insérée.
  • Si l’expression est manquante dans la clause par défaut, la valeur par défaut définie par le système pour le type de données de la colonne sera remplacée.

NULL / NON NULL :

  • NULL est une valeur par défaut.
  • NOT NULL : empêche la colonne de contenir des valeurs nulles. L’omission de NOT NULL implique que la colonne peut contenir des valeurs nulles.

Constraints :

Les contraintes sont définies à deux niveaux possibles.

  • Niveau colonne :Une contrainte au niveau de la colonne fait référence à une seule colonne et est définie avec la colonne. Celles-ci sont également appelées “contraintes en ligne”
  • Niveau tableau :Une contrainte au niveau de la table fait référence à une ou plusieurs colonnes et est définie séparément après la définition de toutes les colonnes. Celles-ci sont appelées contraintes hors ligne.
  • Vous devez utiliser une contrainte au niveau de la table si vous contraignez plusieurs colonnes.

Constraint-name :

  • Nom de la contrainte et est facultatif.
  • Si aucun nom de contrainte n’est spécifié, un nom de contrainte unique est généré.
  • Si le nom est spécifié, il doit être différent des noms de toute contrainte référentielle, de vérification, de clé primaire ou de clé unique précédemment spécifiée sur la table.

Contrainte FOREIGN KEY

  • La contrainte FOREIGN KEY est définie avec le mot clé REFERENCES.
  • La contrainte FOREIGN KEY (contrainte d’intégrité référentielle), assure que les valeurs de la clé étrangère correspondent aux valeurs d’une clé primaire.
  • Lors de la définition d’une contrainte FOREIGN KEY sur une table, le nom de colonne n’a pas besoin d’être identique au nom de colonne auquel il fait référence.
  • Par défaut, la contrainte de clé étrangère est de type DELETE RESTRICT : les lignes parentes ne peuvent pas être supprimées si des lignes enfants existent.
  • ON DELETE CASCADE : permet la suppression de la ligne de clé primaire et supprime également les lignes de clé étrangère qui s’y rapportent.
  • SET TO NULL : autorise la suppression de la ligne de clé primaire et, au lieu de supprimer toutes les lignes de clé étrangère associées, définit les colonnes de clé étrangère sur NULL.

Contrainte UNIQUE:

  • Pour appliquer des valeurs uniques à une colonne individuelle ou à un groupe de colonnes.
  • La colonne de contrainte UNIQUE ne doit pas contenir de valeurs NULL.
  • Une table peut contenir une ou plusieurs contraintes UNIQUE.

Contrainte PRIMARY KEY :

  • La PRIMARY KEY (CLÉ PRIMAIRE) garantit que toutes les valeurs de la ou des colonnes sont uniques.
  • La clause ne doit pas être spécifiée plus d’une fois et les colonnes identifiées doivent être définies comme NOT NULL.

Remarque : Si vous ne créez pas d’index unique pour une clé primaire ou pour une contrainte d’unicité, une clé incomplète est définie pour la table, rendant la table inaccessible.

CHECK :

Les contraintes CHECK appliquent des expressions logiques sur la ou les colonnes, qui doivent être évaluées comme vraies pour chaque ligne de la table.

Créer des tables basées sur d’autres tables.

Voici la syntaxe de création de table basée sur la table existante :

CREATE TABLE nom-table-destination
       LIKE nom-table-source
       IN nom-database.nom-tablespace

Créez une table TB_TAB1 dans la base de données DB_DB1 et l’espace de table TS_TS1 avec les spécifications suivantes avec les contraintes au niveau des colonnes et avec les noms de contraintes implicites.

Nom de colonneType de donnéesLongueurContrainteRemarques
TAB1_COL1IntegerClé primaire
TAB1_COL2IntegerNon nul
TAB1_COL3Varchar5clé étrangère à la colonne ZIP de la table ZIPCODE – si une ligne de la table ZIPCODE est supprimée, toutes les lignes avec le même code postal doivent être supprimées de la table TAB1
TAB1_COL4DateLa date actuelle doit être insérée par défaut
TAB1_COL5Char20Unique
TAB1_COL6IntegerDoit accepter les valeurs inférieures à 100. La valeur nulle est autorisée.

Voyons comment coder une instruction CREATE TABLE ci-dessous,

CREATE TABLE TB_TAB1
    (TAB1_COL1 INTEGER NOT NULL PRIMARY KEY,
     TAB1_COL2 INTEGER NOT NULL,
     TAB1_COL3 VARCHAR(5) REFERENCES ZIPCODE(ZIP)
          ON DELETE CASCADE,
     TAB1_COL4 DATE WITH DEFAULT,
     TAB1_COL5 CHAR(20) NOT NULL UNIQUE,
     TAB1_COL6 INTEGER CHECK(TAB1_COL6 < 100))
     IN DB_DB1.TS_TS1;

Explication:

  • TAB1_COL1 INTEGER NOT NULL PRIMARY KEY : Lorsque vous définissez une colonne comme clé primaire, elle doit être définie avec “Not Null” (la colonne de clé primaire ne doit pas contenir de valeurs nulles).
  • TAB1_COL5 CHAR (20) NOT NULL UNIQUE : Lorsque vous définissez une colonne avec la contrainte d’unicité, elle doit être définie avec “Not Null” (la colonne de contrainte d’unicité ne doit pas contenir de valeurs Null).
  • TAB1_COL4 DATE WITH DEFAULT: Lors de l’insertion, si vous ne fournissez pas de valeur pour cette colonne, la valeur par défaut de “Date actuelle” pour la variable “Date” sera insérée.

Exemple 2 :

Créez une table TB_TAB1 dans la base de données DB_DB1 et l’espace de table TS_TS1 avec les spécifications suivantes avec les contraintes au niveau de la table en nommant les contraintes de manière exclusive.

Nom de colonneType de donnéesLongueurContrainteRemarques
TAB1_COL1IntegerClé primaire
TAB1_COL2IntegerNon nul
TAB1_COL3Varchar5clé étrangère à la colonne ZIP de la table ZIPCODE – si une ligne de la table ZIPCODE est supprimée, toutes les lignes avec le même code postal doivent être supprimées de la table TAB1
TAB1_COL4DateLa date actuelle doit être insérée par défaut
TAB1_COL5Char20Unique
TAB1_COL6IntegerDoit accepter les valeurs inférieures à 100. La valeur nulle est autorisée.

Voyons comment coder une instruction CREATE TABLE ci-dessous,

CREATE TABLE TB_TAB1
      (TAB1_COL1 INTEGER NOT NULL,
      TAB1_COL2 INTEGER NOT NULL,
      TAB1_COL3 VARCHAR(5),
      TAB1_COL4 DATE WITH DEFAULT,
      TAB1_COL5 CHAR(20) NOT NULL,
      TAB1_COL6 INTEGER NOT NULL,
          CONSTRAINT TAB1_COL1_PK PRIMARY KEY(TAB1_COL1),
          CONSTRAINT TAB1_COL3_FK FOREIGN KEY(TAB1_COL3)
      REFERENCES ZIPCODE(ZIP),
          CONSTRAINT TAB1_COL5_COL6_UK UNIQUE(TAB1_COL5,TAB1_COL6),
          CONSTRAINT TAB1_COL6_CK CHECK(TAB1_COL6 < 100))
      IN DB_DB1.TS_TS1;

Explication:

CONSTRAINT TAB1_COL5_COL6_UK UNIQUE(TAB1_COL5,TAB1_COL6): Comme les deux colonnes TAB1_COL5 et TAB1_COL6 doivent avoir des contraintes uniques, vous avez combiné et créé cette contrainte et ces deux colonnes sont définies avec la clause NOT NULL.


Exemple 3 :

Créez une table TB_TAB1 dans une base de données DB_DB1 et dans un espace table TS_TS1, qui se comporte exactement comme la table TB_TAB2.

CREATE TABLE TB_TAB1 LIKE TB_TAB2
        IN DB_DB1.TS_TS1;

Instruction SQL ALTER TABLE

L’instruction SQL ALTER TABLE est utilisée pour ajouter, supprimer ou modifier des colonnes dans une table existante.

L’instruction ALTER TABLE est également utilisée pour ajouter et supprimer diverses contraintes sur une table existante.

Voici la syntaxe de modification de table :

ALTER TABLE nom_table 
    [ADD column-definition
         table-constraint-clause]
    [ALTER COLUMN column-alteration]
    [DROP CONSTRAINT nom-contraint|
          PRIMARY KEY|
          UNIQUE (nom-colonne [,nom-colonne...])]
    [RENAME COLUMN nom-colonne-source
                TO nom-column-cible]

column-alteration
    [SET DATA TYPE (altered-data-type)]
    [SET default-clause]
    [DROP DEFAULT]

Exemple 1:

La colonne NOM_DEPT dans la table DSN8910.TB_DEPARTMENT a été créée en tant que VARCHAR(36). Augmentez sa longueur à 60 octets. Ajoutez également la colonne CODE_DEPT à la table DSN8910.TB_DEPARTMENT. Décrivez la nouvelle colonne comme une colonne de chaîne de caractères de longueur 5.

ALTER TABLE DSN8910.TB_DEPARTMENT
      ALTER COLUMN DEPT_NAME
            SET DATA TYPE VARCHAR(60)
      ADD DEPT_BLDG CHAR(5);

Exemple 2 :

Modifiez la table TB_PRODINFO pour définir une clé étrangère qui fait référence à une clé unique non primaire dans la table de version du produit (TB_PRODVER). Les colonnes de la clé unique sont NOM_PRODVER et RELNO_PRODVER.

ALTER TABLE TB_PRODINFO
      FOREIGN KEY (NOM_PRODINFO, VERNO_PRODINFO)
      REFERENCES TB_PRODVER (NOM_PRODVER, RELNO_PRODVER)
      ON DELETE RESTRICT;

Instruction SQL CREATE DATABASE

L’instruction CREATE DATABASE est utilisée pour créer une nouvelle base de données DB2.

La syntaxe de création de base de données est la suivante

CREATE



DATABASE nom-database
BUFFERPOOL nom-bp
INDEXBP nom-idx
STOGROUP nom-stogroup
CCSID ASCII/EBCDIC/UNICODE

Explication de la syntaxe :

  • BUFFERPOOL :
    Spécifie le nom du pool de mémoire tampon par défaut à utiliser pour les espaces table créés dans la base de données.
    Si vous omettez la clause BUFFERPOOL, le BP par défaut, BP0 est utilisé.
  • INDEXBP :
    Spécifie le nom du pool de mémoire tampon par défaut à utiliser pour les index créés dans la base de données.
    Si vous omettez la clause INDEXBP, le BP par défaut, BP0 est utilisé.
  • STOGROUP :
    Spécifie le groupe de stockage à utiliser pour prendre en charge les exigences d’espace DASD pour les espaces table et les index dans la base de données. 
    La valeur par défaut est SYSDEFLT.
  • CCSID (Coded Character Set ID) :
    Spécifie le schéma de codage par défaut pour les données stockées dans la base de données.
    Les schémas de codage sont ASCII, EBCDIC, UNICODE.

Exemple 1:

Créez une base de données DSN003 (DATABASE). Spécifiez DSN003 comme groupe de stockage (STOGROUP) par défaut à utiliser pour les espaces table et les index de la base de données. Spécifiez le pool de mémoire tampon de 8 Ko BP8K1 comme pool de mémoire tampon par défaut à utiliser pour les espaces table de la base de données (BUFFERPOOL) et BP2 comme pool de mémoire tampon par défaut à utiliser pour les index de la base de données (INDEXBP).

CREATE


DATABASE DSN003
STOGROUP DSN003
BUFFERPOOL BP8K1
INDEXBP BP2;

Exemple 2 :

Créez une base de données DSN1TEMP. Utilisez les valeurs par défaut pour les noms de groupe de stockage et de pool de mémoire tampon par défaut. Spécifiez ASCII comme schéma de codage par défaut pour les données stockées dans la base de données.

CREATE DATABASE DSN1TEMP CCSID ASCII;

Instruction SQL CREATE TABLESPACE

Vous trouverez l’ensemble des explication concernant le CREATE TABLESPACE.

La syntaxe de création d’espace table est la suivante :

CREATE





















TABLESPACE nom-tablespace
IN nom-database
using-block
free-block
DEFINE YES/NO
LOGGED | NOT LOGGED
TRACKMOD YES/NO
DSSIZE integer
MAXPARTITIONS integer
MEMBER CLUSTER
NUMPARTS integer
PARTITION integer
using-block
free-block
BUFFERPOOL nom-bp
CCSID ASCII/EBCDIC/UNICODE
CLOSE YES/NO
COMPRESS YES/NO
LOCKMAX integer
LOCKSIZE ANY/TABLESPACE/TABLE/PAGE/ROW
MAXROWS integer
SEGSIZE integer
using-block:




USING
VCAT nom-catalog
STOGROUP nom-stogroup
PRIQTY integer
SECQTY integer
ERASE YES/NO
free-block:
FREEPAGE integer
PCTFREE integer

Explication de la syntaxe :

nom-database : si vous omettez nom-database, la base de données par défaut, DSNDB04, est utilisée. Mais il est conseillé de spécifier la base de données.

USING:

VCAT :
Indique que le premier ensemble de données de l’espace table est géré par l’utilisateur et que les ensembles de données suivants, si nécessaire, sont également gérés par l’utilisateur.

STOGROUPE :
Spécifie le groupe de stockage dans lequel les ensembles de données de l’espace table seront définis et gérés par DB2.

  • PRIQTY : spécifie l’allocation d’espace primaire minimum pour un ensemble de données géré par DB2.
  • SEQQTY : spécifie l’allocation d’espace secondaire minimum pour un ensemble de données géré par DB2.
  • ERASE : Indique si les ensembles de données gérés par DB2 pour l’espace table doivent être effacés lorsque l’espace table correspondant est supprimé.
    NON : Il n’efface pas les ensembles de données. C’est la valeur par défaut.
    OUI : Efface les ensembles de données.

FREEPAGE :
Spécifie la fréquence à laquelle une page d’espace libre doit être laissée lorsque l’espace table est chargé ou réorganisé.

Vous devez spécifier un nombre entier compris entre 0 et 255.

Si vous spécifiez 0, aucune page n’est laissée comme espace libre. Sinon, il reste une page libre toutes les n pages, où n est l’entier spécifié.

PCTFREE :
Indique le pourcentage de chaque page à laisser comme espace libre lorsque l’espace table est chargé ou réorganisé.

L’entier peut aller de 0 à 99.

Le premier enregistrement de chaque page est chargé sans restriction. Lorsque des enregistrements supplémentaires sont chargés, il reste au moins un pourcentage entier d’espace libre sur chaque page.

DEFINE:
Indique à quel moment (quand) les ensembles de données sous-jacents de l’espace table sont physiquement créés.
OUI : les ensembles de données sont créés lors de la création de l’espace table. C’est la valeur par défaut.
NON : les ensembles de données ne sont pas créés tant que les données ne sont pas insérées dans l’espace table. DEFINE NO s’applique uniquement aux ensembles de données gérés par DB2 (spécification USING STOGROUP). DEFINE NO est ignoré pour les ensembles de données gérés par l’utilisateur (spécification USING VCAT).

LOGGED:

  • LOGGED : indique que les modifications apportées aux données dans l’espace table spécifié sont enregistrées dans le journal.
  • NOT LOGGED : indique que les modifications apportées aux données dans l’espace table spécifié ne sont pas enregistrées dans le journal.

TRACKMOD :
Indique si DB2 suit les pages modifiées dans les pages de mappe d’espace de l’espace table.
OUI : suivi. C’est la valeur par défaut.
NON : Non suivi.

DSSIZE :
Spécifie la taille maximale de chaque ensemble de données.

MAXPARTITIONS :
Indique le nombre maximal de partitions dans un espace table partitionné.

MEMBRES CLUSTER :
Spécifie que les données insérées par une « opération d’insertion » ne sont pas mises en cluster par l’index de clustering. Au lieu de cela, DB2 choisit l’emplacement des données dans l’espace table en fonction de l’espace disponible.

Index clusterisé et non clusterisé :
Les index sont organisés selon la structure B-Tree.

Index groupé :

  • Le niveau feuille (le niveau le plus bas de l’arborescence) correspond aux données.
  • Pour une table qui a un index clusterisé, les données sont en fait stockées dans l’ordre de l’index.

Index non clusterisé :

  • La feuille contient des signets vers les données réelles.
  • Les signets des index non clusterisés sont au format RID (Row ID : ID de ligne), c’est-à-dire des pointeurs directs vers l’emplacement physique dans lequel la ligne est stockée.

NUMPARTS :

  • Indique que l’espace table est partitionné.
  • L’entier est le nombre de partitions.

PARTITION:

  • Spécifie à quelle partition s’applique le bloc using ou le bloc free suivant.
  • L’entier peut aller de 1 au nombre de partitions donné par NUMPARTS.

BUFFERPOOL:
Identifie le pool de mémoire tampon à utiliser pour l’espace table.

CCSID :
Spécifie le schéma de codage des tables dans le TS.

CLOSE:
Lorsque la limite du nombre d’ensembles de données ouverts est atteinte, spécifie la priorité dans laquelle les ensembles de données doivent être fermés.
OUI : Éligible pour la fermeture d’ensembles de données. C’est la valeur par défaut.
NON : éligible à la fermeture après la fermeture de tous les ensembles de données CLOSE YES.

COMPRESS : 
Indique si la compression des données s’applique aux lignes de l’espace table.
OUI : spécifie la compression des données.
NON : spécifie aucune compression de données.

LOCKMAX : 
Indique le nombre maximal de verrous de page ou de ligne qu’un processus d’application peut contenir simultanément dans l’espace table.

LOCKSIZE : 
Spécifie la taille des verrous utilisés dans l’espace table.

MAXROWS : 
Indique le nombre maximal de lignes que DB2 envisagera de placer sur chaque page de données.

SEGSIZE :

  • Spécifie que l’espace table sera segmenté.
  • Entier spécifie le nombre de pages à affecter à chaque segment de l’espace table. L’entier doit être un multiple de 4 compris entre 4 et 64 (inclus).

Exemple 1:

Créez l’espace table DSN8S91D dans la base de données DSN8D91A. Laissez DB2 définir les ensembles de données à l’aide du groupe de stockage DSN8G910. L’allocation d’espace primaire est de 52 kilo-octets ; le secondaire, 20 kilo-octets. Les ensembles de données n’ont pas besoin d’être effacés avant d’être supprimés. Le verrouillage des tables dans l’espace doit avoir lieu au niveau de la page. Associez l’espace table au pool de mémoire tampon BP1. Les ensembles de données peuvent être fermés lorsque personne n’utilise l’espace table.

CREATE TABLESPACE DSN8S91D
       IN DSN8D91A
             USING STOGROUP DSN8G910
                            PRIQTY 52
                            SECQTY 20
                            ERASE NO
             LOCKSIZE PAGE
             BUFFERPOOL BP1
             CLOSE YES;

Exemple 2 :

Supposons qu’une grande application de base de données de requêtes utilise un tablespace pour enregistrer les données de ventes historiques pour les statistiques marketing. Créez un grand espace de table SALESHX dans la base de données DSN8D91A pour l’application. Créez-le avec 82 partitions, en spécifiant que les données des partitions 80 à 82 doivent être compressées.

Laissez DB2 définir les ensembles de données pour toutes les partitions de l’espace de table, à l’aide du groupe de stockage DSN8G910. Pour chaque ensemble de données, l’allocation d’espace primaire est de 4 000 kilo-octets et l’allocation d’espace secondaire est de 130 kilo-octets. À l’exception de l’ensemble de données pour la partition 82, les ensembles de données n’ont pas besoin d’être effacés avant d’être supprimés. Le verrouillage sur la table doit avoir lieu au niveau de la page.

Il ne peut y avoir qu’une seule table dans un espace de table partitionné. Associez l’espace de table au pool de mémoire tampon BP1. Les ensembles de données ne peuvent pas être fermés lorsque personne n’utilise l’espace de table. S’il n’y a pas d’ensembles de données CLOSE YES à fermer, DB2 peut fermer les ensembles de données CLOSE NO lorsque le DSMAX est atteint.

CREATE TABLESPACE SALESHX
       IN DSN8D91A
             USING STOGROUP DSN8G910
                            PRIQTY 4000
                            SECQTY 130
                            ERASE NO
             NUMPARTS 82
             (PARTITION 80
             COMPRESS YES,
             PARTITION 81
             COMPRESS YES,
             PARTITION 82
             COMPRESS YES
             ERASE YES)
             LOCKSIZE PAGE

             BUFFERPOOL BP1
             CLOSE NO;

Instruction SQL ALTER STOGROUP

Vous trouverez ici les explication concernant ALTER STOGROUP.

La syntaxe suivante est utilisée pour modifier le groupe de stockage :

ALTER      STOGROUP nom-groupe-stockage 
           ADD VOLUMES(id-volume) | 
           REMOVE VOLUMES(id-volume) 
           DATACLAS nom-cc 
           MGMTCLAS nom-mc 
           STORCLAS nom-sc

Explication de la syntaxe :

  • ADD VOLUMES : ajoute des volumes au groupe de stockage.
  • REMOVE VOLUMES : Supprime des volumes du groupe de stockage.

Exemple 1:

Modifier le groupe de stockage DSN001. Ajoutez les volumes DSNV04 et DSNV05.

ALTER        STOGROUP DSN001 
             ADD VOLUMES (DSNV04,DSNV05);

Exemple 2 :

Modifier le groupe de stockage DSN001. Supprimez les volumes DSNV04 et DSNV05.

ALTER        STOGROUP DSN001 
             TO REMOVE VOLUMES (DSNV04,DSNV05);

Instruction SQL CREATE STOGROUP

Vous trouverez ici les information concernant l’instruction SQL CREATE STOGROUP.

La syntaxe suivante est utilisée pour créer un groupe de stockage :

CREATE




STOGROUP nom-groupe-stockage
VOLUMES (volume-id,…) ou VOLUMES (*)
VCAT nom-catalogue
DATACLAS nom-dc
MGMTCLAS nom-mc
STORCLAS nom-sc

Explication de la syntaxe :

  • VOLUMES : définit les volumes du groupe de stockage.
  • (*) : indique que SMS (Storage Management Subsystem) gérera les volumes à utiliser.
  • VCAT : identifie le catalogue d’installations de catalogue intégré pour le groupe de stockage.
  • DATACLAS : identifie le nom de la classe de données SMS à associer au groupe de stockage.
  • MGMTCLAS : identifie le nom de la classe de gestion SMS à associer au groupe de stockage.
  • STORCLAS : identifie le nom de la classe de stockage SMS à associer au groupe de stockage.

Exemple:

Créez un groupe de stockage, DSN001, des volumes COB002 et COM003. DSNCAT est le nom du catalogue de l’installation de catalogue intégré.

CREATE

STOGROUP DSN001
VOLUMES (COB001,COM002)
VCAT DSNCAT;