Suite

La clé étrangère n'est pas ajoutée à la table de destination après la création d'une classe de relations

La clé étrangère n'est pas ajoutée à la table de destination après la création d'une classe de relations


Disons que j'ai deux tables A et B. La relation entre ces deux tables est la suivante :

A (1,*) <---- (1,1) B

Maintenant, lorsque j'essaie d'ajouter une classe de relations pour ces deux tables sur Arcatalog, je fais un clic droit sur le fichier .sde dans Arcatalog puis :

Nouvelle classe de relation ==>.

Pour la table d'origine je choisis A, et pour la table de destination je choisis B

(Est-ce juste d'ailleurs ou devrait-il en être autrement ?)

Pour le type de relation je sélectionne : Relation simple (Peer to Peer)

Direction : Les deux

La cardinalité de la classe de relations : (1 - m) Un à plusieurs

Et après cela, je peux sélectionner le champ de clé primaire dans la table d'origine et la clé étrangère dans la table de destination :

Comme vous pouvez le voir pour la clé étrangère, cela me donne en fait l'objectid de cette table, maintenant j'ai besoin de comprendre si je dois manuellement ajouter le champ de clé étrangère dans cette table, puis le sélectionner ici ?

Ne devrait-il pas être créé automatiquement après la création de la classe de relations ? Évidemment, lorsque je clique sur Suivant et que je reviens à ma table postgresql, aucune clé étrangère n'est ajoutée… et c'est déroutant car je pensais qu'une fois que nous définissons une relation automatiquement, l'identifiant de la table d'origine migre vers la table de destination et devient une clé étrangère !

J'ai dû utiliser cette base de données dans une application Web utilisant ASP.NET, avec Entity Framework, et je me suis perdu après qu'Entity Framework a généré le modèle à partir de ma base de données (au début, j'ai ajouté le FK manuellement)… Alors maintenant, je le fais tout recommencer et j'aimerais le faire de la bonne façon…

Comment définir les clés étrangères et les classes de relations depuis arcatalog ?


@vince :

Les classes de relations informent la géodatabase des relations existantes. Les colonnes clés doivent exister. Il existe de nombreuses raisons pour lesquelles les colonnes doivent être créées avec la table, surtout pour éviter la fragmentation causée par l'ajout d'une colonne.

Si vous ne définissez pas les relations dans la géodatabase (qui ne prennent pas toutes en charge le concept de clés étrangères, elles sont donc facultatives), vous ne bénéficiez pas des avantages des classes de relations.

@BenSNadler :

Les options de clé étrangère dans la boîte de dialogue filtrent en fonction du type de données du champ d'entrée. Si le champ de clé étrangère n'existe pas, vous devez l'ajouter manuellement. Je suggère d'utiliser l'outil arcgis pour ajouter la gestion des champs pour être clair. La relation de géodatabase n'impose aucune contrainte au niveau de la base de données sur le champ. Pour la base de données, ce n'est qu'un champ normal.

J'ai ajouté ces champs manuellement, puis j'ai créé les classes de relations.


Convertir le diagramme ER en tableaux

Au fur et à mesure que la base de données s'agrandit, la représentation du diagramme ER devient plus complexe et encombrée. Cela crée une situation difficile pour comprendre l'exigence et sa structure dans son ensemble. De même, si le diagramme ER est représenté à un niveau très élevé, cela crée à nouveau une difficulté de compréhension du système. Mais la représentation à haut niveau et jusqu'aux niveaux infimes est très nécessaire pour bien comprendre le système. Ces concepts sont bien définis par la généralisation et la spécialisation. Parfois, nous aurions divisé les entités en deux entités ou plus pour être plus précis dans la conception. Mais par rapport à l'ensemble de la base de données ou de l'utilisateur, il peut être combiné en une seule entité. Un tel processus est appelé agrégation.

Une fois la conception du diagramme ER terminée, nous devons le mettre en structure logique. Mais comment faire ? Discutons-en dans la dernière section.


Exemple

Par exemple, si nous supprimons la ligne numéro 15 dans une table primaire, nous devons nous assurer qu'il n'y a pas de clé étrangère dans une table associée avec la valeur 15. Nous ne devrions pouvoir supprimer une clé primaire que s'il n'y en a pas. lignes associées. Sinon, on se retrouverait avec un disque orphelin.

Ici, la table associée contient une valeur de clé étrangère qui n'existe pas dans le champ de clé primaire de la table primaire (c'est-à-dire le champ “CompanyId”). Cela a abouti à un “record orphelin”.

Ainsi, l'intégrité référentielle empêchera les utilisateurs de :

  • Ajout de lignes à une table liée s'il n'y a pas de ligne associée dans la table principale.
  • Modification des valeurs dans une table principale qui entraîne des enregistrements orphelins dans une table liée.
  • Suppression de lignes d'une table primaire s'il existe des lignes associées correspondantes.

Construire une entité

Il existe plusieurs façons de créer une entité. Par exemple, vous pouvez utiliser un assistant ou créer une entité à partir d'une table.

Construire une entité à l'aide d'un assistant

La façon la plus simple de créer une entité est d'utiliser un assistant. Cet assistant vous permet de sélectionner une source de données racine et d'étendre à d'autres sources de données associées, puis de sélectionner des champs pour l'entité. Pour démarrer l'assistant, ajoutez un nouvel élément de type Entité de données à votre projet. Pour obtenir des instructions pas à pas sur l'utilisation de l'assistant pour créer une entité, consultez Créer et consommer des entités de données. Le tableau suivant fournit des informations sur les propriétés que vous définissez pour une entité dans l'assistant.

Propriété La description
Source de données principale La source de données racine (table ou vue) utilisée pour construire l'entité. Vous pouvez ajouter d'autres sources de données associées, en fonction de cette source de données racine.
Nom de l'entité de données Le nom de l'entité.
Catégorie d'entité Le type d'entité. Les catégories d'entités sont similaires aux groupes de tables pour les tables. Les catégories disponibles comprennent Paramètre, Référence, Maître, Document, et Transaction.
Nom de l'entité publique Nom de la ressource publique de l'entité.
Nom de la collection publique Nom de l'ensemble de ressources publiques.
Activer l'API publique Sélectionnez cette option pour activer l'entité pour les services OData.
Activer les capacités de gestion des données Sélectionnez cette option pour activer l'entité pour les intégrations asynchrones telles que l'importation/exportation de données et l'intégration de connecteurs.
Table de transfert Nom de la table intermédiaire qui sera générée pour l'entité. La table intermédiaire est utilisée dans les intégrations asynchrones et les scénarios à volume élevé.

Ajout de sources de données

Lorsque vous créez une entité, vous commencez avec une source de données racine. Cependant, vous pouvez ajouter des sources de données supplémentaires. Vous pouvez soit ajouter manuellement de nouvelles sources de données, soit sélectionner un champ de clé étrangère de substitution dans la source de données racine pour développer automatiquement les sources de données requises.

Production

Lorsque vous terminez l'assistant, il produit les éléments suivants :

Construire une entité à partir d'une table

Vous pouvez créer rapidement une entité à partir d'une table, puis personnaliser les propriétés, les sources de données et les champs ultérieurement. Cliquez avec le bouton droit sur le tableau, puis sélectionnez Compléments > Créer une entité de données.


Sans connaître les exigences exactes et complètes, nous ne pouvons pas concevoir un modèle de données complet. Supposons les règles métier suivantes, elles sont basées sur votre question.

  • Chaque Client peut demander une ou plusieurs Chambres.
  • Chaque chambre peut être demandée par un seul client
  • Chaque administrateur peut attribuer une ou plusieurs salles.
  • Chaque salle doit être attribuée par un administrateur.
  • Chaque chambre doit appartenir à un type de chambre.
  • Chaque type de pièce peut contenir une ou plusieurs pièces.
  • Chaque Réservation doit appartenir à une Date.
  • Chaque Date peut contenir une ou plusieurs Réservation.
  • Chaque type de chambre peut contenir un ou plusieurs loyers.
  • Chaque loyer doit appartenir à un type de chambre.
  • Chaque Réservation doit comprendre une ou plusieurs Chambre.
  • Chaque chambre peut être incluse dans une réservation.
  • Chaque Client peut détenir une ou plusieurs Réservations.
  • Chaque Réservation doit appartenir à un Client.
  • Chaque Loyer peut être inclus dans une ou plusieurs Factures.
  • Chaque facture doit inclure un loyer.
  • Chaque paiement de facture doit inclure un type de paiement.
  • Chaque type de paiement peut contenir un ou plusieurs paiements de facture.
  • Chaque date peut contenir un ou plusieurs paiements de facture.
  • Chaque paiement de facture doit appartenir à une date.
  • Chaque chambre peut être classée une ou plusieurs chambres.
  • Chaque évaluation de chambre doit appartenir à une chambre.
  • Chaque évaluation peut contenir une ou plusieurs évaluations de chambre.
  • Chaque évaluation de chambre doit appartenir à une évaluation.

Sur la base des règles ci-dessus, nous avons conçu le modèle de données suivant.

Ce modèle est un sous-ensemble de Système de réservation d'hôtel. Après le processus de normalisation (consultez mon blog), vous aurez un modèle plus détaillé et complet.

Dans le modèle ci-dessus Chambre le loyer est calculé en fonction du type de chambre tel que chambre simple, chambre double, chambre familiale ou salle de réunion plutôt que du nombre de personnes dans la chambre.

Et Chambre le loyer est modifié de temps à autre, nous avons donc inclus les dates de début et de fin pour avoir l'historique des loyers des chambres. Le client peut également utiliser de nombreux Types de paiement tels que carte de crédit, carte de débit, paiement en espèces, nous sommes donc inclus type de paiement entité.

Ce modèle est basé sur des hypothèses. J'espère que ce modèle vous aidera d'une manière ou d'une autre.

Éliminez les conjectures de vos requêtes et de votre conception en utilisant des noms et des titres descriptifs. Les chambres ont des gens, mais je suppose que c'est en fait quelque chose comme la capacité ou la taille de la chambre. Cela évite toute confusion avec la colonne Personnes déjà utilisée dans Forms . Bien sûr, cela pourrait également être amélioré. quelque chose comme NumberOfGuests serait probablement plus informatif pour vous maintenant, et pour quiconque interrogera votre base de données plus tard. Je vérifierais tous les noms de colonnes et de tables pour m'assurer qu'ils sont concis et clairs.

Les pièces n'ont pas d'incrémentation automatique, probablement parce que vous prévoyez d'utiliser des nombres entiers pour identifier les pièces. Cela peut fonctionner, mais vous pouvez éviter des problèmes en séparant l'identification de votre entreprise/salle d'utilisateurs de la logique de votre base de données. Lorsqu'un meurtre macabre se produit dans la chambre 13, la rendant inutilisable et que le nouveau directeur, pas le moins du monde superstitieux ou préoccupé par de telles questions, transforme ce placard à balais du 14e étage en chambre 13, car il est assez grand et franchement la qualité de notre hôtel est en baisse . t'es foutu. Avec une clé de base de données distincte de la désignation de votre chambre, vous pouvez conserver tous les enregistrements et l'intégrité de la base de données ainsi que le fait qu'il y a eu un changement majeur (quels autres types de suivi des modifications et de détails devrions-nous prendre en charge ?). La Chambre 13 | Les enregistrements historiques du RoomPK 13 restent intacts tandis que de nouveaux enregistrements pour ce que le Personnel s'appelle la salle 13 mais est en fait maintenant la salle 13 | RoomPK 132 peut également être enregistré. C'est important quand quelqu'un essaie de vous poursuivre alors qu'il est resté dans la chambre 13 et toute l'affaire dépend de lequel ils ont séjourné dans la chambre 13. Désolé, votre hôtel a beaucoup de problèmes.

Le dernier problème est où sont les transactions? Je m'attendrais à ce qu'un formulaire doive également avoir des FK pour la ou les factures et les chambres. Les gens doivent s'enregistrer et partir de quelque part et nous devons les facturer spécifiquement pour cet événement et cette association. Une famille peut obtenir deux chambres pour deux jours, puis partir le matin et revenir le soir. Ils sont alors catégoriques sur le fait qu'ils ne reçoivent qu'une seule facture. Ou quelqu'un séjournant deux nuits nécessite deux factures en raison de deux modes de paiement différents (carte de crédit, espèces, travail, personnel). Vous avez probablement besoin de tables de consultation maintenant pour prendre en charge les subtilités de la facturation et de la réservation. Les gens divisent les factures, changent de chambre et, espérons-le, reviennent - tout ce que vous devez soutenir.


22.5 Changer la façon dont un diagramme est affiché

Modifiez l'affichage de votre diagramme en cliquant avec le bouton droit sur un élément ou en utilisant les nombreuses options disponibles sous Outils > Préférences pour les diagrammes.

22.5.1 Comment masquer, afficher et disposer les connecteurs sur le diagramme

Choisissez de masquer un seul connecteur ou un nombre quelconque de connecteurs sur vos diagrammes. Les connecteurs masqués sur un diagramme continuent de s'afficher dans la fenêtre Structure, avec « masqué » ajouté. S'il y a des connecteurs cachés, vous pouvez les réafficher individuellement ou tous à la fois.

Pour masquer un ou plusieurs connecteurs sur un schéma :

Sélectionnez le ou les connecteurs de diagramme à masquer. (Pour sélectionner tous les connecteurs d'un type particulier, cliquez avec le bouton droit sur un connecteur, puis choisissez Sélectionner tout ce type.)

Cliquez avec le bouton droit et choisissez Masquer les formes sélectionnées .

Vous pouvez également accéder à la fenêtre Structure, sélectionner le ou les connecteurs à masquer, cliquer avec le bouton droit et choisir Masquer les formes.

Pour afficher un ou plusieurs connecteurs masqués sur un schéma :

Dans la fenêtre Structure, sélectionnez le ou les connecteurs à afficher, cliquez avec le bouton droit de la souris et choisissez Afficher les formes cachées .

Pour afficher tous les connecteurs masqués sur un schéma :

Cliquez avec le bouton droit sur n'importe quelle partie du diagramme et choisissez Afficher toutes les arêtes cachées .

Pour répertorier tous les connecteurs masqués dans la fenêtre Structure :

Cliquez avec le bouton droit sur un objet répertorié dans la fenêtre Structure et choisissez Trier par visibilité.

22.5.1.1 Comment afficher et masquer les sauts de page

Vous pouvez afficher ou masquer les sauts de page sur vos diagrammes. Les sauts de page sont affichés sous forme de lignes pointillées sur la surface du diagramme.

Pour afficher les sauts de page sur les nouveaux diagrammes :

Choisissez Outils > Préférences.

Cliquez sur Diagrammes dans le volet gauche de la boîte de dialogue.

Cliquez sur le type de diagramme dans le volet gauche de la boîte de dialogue. Notez que les diagrammes de classes n'ont pas de pages.

Cochez la case Afficher les sauts de page pour afficher les sauts de page sur les nouveaux diagrammes.

22.5.1.2 Comment disposer les connecteurs sur un schéma

Les connecteurs sont disposés dans des styles de lignes obliques ou rectilignes.

Les lignes obliques peuvent être repositionnées à n'importe quel angle. Les lignes rectilignes sont toujours représentées par une série d'angles droits. Si le style de ligne d'un diagramme est défini sur oblique, vous pouvez ensuite déplacer la ligne (ou des parties de celle-ci) dans une nouvelle position à n'importe quel angle.

Vous pouvez définir le style de ligne par défaut pour chaque type d'élément de connecteur sur un diagramme. ("Le style de ligne" est l'une des préférences de diagramme que vous pouvez définir pour chaque type d'élément qui est un connecteur.)

Vous pouvez également définir le style de ligne pour un diagramme particulier, en remplaçant le style de ligne par défaut pour le type de diagramme :

Si vous utilisez cette méthode pour changer le style de ligne d'oblique à rectiligne, les lignes déjà sur le diagramme qui ont été dessinées en diagonale seront redessinées à angle droit.

Si vous utilisez cette méthode pour changer le style de ligne de rectiligne à oblique, aucun changement ne sera apparent sur le diagramme, mais vous pourrez par la suite déplacer n'importe laquelle des lignes du diagramme dans une nouvelle position à n'importe quel angle.

Quel que soit le style de ligne d'un dessin, vous pouvez sélectionner des lignes individuelles sur le dessin et modifier leur style de ligne. Si vous modifiez une ligne individuelle d'oblique à rectiligne, la ligne sera redessinée en utilisant des angles droits. Si vous modifiez une ligne individuelle de rectiligne à oblique, aucune modification ne sera apportée à la ligne, mais vous pouvez par la suite la repositionner (ou des parties de celle-ci) à n'importe quel angle.

Il existe une option pour redresser toutes les lignes déjà présentes sur un diagramme. Si vous choisissez cette option, toutes les lignes seront redessinées le long du trajet le plus court entre leurs points de départ et d'arrivée, en utilisant des lignes diagonales si nécessaire. L'utilisation de cette option définira également le style de ligne du diagramme actuel sur oblique. Après cela, redéfinir le style de ligne du diagramme sur rectiligne redessinera toutes les lignes à angle droit.

Vous pouvez également choisir les styles de croisement pour que vos lignes soient de style pont ou tunnel. La sélection du style de pont crée deux lignes parallèles à l'intersection des lignes. La sélection du style de tunnel crée une forme en demi-cercle à l'intersection. Le style par défaut est un croisement régulier des deux lignes à l'intersection des lignes.

Pour définir le style de ligne par défaut d'un diagramme (ou d'un type d'élément qui est un connecteur) :

Sélectionnez Outils >Préférences, puis ouvrez le nœud Diagrammes et choisissez le type de diagramme.

Dans la liste déroulante Modifier les préférences pour, choisissez Toutes les arêtes. Si, au lieu de choisir Toutes les arêtes, vous choisissez un type d'élément particulier qui est un connecteur, le style de ligne par défaut sera défini uniquement pour ce type d'élément.

Dans la section Options d'affichage, cliquez sur le style de ligne actuel. Le nom du style de ligne actuel devient une liste déroulante.

Sélectionnez le style de ligne requis (oblique ou rectiligne) dans la liste déroulante.

Pour modifier le style de ligne de connecteurs particuliers sur le diagramme actuel :

Avec le ou les connecteurs sélectionnés sur le diagramme, choisissez Diagramme > Style de ligne, puis Oblique ou Rectiligne .

Pour ajouter un nouveau coude à un connecteur :

Maj+clic sur le connecteur où vous souhaitez créer un nouveau coude. (De nouveaux coudes peuvent être ajoutés et utilisés pour modifier le routage d'un connecteur uniquement si le style de ligne est défini sur oblique.)

Pour supprimer un coude d'un connecteur :

Maj+clic sur le coude que vous souhaitez supprimer.

Sélectionnez le ou les connecteurs que vous souhaitez redresser sur un diagramme, puis choisissez Diagramme > Redresser les lignes. (Cela supprimera tous les coudes intermédiaires.)

Pour changer le style de croisement de toutes les lignes :

Sélectionnez Outils > Préférences > Diagrammes > Style de croisement . Vous pouvez également modifier le style de croisement dans l'inspecteur de propriétés pour ce diagramme. Le style par défaut est un croisement régulier des deux lignes à l'intersection des lignes.


Glossaire Microsoft Dynamics AX

Une partie qui fournit des services logistiques aux clients.

Un système pour classer des catégories discrètes d'éléments selon le principe 80/20 de Pareto qui stipule qu'un petit pourcentage d'éléments représente la plus grande fraction d'importance.

Un classificateur qui nomme les catégories dans une classification ABC.

Code ABC pour la classification des coûts de possession

Un classificateur qui nomme des catégories dans une classification ABC qui classe des catégories discrètes d'articles en fonction de leur coût de possession.

Code ABC de la marge de contribution

Un classificateur qui nomme des catégories dans une classification ABC qui classe des catégories discrètes d'éléments en fonction de leur marge de contribution.

Un classificateur qui nomme des catégories dans une classification ABC qui classe des catégories discrètes d'articles en fonction de leurs revenus.

Fin prématurée d'un programme en raison d'une erreur de programme ou d'une défaillance du système.

Un enregistrement chronologique qui décrit les changements de valeur classés comme actifs, passifs, dépenses et revenus.

La différence entre la somme des écritures débitrices et la somme des écritures créditrices portées sur un compte au cours d'une période comptable.

Un enregistrement de l'augmentation ou de la diminution de la valeur économique classée par un compte du grand livre.

La pratique de la réconciliation des comptes.

Règle dans un système comptable qui contrôle les combinaisons de valeurs de dimension financière valides lorsque les exigences de la condition de structure de dimension financière sont remplies.

Une configuration de la dimension financière du compte principal et d'autres dimensions financières.

La pratique consistant à enregistrer, classer, résumer et rapporter les conséquences financières des événements comptables.

Un classificateur utilisé pour regrouper les écritures comptables selon leurs caractéristiques économiques.

Unité de mesure monétaire habituelle utilisée pour enregistrer la valeur monétaire des ressources économiques dans les comptes du grand livre.

Unité monétaire utilisée pour quantifier les conséquences financières des événements comptables.

Un ensemble récurrent d'activités de documentation, de journalisation, d'équilibrage et de préparation de relevés effectuées par des parties qui rendent compte et analysent la situation financière et les performances des entités comptables.

Une distribution des conséquences financières d'une transaction économique sur les comptes du grand livre.

ligne de répartition comptable

Sous-ligne d'une ligne de document source documentant la conséquence financière d'une transaction économique qui documente la distribution d'une partie aliquote de la conséquence financière sur un compte du grand livre.

Une unité économique réelle ou conceptuelle qui utilise des comptes du grand livre pour enregistrer et rendre compte de ses performances financières et de gestion.

L'occurrence d'une action comptable dans un système comptable.

classification de la liquidité d'un événement comptable

La classification de la liquidité d'un événement comptable.

Journal utilisé pour enregistrer les conséquences financières d'événements comptables dans un système comptable.

Enregistrement de l'entrée originale dans un système comptable qui enregistre une date, un ou plusieurs comptes et la valeur monétaire à débiter ou à créditer sur chaque compte.

Une politique qui prescrit les principes généraux et les procédures qu'une organisation suit pour préparer des déclarations qui rendent compte de ses performances.

Règle d'un système comptable qui contrôle les principes, les méthodes et les procédures de classification, d'enregistrement et de déclaration des conséquences financières des événements comptables.

Une sous-classification d'une classification de compte de passif qui décrit les changements de valeur dus aux fournisseurs ou aux créanciers.

Une sous-classification d'une classification de compte d'actif qui décrit les changements de valeur dus par les clients.

Méthode comptable qui comptabilise les revenus lorsqu'ils sont gagnés et les dépenses lorsqu'ils sont encourus, quel que soit le moment où ils sont reçus ou payés.

Revenus gagnés au cours d'une période comptable mais reçus au cours d'une période comptable ultérieure.

Un système de transfert électronique de fonds disponible aux États-Unis qui facilite le transfert de fonds entre les comptes bancaires de la partie destinataire et de la partie d'origine.

La date à laquelle un actif est acquis.

Un acte qui a un effet dans un système.

Un ingrédient dans une formule qui a une concentration et une puissance spécifiées.

Structure de travail fonctionnelle à laquelle participent une ou plusieurs personnes et pièces d'équipement et dans laquelle les ressources sont consommées, produites et utilisées. Une activité peut être décomposée en sous-activités.

Un enregistrement historique de l'état d'un document source.

Une instance d'une activité.

Le coût défini encouru dans l'exécution d'une activité.

La demande de produits entraînée par les commandes des clients.

La quantité mesurée qui est entrée ou sortie d'une activité.

Type de rapport qui oblige les utilisateurs à sélectionner les données qu'ils souhaitent afficher sur le rapport et à concevoir la mise en page du rapport.

service de vérification d'adresse

Service fourni par un processeur de carte de crédit qui valide que l'adresse de facturation fournie par un titulaire de carte correspond aux informations enregistrées auprès de la banque émettrice.

Un document commercial qui documente la notification de l'expédition du produit.

Une période d'existence ou une période de temps après la survenance d'un événement.

Une collection d'objets partagés.

Le processus de classification des périodes par âge.

Le nombre de jours dans une période de temps utilisé pour signaler un solde de paiement client en souffrance.

Un arrangement entre deux ou plusieurs parties basé sur une compréhension mutuelle de leurs droits et obligations respectifs. Un certain nombre de conditions doivent être remplies pour qu'un accord soit juridiquement contraignant.

Un engagement entre deux ou plusieurs parties basé sur une compréhension mutuelle de leurs droits et obligations respectifs.

L'infrastructure qui fournit une collection de fonctionnalités, d'outils et d'infrastructure qui utilise un modèle de programmation de services pour prendre en charge l'intégration d'applications.

Une classe de notification d'importance pour un utilisateur. Un message d'alerte est une notification générée par une règle définie par l'utilisateur conçue pour informer un utilisateur d'un événement, d'une condition ou d'un état.

Affecter une partie d'une ressource à un usage ou à un but particulier.

Une affectation d'une partie d'une ressource pour un usage ou un but particulier.

Clé candidate qui n'est pas désignée comme clé primaire et qui est utilisée pour identifier de manière unique les enregistrements dans une table de base de données.

Une grandeur définie de monnaie, une quantité de monnaie, ou une grandeur indéfinie d'une substance ou d'une qualité indénombrable.

Un fichier texte qui stocke les informations fournies par un utilisateur via l'assistant d'installation, ainsi que les arguments de ligne de commande pour les actions effectuées par l'installation. Ce fichier peut être utilisé ultérieurement pour exécuter des installations sans surveillance avec les mêmes paramètres.

Une vue navigable des objets d'élément dans un modèle d'application.

Ensemble de routines qu'une application utilise pour demander et exécuter des services de niveau inférieur exécutés par le système d'exploitation d'un ordinateur. Ces routines effectuent généralement des tâches de maintenance telles que la gestion des fichiers et l'affichage d'informations.

Une personne qui fait une demande formelle écrite ou électronique pour travailler ou pourvoir un poste vacant dans une organisation.

Un document qui enregistre le profil du demandeur.

Une liste des candidatures examinées par le personnel des ressources humaines.

Cadre d'intégration d'applications

Le cadre qui fournit une collection de fonctionnalités, d'outils et d'infrastructure qui utilise un modèle de programmation de services pour prendre en charge l'intégration d'applications.

Un ensemble de modèles d'application qui ont la priorité sur les modèles d'application qui se trouvent dans les couches d'application inférieures. La couche la plus basse est nommée SYS.

Au sein d'une seule couche d'application, un modèle qui inclut un ensemble spécifique d'éléments de développement tels que des classes, des tables et des formulaires.

Une vue navigable des objets d'élément dans un modèle d'application.

interface de programme d'application

Ensemble de routines qu'une application utilise pour demander et exécuter des services de niveau inférieur exécutés par le système d'exploitation d'un ordinateur. Ces routines effectuent généralement des tâches de maintenance telles que la gestion des fichiers et l'affichage d'informations.

Le processus de réservation de dates et d'heures pour le ramassage et la livraison de chargements de camions de marchandises à des emplacements d'entrepôt spécifiques.

Un moteur qui détermine et traite la répartition des frais de transport, soit en poids, soit en volume.

Pour autoriser manuellement ou automatiquement l'occurrence d'événements futurs dans un système.

Un fournisseur autorisé à fournir des produits à une ou plusieurs entités juridiques.

Les taxes estimées de la production et de la chaîne d'approvisionnement qui s'appliquent à un article ou à un service.

Un document commercial qui documente la notification de l'expédition du produit.

Un classificateur comptable utilisé pour classer la valeur des ressources économiques détenues par une partie.

Désigner un objet pour un usage ou un but particulier.

Une désignation qui forme une association entre des objets.

Une relation entre des objets pairs.

La partie de l'inventaire qui n'est pas allouée et qui peut être utilisée pour répondre à de nouvelles commandes et exigences.

Sanctionner l'occurrence future d'un événement dans un système.

Un système de transfert électronique de fonds disponible aux États-Unis qui facilite le transfert de fonds entre les comptes bancaires de la partie destinataire et de la partie d'origine.

Une tâche de workflow qui est complétée par une opération automatique.

Type de rapport généré automatiquement à partir des données affichées sur un formulaire.

La partie de l'inventaire qui n'est pas allouée et qui peut être utilisée pour répondre à de nouvelles commandes et exigences.

Service fourni par un processeur de carte de crédit qui valide que l'adresse de facturation fournie par un titulaire de carte correspond aux informations enregistrées auprès de la banque émettrice.

Un paiement effectué par un client pour une obligation en souffrance.

Méthode comptable qui transfère les coûts des produits et de la production aux comptes de coût des marchandises vendues au cours d'une période comptable et qui rétrocède ces coûts aux comptes de matières premières et de produits finis pour les produits non vendus à la clôture de la période comptable.

Une personne ou une organisation qui transfère des biens ou des objets personnels, mais pas des droits de propriété, à une autre personne ou organisation à des fins de stockage.

Quantité de ressources économiques nécessaires pour amener les flux de ressources économiques opposés à un état d'équilibre.

Un état de la situation financière d'une organisation qui rend compte de l'état des actifs, des passifs et des capitaux propres à une date spécifiée.

Un compte qui décrit les changements de valeur rapportés sur un bilan.

Un rapport de gestion des performances stratégiques qui aligne, suit et mesure les activités clés de l'organisation par rapport aux objectifs.

Un document source qui documente une demande pour une banque d'exécuter un service de transfert électronique de fonds.

Une pratique consistant à rapprocher un compte du grand livre qui représente un compte bancaire en faisant correspondre les écritures du compte du grand livre aux écritures du relevé bancaire.

Une déclaration qui détaille l'activité économique enregistrée dans un ou plusieurs comptes sur une période de temps spécifiée.

Un objet mathématique qui est la base d'une dérivation, d'un système ou d'une formulation.

Une classe qui assume un rôle parent lorsqu'elle participe à une relation d'héritage avec une autre classe.

L'unité monétaire calculée dans un calcul de taux de change.

Une table qui assume un rôle parent lorsqu'elle participe à une relation d'héritage avec une autre table.

Unité de mesure fondamentale dans un système de mesure à partir duquel d'autres unités sont dérivées.

Quantité d'un ou plusieurs articles produits en une seule opération.

Un attribut de produit d'un lot de traitement ou d'un lot de transfert.

Un processus qui ajuste les quantités requises d'ingrédients qui sont utilisés dans la production d'une formule en fonction du niveau de puissance de l'ingrédient actif d'un lot d'inventaire spécifique.

Un ensemble de processus informatiques qui peuvent être exécutés sans interaction de l'utilisateur.

Un processus de production pour produire des articles par lots.

Une personne qui est membre d'une organisation qui fournit des avantages, ou une partie qui est désignée comme bénéficiaire d'un avantage.

Rémunération ou récompense indirecte offerte par une organisation.

Une date recommandée pour obtenir la qualité ou les caractéristiques optimales d'un produit.

La période de temps pour obtenir la qualité ou les caractéristiques optimales d'un produit.

Une règle qui est éventuellement appliquée après la compilation dans X++. Les règles représentent une conception de code sûre ou cohérente.

Un document source qui documente une demande inconditionnelle d'un tiers pour payer une deuxième partie sur demande.

Document commercial délivré par un transporteur à un expéditeur qui sert de titre de propriété.

Une liste de produits et leurs quantités nécessaires pour fabriquer un produit.

Un produit détaillé défini par une nomenclature.

Un classificateur de demande de paiement documenté sur les factures des clients qui régit les conditions de paiement et le traitement des factures.

Une unité de manutention pour le stockage et le transfert des articles.

Action de mettre un document ou un produit en attente.

L'infrastructure modèle-vue-contrôleur qui contrôle de manière synchrone ou asynchrone l'exécution d'implémentations d'opérations commerciales immédiates ou par lots.

La valeur nette d'un actif déclarée dans un état de la situation financière.

Un plan financier qui contrôle les dépenses pour les activités planifiées.

Une pratique consistant à n'autoriser les dépenses que lorsque les fonds budgétaires peuvent être réservés pour faire face aux futurs engagements de paiement.

Une combinaison de valeurs de dimensions financières actives utilisées pour allouer des fonds budgétaires pour payer les activités planifiées.

L'encodage d'une décision commerciale pour vérifier les dépenses engagées et réelles par rapport aux fonds budgétaires disponibles alloués pour des activités détaillées ou agrégées définies par des combinaisons de valeurs de dimension de contrôle budgétaire valides.

Une période spécifiée sous forme de nombre de périodes de calendrier fiscal. La période budgétaire peut être différente de la période comptable.

Ensemble de valeurs de dimension financière dans une hiérarchie de dimension budgétaire qui est utilisé pour calculer les fonds budgétaires agrégés alloués aux valeurs de dimension financière supérieures en additionnant les fonds budgétaires alloués aux valeurs de dimension financière subordonnées.

Structure de planification utilisée pour planifier les allocations et les dépenses des fonds budgétaires.

Document utilisé pour développer des estimations de montants et d'unités dans des scénarios de plan budgétaire.

Une classification des lignes de plan budgétaire, telles que l'année précédente ou la demande de service, qui décrit le budget avec lequel vous travaillez ou planifiez.

Un processus qui identifie le cycle budgétaire et le grand livre pour la période de planification budgétaire et définit comment les plans budgétaires seront acheminés, révisés et approuvés dans une hiérarchie d'organisation.

Une modification apportée à un budget qui affecte les fonds budgétaires actuels et restants disponibles.

Un échéancier des dépenses prévues des ressources financières allouées.

Élément de formule entré dans une activité de livraison de produit.

La combinaison d'un certain nombre de produits à vendre en une seule unité.

Un classificateur qui classe les organisations dans un système de classification de l'industrie.

Vue d'un document source émis par une partie et reçu par une ou plusieurs autres parties.

L'abstraction d'un événement économique et d'un événement comptable.

Une action commerciale logique contrôlée par le cadre des opérations commerciales et implémentée par une classe qui communique avec le cadre à l'aide de contrats de données.

Cadre des opérations commerciales

L'infrastructure modèle-vue-contrôleur qui contrôle de manière synchrone ou asynchrone l'exécution d'implémentations d'opérations commerciales immédiates ou par lots.

Une unité opérationnelle semi-autonome créée pour répondre aux objectifs commerciaux stratégiques.

Processus par lequel les produits sont achetés par un service d'achat centralisé, puis distribués aux magasins.

Un article produit à la suite de la production d'un autre article.

Un ensemble planifié d'activités développées par une organisation pour atteindre l'objectif d'augmenter le marché partagé sur une période de temps distincte.

Norme 005 de l'Association canadienne des paiements

Norme d'échange de données financières sur les dossiers de transfert automatique de fonds (TAF) tenue par l'Association canadienne des paiements (ACP).

Pour mettre fin à un événement avant le traitement.

La partie de la sortie du produit à partir des ressources opérationnelles disponibles et du produit d'entrée disponible requis pour répondre à une exigence client spécifique.

Capacité réelle ou potentielle d'une ressource à exécuter une activité ou à produire un extrant dans une période de temps spécifiée.

Quantité maximale de travail planifié qu'un centre de charge peut effectuer à un niveau de capacité requis.

Une procédure pour déterminer les exigences de capacité de ressources qui répondent à la demande de production future pendant des périodes spécifiques.

Pour transférer les soldes des comptes de clôture d'une période comptable vers les soldes des comptes d'ouverture de la période comptable suivante.

Le budget qui est transféré d'un exercice à l'autre et qui est réservé aux commandes d'achat en cours dans le nouvel exercice.

Une monnaie limitée à l'argent.

Une remise qui dépend d'un paiement rapide.

Une somme d'argent fournie dans le but de rendre la monnaie ou d'échanger de l'argent.

Une politique de paiement qui exige le paiement intégral du produit à la livraison.

Un document source qui documente la réception d'espèces ou d'équivalents de trésorerie.

Un appareil électronique ou mécanique avec une caisse qui enregistre les ventes, calcule les totaux, calcule le changement et génère des reçus de produits.

Le plus petit groupe d'actifs classables qui génère des liquidités indépendamment des autres actifs au sein d'une organisation. Ces groupes d'actifs sont utilisés pour évaluer les pertes de valeur qui seront encourues.

Dossier de demande de maintenance du catalogue

Un fichier de données de produits, leurs descriptions et prix, et des codes d'action qui ajoutent, mettent à jour ou suppriment des données de produit dans un catalogue fournisseur.

Le poids réel ou nominal d'un article de vente ou d'un article en stock.

Un classificateur, une désignation ou une division d'objets qui partagent une propriété commune.

Un classificateur utilisé pour regrouper les fêtes, les lieux, les produits et les activités.

Structure qui classe les catégories à l'aide d'une relation superordonnée-subordonnée.

Un service partagé qui met en commun les ressources à des fins d'optimisation ou de réduction des coûts.

Le plus petit groupe d'actifs classables qui génère des liquidités indépendamment des autres actifs au sein d'une organisation. Ces groupes d'actifs sont utilisés pour évaluer les pertes de valeur qui seront encourues.

Le coût accessoire de l'acquisition ou de la livraison du produit.

La différence entre une charge attendue et une charge réelle.

Une structure de compte dont les combinaisons de valeurs valides sont limitées par des contraintes d'intégrité et des règles de compte.

Une lettre de change tirée sur une banque.

moteur de calculatrice de contrôle de chiffre

Un moteur qui calcule la répartition en fonction des chiffres de contrôle.

Une table qui assume un rôle enfant lorsqu'elle participe à une relation d'intégrité avec une autre table et dont les valeurs d'attribut de clé étrangère sont migrées à partir de la table assumant le rôle parent dans la relation.

Une carte réutilisable qui signale les activités de traitement et de transfert au fur et à mesure qu'elle circule entre le point d'origine et le point de consommation du matériau.

Une carte réutilisable qui signale les activités de traitement et de transfert au fur et à mesure qu'elle circule entre le point d'origine et le point de consommation du matériau.

Un ensemble d'objets qui partagent une propriété de définition commune, qui partagent des opérations et un comportement communs, ou les deux.

Une organisation systématique des classes.

Un programme utilisé pour effectuer des paiements électroniques aux banques et pour recevoir des informations des banques. Ces informations comprennent les accusés de réception des paiements effectués, les informations sur les paiements entrants et les soldes des comptes bancaires.

L'état dans une période pendant laquelle une activité ne peut pas se produire, l'état d'un processus opérationnel ou l'état d'un document source.

L'état d'une période fiscale qui ne peut pas être rouverte et qui empêche son utilisation comme classificateur de période pour les écritures de compte.

Une procédure comptable qui transfère les soldes des comptes de capitaux propres temporaires des propriétaires vers le compte de capitaux propres des propriétaires permanents, ce qui laisse les comptes temporaires avec des soldes nuls.

Ensemble de matériel et de logiciels qui permettent les cinq caractéristiques essentielles (libre-service à la demande, large accès au réseau, mise en commun des ressources, élasticité rapide et service mesuré) du cloud computing. L'infrastructure cloud peut être considérée comme contenant à la fois une couche physique et une couche d'abstraction. La couche physique comprend les ressources matérielles nécessaires pour prendre en charge les services cloud fournis et comprend généralement des composants de serveur, de stockage et de réseau. La couche d'abstraction se compose du logiciel déployé sur la couche physique, qui manifeste les caractéristiques essentielles du cloud. Conceptuellement, la couche d'abstraction se situe au-dessus de la couche physique.

Groupe d'éléments de travail liés à l'entrepôt du même type, basé sur des critères définis par l'utilisateur (tels que l'emplacement et le numéro d'inventaire).

Un fichier de données de produits, leurs descriptions et prix, et des codes d'action qui ajoutent, mettent à jour ou suppriment des données de produit dans un catalogue fournisseur.

Une politique de paiement qui exige le paiement intégral du produit à la livraison.

Une norme de symbologie de code-barres maintenue par l'American National Standards Institute (ANSI).

Une catégorie comptable utilisée pour additionner les conséquences financières de la fabrication de produits et de la tenue des stocks.

Une promesse ou une obligation d'exercer une activité dans le futur.

Une pratique consistant à enregistrer les conséquences financières des événements comptables de réservation de fonds budgétaires dans les comptes de journal de pré-engagement et d'engagement pour les rapports et analyses financiers et de gestion.

Engagement pris par une personne morale d'engager un coût lorsqu'une obligation future vient à échéance.

Produits interchangeables sans différenciation physique fournis par plusieurs fournisseurs.

Hiérarchie de catégories qui classe les catégories créées à partir des codes marchandises.

Une stratégie de tarification pour mettre à jour le prix des articles de vente produits à partir de matières premières soumises à de fréquents changements de prix.

Un type d'ingrédient dans une formule dont les quantités peuvent être ajustées. Cet ajustement est basé sur la différence entre les quantités d'ingrédient actif qui sont estimées et les quantités de lots d'inventaire d'ingrédient actif qui sont réservés en fonction de la puissance de l'ingrédient actif.

Des récompenses monétaires et non monétaires directes ou indirectes en échange de services rendus, ou une récompense pour des dommages subis par une blessure ou par la violation d'un contrat.

L'état d'avoir atteint la fin normale ou attendue d'un programme ou d'un processus.

Relation partie entière dans laquelle le cycle de vie de l'objet partiel dépend du cycle de vie de l'objet entier.

Affirmer l'occurrence passée d'un événement dans un système.

politique de confirmation de réception

Une politique qui prescrit l'emplacement fonctionnel où l'acceptation physique des articles a lieu.

Date à laquelle le vendeur confirme que les articles seront expédiés à un client ou à un fournisseur.

Être en conformité avec les exigences, les spécifications ou les attentes explicites.

Conformément aux exigences, aux spécifications ou aux attentes explicites.

Une facture fournisseur qui documente une somme de quantités de produits et de montants monétaires provenant de plusieurs factures fournisseur référencées.

Un document source qui documente plusieurs commandes référencées.

document source consolidé

Un document source qui documente une somme de quantités de produits et de montants monétaires provenant de plusieurs documents source référencés de la même classe.

Le compte principal de l'entité juridique parente utilisé pour la consolidation comptable.

Un événement d'économies potentielles obtenu en regroupant les éléments de ligne de réquisition approuvés afin de négocier un prix plus avantageux avec les fournisseurs.

Une technologie de configuration qui utilise des contraintes pour développer des fiches produit et pour configurer des produits distincts.

Une personne, à l'intérieur ou à l'extérieur de votre organisation, pour laquelle vous avez créé une entrée dans laquelle vous pouvez enregistrer plusieurs types d'informations, telles que les adresses postales et électroniques, les numéros de téléphone et de télécopieur et les URL de pages Web.

Une unité de manutention pour l'expédition et la réception des articles.

Un accord juridiquement contraignant entre deux ou plusieurs parties.

Rôle assumé par une personne qui participe à une relation entrepreneur-employeur avec une entité juridique.

Un ensemble récurrent d'activités de production et de logistique effectuées par des parties qui fabriquent ou distribuent des articles.

Un article produit conjointement avec un autre article.

La valeur d'une ressource économique qui est quantifiée en unités monétaires et qui est mesurée selon un principe d'évaluation comptable.

La méthode utilisée pour classer et répartir les coûts de transformation.

Une unité opérationnelle dont les gestionnaires sont responsables des dépenses budgétées et réelles.

Une catégorie comptable utilisée pour additionner les conséquences financières de la fabrication de produits et de la tenue des stocks.

La différence entre un coût prévu et un coût réel.

Calculer, attribuer et répartir le coût des ressources économiques acquises, produites ou livrées par une organisation.

Processus de calcul, d'affectation et de répartition du coût des ressources économiques acquises, produites ou livrées par une organisation.

autorisation de carte de crédit

Le processus de vérification de l'identification et de la solvabilité du titulaire de la carte de crédit avant qu'une commande client ne soit traitée et exécutée.

Le processus de vérification de l'identification et de la solvabilité du titulaire de la carte de crédit lorsqu'une commande client est exécutée.

Une pratique de distribution dans laquelle les articles circulent de la réception à l'expédition, avec un stockage limité ou inexistant.

La partie de la sortie du produit à partir des ressources opérationnelles disponibles et du produit d'entrée disponible requis pour répondre à une exigence client spécifique.

La limite maximale d'une valeur transactionnelle cumulée, jusqu'à laquelle une taxe sur la valeur transactionnelle n'est pas calculée.

Un moyen d'échange en circulation qui ne se limite pas à l'argent.

Identificateur alphanumérique qui représente une unité monétaire.

Une division discrète de la valeur monétaire.

Paiement reçu d'un client en prévision de la livraison d'articles ou de l'exécution d'un service.

Un document source qui documente une demande de paiement client. Lorsqu'un paiement est reçu, il peut être rapproché de la facture.

Un programme structuré qui récompense les clients avec des incitations ou d'autres avantages pour un comportement d'achat fidèle.

Une méthode de comptage des stocks où les articles stockés dans différents emplacements d'entrepôt sont comptés pour vérifier les niveaux de stock disponibles et pour faciliter les corrections de niveau de stock.

Le temps nécessaire pour terminer une activité.

Structure d'information qui représente les données caractéristiques d'une entité.

L'événement X++ qui est déclenché lorsqu'une valeur de données dans une table change.

Un type de paramètre qui est créé par l'infrastructure de génération de rapports lorsqu'un ensemble de données est créé en fonction de la propriété Query et de la propriété Dynamic Filters de l'ensemble de données.

Type de rapport qui ne permet pas à un utilisateur de modifier la mise en page mais qui permet à un utilisateur de filtrer et de trier les données dans le rapport.

Le montant calculé de la taxe sur la valeur ajoutée (TVA) qui n'est pas dû tant que la facture n'est pas payée. Ce montant est enregistré sur un compte TVA d'achat non réalisé et ne peut être réclamé qu'après réception d'un reçu/facture fiscale ou d'une facture fiscale.

Le montant calculé de la taxe sur la valeur ajoutée (TVA) qui n'est pas dû tant que la facture n'est pas payée. Ce montant est enregistré sur un compte de TVA sur ventes non réalisé et ne peut être réclamé qu'après l'impression d'un reçu ou d'une facture fiscale.

Un type qui référence une méthode. Une fois qu'un délégué s'est vu attribuer une méthode, il se comporte exactement comme cette méthode. Les délégués sont à peu près similaires aux pointeurs de fonction en C++, mais ils sont de type sûr et sécurisé.

Document commercial qui documente la livraison de produits entre deux parties.

Un calendrier pour la livraison planifiée des produits.

La demande quotidienne moyenne pour un produit multipliée par le délai moyen.

Une prédiction de la demande future de produits.

Un processus métier qui estime la demande future et crée des prévisions de la demande sur la base des données de transaction historiques.

Rôle assumé par une personne, un lieu ou une chose qui participe à une relation.

Une partie qui assume un rôle dépendant lorsqu'elle participe à une relation avec une autre partie.

Instance de workflow générée par une instance de workflow parent.

L'expiration d'une partie du coût initial d'une immobilisation au cours d'une période donnée.

Pour accéder par programmation à une adresse mémoire affectée à une variable pointeur ou à une variable de référence.

Une règle pour déterminer un classificateur pour classer les conséquences financières d'un événement comptable.

Classe qui assume un rôle enfant lorsqu'elle participe à une relation d'héritage avec une classe parent (ou de base) dont les méthodes peuvent être étendues ou redéfinies et dont l'accès aux membres peut être restreint.

Une table qui assume un rôle enfant lorsqu'elle participe à une relation d'héritage avec une autre table.

compte d'entreprise de destination

L'entité juridique qui est le bénéficiaire d'un passif dans une transaction économique intersociétés.

emplacement de l'inventaire de destination

Un emplacement d'inventaire où les matériaux requis par une activité de production de kanban finale ou une activité de transfert sont reçus.

taxe de vente basée sur la destination

Taxe de vente perçue dans certains États des États-Unis sur un produit en fonction de la destination dans laquelle l'acheteur prend possession ou reçoit le produit.

Un classificateur qui caractérise l'ampleur ou l'étendue d'une propriété quantifiable d'un objet ou d'une activité.

règle de dérivation de dimension

Une règle pour déterminer une dimension de grand livre pour classer les conséquences financières d'un événement comptable.

Une technologie de configuration utilisée pour créer des variantes de produit en sélectionnant des valeurs pour les dimensions du produit.

Une mesure dont la dimension est un et dont l'unité de mesure est soit une unité de mesure sans dimension, soit l'unité un.

Rémunération fixe et variable attribuée à un salarié en échange de services rendus.

Un fournisseur qui n'est pas autorisé à fournir des produits à une ou plusieurs entités juridiques.

Un montant fixe ou un pourcentage déduit d'un prix indiqué ou d'un prix total.

Le délai dans lequel un client peut escompter son obligation de paiement.

La différence entre une remise attendue et une remise réelle.

Un produit identifiable de manière unique.

Un processus d'entrepôt où vous pouvez contrôler les articles en stock pour plusieurs commandes, expéditions, chargements ou vagues sur les quais lorsque des articles entrants sont reçus ou des articles sortants sont chargés.

Une méthode de mise en attente d'un processus d'opérations pendant que les articles commandés sont dans un processus d'assurance qualité.

Système de gestion documentaire

Un service d'application pour le stockage et le traitement des documents d'une organisation.

Les services d'intégration d'applications qui fournissent des opérations de création, de lecture, de mise à jour, de suppression et de recherche pour les documents XML mappés à l'aide d'un élément de requête Application Object Tree (AOT).

Nom fictif supposé sous lequel une organisation est enregistrée aux États-Unis.

Structure conceptuelle qui représente une entité indépendante capable d'existence séparée.

Occurrence d'une activité dans le domaine de gestion des ressources de l'organisation.

Un modèle de comportement qui est assumé par les entités de domaine lorsqu'elles participent à des relations de rôle.

Une expression qui modifie un type d'objet dans le type d'une classe dérivée.

Une responsabilité d'effectuer une ou plusieurs tâches ou de fournir des services pour un travail.

Dans le modèle de sécurité, ensemble de privilèges d'accès aux applications requis pour qu'un utilisateur s'acquitte de ses responsabilités.

Propriété de l'ensemble de données qui détermine la manière dont les filtres de rapport sont créés pour un rapport.

Norme internationale de codes-barres à 13 chiffres gérée par GS1.

L'occurrence d'une action d'échange économique dans un système économique.

Une ressource qui est consommée, produite et utilisée pour ajouter de la valeur aux activités de livraison de produits d'une organisation.

L'environnement général, qui est généralement spécifié comme étant l'air, l'eau ou le sol.

Un système en réseau pour transférer des fonds d'un compte bancaire à un autre.

Processus de soumission de documents à une autorité à l'aide d'un moyen de communication électronique.

Transfert électronique de fonds

Un système en réseau pour transférer des fonds d'un compte bancaire à un autre.

Rôle assumé par une personne qui participe à une relation employé-employeur avec une personne morale.

Récompenses monétaires et non monétaires directes ou indirectes offertes à un employé par une organisation.

Un engagement pris par les personnes morales de réserver des fonds budgétaires pour les obligations de dépenses.

Composant système qui fournit des capacités complexes et effectue des opérations sur des objets.

Un site Web qui fournit un point d'entrée unique aux utilisateurs internes et externes d'une organisation pour accéder à une grande variété d'informations commerciales.

Un objet qui peut être identifié de manière unique.

Une association internationale à but non lucratif qui soutient et promeut l'initiative du secteur bancaire de l'espace unique de paiement en euros (SEPA).

Un concept Lean qui est utilisé pour établir un cycle de production répétitif régulier.

La valeur nette d'une organisation après déduction du passif de l'actif.

Une série d'actions d'escalade de workflow qui peuvent être entreprises pour terminer un élément de travail de workflow lorsqu'il ne peut pas être terminé par le destinataire actuel.

Coût approximatif encouru dans l'exécution d'une activité.

Norme internationale de codes-barres à 13 chiffres gérée par GS1.

Une association internationale à but non lucratif qui soutient et promeut l'initiative du secteur bancaire de l'espace unique de paiement en euros (SEPA).

L'occurrence d'une action dans un système.

Une routine logicielle qui s'exécute en réponse à un événement.

Un concept Lean qui est utilisé pour établir un cycle de production répétitif régulier.

La limite maximale d'une valeur transactionnelle individuelle faisant partie d'une valeur transactionnelle cumulée, jusqu'à laquelle une taxe sur la valeur transactionnelle n'est pas calculée. Le seuil exceptionnel est appliqué à une valeur de transaction individuelle qui fait partie d'une valeur de transaction cumulée qui se situe à l'intérieur du seuil cumulé.

La valeur d'une unité monétaire d'échange par rapport à une autre unité monétaire d'échange.

Une modification d'un montant monétaire converti lorsque le taux de change entre l'unité de cotation et l'unité de base change.

Une classification qui regroupe les taux de change.

Un coût ou une dépense qui est dépensé au cours d'une période comptable.

Un ensemble récurrent d'activités d'approvisionnement, de réception, de paiement et de transfert contrôlé par une ou plusieurs parties qui participent à des transactions d'échange et sans échange.

règle comptable de comptabilisation des dépenses

Une règle comptable de comptabilisation qui prescrit la comptabilisation des dépenses dans les comptes et sur les états financiers.

Un coût qui expire lorsque les avantages qui ont entraîné le coût sont reçus au cours d'une période comptable.

Un produit reçu qui est un actif actuel, non détenu pour la vente ou consommé dans la production, et pour lequel il n'y a pas de politique de contrôle des stocks nécessitant un suivi de la quantité ou de politique de contrôle des stocks nécessitant un suivi de la valeur des stocks, et pour lequel il existe une politique comptable exigeant l'enregistrement du coût en tant que dépense.

La date à laquelle quelque chose cesse d'être efficace.

Prix ​​d'une quantité de produit exprimé en unités d'achat, calculé à partir du prix unitaire de vente, multiplié par la quantité de produit en unités d'achat, divisé par la quantité d'unité de vente.

La valeur indiquée qui est affichée au recto d'une unité monétaire, telle qu'un billet, une pièce de monnaie ou une carte-cadeau. Pour les cartes-cadeaux, la valeur nominale est le solde de départ, qui a été payé lors de l'émission de la carte-cadeau.

Flux de production pouvant alimenter d'autres flux de production en aval.

Méthode de valorisation des stocks FIFO

Une méthode d'évaluation des stocks dans laquelle le stock est supposé à des fins comptables se déplacer dans l'ordre où il a été reçu, quel que soit son mouvement physique réel.

Un type d'ingrédient dans une formule qui est utilisé pour augmenter la quantité totale d'un produit. L'ingrédient de remplissage n'a aucune influence chimique sur aucun des ingrédients actifs de la formulation.

Un outil que vous pouvez utiliser pour classer les articles d'inventaire pour une recherche rapide. Les filtres restreignent également la disponibilité des articles pour les clients, les fournisseurs et les processus d'entrepôt.

Un classificateur de données financières créé à partir des parties, des emplacements, des produits et des activités d'une organisation et utilisé pour les rapports de gestion.

valeur de la dimension financière

Un élément de données dans le domaine d'une dimension financière.

contrainte de valeur de dimension financière

Relation de dimension financière hiérarchique qui restreint l'ensemble de toutes les combinaisons de valeurs de dimension financière possibles à un ensemble de combinaisons de valeurs de dimension financière valides.

Un rapport qui documente les informations financières et la situation financière d'une organisation.

Division d'une période d'un exercice.

Un exercice financier d'environ 12 mois utilisé par une organisation qui prépare des états financiers annuels.

Un classificateur comptable utilisé pour classer tout actif à long terme dont l'expiration du coût est reconnue sur plus d'un an.

Rémunération, indépendante de la performance, qui est attribuée à un employé par une organisation.

Un coût qui ne varie pas avec les changements de débit ou de sortie de produit.

Un taux de change qui rattache la valeur d'une devise à la valeur d'une autre devise.

Emplacement permanent affecté à un article dans un entrepôt. Plusieurs articles peuvent avoir le même emplacement fixe et un seul article peut avoir plusieurs emplacements fixes.

Type de kanban utilisé lorsque le nombre de kanbans affectés à une règle de kanban est constant.

Un type de projet dans lequel le client paie un montant prédéterminé pour l'ensemble du projet.

devis de projet au forfait

Le coût total estimé pour réaliser un projet à prix fixe.

Un processus d'authentification où les utilisateurs dans une variété de systèmes de gestion d'identité peuvent être authentifiés.

Une méthode d'expédition qui établit le point auquel la propriété des marchandises passe à l'acheteur. Le FOB peut établir la propriété lorsqu'un article est endommagé pendant le transport.

Dimension utilisée pour caractériser le niveau de détail pour lequel une prévision est définie.

réévaluation des devises

Procédure d'enregistrement des actifs et passifs réévalués qui tiennent compte des différences de taux de change entre une unité monétaire de transaction d'origine et une conversion d'unité monétaire comptable et une devise de transaction de fin de période et une conversion de devise comptable.

conversion de devises étrangères

Procédure d'enregistrement des soldes comptables en devise fonctionnelle réévalués lors du retraitement des soldes comptables dans une devise de reporting.

Unité monétaire d'un pays/région qui n'est pas l'unité monétaire fonctionnelle de l'entité juridique principale.

Ensemble de champs dont les valeurs sont migrées à partir d'une clé primaire ou d'une clé alternative à partir d'une table parent.

Relation numérique entre les intrants et les extrants du processus de production.

Sortie d'un processus par lots contrôlé par une formule.

Une méthode d'expédition qui établit le point auquel la propriété des marchandises passe à l'acheteur. Le FOB peut établir la propriété lorsqu'un article est endommagé pendant le transport.

Une personne ou une entreprise engagée par un client pour regrouper des charges en expéditions, puis transporter et livrer ces charges vers des destinations spécifiées.

La méthode convenue pour le traitement des frais d'expédition. Les conditions de transport identifient la partie responsable du paiement des frais de transport.

numéro de compte pleinement qualifié

Un numéro de compte du grand livre dans lequel tous les segments d'une structure de compte sont saisis et validés.

Unité monétaire d'un pays/région dans laquelle une entité juridique principale situe ses activités commerciales et dans laquelle elle génère la plupart de ses revenus et dépenses.


La clé étrangère n'est pas ajoutée à la table de destination après la création d'une classe de relations - Systèmes d'information géographique

Bien que les tables et les index soient les objets de schéma les plus importants et les plus couramment utilisés, la base de données prend en charge de nombreux autres types d'objets de schéma, dont les plus courants sont traités dans ce chapitre.

Ce chapitre contient les sections suivantes:

Présentation des partitions

Dans une base de données Oracle, le partitionnement vous permet de décomposer des tables et des index très volumineux en morceaux plus petits et plus faciles à gérer appelés partitions . Chaque partition est un objet indépendant avec son propre nom et éventuellement ses propres caractéristiques de stockage.

Pour une analogie illustrant le partitionnement, supposons qu'un responsable des ressources humaines dispose d'une grande boîte contenant les dossiers des employés. Chaque dossier répertorie la date d'embauche de l'employé.Les requêtes sont souvent faites pour les employés embauchés au cours d'un mois particulier. Une approche pour satisfaire de telles demandes consiste à créer un index sur la date d'embauche des employés qui spécifie les emplacements des dossiers dispersés dans la boîte. En revanche, une stratégie de partitionnement utilise de nombreuses boîtes plus petites, chaque boîte contenant des dossiers pour les employés embauchés au cours d'un mois donné.

L'utilisation de boîtes plus petites présente plusieurs avantages. Lorsqu'on lui demande de récupérer les dossiers des employés embauchés en juin, le responsable RH peut récupérer la boîte de juin. De plus, si une petite boîte est temporairement endommagée, les autres petites boîtes restent disponibles. Le déménagement de bureaux devient également plus facile car au lieu de déplacer une seule caisse lourde, le gestionnaire peut déplacer plusieurs petites caisses.

Du point de vue d'une application, il n'existe qu'un seul objet de schéma. Les instructions SQL ne nécessitent aucune modification pour accéder aux tables partitionnées. Le partitionnement est utile pour de nombreux types d'applications de base de données, en particulier celles qui gèrent de gros volumes de données. Les avantages comprennent :

L'indisponibilité d'une partition n'entraîne pas l'indisponibilité de l'objet. L'optimiseur de requête supprime automatiquement les partitions non référencées du plan de requête afin que les requêtes ne soient pas affectées lorsque les partitions ne sont pas disponibles.

Administration simplifiée des objets de schéma

Un objet partitionné comporte des éléments qui peuvent être gérés soit collectivement, soit individuellement. Les instructions DDL peuvent manipuler des partitions plutôt que des tables ou des index entiers. Ainsi, vous pouvez interrompre des tâches gourmandes en ressources telles que la reconstruction d'un index ou d'une table. Par exemple, vous pouvez déplacer une partition de table à la fois. Si un problème survient, seul le déplacement de partition doit être refait, pas le déplacement de table. De plus, la suppression d'une partition évite d'exécuter de nombreuses instructions DELETE.

Conflit réduit pour les ressources partagées dans les systèmes OLTP

Dans certains systèmes OLTP, les partitions peuvent réduire les conflits pour une ressource partagée. Par exemple, DML est réparti sur plusieurs segments plutôt qu'un seul segment.

Performances de requête améliorées dans les entrepôts de données

Dans un entrepôt de données, le partitionnement peut accélérer le traitement des requêtes ad hoc. Par exemple, une table de ventes contenant un million de lignes peut être partitionnée par trimestre.

Caractéristiques des partitions

Chaque partition d'une table ou d'un index doit avoir les mêmes attributs logiques, tels que les noms de colonnes, les types de données et les contraintes.

Par exemple, toutes les partitions d'une table partagent les mêmes définitions de colonne et de contrainte. Cependant, chaque partition peut avoir des attributs physiques distincts, tels que l'espace table auquel elle appartient.

Clé de partition

La clé de partition est un ensemble d'une ou plusieurs colonnes qui détermine la partition dans laquelle chaque ligne d'une table partitionnée doit aller. Chaque ligne est attribuée sans ambiguïté à une seule partition.

Dans la table des ventes, vous pouvez spécifier la colonne time_id comme clé d'une partition de plage. La base de données affecte des lignes aux partitions selon que la date de cette colonne se situe dans une plage spécifiée. Oracle Database dirige automatiquement les opérations d'insertion, de mise à jour et de suppression vers la partition appropriée à l'aide de la clé de partition.

Stratégies de partitionnement

Oracle Partitioning propose plusieurs stratégies de partitionnement qui contrôlent la manière dont la base de données place les données dans les partitions. Les stratégies de base sont le partitionnement par plage, par liste et par hachage.

Un partitionnement à un seul niveau utilise une seule méthode de distribution de données, par exemple, uniquement le partitionnement de liste ou uniquement le partitionnement de plage. Dans le partitionnement composite, une table est partitionnée par une méthode de distribution de données, puis chaque partition est ensuite divisée en sous-partitions à l'aide d'une deuxième méthode de distribution de données. Par exemple, vous pouvez utiliser une partition de liste pour channel_id et une sous-partition de plage pour time_id .

Exemple 6-1 Exemple d'ensemble de lignes pour une table partitionnée

Cet exemple de partitionnement suppose que vous souhaitez remplir une table partitionnée sales avec les lignes suivantes :

Partitionnement de plage

Dans partitionnement de plage, la base de données mappe les lignes sur les partitions en fonction des plages de valeurs de la clé de partitionnement. Le partitionnement par plage est le type de partitionnement le plus courant et est souvent utilisé avec des dates.

Supposons que vous créiez time_range_sales en tant que table partitionnée à l'aide de l'instruction SQL suivante, avec la colonne time_id comme clé de partition :

Ensuite, vous chargez time_range_sales avec les lignes de l'exemple 6-1. Le code montre les distributions de lignes dans les quatre partitions. La base de données choisit la partition pour chaque ligne en fonction de la valeur time_id conformément aux règles spécifiées dans la clause PARTITION BY RANGE. La valeur de la clé de partition de plage détermine la limite supérieure non inclusive pour une partition spécifiée.

Partitionnement par intervalles

Partitionnement par intervalles est une extension du partitionnement de plage.

Si vous insérez des données qui dépassent les partitions de plage existantes, Oracle Database crée automatiquement des partitions d'un intervalle spécifié. Par exemple, vous pouvez créer une table d'historique des ventes qui stocke les données de chaque mois dans une partition distincte.

Les partitions d'intervalle vous permettent d'éviter de créer explicitement des partitions de plage. Vous pouvez utiliser le partitionnement par intervalles pour presque toutes les tables partitionnées par plage et utilise des intervalles fixes pour les nouvelles partitions. À moins que vous ne créiez des partitions de plage avec des intervalles différents, ou à moins que vous ne définissiez toujours des attributs de partition spécifiques, envisagez d'utiliser des partitions d'intervalle.

Lors du partitionnement par intervalle, vous devez spécifier au moins une partition de plage. La valeur de la clé de partitionnement de plage détermine la valeur élevée des partitions de plage, appelée point de transition . La base de données crée automatiquement des partitions d'intervalle pour les données dont les valeurs sont au-delà du point de transition. La limite inférieure de chaque partition d'intervalle est la limite supérieure inclusive de la plage ou de la partition d'intervalle précédente. Ainsi, dans l'exemple 6-2, la valeur 01-JAN-2011 est dans la partition p2 .

La base de données crée des partitions d'intervalle pour les données au-delà du point de transition. Une partition d'intervalle étend le partitionnement de plage en demandant à la base de données de créer des partitions de la plage ou de l'intervalle spécifié. La base de données crée automatiquement les partitions lorsque les données insérées dans la table dépassent toutes les partitions de plage existantes. Dans l'exemple 6-2, la partition p3 contient des lignes avec des valeurs time_id de clé de partitionnement supérieures ou égales à 01-JAN-2013 .

Exemple 6-2 Partitionnement par intervalles

Supposons que vous créez une table des ventes avec quatre partitions de largeurs différentes. Vous spécifiez qu'au-dessus du point de transition du 1er janvier 2013, la base de données doit créer des partitions à un mois d'intervalle. La borne haute de la partition p3 représente le point de transition. La partition p3 et toutes les partitions en dessous se trouvent dans la section de plage, tandis que toutes les partitions au-dessus tombent dans la section d'intervalle.

Vous insérez une vente réalisée en date du 10 octobre 2014 :

Une requête de USER_TAB_PARTITIONS montre que la base de données a créé une nouvelle partition pour la vente du 10 octobre car la date de vente était postérieure au point de transition :

Partitionnement de liste

Dans partitionnement de liste, la base de données utilise une liste de valeurs discrètes comme clé de partition pour chaque partition. La clé de partitionnement se compose d'une ou plusieurs colonnes.

Vous pouvez utiliser le partitionnement de liste pour contrôler la manière dont les lignes individuelles sont mappées à des partitions spécifiques. En utilisant des listes, vous pouvez regrouper et organiser des ensembles de données connexes lorsque la clé utilisée pour les identifier n'est pas ordonnée de manière pratique.

Exemple 6-3 Partitionnement de liste

Supposons que vous créez list_sales en tant que table partitionnée par liste à l'aide de l'instruction suivante, où la colonne channel_id est la clé de partition :

Ensuite, vous chargez le tableau avec les lignes de l'exemple 6-1. Le code montre la distribution des lignes dans les deux partitions. La base de données choisit la partition pour chaque ligne en fonction de la valeur channel_id selon les règles spécifiées dans la clause PARTITION BY LIST. Les lignes avec une valeur channel_id de 2 ou 4 sont stockées dans les partitions EVEN_CHANNELS, tandis que les lignes avec une valeur channel_id de 3 ou 9 sont stockées dans la partition ODD_CHANNELS.

Partitionnement par hachage

Dans partitionnement de hachage, la base de données mappe les lignes aux partitions en fonction d'un algorithme de hachage que la base de données applique à la clé de partitionnement spécifiée par l'utilisateur.

La destination d'une ligne est déterminée par la fonction de hachage interne appliquée à la ligne par la base de données. Lorsque le nombre de partitions est une puissance de 2, l'algorithme de hachage crée une distribution à peu près uniforme des lignes sur toutes les partitions.

Le partitionnement par hachage est utile pour diviser de grandes tables afin d'améliorer la gestion. Au lieu d'une grande table à gérer, vous avez plusieurs petits morceaux. La perte d'une seule partition de hachage n'affecte pas les partitions restantes et peut être récupérée indépendamment. Le partitionnement par hachage est également utile dans les systèmes OLTP avec une forte contention de mise à jour. Par exemple, un segment est divisé en plusieurs parties, dont chacune est mise à jour, au lieu d'un seul segment qui est en conflit.

Supposons que vous créez la table partitionnée hash_sales à l'aide de l'instruction suivante, avec la colonne prod_id comme clé de partition :

Ensuite, vous chargez le tableau avec les lignes de l'exemple 6-1. Le code montre une répartition possible des lignes dans les deux partitions. Les noms de ces partitions sont générés par le système.

Lorsque vous insérez des lignes, la base de données tente de les répartir de manière aléatoire et uniforme sur les partitions. Vous ne pouvez pas spécifier la partition dans laquelle une ligne est placée. La base de données applique la fonction de hachage, dont le résultat détermine quelle partition contient la ligne.

Référence du langage Oracle Database SQL pour CREATE TABLE . PARTITION PAR exemples

Partitionnement de référence

Dans le partitionnement de référence , la stratégie de partitionnement d'une table enfant est uniquement définie via la relation de clé étrangère avec une table parent. Pour chaque partition de la table parent, il existe exactement une partition correspondante dans la table enfant. La table parent stocke les enregistrements parents dans une partition spécifique et la table enfant stocke les enregistrements enfants dans la partition correspondante.

Par exemple, une table de commandes est le parent de la table line_items, avec une clé primaire et une clé étrangère définies sur order_id . Les tables sont partitionnées par référence. Par exemple, si la base de données stocke la commande 233 dans la partition Q3_2015 de commandes , la base de données stocke tous les éléments de ligne pour la commande 233 dans la partition Q3_2015 de lignes_articles . Si la partition Q4_2015 est ajoutée aux commandes , la base de données ajoute automatiquement Q4_2015 à line_items .

Les avantages du partitionnement de référence sont :

En utilisant la même stratégie de partitionnement pour les tables parent et enfant, vous évitez de dupliquer toutes les colonnes de clé de partitionnement. Cette stratégie réduit la surcharge manuelle de la dénormalisation et économise de l'espace.

Les opérations de maintenance sur une table parent se produisent automatiquement sur la table enfant. Par exemple, lorsque vous ajoutez une partition à la table maître, la base de données propage automatiquement cet ajout à ses descendants.

La base de données utilise automatiquement des jointures par partition des partitions de la table parent et enfant, améliorant ainsi les performances.

Vous pouvez utiliser le partitionnement de référence avec toutes les stratégies de partitionnement de base, y compris le partitionnement par intervalles. Vous pouvez également créer des tables partitionnées de référence en tant que tables partitionnées composites.

Exemple 6-4 Création de tables partitionnées par référence

Cet exemple crée une table parente orders qui est partitionnée par plage le order_date . La table enfant partitionnée de référence order_items est créée avec quatre partitions, Q1_2015 , Q2_2015 , Q3_2015 et Q4_2015 , où chaque partition contient les lignes order_items correspondant aux commandes de la partition parente respective.

Oracle Database VLDB and Partitioning Guide pour une présentation du partitionnement de référence

Partitionnement composite

Dans le partitionnement composite, une table est partitionnée par une méthode de distribution de données, puis chaque partition est subdivisée en sous-partitions à l'aide d'une deuxième méthode de distribution de données. Ainsi, le partitionnement composite combine les méthodes de distribution de données de base. Toutes les sous-partitions d'une partition donnée représentent un sous-ensemble logique des données.

Le partitionnement composite offre plusieurs avantages :

Selon l'instruction SQL, l'élagage de partition sur une ou deux dimensions peut améliorer les performances.

Les requêtes peuvent utiliser des jointures de partition complètes ou partielles sur l'une ou l'autre dimension.

Vous pouvez effectuer une sauvegarde et une restauration parallèles d'une seule table.

Le nombre de partitions est supérieur à celui du partitionnement à un seul niveau, ce qui peut être avantageux pour une exécution parallèle.

Vous pouvez implémenter une fenêtre glissante pour prendre en charge les données historiques et continuer à partitionner sur une autre dimension si de nombreuses instructions peuvent bénéficier de l'élagage de partition ou de jointures par partition.

Vous pouvez stocker les données différemment en fonction de l'identification par une clé de partitionnement. Par exemple, vous pouvez décider de stocker les données d'un type de produit spécifique dans un format compressé en lecture seule et de conserver les autres données de type de produit non compressées.

Le partitionnement par plage, par liste et par hachage est éligible en tant que stratégies de sous-partitionnement pour les tables partitionnées composites. La figure suivante offre une vue graphique du partitionnement composite range-hash et range-list.

Figure 6-1 Partitionnement par liste de plages composites

La base de données stocke chaque sous-partition dans une table partitionnée composite en tant que segment distinct. Ainsi, les propriétés des sous-partitions peuvent différer des propriétés de la table ou de la partition à laquelle appartiennent les sous-partitions.

Oracle Database VLDB and Partitioning Guide pour en savoir plus sur le partitionnement composite

Tables partitionnées

UNE table partitionnée se compose d'une ou plusieurs partitions, qui sont gérées individuellement et peuvent fonctionner indépendamment des autres partitions.

Une table est partitionnée ou non partitionnée. Même si une table partitionnée se compose d'une seule partition, cette table est différente d'une table non partitionnée, qui ne peut pas avoir de partitions ajoutées.

« Caractéristiques de partition » pour des exemples de tables partitionnées

« Présentation des tables organisées par index » pour en savoir plus sur l'objectif et les caractéristiques des tables organisées par index, qui peuvent également bénéficier d'un partitionnement qui améliore la gérabilité, la disponibilité et les performances.

Segments pour les tables partitionnées

Une table partitionnée est constituée d'un ou plusieurs segments de partition de table.

Si vous créez une table partitionnée nommée hash_products , aucun segment de table n'est alloué pour cette table. Au lieu de cela, la base de données stocke les données de chaque partition de table dans son propre segment de partition. Chaque segment de partition de table contient une partie des données de la table.

Lorsqu'une table externe est partitionnée, toutes les partitions résident en dehors de la base de données. Dans une table partitionnée hybride, certaines partitions sont stockées dans des segments, tandis que d'autres sont stockées en externe. Par exemple, certaines partitions de la table des ventes peuvent être stockées dans des fichiers de données et d'autres dans des feuilles de calcul.

Compression pour les tables partitionnées

Certaines ou toutes les partitions d'une table organisée en tas peuvent être stockées dans un format compressé.

La compression permet d'économiser de l'espace et peut accélérer l'exécution des requêtes. Pour cette raison, la compression peut être utile dans des environnements tels que les entrepôts de données, où le nombre d'opérations d'insertion et de mise à jour est faible, et dans les environnements OLTP.

Vous pouvez déclarer les attributs de compression de table pour un tablespace, une table ou une partition de table. Si elles sont déclarées au niveau du tablespace, les tables créées dans le tablespace sont compressées par défaut. Vous pouvez modifier l'attribut de compression d'une table, auquel cas la modification ne s'applique qu'aux nouvelles données entrant dans cette table. Par conséquent, une seule table ou partition peut contenir des blocs compressés et non compressés, ce qui garantit que la taille des données n'augmentera pas en raison de la compression. Si la compression peut augmenter la taille d'un bloc, la base de données ne l'applique pas au bloc.

« Compression de table » pour en savoir plus sur les types de compression de table, y compris la compression de base, avancée et hybride en colonnes

Oracle Database Data Warehousing Guide pour en savoir plus sur la compression de table dans un entrepôt de données

Index partitionnés

UNE index partitionné est un index qui, comme une table partitionnée, a été divisé en morceaux plus petits et plus faciles à gérer.

Les index globaux sont partitionnés indépendamment de la table sur laquelle ils sont créés, tandis que les index locaux sont automatiquement liés à la méthode de partitionnement d'une table. Comme les tables partitionnées, les index partitionnés améliorent la gérabilité, la disponibilité, les performances et l'évolutivité.

Le graphique suivant montre les options de partitionnement d'index.

Figure 6-2 Options de partitionnement d'index

"Introduction aux index" pour en savoir plus sur la différence entre les index uniques et non uniques, et les différents types d'index

Oracle Database VLDB and Partitioning Guide pour plus d'informations sur les index partitionnés et comment choisir le type à utiliser

Index partitionnés locaux

Dans un index partitionné local, l'index est partitionné sur les mêmes colonnes, avec le même nombre de partitions et les mêmes bornes de partition que sa table.

Chaque partition d'index est associée à exactement une partition de la table sous-jacente, de sorte que toutes les clés d'une partition d'index se réfèrent uniquement aux lignes stockées dans une seule partition de table. De cette façon, la base de données synchronise automatiquement les partitions d'index avec leurs partitions de table associées, rendant chaque paire table-index indépendante.

Les index partitionnés locaux sont courants dans les environnements d'entreposage de données. Les index locaux offrent les avantages suivants :

La disponibilité est augmentée car les actions qui rendent les données invalides ou indisponibles dans une partition affectent uniquement cette partition.

La maintenance des partitions est simplifiée. Lors du déplacement d'une partition de table ou lorsque les données vieillissent hors d'une partition, seule la partition d'index local associée doit être reconstruite ou conservée. Dans un index global, toutes les partitions d'index doivent être reconstruites ou conservées.

Si une restauration à un moment donné d'une partition se produit, les index peuvent être restaurés jusqu'à l'heure de restauration (voir Oracle Database Backup and Recovery User's Guide ). L'index entier n'a pas besoin d'être reconstruit.

L'exemple de Hash Partitioning montre l'instruction de création de la table partitionnée hash_sales, en utilisant la colonne prod_id comme clé de partition. L'exemple suivant crée un index partitionné local sur la colonne time_id de la table hash_sales :

Dans la figure 6-3, la table hash_products a deux partitions, donc hash_sales_idx a deux partitions. Chaque partition d'index est associée à une partition de table différente. La partition d'indexation SYS_P38 indexe les lignes de la partition de table SYS_P33 , tandis que la partition d'indexation SYS_P39 indexe les lignes de la partition de table SYS_P34 .

Figure 6-3 Partitions d'index local

Vous ne pouvez pas ajouter explicitement une partition à un index local. Au lieu de cela, de nouvelles partitions sont ajoutées aux index locaux uniquement lorsque vous ajoutez une partition à la table sous-jacente. De même, vous ne pouvez pas supprimer explicitement une partition d'un index local. Au lieu de cela, les partitions d'index local sont supprimées uniquement lorsque vous supprimez une partition de la table sous-jacente.

Comme les autres index, vous pouvez créer un index bitmap sur des tables partitionnées.La seule restriction est que les index bitmap doivent être locaux à la table partitionnée — ils ne peuvent pas être des index globaux. Les index bitmap globaux ne sont pris en charge que sur les tables non partitionnées.

Index locaux préfixés et non préfixés

Les index partitionnés locaux sont soit préfixés, soit non préfixés.

Les sous-types d'index sont définis comme suit :

Dans ce cas, les clés de partition sont sur le bord d'attaque de la définition d'index. Dans l'exemple time_range_sales dans Range Partitioning, la table est partitionnée par plage sur time_id . Un index local préfixé sur cette table aurait time_id comme première colonne de sa liste.

Index locaux non préfixés

Dans ce cas, les clés de partition ne sont pas sur le bord avant de la liste de colonnes indexées et n'ont pas du tout besoin d'être dans la liste. Dans l'exemple hash_sales_idx dans Index partitionnés locaux, l'index est local sans préfixe car la clé de partition product_id n'est pas à la pointe.

Les deux types d'index peuvent tirer parti de l'élimination de partition (également appelée élagage de partition ), qui se produit lorsque l'optimiseur accélère l'accès aux données en excluant les partitions de la prise en compte. La capacité d'une requête à éliminer des partitions dépend du prédicat de la requête. Une requête qui utilise un index local préfixé permet toujours l'élimination de la partition d'index, contrairement à une requête qui utilise un index local non préfixé.

Oracle Database VLDB and Partitioning Guide pour apprendre à utiliser des index préfixés et non préfixés

Stockage d'index local partitionné

Comme une partition de table, une partition d'index local est stockée dans son propre segment. Chaque segment contient une partie des données totales de l'index. Ainsi, un index local composé de quatre partitions n'est pas stocké dans un seul segment d'index, mais dans quatre segments distincts.

Index partitionnés mondiaux

Un index partitionné global est un index B-tree qui est partitionné indépendamment de la table sous-jacente sur laquelle il est créé. Une partition d'index unique peut pointer vers une ou toutes les partitions de table, alors que dans un index partitionné localement, une parité un-à-un existe entre les partitions d'index et les partitions de table.

En général, les index globaux sont utiles pour les applications OLTP, où l'accès rapide, l'intégrité des données et la disponibilité sont importants. Dans un système OLTP, une table peut être partitionnée par une clé, par exemple, la colonne employee.department_id, mais une application peut avoir besoin d'accéder aux données avec de nombreuses clés différentes, par exemple, par employee_id ou job_id . Les index globaux peuvent être utiles dans ce scénario.

A titre d'illustration, supposons que vous créez un index partitionné global sur la table time_range_sales à partir de "Range Partitioning" . Dans ce tableau, les lignes des ventes de 1998 sont stockées dans une partition, les lignes des ventes de 1999 sont dans une autre, et ainsi de suite. L'exemple suivant crée un index global partitionné par plage sur la colonne channel_id :

Comme le montre la Figure 6-4, une partition d'index global peut contenir des entrées qui pointent vers plusieurs partitions de table. La partition d'index p1 pointe vers les lignes avec un channel_id de 2, la partition d'index p2 pointe vers les lignes avec un channel_id de 3 et la partition d'index p3 pointe vers les lignes avec un channel_id de 4 ou 9.

Figure 6-4 Index partitionné global

Oracle Database VLDB and Partitioning Guide pour apprendre à gérer les index partitionnés globaux

Oracle Database SQL Language Reference pour en savoir plus sur la clause GLOBAL PARTITION de CREATE INDEX

Index partiels pour les tables partitionnées

UNE index partiel est un index qui est corrélé aux propriétés d'indexation d'une table partitionnée associée.

La corrélation vous permet de spécifier quelles partitions de table sont indexées. Les index partiels offrent les avantages suivants :

Les partitions de table qui ne sont pas indexées évitent de consommer de l'espace de stockage d'index inutile.

Les performances des chargements et des requêtes peuvent s'améliorer.

Avant Oracle Database 12c , une opération de partition d'échange nécessitait une mise à jour physique d'un index global associé pour le conserver comme utilisable. À partir d'Oracle Database 12c , si les partitions impliquées dans une opération de maintenance de partition ne font pas partie d'un index global partiel, l'index reste utilisable sans nécessiter de maintenance d'index global.

Si vous n'indexez que certaines partitions de la table lors de la création de l'index, et si vous indexez ultérieurement d'autres partitions, vous pouvez réduire l'espace de tri requis par la création de l'index.

Vous pouvez activer ou désactiver l'indexation pour les partitions individuelles d'une table. Un index local partiel n'a pas de partitions d'index utilisables pour toutes les partitions de table dont l'indexation est désactivée. Un index global, qu'il soit partitionné ou non, exclut les données de toutes les partitions pour lesquelles l'indexation est désactivée. La base de données ne prend pas en charge les index partiels pour les index qui appliquent des contraintes uniques.

La figure 6-5 montre le même index global que dans la figure 6-4, sauf que l'index global est partiel. Les partitions de table SALES_1998 et SALES_2000 ont la propriété d'indexation définie sur OFF , de sorte que l'index global partiel ne les indexe pas.

Figure 6-5 Index partitionné global partiel


Description de "Figure 6-5 Index partitionné global partiel"

Présentation des tables partagées

Dans une base de données Oracle, le sharding vous permet de diviser une grande table en morceaux plus gérables appelés fragments qui peuvent être stockés dans plusieurs bases de données.

Chaque base de données est hébergée sur un serveur dédié avec ses propres ressources locales - CPU, mémoire, flash ou disque. Chaque base de données dans une telle configuration est appelée un tesson. Tous les fragments forment ensemble une seule base de données logique, appelée base de données segmentée.

Le partitionnement horizontal consiste à diviser une table de base de données en plusieurs partitions afin que chaque partition contienne la table avec les mêmes colonnes mais un sous-ensemble différent de lignes. Une table divisée de cette manière est également connue sous le nom de table fragmentée.

La figure suivante montre une table partitionnée horizontalement sur trois partitions.

Figure 6-6 Partitionnement horizontal d'une table sur plusieurs partitions


Description de "Figure 6-6 Partitionnement horizontal d'une table à travers des fragments"

Le partitionnement est basé sur une infrastructure matérielle sans partage et élimine les points de défaillance uniques, car les partitions ne partagent pas les ressources physiques telles que le processeur, la mémoire ou les périphériques de stockage. Les fragments sont également faiblement couplés en termes de logiciels, ils n'exécutent pas de clusterware.

Les fragments sont généralement hébergés sur des serveurs dédiés. Ces serveurs peuvent être du matériel de base ou des systèmes techniques. Les fragments peuvent s'exécuter sur des bases de données à instance unique ou Oracle RAC. Ils peuvent être placés sur site, dans un cloud ou dans une configuration hybride sur site et cloud.

Du point de vue d'un administrateur de base de données, un SDB se compose de plusieurs bases de données qui peuvent être gérées collectivement ou individuellement. Cependant, du point de vue de l'application, un SDB ressemble à une seule base de données : le nombre de fragments et la répartition des données entre ces fragments sont totalement transparents pour les applications de base de données.

Le partitionnement est destiné aux applications OLTP personnalisées qui conviennent à une architecture de base de données partitionnée. Les applications qui utilisent le partitionnement doivent avoir un modèle de données et une stratégie de distribution de données bien définis (hachage, plage, liste ou composite cohérents) qui accèdent principalement aux données à l'aide d'une clé de partitionnement. Les exemples de clé de partitionnement incluent customer_id , account_no ou country_id .

Tables partagées

Une table partitionnée est une table qui est partitionnée en morceaux plus petits et plus faciles à gérer parmi plusieurs bases de données, appelées partitions.

Les partitions sont réparties sur les partitions au niveau de l'espace table, en fonction d'une clé de partitionnement. Les exemples de clés incluent l'ID client, le numéro de compte et l'ID de pays. Les types de données suivants sont pris en charge pour la clé de partitionnement.


Procédure

  1. Pour créer des clés étrangères pour le premier système, choisissez Comparaison en mode édition.
    • Créez les clés étrangères en faisant glisser les flèches sur le côté extérieur des tables enfants (à gauche pour la source 1 et à droite pour la source 2), vers ses tables de niveau supérieur. Joignez les tables de sorte que la flèche aille de la table enfant à la table racine (niveau supérieur).
      • Enregistrez vos entrées.

Vous avez créé les clés étrangères.

Pour supprimer les relations de clé étrangère, cliquez d'abord sur la flèche, puis cliquez avec le bouton droit et sélectionnez supprimer l'élément.

Dans cette étape, vous pouvez choisir le type de filtre et saisir les critères de filtre. Vous pouvez utiliser différents types de filtres dans la comparaison de bases de données croisées pour restreindre les données comparées pour les sources. Vous pouvez créer des filtres pour les deux systèmes sources ou pour une seule source. (Pour plus de détails sur le filtrage, voir Filtrage dans la comparaison entre bases de données).

Pour conserver le filtre pour le premier ou le deuxième système source, choisissez Comparaison en mode Édition.

Choisissez le champ dans le modèle de données pour lequel vous souhaitez définir le filtre. Si vous souhaitez utiliser un filtre d'instance, cochez la case. Si vous souhaitez utiliser le filtre d'objet, saisissez la valeur du filtre.

Vous pouvez saisir un type de filtre pour un filtre variable qui permet de saisir les valeurs de filtre dans l'instance de comparaison dans un champ avec le type de données correct. Utilisez la zone de liste déroulante pour sélectionner le type de filtre correct. Utilisez le type de filtre spécial « timestamp relatif » pour saisir des horodatages relatifs dans l'instance de comparaison. (Pour plus de détails sur le filtrage, voir Filtrage dans la comparaison entre bases de données)

Dans le Filtres spécifiques à l'instance zone d'écran, spécifiez les valeurs des filtres spécifiques à l'instance. Vous pouvez créer plusieurs instances de comparaison avec différents filtres spécifiques aux instances pour le même objet de comparaison. Le type de données des champs dépend du type de filtre que vous avez saisi lors de la création de l'objet de comparaison. Si vous avez choisi le type de filtre « horodatage relatif », vous pouvez utiliser des horodatages relatifs. (Voir Utilisation de la syntaxe de date relative)


Dans l'application Cross Database Comparison (CDC), vous extrayez généralement uniquement les données nécessaires à la comparaison. Vous pouvez maintenant extraire d'autres champs de contexte uniquement à des fins d'information sur l'interface utilisateur du résultat de la comparaison.

Il existe deux types de champs de contexte :

  • Le champ n'est disponible que dans l'un des systèmes source (par exemple, un champ de clé natif ou un attribut supplémentaire), et ne peut donc pas être inclus en tant que champ de mappage commun
  • Le champ est disponible dans les deux systèmes source mais a toujours un contenu différent (par exemple, les champs créés par) par objectif, et n'est donc pas adapté comme champ de mappage/comparaison

Lors de la sélection du champ de contexte, une icône apparaît sur le champ du modèle de données.

Dans cette étape, vous spécifiez quelles zones de données dans les tables du premier système vous souhaitez comparer avec quelles zones de données dans les tables du second système et quelles zones de données sont utilisées comme clés de comparaison. Vous attribuez à ce mappage un nom avec lequel vous pourrez l'identifier ultérieurement.

Vous créez également des filtres fixes et variables que vous utilisez pour restreindre la comparaison. Pour les filtres fixes, vous spécifiez le champ de données et la valeur exacte du filtre dès que vous créez l'objet de comparaison. Par exemple, vous spécifiez la restriction Country="DE" lorsque vous créez l'objet de comparaison.

Pour les filtres de variables, vous spécifiez lors de la création de l'objet de comparaison qu'un certain champ de données doit être utilisé comme filtre de variables, par exemple le champ de données Pays. Les filtres de variables sont affichés dans l'instance de comparaison, où vous pouvez spécifier des valeurs pour eux, telles que Country="DE". Cela vous permet de créer plusieurs instances de comparaison pour le même objet de comparaison et de spécifier des valeurs de filtre différentes pour chacun, par exemple, Country="DE" pour une instance de comparaison et Country="IN" pour une autre instance de comparaison.


La clé étrangère n'est pas ajoutée à la table de destination après la création d'une classe de relations - Systèmes d'information géographique

Pour les nouvelles installations MySQL, les colonnes USER et HOST dans la table audit_log_user utilisées par MySQL Enterprise Audit ont désormais des définitions qui correspondent mieux aux définitions des colonnes User et Host dans la table système mysql.user.

Pour les mises à niveau d'une installation pour laquelle MySQL Enterprise Audit est déjà installé, il est recommandé de modifier les définitions de table comme suit :

Notes de compilation

Microsoft Windows: Pour OpenSSL 1.1, les noms de bibliothèque ont changé pour Windows. le Cfaire le code de configuration en tient compte maintenant. De plus, il est désormais possible sous Windows d'utiliser -DWITHOUT_SERVER=1 pour créer des binaires client 32 bits. (Bogue #28170711, Bug #91223)

La version minimale de la bibliothèque Boost pour les builds de serveur est désormais la 1.67.0. (Bogue #27866110)

Remarques sur la configuration

La valeur maximale a été augmentée de 256 à 1024 pour ces variables système de schéma de performances :

La valeur par défaut a été augmentée de 250 à 300 pour cette variable système de schéma de performances :

Pour les builds RelWithDebInfo sur Linux, REPRODUCIBLE_BUILD est désormais défini par défaut sur ON . (Bogue #27483447)

La valeur par défaut de la variable système slave_pending_jobs_size_max est passée de 16M à 128M. Sur un esclave multithread ( avec slave_parallel_workers > 0 ), cette valeur définit la quantité maximale de mémoire mise à la disposition des files d'attente de travail esclave contenant des événements qui n'ont pas encore été appliqués. L'utilisation potentiellement plus importante de la mémoire doit être prise en compte lors du calcul des ressources requises pour déployer un esclave multithread. Les maîtres et les esclaves monothread ne sont pas affectés par ce paramètre.

La nouvelle valeur par défaut est le double de la valeur par défaut récemment augmentée spécifiée par la variable système max_allowed_packet (maintenant 64M). La valeur de slave_pending_jobs_size_max est une limite souple, de sorte que les événements plus grands que sa valeur (constitués d'un ou plusieurs paquets) peuvent être mis en file d'attente et traités. Cependant, une transaction importante est suspendue jusqu'à ce que tous les travailleurs esclaves aient des files d'attente vides, puis traitée. Toutes les transactions ultérieures sont conservées jusqu'à ce que la transaction importante soit terminée. Le délai d'effacement des files d'attente de tous les travailleurs esclaves et l'attente pour mettre en file d'attente les transactions suivantes peuvent entraîner un décalage sur l'esclave de réplication et une diminution de la simultanéité des travailleurs esclaves. La valeur de slave_pending_jobs_size_max doit donc être suffisamment élevée pour prendre en charge la plupart des tailles d'événements attendues.

Notes sur le dictionnaire de données

Les améliorations suivantes du dictionnaire de données ont été introduites :

Une méthode interne a été ajoutée pour se protéger contre les verrous de lecture globaux. La méthode est appelée avant le stockage, la mise à jour ou la suppression des objets du dictionnaire de données.

Le code d'assertion a été ajouté à l'API du dictionnaire de données pour protéger contre les verrous de lecture globaux lors du stockage, de la mise à jour ou de la suppression des objets du dictionnaire de données.

La protection est désormais acquise implicitement contre les verrous de sauvegarde et les verrous de lecture globaux lorsqu'un verrou de métadonnées exclusif est acquis par un moteur de stockage.

Un contrôle de validité du cache de modèle de coût est désormais effectué avant de libérer une entrée de modèle de coût.

Une fonction API de dictionnaire de données a été ajoutée pour valider et annuler les transactions, et pour libérer les verrous de métadonnées transactionnelles.

Remarques sur le pare-feu

La table firewall_whitelist de MySQL Enterprise Firewall contient désormais une colonne de clé primaire nommée ID . (Bogue #27164826)

Remarques sur la fonction et l'opérateur

Les fonctions d'agrégation BIT_AND() , BIT_OR() et BIT_XOR() peuvent désormais être utilisées comme fonctions de fenêtre, si une clause OVER est présente. Voir Descriptions des fonctions agrégées.

Remarques sur la journalisation

Auparavant, les affectations réussies à la variable système dragnet.log_error_filter_rules entraînaient une note et un nombre d'avertissements différent de zéro. Pour éviter de générer un diagnostic pour une opération réussie, cette note n'est plus générée. Au lieu de cela, la variable d'état dragnet.Status peut être consultée pour déterminer le résultat de l'affectation la plus récente à dragnet.log_error_filter_rules . (Bogue #27910708, Bogue #90571)

Auparavant, les composants de journal répertoriés dans la variable système log_error_services devaient être séparés par des points-virgules. Les composants peuvent désormais être séparés par des virgules. Un paramètre donné ne peut pas utiliser à la fois des séparateurs point-virgule et virgule. (Bogue #27788925, Bug #90268)

Remarques sur l'optimiseur

L'algorithme de tri de fichiers (utilisé par l'optimiseur pour satisfaire une clause ORDER BY lorsqu'aucun index ne peut être utilisé) est désormais plus efficace en mémoire. Le principal changement est que l'optimiseur alloue des tampons mémoire de manière incrémentielle selon les besoins, jusqu'à la taille indiquée par la variable système sort_buffer_size, plutôt que d'allouer une quantité fixe d'octets sort_buffer_size à l'avance. Cela permet aux utilisateurs de définir sort_buffer_size sur des valeurs plus élevées pour accélérer les tris plus importants, sans se soucier de l'utilisation excessive de la mémoire pour les petits tris. (Cet avantage peut ne pas se produire pour plusieurs tris simultanés sous Windows, qui a un malloc multithread faible.)

De plus, le tri des fichiers est moins pessimiste en ce qui concerne les pires scénarios. Auparavant, filesort produisait une erreur sans démarrer si les opérations de fusion ou la génération de la clé de tri pouvaient échouer. Maintenant, parce que le pire des cas est peu susceptible de se produire dans la pratique, le tri de fichiers ne produit une erreur que pour les échecs réels plutôt que potentiels.

Auparavant, la sortie EXPLAIN étendue n'était produite que pour les instructions SELECT. Une sortie étendue est désormais produite pour les instructions INSERT , REPLACE , UPDATE et DELETE également. (Pour afficher la sortie étendue, utilisez AFFICHER LES AVERTISSEMENTS après EXPLAIN . Voir Format de sortie EXPLAIN étendu.)

Remarques sur l'emballage

Pour Linux, l'algorithme de compression de distribution binaire générique est passé de Gzip à XZ et l'extension de fichier est passée de .tar.gz à .tar.xz. (Bogue #28450941, Bug #91889)

Docker désactive les opérations liées à NUMA par défaut, donc le mysqld inclus dans les images Docker a maintenant la prise en charge NUMA désactivée afin que le journal des erreurs ne se remplisse pas d'avertissements NUMA. (Bogue #28081363)

Les fichiers RPM .spec ont été mis à jour pour refléter la suppression de yaSSL et qu'OpenSSL est la bibliothèque SSL par défaut pour toutes les versions. (Bogue #28025427)

Pour les distributions Linux génériques .tar.gz, le mysqlxtest client a été déplacé du package serveur vers le package de test. (Bogue #27744137)

Un package RPM pour l'installation des binaires ARM 64 bits (aarch64) de MySQL Server sur Oracle Linux 7 est désormais disponible dans le référentiel MySQL Yum et en téléchargement direct.

Limitation connue pour cette version ARM : vous devez activer le référentiel de collections de logiciels Oracle Linux 7 (ol7_software_collections) pour installer ce package, et devez également ajuster le chemin libstdc++7. Voir les notes spécifiques à la plate-forme de Yum pour plus de détails.

Remarques sur les plug-ins

Auparavant, le plug-in de réécriture de requêtes Rewriter autorisait la réécriture uniquement pour les instructions SELECT. Les instructions réinscriptibles incluent désormais INSERT , REPLACE , UPDATE et DELETE également. Voir le plug-in de réécriture de requêtes Rewriter.

Notes de sécurité

La bibliothèque OpenSSL liée pour MySQL Server a été mise à jour vers la version 1.0.2o. Les problèmes résolus dans la nouvelle version d'OpenSSL sont décrits sur http://www.openssl.org/news/vulnerabilities.html. (Bogue #28025379)

Prise en charge des données spatiales

Modification incompatible : Les nouvelles fonctions spatiales ST_Longitude() et ST_Latitude() renvoient respectivement la longitude ou la latitude de leur argument Point. Si elles sont appelées avec un deuxième argument, ces fonctions utilisent l'argument pour définir la longitude ou la latitude, respectivement, de leur argument Point.

De plus, les fonctions ST_X() et ST_Y() interprètent désormais leur argument Point en fonction de sa définition de système de référence spatiale (SRS) :

ST_X() renvoie la valeur de coordonnée de l'axe qui apparaît en premier dans la définition SRS et ST_Y() renvoie la valeur de coordonnée de l'axe qui apparaît en second dans la définition SRS.

Si ST_X() et ST_Y() sont utilisés pour définir la longitude ou la latitude d'un argument Point qui a un SRS géographique, la valeur de longitude ou de latitude doit être dans la plage appropriée pour le SRS, sinon une erreur se produit.

Si les données spatiales contiennent des valeurs géométriques qui sont désormais interprétées différemment par ST_X() et ST_Y() , les requêtes existantes utilisant ces fonctions renverront des résultats différents par rapport aux versions précédentes de MySQL.

L'ensemble de données EPSG contenant les données du système de référence spatiale pour les calculs spatiaux a été mis à niveau de la version 9.2 à la 9.3. (Bogue #27977721)

Les fonctions spatiales qui acceptent les arguments de géométrie et renvoyaient auparavant une erreur ER_LONGITUDE_OUT_OF_RANGE ou ER_LATITUDE_OUT_OF_RANGE pour les valeurs de longitude ou de latitude hors plage renvoient désormais ER_GEOMETRY_PARAM_LONGITUDE_OUT_OF_RANGE ou ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE à la place. Cela ne s'applique pas aux fonctions spatiales qui analysent ou modifient les géométries : ST_ xxx FromText() , ST_ xxx DeWKT() , ST_ xxx FromWKB() , ST_GeomFromGeoJSON() , ST_X() , ST_Y() , ST_Longitude() et ST_Latitude() . (Bogue #27892138)

Auparavant, l'analyseur reconnaissait USING RTREE dans les spécifications d'index, mais cela ne pouvait être spécifié pour aucun moteur de stockage. Désormais, USING RTREE est autorisé pour les spécifications d'index spatial. (Bogue #27836608)

Les index sur les colonnes de géométrie doivent désormais être des index spatiaux. Par conséquent, le mot clé SPATIAL est facultatif mais implicite pour créer un index sur une colonne spatiale. Un index spatial sur une colonne de géométrie n'est pas autorisé pour une clé primaire ou un index unique. De plus, ASC et DESC ne sont pas autorisés pour les index spatiaux. (Bogue #21087676)

Remarques sur la syntaxe SQL

Changement important : MySQL permet désormais à une requête ayant un modificateur WITH ROLLUP d'utiliser DISTINCT . Voir Instruction SELECT, pour plus d'informations. (Bogue #87450, Bug #26640100, Bug #20671578, Bug #76229)

Changement important : MySQL permet désormais l'utilisation de ORDER BY avec des fonctions de regroupement dans SELECT . déclarations. (Bogue #86312, Bug #27063525)

Changement important : MySQL permet désormais d'utiliser ORDER BY dans une requête ayant un modificateur WITH ROLLUP. Pour plus d'informations, consultez Instruction SELECT. (Bogue #86311, Bug #26073513)

Les qualificateurs explicites ASC ou DESC pour les clauses GROUP BY sont désormais obsolètes et seront supprimés dans une future version de MySQL.

Notes sur le plugin X

Les erreurs d'authentification renvoyées par un serveur MySQL 8.0.11 à un client X Plugin ont été marquées comme fatales, ce qui a obligé le client à arrêter de tenter sa séquence automatique de tentatives d'authentification en utilisant différentes méthodes. X Plugin ignore désormais les erreurs d'authentification fatales et les erreurs attendues ultérieures telles que les erreurs de délai d'attente d'écriture, pendant que la séquence de tentatives d'authentification est en cours. Si aucune des méthodes d'authentification essayées ne réussit, X Plugin sélectionne et renvoie maintenant le message d'erreur le plus pertinent reçu du serveur, qui n'est pas nécessairement le dernier message d'erreur reçu. (Bogue #28135006)

Au cours de la séquence d'authentification automatisée du plugin X, les tentatives de connexion sont effectuées à l'aide de différentes méthodes d'authentification dans une séquence prédéfinie. X Plugin vérifie avant de démarrer la séquence si la connexion utilise SSL ou non, et ne tente pas de connexion avec la méthode d'authentification PLAIN si la connexion n'est pas cryptée. Pour une vérification supplémentaire, une vérification et une erreur ont été ajoutées afin que la méthode d'authentification PLAINE soit interdite si elle est tentée lorsque la connexion n'est pas cryptée. (Bogue #27691189)

En cas d'échec d'authentification, X Plugin renvoyait toujours le code d'erreur ER_ACCESS_DENIED , avec un message d'erreur X Protocol personnalisé pour la situation d'erreur. Les codes d'erreur reçus du serveur MySQL pour les échecs d'authentification sont désormais transmis au client à la place, avec les messages d'erreur MySQL standard qui les accompagnent. (Bogue #27675699)

Au cours de la séquence d'authentification automatisée du plug-in X, où les tentatives de connexion sont effectuées à l'aide de différentes méthodes d'authentification dans une séquence prédéfinie, l'erreur renvoyée après chaque échec de tentative de connexion a été marquée avec la gravité FATAL . Désormais, les erreurs sont marquées comme ERROR alors qu'il y a encore d'autres méthodes d'authentification à tenter, et seule l'erreur finale qui entraîne la déconnexion est marquée comme FATAL . (Bogue #27636947)

Le code du plugin X était compilé deux fois avec différentes définitions de préprocesseur. (Bogue #27267054)

Un certain nombre d'améliorations ont été apportées à la gestion des problèmes d'authentification par X Plugin :

La séquence d'authentification automatisée du plug-in X, où les tentatives de connexion sont effectuées à l'aide de différentes méthodes d'authentification dans une séquence prédéfinie, est désormais interrompue si une réponse d'erreur indique que la connexion a été interrompue ou que les lectures ou les écritures expirent.

La séquence d'authentification automatisée est également désormais interrompue en cas d'erreur fatale.

La dernière erreur significative est désormais signalée pour une séquence d'authentification abandonnée, et pas seulement la dernière erreur survenue.

Un code d'erreur et un message plus spécifiques sont désormais signalés si l'authentification avec le plug-in d'authentification caching_sha2_password est tentée via une connexion non sécurisée.

Dans certaines circonstances, un serveur MySQL avec le plug-in X chargé peut subir un arrêt inattendu lors d'un processus d'arrêt initié par un échec de démarrage ou par la commande RESTART. Le problème est maintenant résolu. (Bogue #25474793, Bug #27259783)

Fonctionnalité ajoutée ou modifiée

Réplication des modifications importantes : Utilisez l'option group_replication_exit_state_action pour configurer le comportement de la réplication de groupe lorsqu'une instance de serveur quitte le groupe involontairement, par exemple lorsqu'elle est expulsée du groupe en raison d'une connexion réseau instable. Lorsque group_replication_exit_state_action est défini sur ABORT_SERVER (la valeur par défaut), l'instance s'arrête, et lorsque group_replication_exit_state_action est défini sur READ_ONLY, l'instance passe en mode super lecture seule à la place et passe à l'état Group Replication ERROR.

InnoDB : InnoDB prend désormais en charge ALGORITHM=INSTANT pour les opérations ALTER TABLE suivantes :

Ajout d'une colonne. Cette fonction est appelée « AJOUT DE COLONNE instantanée ».

Ajouter ou supprimer une colonne virtuelle.

Ajout ou suppression d'une valeur par défaut de colonne.

Modification de la définition d'une colonne ENUM ou SET.

Les opérations qui prennent en charge ALGORITHM=INSTANT modifient uniquement les métadonnées dans le dictionnaire de données. Aucun verrou exclusif de métadonnées n'est posé sur la table pendant les phases de préparation et d'exécution de l'opération, et les données de la table ne sont pas affectées, ce qui rend les opérations instantanées. S'il n'est pas spécifié explicitement, ALGORITHM=INSTANT est utilisé par défaut par les opérations qui le prennent en charge. Si ALGORITHM=INSTANT est spécifié mais non pris en charge, l'opération échoue immédiatement avec une erreur.

Pour plus d'informations sur les opérations qui prennent en charge ALGORITHM=INSTANT , consultez Opérations DDL en ligne.

Merci à l'équipe DBA de Tencent Games pour sa contribution. (Bogue #28100103, Bug #91074)

InnoDB : La journalisation des annulations est désormais prise en charge pour les petites mises à jour des données LOB, ce qui améliore les performances des mises à jour LOB de 100 octets ou moins. Auparavant, les mises à jour LOB avaient une taille minimale d'une page LOB, ce qui est moins qu'optimal pour les mises à jour qui ne pouvaient modifier que quelques octets. Cette amélioration s'appuie sur la prise en charge ajoutée dans MySQL 8.0.4 pour la mise à jour partielle des données LOB.

Réplication : Vous pouvez maintenant utiliser un shell pipe pour fournir une archive de fichiers journaux binaires compressés à mysqlbinlog comme entrée en streaming. Auparavant, les fichiers devaient être extraits séparément avant de les transmettre à mysqlbinlog . Merci à l'équipe Facebook pour cette contribution.

Dans cet exemple, binlog-files_1.gz contient plusieurs fichiers journaux binaires à traiter. Le pipeline extrait le contenu de binlog-files_1.gz , dirige les fichiers journaux binaires vers mysqlbinlog comme entrée standard, et dirige la sortie de mysqlbinlog dans le client mysql pour l'exécution :

Références : Voir aussi : Bug #27836543.

Réplication : Les privilèges SYSTEM_VARIABLES_ADMIN et PERSIST_RO_VARIABLES_ADMIN ont été ajoutés au compte réservé mysql.session. (Bogue #89873, Bug #27621869)

Réplication : Des informations sur l'utilisation de la mémoire de XCom ont été ajoutées aux tables de schéma de performances. La table setup_instruments a maintenant une entrée correspondant au cache XCom, et la table memory_summary_global_by_event_name contient les statistiques d'utilisation de la mémoire du cache XCom.

Microsoft Windows: Sous Windows, le fork utilisé pour implémenter RESTART était réprimable à l'aide de l'option --gdb. Cependant, il s'agissait d'un effet secondaire, effectué en plus des autres actions d'option effectuées pour configurer un environnement de débogage. Dans les paramètres de non-débogage, la nouvelle option --no-monitor peut être utilisée dans le seul but de supprimer le fork du processus de surveillance. Pour un serveur démarré avec --gdb ou --no-monitor , l'exécution de RESTART entraîne la fermeture du serveur sans redémarrage. (Bogue #27801043)

La vérification des relations de clé étrangère par DROP TABLE et DROP DATABASE a été améliorée. La vérification a maintenant lieu avant la suppression des tables, de sorte qu'en cas de problème, l'instruction échoue avant d'apporter des modifications. Les tables parent et enfant peuvent désormais être supprimées dans un ordre arbitraire, tant qu'elles sont supprimées par la même instruction DROP TABLE. De plus, le rapport d'erreurs a été amélioré pour les tentatives de suppression d'une table parent sans supprimer une table enfant. (Bogue #27821060, Bogue #17564464, Bogue #70531, Bogue #22359539, Bogue #79610)

Lorsque la prise en charge des rôles a été ajoutée, le mot-clé ADMIN est devenu un mot-clé réservé. ADMIN est à nouveau un mot-clé non réservé. (Bogue #27814204)

Lorsqu'un client arrête le serveur, le serveur écrit désormais un message dans le journal des erreurs indiquant quel utilisateur a effectué cette action. (Bogue #26246628, Bug #86635)

Auparavant, pour l'option --ssl-mode=VERIFY_IDENTITY, le client vérifiait si le nom d'hôte qu'il utilisait pour se connecter correspondait à la valeur Common Name dans le certificat mais pas à la valeur Subject Alternative Name. Désormais, si le client utilise OpenSSL 1.0.2 ou une version ultérieure, le client vérifie si le nom d'hôte correspond à la valeur du nom alternatif du sujet ou à la valeur du nom commun dans le certificat du serveur. Merci à Daniël van Eeden pour un patch sur lequel ce changement était basé. (Bogue #16211011, Bug #68052, Bug #27511233, Bug #89578)

Bugs corrigés

Changement important JSON : La fonction JSON_TABLE() décode désormais automatiquement les valeurs en base 64 et les imprime à l'aide du jeu de caractères donné par la spécification de la colonne. (Bogue #90157, Bug #27729112)

Références : Voir aussi : Bug #89847, Bug #27613276.

InnoDB : Les nouvelles colonnes ajoutées aux tables INFORMATION_SCHEMA.INNODB_TABLES et INFORMATION_SCHEMA.INNODB_COLUMNS dans la version 8.0.12 n'apparaissaient pas après la mise à niveau vers la version 8.0.12. (Bogue #28065244)

InnoDB : Les numéros de version des objets volumineux (LOB) stockés dans les entrées d'index LOB ont été laissés non initialisés à 0 au lieu d'être initialisés à 1. (Bogue #28046298)

InnoDB : L'ajout d'une colonne à une table avec une colonne générée a soulevé une assertion invalide. (Bogue #28040201)

InnoDB : Une tentative d'accès à la mémoire libérée lors d'une opération de point de contrôle a entraîné la fermeture du serveur. (Bogue #28039477)

InnoDB : Un échec d'assertion s'est produit lors du démarrage du serveur avec des variables système expérimentales qui ont été involontairement exposées dans les versions normales de MySQL. (Bogue #27899424, Bogue #90526, Bogue #27898396, Bogue #90523, Bogue #27898344, Bogue #90522)

InnoDB : Un paramètre de variable système non valide a généré une assertion. (Bogue #27898284)

InnoDB : La tentative de déplacement d'une table d'un tablespace fichier par table supprimé vers un tablespace partagé a généré une assertion. L'opération produit maintenant une erreur à la place. (Bogue #27861972)

InnoDB : Les échecs potentiels liés à l'allocation de pages pour les objets volumineux (LOB) n'étaient pas suffisamment traités. (Bogue #27852003)

InnoDB : L'analyseur de recherche en texte intégral ngram a permis de marquer les virgules et les points en tant que mots, ce qui a entraîné une incohérence entre les résultats de recherche en mode booléen et en mode langage naturel. Les virgules et les points ne sont plus symbolisés. (Bogue #27847697)

InnoDB : Des incompatibilités de somme de contrôle et d'autres problèmes ont été causés par la modification simultanée d'une page d'en-tête d'espace de table et la tentative de placer un verrou sur une page partiellement initialisée. (Bogue #27823064)

InnoDB : Une erreur d'E/S renvoyée par une opération fsync() est désormais traitée comme une erreur matérielle. (Bogue #27805553, Bogue #90296)

InnoDB : Dans un seul thread, deux minitransactions ont verrouillé la première page d'une grande valeur d'objet (LOB) tandis qu'un autre thread a tenté d'allouer la page, provoquant un blocage. (Bogue #27777959)

InnoDB : Après la mise à niveau vers MySQL 8.0.12, les colonnes de la table, y compris la colonne FTS_DOC_ID, manquaient dans la table INFORMATION_SCHEMA.INNODB_COLUMNS. (Bogue #27774145)

InnoDB : Une assertion non valide a été générée lorsque l'optimiseur a choisi un index de préfixe défini sur une colonne virtuelle. (Bogue #27755892)

Références : Ce problème est une régression de : Bug #19806106.

InnoDB : Un objet de table en mémoire pour une table tronquée peut être ouvert sous une protection de verrouillage de métadonnées inappropriée.

Une nouvelle méthode de préservation de la valeur du compteur AUTOINC lors d'une opération TRUNCATE PARTITION a été implémentée. (Bogue #27754995)

InnoDB : Une assertion a été émise lors d'une validation de mini-transaction qui incluait des pages modifiées mais aucun enregistrement de journalisation. La mini-transaction n'a pas attendu d'espace dans le tampon récemment fermé et a ensuite marqué la page avec une valeur LSN actuelle non valide. Une fois la valeur LSN non valide ajoutée à la liste de vidage, une mini-transaction retardée a ajouté des pages modifiées avec une valeur LSN antérieure, brisant ainsi l'ordre de la liste de vidage.

L'option de débogage innodb_log_checkpoint_fuzzy_now a été ajoutée. L'activation de cette option force InnoDB à écrire un point de contrôle flou. En outre, de nouveaux compteurs de module de journalisation interne ont été ajoutés pour le suivi des valeurs LSN. Le compteur log_lsn_buf_dirty_pages_added suit la valeur LSN jusqu'à laquelle des pages modifiées ont été ajoutées, et le compteur log_lsn_buf_pool_oldest_lwm suit le LSN de limite inférieure pour le bloc modifié le plus ancien dans le pool de mémoire tampon. (Bogue #27664539)

InnoDB : L'algorithme CATS (Contention-Aware Transaction Scheduling) suit le nombre de transactions en attente d'une autre transaction. Dans le cas d'un blocage, la méthode par laquelle le nombre de transactions en attente est approximé produit des valeurs gonflées. (Bogue #27646322)

InnoDB : Tenter d'acquérir un ticket InnoDB tout en maintenant un verrou de transaction victime a provoqué une violation d'ordre de verrouillage. (Bogue #27626681)

Références : Ce problème est une régression de : Bug #23476050.

InnoDB : Une tentative de lecture d'une valeur BLOB de longueur nulle a provoqué un échec d'assertion lors de la récupération. La valeur BLOB n'était pas encore complètement insérée. (Bogue #27617389)

InnoDB : Une condition de concurrence s'est produite lors de l'acquisition d'un verrou de table pour une table qui était déjà en mémoire. (Bogue #27586419, Bug #27577704)

Références : Ce problème est une régression de : Bug #26848711.

InnoDB : Après le redémarrage du serveur, la tentative de création d'une table chiffrée a renvoyé une erreur générique du moteur de stockage. (Bogue #27577339)

InnoDB : L'utilisation de Contention-Aware Transaction Scheduling (CATS) avec un index spatial a entraîné une attente indéfinie d'une transaction. (Bogue #27572937)

InnoDB : L'analyse incorrecte d'un nom d'espace table contenant des caractères multi-octets a entraîné l'échec d'une opération DROP DATABASE. (Bogue #27566937)

InnoDB : Une vérification effectuée pour identifier les tables temporaires a provoqué une erreur lorsque le dictionnaire de données a tenté d'ouvrir une table partitionnée. (Bogue #27565997)

InnoDB : Une erreur de non-concordance de schéma signalée lors d'une opération d'importation d'espace de table n'a pas pu imprimer les indicateurs de table non concordants dans un format lisible. (Bogue #27542720)

InnoDB : Une opération DDL n'a pas pu attendre la fin d'une opération d'optimisation d'index FULLTEXT. (Bogue #27326796)

Références : Ce problème est une régression de : Bug #24938374.

InnoDB : Une vérification inutile des transactions en lecture seule a été supprimée de la fonction trx_set_rw_mode(). Merci à Sandeep Sethia pour le patch. (Bogue #27211287, Bug #88739)

InnoDB : Une opération DDL qui a ajouté une contrainte de clé étrangère a soulevé une assertion lorsqu'elle a accédé à un objet de mémoire obsolète qui appartenait à la table parent. (Bogue #27208858)

InnoDB : Une assertion défaillante s'est produite après le lancement d'une memcaché obtenir l'opération. (Bogue #26876594)

InnoDB : Un ID d'index corrompu rencontré lors d'une vérification de clé étrangère a généré une assertion. (Bogue #26654685)

InnoDB : Une opération DROP TABLE sur une table résidant dans un tablespace général a soulevé une assertion lors de la vérification de l'état de l'index dans la phase post-DDL de l'opération. (Bogue #26523254)

InnoDB : Un blocage interne lors d'une opération DDL a entraîné une longue attente de sémaphore suivie d'une sortie du serveur. (Bogue #26225783)

InnoDB : Une opération DDL a rencontré une erreur grave en raison d'une mise à niveau de verrouillage non valide. (Bogue #26225783)

InnoDB : Sur un système Windows 64 bits, des valeurs de configuration de pool de mémoire tampon non valides ont entraîné la fermeture du serveur au démarrage. (Bogue n° 26100239, Bogue n° 86370)

InnoDB : Un bloc de code de débogage lié aux définitions de type mutex a été supprimé. Il ne différait plus de la version sans débogage du bloc de code. (Bogue #24952279, Bug #83529)

InnoDB : Une défaillance du serveur lors de la récupération s'est produite en raison d'un débordement de la mémoire tampon d'analyse du journal. L'espace est maintenant alloué dynamiquement au tampon d'analyse du journal et incrémenté si nécessaire jusqu'à ce qu'il atteigne la taille spécifiée par innodb_log_buffer_size . (Bogue #24734190)

InnoDB : Le verrouillage de table a été optimisé pour les mises à jour simultanées sur la même table en évitant des itérations coûteuses sur la file d'attente de verrouillage de table.

Merci à Zhai Weixiang pour la contribution. (Bogue #18955152, Bogue #72948)

Emballage: Sous Windows, le mysqld.exe --help La commande affichait des détails inutiles et inattendus dans la sortie système, ce que ce correctif élimine. (Bogue #27894020)

Partitionnement : Restauration de ALTER TABLE . Les instructions TRUNCATE PARTITION n'étaient pas gérées correctement. (Bogue #27603025)

Références : Voir aussi : Bug #87562, Bug #26710839.

Partitionnement : Pour une table partitionnée, l'heure de mise à jour de la partition peut être incorrecte après la reconstruction de la table ou le redémarrage du serveur. (Bogue #27073100)

Réplication : Si l'option --skip-log-bin était spécifiée au démarrage du serveur pour désactiver la journalisation binaire, aucun message d'avertissement n'était émis si expire_logs_days et binlog_expire_logs_seconds étaient définis sur une valeur différente de zéro. L'option --skip-log-bin signifiait qu'il n'y avait pas de fichiers journaux binaires à expirer, donc le résultat de ces paramètres de période d'expiration des journaux binaires (c'est-à-dire que la valeur expire_logs_days est ignorée) n'a eu aucun effet pratique. Cependant, le message d'avertissement est maintenant émis, afin que la situation puisse être corrigée avant que la journalisation binaire ne soit activée pour le serveur. (Bogue #27699608)

Réplication : Les messages de journal générés lorsqu'un membre ne parvient pas à rejoindre le groupe ont été améliorés, par exemple lorsque group_replication_group_name sur le membre rejoignant le groupe ne correspond pas au group_replication_group_name de la graine, ceci est maintenant décrit dans le message de journal. (Bogue #27628695)

Réplication : Si un serveur MySQL est démarré en mode de récupération après incident avec un paramètre innodb_force_recovery de 4 ou plus, ce qui place InnoDB en mode lecture seule, le plugin maître de réplication semi-synchrone ne doit pas être initialisé. En raison d'un changement dans l'ordre d'initialisation du plugin dans MySQL 8.0, le serveur a supposé que si le plugin était enregistré, il avait également été initialisé et a tenté de le désinitialiser de manière incorrecte. La gestion de ce plugin en mode crash recovery est désormais corrigée afin que la fonction de désinitialisation ne soit pas exécutée lorsque le plugin n'a pas été initialisé. (Bogue #27481872)

Réplication : L'utilisation de filtres de réplication ou de filtres de journaux binaires peut entraîner des problèmes lorsqu'ils sont appliqués aux tables mises à jour avec des transactions XA. Le filtrage des tables peut entraîner le vide d'une transaction XA sur un esclave de réplication, et les transactions XA vides ne sont pas prises en charge. De plus, avec les paramètres master_info_repository=TABLE et relay_log_info_repository=TABLE sur un esclave de réplication, qui sont devenus les valeurs par défaut dans MySQL 8.0, l'état interne de la transaction du moteur de données est modifié suite à une transaction XA filtrée, et peut devenir incohérent avec le contexte de la transaction de réplication Etat.

En raison de ces problèmes, l'utilisation de filtres de réplication ou de filtres de journaux binaires en combinaison avec des transactions XA n'est pas prise en charge. Ce correctif ajoute la nouvelle erreur ER_XA_REPLICATION_FILTERS , qui est consignée chaque fois qu'une transaction XA est affectée par un filtre de réplication, que la transaction soit vide ou non. Si la transaction n'est pas vide, l'esclave de réplication peut continuer à s'exécuter, mais vous devez prendre des mesures pour interrompre l'utilisation des filtres de réplication avec les transactions XA afin d'éviter les problèmes potentiels. Si la transaction est vide, l'esclave de réplication s'arrête. Dans ce cas, l'esclave de réplication peut se trouver dans un état indéterminé dans lequel la cohérence du processus de réplication peut être compromise. En particulier, le gtid_executed défini sur un esclave de l'esclave peut être incohérent avec celui du maître. Pour résoudre cette situation, isolez le maître et arrêtez toute réplication, puis vérifiez la cohérence GTID dans la topologie de réplication. Annulez la transaction XA qui a généré le message d'erreur, puis redémarrez la réplication. (Bogue #27442477)

Réplication : Lorsque mysqlbinlog a été utilisé pour lire un événement de journal binaire supérieur à 128 Ko, la lecture a échoué car 128 Ko a été renvoyé comme taille, au lieu de la taille réelle. Le problème est maintenant résolu. Merci à l'équipe Facebook pour le patch. (Bogue #27417084, Bogue #89326)

Réplication : Lorsqu'une transaction supérieure à la taille du cache des transactions du journal binaire ( binlog_cache_size ) était vidée dans un fichier temporaire pendant le traitement et que le vidage échouait en raison d'un manque d'espace dans le répertoire temporaire, l'erreur de vidage n'était pas gérée correctement. Aucun message n'a été écrit dans le journal des erreurs et le cache du journal binaire n'a pas été effacé après l'annulation de la transaction. Maintenant, dans cette situation, le serveur prend une action appropriée basée sur le paramètre binlog_error_action (arrêter le serveur ou arrêter la journalisation) et écrit un message dans le journal des erreurs. Lorsque la transaction est annulée, le serveur recherche les erreurs de vidage et efface le cache du journal binaire le cas échéant. (Bogue #27399620, Bogue #89272)

Réplication : Lorsque les GTID sont utilisés pour la réplication, les transactions répliquées filtrées sur l'esclave sont conservées. Si la journalisation binaire est activée sur l'esclave, la transaction filtrée est écrite dans le journal binaire en tant que Gtid_log_event suivi d'une transaction vide contenant uniquement les instructions BEGIN et COMMIT. Si la journalisation binaire est désactivée, le GTID de la transaction filtrée est écrit dans la table mysql.gtid_executed. Ce processus garantit qu'il n'y a pas de lacunes dans l'ensemble des GTID exécutés et que les transactions filtrées ne sont pas récupérées à nouveau si l'esclave se reconnecte au maître. Auparavant, ce processus n'était pas effectué pour les instructions CREATE DATABASE , ALTER DATABASE et DROP DATABASE , mais il est désormais exécuté pour ces instructions ainsi que pour d'autres. (Bogue #27308751, Bogue #88891)

Réplication : Sur un esclave multithread, lorsqu'une instruction STOP SLAVE est exécutée sur l'esclave, suivie d'une instruction START SLAVE, le journal des erreurs peut signaler une position différente dans le journal binaire pour le thread SQL esclave lors de la sortie, par rapport à la position signalée pour le thread SQL esclave lors de l'initialisation suivante.

Pour un esclave multithread, la position signalée pour le thread SQL à la sortie est une limite inférieure, jusqu'à laquelle le flux de réplication est cohérent et ne présente aucun intervalle. Les transactions apparaissant avant la position sont garanties d'avoir été engagées, mais les transactions après la position peuvent avoir été engagées ou non. Cependant, cette limite inférieure a été signalée avant que le processus d'arrêt des threads de travail ne soit réellement exécuté, et la limite inférieure a ensuite été mise à jour par une routine de point de contrôle au cours de ce processus. La synchronisation du message de journal a maintenant été modifiée afin que la dernière limite inférieure soit signalée comme la position du thread SQL à la sortie. (Bogue #27300658)

Réplication : Une mise à niveau en ligne d'un groupe de réplication qui exécutait une version de MySQL antérieure à 5.7.23 n'était pas possible. Lorsqu'un membre exécutant une version antérieure à MySQL 5.7.22 ou MySQL 8.0.11 essayait de rejoindre un groupe avec des membres exécutant MySQL 5.7.21 ou antérieur, il n'arrivait pas à rejoindre le groupe car MySQL 5.7.21 n'envoie pas la valeur de c'est la variable système lower_case_table_names. Cela signifie que la version ultérieure a comparé la variable lower_case_table_names avec une valeur invalide et a quitté le groupe. La solution consiste à mettre le groupe hors ligne, à effectuer une mise à niveau vers la version 5.7.23 ou 8.0.12 et versions ultérieures. Les mises à niveau ultérieures du groupe peuvent alors être effectuées sans mettre le groupe hors ligne. Voir Mise à niveau de la réplication de groupe. (Bogue #90794, Bug #27991334)

Réplication : La variable gtid_purged contient les événements du journal binaire qui ont été purgés du journal par le serveur. Lors de l'exécution du plugin Group Replication, cette variable ne doit jamais être modifiée, mais c'était possible. Désormais, la variable ne peut pas être modifiée lorsque la réplication de groupe est en cours d'exécution. (Bogue #90146, Bug #27724561)

Réplication : Les messages des membres PIT_TRANSACTIONS_NEGATIVE_CERTIFIED , PIT_TRANSACTIONS_ROWS_VALIDATING et PIT_TRANSACTIONS_LOCAL_ROLLBACK n'étaient pas correctement décodés. (Bogue #90077, Bug #27692831)

Réplication : Dans certaines situations, comme lors d'une procédure de récupération distribuée, le ramasse-miettes des informations de certification vidait plus de données qu'il ne le devrait, ce qui a entraîné la non-détection de conflits. La procédure de collecte des ordures a été améliorée pour prendre ce cas en considération. (Bogue #89938, Bug #27652526)

Réplication : L'erreur ER_GRP_RPL_SQL_SERVICE_FAILED_TO_RUN_SQL_QUERY était incorrectement consignée. (Bogue #89788, Bug #27590534)

Réplication : Lorsque le thread applicateur du canal group_replication_applier a rencontré une erreur, le master_log_name et end_log_pos dans le message d'erreur étaient incorrects. Dans la réplication de groupe, les événements d'une transaction sont répliqués avant d'être écrits dans le journal binaire du membre d'où provient la transaction. Le résultat est que le master_log_name final et le end_log_pos de ces événements sont inconnus au moment où ils sont appliqués sur le réplica par le thread applicateur du canal group_replication_applier. Pour éviter toute confusion, les messages d'erreur rencontrés par un canal group_replication_applier ne contiennent désormais plus le nom du journal binaire et la position du journal binaire. (Bogue #89146, Bug #27368735)

Réplication : L'utilisation de group_replication_force_members pour débloquer un groupe, par exemple après avoir perdu la majorité, échouait parfois avec l'erreur 1231. (Bogue #86957, Bug #26394418)

macOS : Sur macOS, le serveur démarrait automatiquement au démarrage du système même lorsqu'il n'était pas défini dans le volet des préférences MySQL. (Bogue #27969174, Bogue #90672)

Microsoft Windows: Pour les versions de débogage sous Windows, CREATE SPATIAL REFERENCE SYSTEM avec une chaîne de définition vide peut générer des assertions. (Bogue #27672683)

Dans la bibliothèque cliente, les signaux étaient incorrectement débloqués pour ppoll() . Merci à Facebook pour le patch. (Bogue #28075623, Bug #90999, Bug #28096808, Bug #91067)

Certaines instructions ALTER TABLE peuvent désactiver le chiffrement de la table. (Bogue #28045585)

Références : Ce problème est une régression de : Bug #27389878.

Dans certaines conditions, la compilation du code MyISAM a échoué en raison d'un fichier d'inclusion manquant. (Bogue #28039150, Bug #90898)

La fonction REGEXP_REPLACE() a tronqué son résultat lorsqu'elle est utilisée dans une instruction UPDATE. (Bogue #28027093, Bug #90870)

Les résultats de REGEXP_REPLACE() d'une ligne de l'ensemble de résultats peuvent être reportés à la ligne suivante, entraînant l'accumulation des résultats précédents dans la ligne actuelle. (Bogue #27992118, Bug #90803)

Une vulnérabilité de débordement de tas dans la bibliothèque cliente MySQL a été corrigée. (Bogue #27980823)

Les utilisateurs qui avaient le privilège SUPER n'étaient pas autorisés à modifier la variable système keyring_operations. (Bogue #27976270)

Les tables auxiliaires de recherche en texte intégral créées dans MySQL 5.7 et MySQL 8.0.11 avec des horodatages de 0 ont provoqué un échec de mise à niveau du dictionnaire de données lors de la mise à niveau de MySQL 8.0.11 vers MySQL 8.0.12. (Bogue #27960500)

Une erreur Valgrind " chevauchement source et destination dans memcpy " a été renvoyée lors de la mise à niveau à partir de MySQL 5.7. (Bogue #27945658, Bug #90691)

Les binaires Linux n'ont pas pu vider le noyau après avoir exécuté un appel setuid(). (Bogue #27929894, Bogue #90642, Bogue #23337428, Bogue #21723)

RESET PERSIST n'a pas vidé les valeurs des variables de la mémoire. (Bogue #27924206)

Pour les versions de débogage, utilisez CREATE TABLE . SELECT pour créer une table avec une longue chaîne numérique et l'indexation de la colonne pourrait conduire à la levée d'une assertion. (Bogue #27909771)

Pour les versions de débogage, RESET PERSIST pour une variable inconnue peut provoquer la levée d'une assertion. (Bogue #27903874, Bug #90546)

Références : Ce problème est une régression de : Bug #27374791.

Les mises à jour des métadonnées de colonne d'une vue référençant une table partitionnée peuvent entraîner l'arrêt du serveur. (Bogue #27903842)

Pour les versions de débogage, une assertion peut être levée pour les requêtes UNION lors du calcul du type de données combiné d'une colonne GEOMETRY et de SELECT * FROM (SELECT NULL) . (Bogue #27903792, Bug #90550)

Pour les versions de débogage, démarrer le serveur avec thread_stack=0 et exécuter ALTER TABLE peut générer une assertion. (Bogue #27899274, Bogue #90525)

SHOW TABLE STATUS peut entraîner la fermeture du serveur. (Bogue #27897815)

Pour les colonnes générées qui utilisaient la fonction INTERVAL(), un comportement incorrect pouvait se produire. (Bogue #27881102)

Pour Fedora 28, les packages MySQL Community RPM ne s'installeraient pas si les packages natifs Connector ODBC étaient installés. (Bogue #27850721)

Il était possible de supprimer le schéma de performance. (Bogue #27830283)

Une erreur d'exécution peut se produire pour les appels à mysql_sys_var_longlong() ou String::copy() . (Bogue #27822413, Bogue #27808412)

Une assertion a été émise par un code de journalisation des erreurs qui utilisait un numéro d'erreur inapproprié. (Bogue #27792903)

Références : Ce problème est une régression de : Bug #27462408.

L'ENSEMBLE CONVERTIR EN CARACTÈRES nom_jeu_caractères clause pour ALTER TABLE a produit une erreur de syntaxe si nom_jeu_caractères était PAR DÉFAUT. (Bogue #27760787, Bug #90222)

Références : Ce problème est une régression de : Bug #27389878.

Une connexion non cryptée peut résulter d'une tentative de connexion client spécifiant qu'une connexion cryptée est requise, si le serveur n'a pas été configuré pour prendre en charge SSL. (Bogue #27759871)

INSÉRER DANS . SELECT n'a pas effectué autant de vérifications que INSERT INTO . VALUES() en ce qui concerne l'exigence de valeurs géométriques valides pour les colonnes de géométrie. (Bogue #27756083)

REGEXP_INSTR() n'a pas renvoyé de message d'erreur lorsqu'il est utilisé avec des indicateurs de mode de correspondance non valides. (Bogue #27751277)

Certaines définitions de table de dictionnaire de données ont été modifiées pour s'aligner plus étroitement sur leur conception initiale. De plus, le numéro de version du dictionnaire de données a été incrémenté et le code qui fait référence aux index des tables du dictionnaire de données utilise désormais des noms d'index symboliques au lieu de valeurs numériques. (Bogue #27745526, Bug #90196)

L'exécution d'une instruction préparée pour insérer des lignes avec un grand nombre de paramètres était très lente. (Bogue #27699248)

ibd2sdi pourrait se fermer en raison de l'exécution d'une opération de division par zéro. (Bogue #27692051, Bogue #90071)

La distribution des sources mysql-boost-8.0.4.tar.gz a omis les sources NDB. (Bogue #27690232)

SHOW GRANTS pouvait provoquer une sortie du serveur s'il était exécuté pour un utilisateur non privilégié ayant hérité des privilèges d'un utilisateur anonyme. (Bogue #27678129)

L'analyseur a autorisé à tort le nom d'index pour CREATE INDEX à être vide. (Bogue #27676427)

Échecs des redémarrages du serveur initiés par systemd ou mysqld_safe n'ont pas été écrits dans le journal des erreurs. (Bogue #27675050, Bogue #90012)

Pour les builds de débogage, si une transaction était en mode lecture seule, essayer de créer ou de supprimer un histogramme pourrait générer une assertion. (Bogue #27672693)

Si le serveur a été démarré avec --skip-grant-tables , SET ROLE DEFAULT provoquait la sortie du serveur. (Bogue #27672154)

La conversion des valeurs VARBINARY en valeurs TIME n'a pas été effectuée correctement. (Bogue #27665997)

La vérification des erreurs n'a pas été effectuée après la création d'une condition pour une référence const. (Bogue #27665085)

L'objet d'information dictionnaire géré par le modèle MeCab a été utilisé après la sortie du modèle MeCab. (Bogue #27660368)

La tentative d'annulation des événements de la classe MYSQL_AUDIT_AUTHENTICATION_CLASS a entraîné une sortie du serveur. Ces événements ne peuvent plus être annulés. (Bogue #27645636)

Ces instructions de groupe de ressources sont désormais interdites dans les fonctions stockées car elles provoquent une validation implicite, ce qui n'est pas autorisé dans une fonction stockée : CREATE RESOURCE GROUP , ALTER RESOURCE GROUP , DROP RESOURCE GROUP . (Bogue #27638623, Bug #89914)

Les règles de filtrage du journal d'audit n'autorisaient pas la spécification des noms de classe sous forme de tableau de chaînes. C'est désormais possible. Exemple:

Sous Windows, si le redistribuable Visual C++ pour Visual Studio avait été supprimé, la désinstallation de MySQL à l'aide du programme d'installation MSI échouait. (Bogue #27621546)

mysql_secure_installation charge désormais le composant validate_password plutôt que le plug-in validate_password obsolète. (Bogue #27619667)

REGEXP_LIKE() utilisant une expression contenant un point d'interrogation ( ? ) n'était pas gérée correctement lorsqu'elle était incluse dans une instruction préparée. (Bogue #27595368)

REGEXP_SUBSTR() ne gérait pas toujours correctement les modèles NULL. (Bogue #27572258)

Certaines instructions SHOW CREATE TABLE peuvent générer une assertion. (Bogue #27569314)

Des étapes parasites peuvent être vues dans la table events_stages_current du schéma de performances. (Bogue #27566220)

Les déclencheurs d'une table pourraient s'exécuter dans un ordre différent de celui spécifié par leurs clauses PRECEDES / FOLLOWS. (Bogue #27544152)

Les tentatives de définition de certaines variables persistantes au démarrage (telles que keyring_operations et required_roles ) ont produit une erreur de violation de privilège et le serveur n'a pas démarré ou n'a pas défini la variable. (Bogue #27523095)

Dans certaines conditions, un avertissement de variable inutilisée s'est produit dans le code de recherche en texte intégral MeCab. Merci à Laurynas Biveinis pour le patch. (Bogue #27519952, Bogue #89598)

Dans les procédures stockées, il n'était pas possible d'écrire un gestionnaire de conditions pour intercepter les échecs de clé étrangère si la table impliquée utilisait le moteur de stockage FEDERATED. (Bogue #27509959)

Il était possible de supprimer une clé primaire qui servait de clé parente dans une relation de clé étrangère. De plus, pour la création de table, la couche SQL vérifie désormais s'il existe une clé parente pour la clé étrangère et signale une erreur si elle est manquante. (Bogue #27506922, Bogue #89570, Bogue #11754696, Bogue #46337)

Avec le mode SQL NO_ENGINE_SUBSTITUTION désactivé, une erreur (plutôt qu'une substitution) s'est produite pour CREATE TABLE et ALTER TABLE si le moteur souhaité était désactivé à l'aide de la variable système disabled_storage_engines. (Bogue #27502530)

La rotation des clés à l'aide du plug-in de trousseau keyring_encrypted_file peut entraîner la sortie du serveur. (Bogue #27497018)

Si MySQL Enterprise Firewall était configuré avec un grand nombre de règles, l'arrêt du serveur pouvait prendre beaucoup de temps. (Bogue #27492122)

SET PERSIST_ONLY nom_var = DEFAULT a conservé la valeur globale actuelle, pas la valeur par défaut. (Bogue #27489026)

Si MySQL est configuré avec le LINK_RANDOMIZE Cfaire option activée, l'option du compilateur --gc-sections est maintenant désactivée, la combinaison provoque des erreurs de segmentation. (Bogue #27484106)

Lors de l'installation du serveur, les comptes réservés mysql.infoschema , mysql.session et mysql.sys étaient associés au plugin d'authentification mysql_native_password même lorsque le plugin par défaut était caching_sha2_password . (Bogue #27454299)

Certaines fonctions de fenêtre utilisaient la mauvaise précision pour leurs types de données agrégés. (Bogue #27452179)

Pour une valeur hexadécimale H , SÉLECTIONNER avec O (-1) - H soulevé une affirmation. (Bogue #27452082)

Références : Voir aussi : Bug #27041382. Ce problème est une régression de : Bug #21982792.

Une fuite de mémoire dans le test unitaire pfs-t a été corrigé. Merci à Yura Sorokin pour le patch. (Bogue #27440735, Bogue #89384)

Des invocations multiples de CHAR() dans un programme stocké pouvaient donner des résultats différents une fois qu'un point de code invalide était passé en argument. (Bogue #27410088)

Avec automatic_sp_privileges activé, les privilèges EXECUTE et ALTER ROUTINE n'étaient pas correctement accordés aux créateurs de routine. (Bogue #27407480)

Certaines requêtes qui utilisaient le tri peuvent accéder à une colonne non initialisée pendant l'optimisation et provoquer la sortie du serveur. (Bogue #27389294)

Pour les versions de débogage, une assertion a été levée (plutôt qu'une erreur) pour ALTER TABLE pour une table ARCHIVE avec une colonne GEOMETRY NOT NULL contenant des chaînes vides. (Bogue #27330634, Bogue #89088)

Les comptes qui s'authentifiaient avec le plug-in d'authentification auth_sock ne pouvaient pas se connecter à l'aide d'anciens clients. (Bogue #27306178)

Si les tables système ne pouvaient pas être lues ou initialisées, le serveur écrivait un message d'erreur incomplet. Merci à Daniël van Eeden pour un patch lié au correctif. (Bogue #27302337, Bogue #89001)

RENAME USER a échoué lorsqu'il est utilisé pour renommer un rôle qui n'a été accordé à aucun compte ou rôle. (Bogue #27284699)

Le plugin keyring_okv n'a pas toujours basculé vers le serveur OKV de secours lorsque le serveur principal n'était pas disponible. (Bogue #27244099)

Le schéma de performances peut tenter d'accéder à des valeurs de colonne SOURCE non valides. (Bogue #27231036)

Une mauvaise gestion des structures de privilèges internes pourrait entraîner une sortie du serveur. (Bogue #27230925)

Pour les versions de débogage, l'utilisation d'un type trop petit pour calculer le déterminant dans les calculs SIG peut entraîner la levée d'une assertion. (Bogue #27135504)

Pour les tentatives d'augmentation de la longueur d'une colonne VARCHAR d'une table InnoDB en utilisant ALTER TABLE avec l'algorithme INPLACE, la tentative a échoué si la colonne était indexée.

Si une taille d'index dépassait la limite InnoDB de 767 octets pour le format de ligne COMPACT ou REDUNDANT, CREATE TABLE et ALTER TABLE ne signalaient pas d'erreur (en mode SQL strict) ni d'avertissement (en mode non strict). (Bogue #26848813)

Dans MySQL 5.7.19, la table mysql.gtid_executed était exclue des dumps. Cette table n'est plus exclue mais ses données ne sont pas vidées. (Bogue #26643180, Bug #87455)

Références : Ce problème est une régression de : Bug #82848, Bug #24590891.

La variable système slave_rows_search_algorithms contrôle la manière dont les lignes sont recherchées pour les correspondances lors de la préparation de lots de lignes pour la journalisation et la réplication basées sur les lignes. La spécification d'INDEX_SCAN comme l'un des algorithmes de recherche effectue une analyse d'index si un index est présent. Dans la situation où une clé primaire différente est utilisée sur le maître et l'esclave, et une clé unique est présente sur l'esclave, un bogue dans le code signifiait que le balayage d'index n'était pas effectué comme il se doit, et une table plus lente l'analyse était effectuée à la place. Le problème a maintenant été corrigé afin qu'un balayage d'index soit utilisé. (Bogue #26450129, Bug #23311892, Bug #81500, Bug #81501)

Certains cas de matérialisation de sous-requête peuvent entraîner une sortie du serveur. Ces requêtes produisent désormais une erreur suggérant que la matérialisation soit désactivée. (Bogue #26402045)

Les opérations spatiales sur les valeurs géographiques GeometryCollection pourraient renvoyer ER_GIS_INVALID_DATA pour les géométries valides. (Bogue #26174808)

Pour les tables MyISAM, des séquences particulières d'instructions INSERT et DELETE peuvent entraîner une corruption de table. (Bogue #25541037)

L'instruction SHOW CREATE USER requiert le privilège SELECT pour la base de données mysql, sauf pour voir les informations de l'utilisateur actuel. De plus, pour l'utilisateur actuel, l'instruction requiert le privilège SELECT pour la table système mysql.user pour l'affichage du hachage du mot de passe dans la clause IDENTIFIED AS sinon, le hachage s'affiche sous la forme <secret> . (Bogue #24911117)

CREATE FUNCTION produisait une erreur s'il n'y avait pas de base de données par défaut et que le corps de la fonction appelait une autre fonction. (Bogue #24357244, Bug #82350)

Pour les builds de débogage, une instruction SELECT exécutée dans un programme stocké pourrait déclencher une assertion si la résolution de la table dérivée échouait. (Bogue #23221336)

Si mysqldump ou alors mysqlpump étaient utilisés pour vider des données binaires sans l'option --hex-blob, le rechargement du fichier de vidage pouvait produire de faux avertissements (les valeurs étaient insérées correctement quels que soient les avertissements). Ces valeurs sont maintenant écrites précédées de l'introducteur _binary pour faire taire les avertissements. (Bogue #22601255, Bogue #80150)

Les comparaisons de chaînes impliquant des caractères génériques peuvent faire référence à une mémoire non initialisée. (Bogue #12635103)

REGEXP_REPLACE() a déclenché un avertissement Valgrind lorsqu'il est invoqué avec un groupe de capture non valide. (Bogue #87842, Bug #27612255)