2017-08-01 3 views
1

Ich bin sehr neu in der Datenbank. Ich möchte Systempartition für eine vorhandene große Datenbanktabelle in Orakel tun. Kann jemand vorschlagen Wie kann ich Systempartition für vorhandene Tabelle in Oracle-Datenbank erreichen?Wie Systempartition in Oracle 11g zu machen?

Hinweis Ich bin nur auf der Suche nach System Partition nicht auf der Suche nach Bereich oder Hash oder Composite-Partition.

+0

Was ist eine "Systempartition"? –

+0

Das ist eine Oracle Database-Methode der Datenpartitionierung, bei der die Anwendungslogik die Partitionsstruktur steuert. –

+0

Siehe [this] (https://docs.oracle.com/cd/E11882_01/server.112/e25523/partition.htm#BABFCBHC) und [dies] (https://docs.oracle.com/cd/E11882_01 /server.112/e41084/statements_7002.htm#BABJBDCC) ... aber ich bin mir nicht sicher, ob das wirklich hilft zu erklären, was das OP hier machen will. –

Antwort

6

Soweit ich weiß, kann eine vorhandene Tabelle nicht partitioniert werden. Sie müssen es neu erstellen. Es gibt ein Oracle-Paket namens dbms_redefinition für nur dieses Szenario (siehe https://docs.oracle.com/database/121/ARPLS/d_redefi.htm für Details), aber ich werde ein sehr einfaches Beispiel ohne dieses Paket bereitstellen.

Stellen Sie sich das folgende nicht-partitionierten Tabelle haben:

create table T_TABLE 
(
    pkey   NUMBER not null, 
    t_data  VARCHAR2(250) not null, 
    partitionkey NUMBER not null 
); 

Wenn Sie diese Tabelle partitionieren möchten, wäre der erste Schritt, um die Tabelle zu benennen:

alter table t_table rename to old_table; 

Erstellen Sie dann die Neue Tabelle

create table T_TABLE 
(
    pkey   NUMBER not null, 
    t_data  VARCHAR2(250) not null, 
    partitionkey NUMBER not null 
) 
partition by system 
(
    partition p1 tablespace users, 
    partition p2 tablespace users, 
    partition p3 tablespace users 
);  

Jetzt können Sie Ihre Tabellenzeilen aus der alten Tabelle in die einfügen neue Tabelle. Ihre Anwendung/sql muss dem Server mitteilen, in welche Partition er eingefügt werden soll. zum Beispiel wie folgt aus:

insert into t_table partition (p1) select * from old_table where partitionkey = 1;  
insert into t_table partition (p2) select * from old_table where partitionkey = 2; 
insert into t_table partition (p3) select * from old_table where partitionkey = 3;   
commit; 

Jetzt können Sie Ihre alten Tisch fallen.

drop table old_table; 
+2

Fyi, Oracle haben [die Partitionierung nicht partitionierter Tabellen in 12.2 eingeführt.] (Https://docs.oracle.com/en/cloud/paas/exadata-express-cloud/csdbf/oracle-database-12-2-new -features.html # GUID-D5D9C311-3597-4494-B8DE-CE33EE4FA546) – Boneist

+0

Cool - danke für diesen Hinweis. Obwohl es wahrscheinlich Jahre dauern wird, bis ich diese neue Funktion nutzen kann. –

+0

Ja, ich bin im selben Boot (ich würde gerne die 12.2 erweiterten to_char/to_number/etc Funktionen bekommen!), Aber ich dachte, es wäre wert, Informationen zu teilen * {:-) Ich würde das gutschreiben Blog, wo ich darüber gelesen habe, außer dass ich mich nicht erinnern kann, wer jetzt darüber geschrieben hat! – Boneist