Oracle SQL: Sélection de données et le nom de la partition à partir de la table et tronquer des partitions
C'est une deuxième partie de la question:
1) Est-il possible de récupérer le nom de la partition de données vies à l'aide d'une instruction select, basé sur son ROWID
ou certains autres identifiants?
par exemple.
SELECT DATA_ID, CATEGORY, VALUE, **PARTITION_NAME**
FROM MYTABLE
WHERE CATEGORY = 'ABC'
2) Est-il possible de tronquer une partition d'un tableau, sans supprimer les données stockées dans les autres partitions?
J'ai une table avec plus d'un milliard de lignes, de hachage partitionné par catégorie. Seule une poignée de catégories ont des problèmes avec leurs données, de sorte qu'il ne fait pas de sens pour recréer l'ensemble de la table, mais la suppression des données de la table, même avec toutes les contraintes inactives, prend beaucoup trop de temps.
Je veux dire que certaines des données est erronée ou obsolète et doit être remplacé.
Peut-être que vous pouvez échanger une partition affectée dans une table, de fixer ou de recréer les données, puis les échanger en arrière? (docs.oracle.com/cd/E11882_01/server.112/e26088/...)
OriginalL'auteur woemler | 2013-06-26
Vous devez vous connecter pour publier un commentaire.
Grâce à votre allusion à propos de la rowid, j'ai trouvé une solution. Si vous avez le rowid, il devrait être possible de déterminer l'objet appartient la ligne.
Un exemple minimal avec 4 hachage partitions:
Maintenant, chaque ligne a un
ROWID
. Vous pouvez trouver le numéro de l'objet viaDBMS_ROWID.ROWID_OBJECT
. Le dictionnaire de tableUSER_OBJECTS
a alors la object_name (= le nom de la table) et le subobject_name (= le nom de la partition):Merci! J'avais utilisé seulement pour sonder autour de. Pour tronquer ou modifier les partitions, j'utiliserais
PARTITION FOR
la syntaxe @jonearls de réponse...OriginalL'auteur wolφi
1) no. vous ne pouvez pas faire cela, vous devrez requête
all_tab_partitions
de trouver la partition pour un ceratain valeur.2)
alter table x truncate partition y
all_tab_partitions
de table pour savoir ce que la partition d'une ligne de données particulière appartient?dépend du type de partition que vous utilisez (je suppose). la valeur haute de chaque partition est dans la colonne
high_value
donc, si c'est une plage de partition que vous avez besoin de la dernière partition que votre valeur est inférieure à lahigh_value
. lire le docs iciLa table en question est de hachage partitionné par catégorie, de sorte que le
high_value
colonne est null.si c'est de hachage partition, autant que je sache, tu ne peux pas savoir quelle partition oracle mettra en.
Pas de. Il est DDL et donc engage implicitement. Si vous changez d'avis, vous aurez besoin d'utiliser un retour de flamme de la requête.
OriginalL'auteur haki
Au lieu de trouver le nom de la partition, utilisez la valeur dans le PARTITION POUR syntaxe:
Bien que cette opération n'affectera pas les données dans d'autres partitions, il peut rendre votre index INUTILISABLE. Soit reconstruire pertinentes de l'index ou de l'utilisation
UPDATE INDEXES
dans le DDL.'ABC'
est une valeur deCATEGORY
, comme dans mon exemple, mais comment fait cette déclaration sais que'ABC'
se réfère à laCATEGORY
de la colonne?C'est la clé de partition, en d'autres termes la colonne (ou colonnes), utilisé pour la partition de la table.
OriginalL'auteur Jon Heller