web-dev-qa-db-fra.com

Faisabilité de partitionnement des tables existantes avec des données énormes à Oracle

Nous avons un ensemble de 24 tables qui représentent environ 1 To + Data, c'est pourquoi DBA a suggéré d'utiliser la partition pour mieux manipuler l'utilisation.

Le seul problème étant le partitionnement des tableaux existants est une chose à laquelle ils ne conseillent pas car le transfert de données de la table actuelle à Temp fera beaucoup de temps (DBMS_ReDefinition), c'est pourquoi ils suggèrent d'utiliser une approche de la table à l'ancienne Soyez statique et une nouvelle table sera partitionnée et sélectionnez une union des 2 tables au besoin.

Je voulais juste explorer s'il y a une autre façon de partitionnement des tables existantes sans avoir besoin d'un temps d'arrêt important

2
Ajo Koshy

La base de données Oracle fournit un mécanisme permettant de modifier la structure de la table sans affecter de manière significative la disponibilité de la table. Le mécanisme s'appelle la redéfinition de table en ligne. Redéfinir les tables en ligne fournit une augmentation substantielle de disponibilité par rapport aux méthodes traditionnelles de redéfinition des tables.

Vous pouvez redéfinir la table en ligne et il sera accessible pour les DML. La table sera verrouillée en mode exclusif pour une période de temps négligeable, où la taille de la table n'a pas d'importance.

L'inconvénient est que vous devez avoir un espace supplémentaire égal à la taille de votre table (1 To).

Mettre à jour:

Conversion en ligne d'une table non transférée en une table partitionnée

Les tables non transférées peuvent être converties en tables partitionnées en ligne. Les index sont maintenus dans le cadre de cette opération et peuvent également être partitionnés. La conversion n'a aucun impact sur les opérations DML en cours.

Dans Oracle 12C Libération 2, vous pouvez convertir votre table non partitionnée en table partitionnée à l'aide de ALTER TABLE déclaration. Mais, selon votre marquage, vous êtes en 11g R2 et vous n'avez pas cette option.

Documentation:

  • redéfinir les tables en ligne
  • 2
    JSapkota
    1. vous pouvez ajouter une colonne de date (Say SQL_Date) à cette grande table à l'aide de Sysdate par défaut. Ainsi, seuls les nouveaux enregistrements stockeront la date actuelle.
    2. Créer une index sur sql_date.
    3. Mettre à jour SQL_Date lot par lot.
    4. créez une table partitionnée avec un autre nom.
    5. copiez les données sur la table partitionnée à l'aide du lot de CTA par lot.

    ne fois que les données sont copées à 95%. Prenez un temps d'arrêt.

    1. Copier les données restantes et
    2. Renommer les tables (échanger les noms)
    3. Ajouter les subventions
    4. Après avoir testé, déposez l'ancienne table

    Un seul inconvénient de ceci est un espace supplémentaire égal à la taille de votre table (1Tb).

    0
    Vidya Thotangare

    où une ancienne table sera statique et une nouvelle table sera partitionnée et sélectionnera une union des 2 tables au besoin

    Ceci est vraiment facile à faire en un instant sans rien copier ou nécessitant un espace supplémentaire, et vous n'avez pas besoin d'utiliser un syndicat ou de réécrire quoi que ce soit, car vous pouvez le faire avec 1 table.

    Disons que votre table est la suivante:

    create table t1 (col1 date, col2 number);
    

    Ensuite, vous créez la version partitionnée de cette table avec 1 partition où vous pouvez stocker toutes vos données existantes:

    create table t1_exch (col1 date, col2 number)
    partition by range (col1)
    interval (numtodsinterval(1, 'day'))
    (
      partition p1 values less than (date'2017-03-11')
    );
    

    Ensuite, vous échangez votre table avec la partition:

    alter table t1_exch exchange partition p1 with table t1;
    

    Enfin, laissez tomber l'ancienne table et renommez la nouvelle table pour utiliser le nom de l'ancienne table:

    drop table t1 purge;
    alter table t1_exch rename to t1;
    

    Données insérées après '2017-03-11' sera automatiquement partitionné et vous pouvez laisser vos anciennes données tel qu'il est ou divisé en partitions si vous le souhaitez.

    Les données de partitionnement sont faciles, la partie encombrante peut traiter des contraintes et des index qui doivent être globales. Vous devrez peut-être modifier votre PK et vos contraintes uniques (et index), car vous ne pouvez pas avoir de tels index partitionnés localement sans la clé de partitionnement incluse dans elles. En outre, en raison de la chute de l'ancienne table et d'en avoir une nouvelle à sa place, vous devez régler les contraintes FK pointant vers cette table.

    0
    Balazs Papp