


Ausführliche Erl?uterung der Oracle-Tabellenbereichs-Tabellenpartition und der Verwendung der Oracle-Tabellenpartitionsabfrage
Jan 06, 2017 pm 01:15 PMDieser Artikel organisiert die Konzepte und Operationen von Partitionstabellen unter folgenden Gesichtspunkten:
Die Konzepte von Tabellenbereichen und Partitionstabellen
Die Funktionen von Vor- und Nachteile von Tabellenpartitionen
Verschiedene Arten von Tabellenpartitionen und Betriebsmethoden
5. Wartungsvorg?nge für Tabellenpartitionen.
(1.) Konzepte von Tabellenbereich und Partitionstabelle
Tabellenbereich:
Es handelt sich um eine Sammlung von einer oder mehreren Datendateien. Alle Datenobjekte werden im angegebenen Tabellenbereich gespeichert, sie speichern jedoch haupts?chlich Tabellen und werden daher Tabellenbereiche genannt.
Partitionierte Tabelle:
Wenn die Datenmenge in der Tabelle weiter zunimmt, verlangsamt sich die Geschwindigkeit der Datenabfrage und die Leistung der Anwendung nimmt ab. Zu diesem Zeitpunkt sollten Sie eine Partitionierung in Betracht ziehen Tisch. Nach der Partitionierung der Tabelle ist die logische Tabelle immer noch eine vollst?ndige Tabelle, die Daten in der Tabelle werden jedoch physisch in mehreren Tabellenbereichen (physischen Dateien) gespeichert, sodass beim Abfragen der Daten nicht jedes Mal die gesamte Tabelle gescannt wird. Oberfl?che.
(2). Die spezifische Rolle der Tabellenpartitionierung
Die Tabellenpartitionierungsfunktion von Oracle bringt gro?e Vorteile für verschiedene Anwendungen, indem sie die Verwaltbarkeit, Leistung und Verfügbarkeit verbessert. Im Allgemeinen kann die Partitionierung die Leistung bestimmter Abfragen und Wartungsvorg?nge erheblich verbessern. Darüber hinaus kann die Partitionierung allgemeine Verwaltungsaufgaben erheblich vereinfachen und ist ein wichtiges Werkzeug für den Aufbau von Gigabyte-Datensystemen oder Systemen mit extrem hoher Verfügbarkeit.
Die Partitionierungsfunktion kann eine Tabelle, einen Index oder eine indexorganisierte Tabelle weiter in Segmente unterteilen. Die Segmente dieser Datenbankobjekte werden Partitionen genannt. Jede Partition hat einen eigenen Namen und kann ihre eigenen Speichereigenschaften ausw?hlen. Aus Sicht eines Datenbankadministrators verfügt ein partitioniertes Objekt über mehrere Segmente, und diese Segmente k?nnen gemeinsam oder einzeln verwaltet werden. Dies gibt dem Datenbankadministrator erhebliche Flexibilit?t bei der Verwaltung partitionierter Objekte. Aus Anwendungssicht ist eine partitionierte Tabelle jedoch identisch mit einer nicht partitionierten Tabelle, und beim Zugriff auf eine partitionierte Tabelle mithilfe von SQL-DML-Befehlen sind keine ?nderungen erforderlich.
Wann werden Partitionstabellen verwendet?
1. Die Gr??e der Tabelle überschreitet 2 GB.
2. Die Tabelle enth?lt historische Daten und neue Daten werden zu neuen Partitionen hinzugefügt.
(3) Vor- und Nachteile der Tabellenpartitionierung
Die Tabellenpartitionierung hat die folgenden Vorteile:
1. Verbessern Sie die Abfrageleistung: Beim Abfragen von Partitionsobjekten k?nnen Sie nur nach den Partitionen suchen, die Sie interessieren , wodurch die Abrufgeschwindigkeit verbessert wird.
2. Erweiterte Verfügbarkeit: Wenn eine bestimmte Partition der Tabelle ausf?llt, sind die Daten der Tabelle in anderen Partitionen weiterhin verfügbar.
3 repariert werden, nur diese Partition;
4. Ausgeglichene E/A: Verschiedene Partitionen k?nnen Festplatten zugeordnet werden, um E/A auszugleichen und die Gesamtsystemleistung zu verbessern.
Nachteile:
Bezogen auf Partitionstabellen: Es gibt keine M?glichkeit, eine vorhandene Tabelle direkt in eine Partitionstabelle umzuwandeln. Allerdings bietet Oracle die Funktion der Online-Neudefinition von Tabellen.
(4). Verschiedene Arten und Betriebsmethoden von Tabellenpartitionen
Beachten Sie bei der Verwendung der Bereichspartitionierung bitte die folgenden Regeln:
1 Jede Partition muss eine VALUES LESS THEN-Klausel haben, die einen oberen Grenzwert angibt, der nicht in der Partition enthalten ist. Alle Datens?tze mit einem Partitionsschlüsselwert, der dieser Obergrenze entspricht oder diesen überschreitet, werden der n?chsth?heren Partition hinzugefügt.
2. Alle Partitionen au?er der ersten haben einen impliziten unteren Grenzwert. Dieser Wert ist der obere Grenzwert der vorherigen Partition dieser Partition.
3. In der h?chsten Partition ist MAXVALUE definiert. MAXVALUE stellt einen unsicheren Wert dar. Dieser Wert ist h?her als der Wert eines beliebigen Partitionsschlüssels in anderen Partitionen und kann auch als h?her als der in einer beliebigen Partition angegebene Wert von VALUE LESS THEN verstanden werden, einschlie?lich Nullwerten.
Angenommen, es gibt eine CUSTOMER-Tabelle mit 200.000 Datenzeilen. Jede Partition speichert 100.000 Zeilen, damit Datendateien gespeichert werden k?nnen erstrecken sich über mehrere physische Festplatten. Im Folgenden finden Sie den Code zum Erstellen von Tabellen und Partitionen:
CREATE TABLE CUSTOMER ( CUSTOMER_ID NUMBER NOT NULL PRIMARY KEY, FIRST_NAME VARCHAR2(30) NOT NULL, LAST_NAME VARCHAR2(30) NOT NULL, PHONEVARCHAR2(15) NOT NULL, EMAILVARCHAR2(80), STATUS CHAR(1) ) PARTITION BY RANGE (CUSTOMER_ID) ( PARTITION CUS_PART1 VALUES LESS THAN (100000) TABLESPACE CUS_TS01, PARTITION CUS_PART2 VALUES LESS THAN (200000) TABLESPACE CUS_TS02 )Beispiel 2: Division durch Zeit
CREATE TABLE ORDER_ACTIVITIES ( ORDER_ID NUMBER(7) NOT NULL, ORDER_DATE DATE, TOTAL_AMOUNT NUMBER, CUSTOTMER_ID NUMBER(7), PAID CHAR(1) ) PARTITION BY RANGE (ORDER_DATE) ( PARTITION ORD_ACT_PART01 VALUES LESS THAN (TO_DATE('01- MAY -2003','DD-MON-YYYY')) TABLESPACEORD_TS01, PARTITION ORD_ACT_PART02 VALUES LESS THAN (TO_DATE('01-JUN-2003','DD-MON-YYYY')) TABLESPACE ORD_TS02, PARTITION ORD_ACT_PART02 VALUES LESS THAN (TO_DATE('01-JUL-2003','DD-MON-YYYY')) TABLESPACE ORD_TS03 )Beispiel 3: MAXVALUE
CREATE TABLE RangeTable ( idd INT PRIMARY KEY , iNAME VARCHAR(10), grade INT ) PARTITION BY RANGE (grade) ( PARTITION part1 VALUES LESS THEN (1000) TABLESPACE Part1_tb, PARTITION part2 VALUES LESS THEN (MAXVALUE) TABLESPACE Part2_tb );Zweitens. Listenpartitionierung: Das Merkmal dieser Partition ist, dass es in einer bestimmten Spalte nur wenige Werte gibt. Basierend auf dieser Funktion k?nnen wir die Listenpartitionierung verwenden. Beispiel 1
CREATE TABLE PROBLEM_TICKETS ( PROBLEM_ID NUMBER(7) NOT NULL PRIMARY KEY, DESCRIPTION VARCHAR2(2000), CUSTOMER_ID NUMBER(7) NOT NULL, DATE_ENTERED DATE NOT NULL, STATUS VARCHAR2(20) ) PARTITION BY LIST (STATUS) ( PARTITION PROB_ACTIVE VALUES ('ACTIVE') TABLESPACE PROB_TS01, PARTITION PROB_INACTIVE VALUES ('INACTIVE') TABLESPACE PROB_TS02 )Beispiel 2
CREATE TABLE ListTable ( id INT PRIMARY KEY , name VARCHAR (20), area VARCHAR (10) ) PARTITION BY LIST (area) ( PARTITION part1 VALUES ('guangdong','beijing') TABLESPACE Part1_tb, PARTITION part2 VALUES ('shanghai','nanjing') TABLESPACE Part2_tb ); )3. Hash-Partitionierung: Diese Art von Partition verwendet Hashing für Spaltenwerte Arithmetik, um zu bestimmen, in welche Partition eine Zeile eingefügt werden soll. Die Hash-Partitionierung wird empfohlen, wenn die Spaltenwerte keine geeigneten Bedingungen aufweisen.
Hash-Partitionierung ist eine Art der Partitionierung, die Daten durch Angabe von Partitionsnummern gleichm??ig verteilt, da diese Partitionen durch Hash-Partitionierung auf dem E/A-Ger?t in ihrer Gr??e konsistent gemacht werden.
CREATE TABLE HASH_TABLE ( COL NUMBER(8), INF VARCHAR2(100) ) PARTITION BY HASH (COL) ( PARTITION PART01 TABLESPACE HASH_TS01, PARTITION PART02 TABLESPACE HASH_TS02, PARTITION PART03 TABLESPACE HASH_TS03 )Abkürzung:
CREATE TABLE emp ( empno NUMBER (4), ename VARCHAR2 (30), sal NUMBER ) PARTITION BY HASH (empno) PARTITIONS 8 STORE IN (emp1,emp2,emp3,emp4,emp5,emp6,emp7,emp8);
hash分區(qū)最主要的機制是根據(jù)hash算法來計算具體某條紀錄應(yīng)該插入到哪個分區(qū)中,hash算法中最重要的是hash函數(shù),Oracle中如果你要使用hash分區(qū),只需指定分區(qū)的數(shù)量即可。建議分區(qū)的數(shù)量采用2的n次方,這樣可以使得各個分區(qū)間數(shù)據(jù)分布更加均勻。
四.組合范圍散列分區(qū)
這種分區(qū)是基于范圍分區(qū)和列表分區(qū),表首先按某列進行范圍分區(qū),然后再按某列進行列表分區(qū),分區(qū)之中的分區(qū)被稱為子分區(qū)。
CREATE TABLE SALES ( PRODUCT_ID VARCHAR2(5), SALES_DATE DATE, SALES_COST NUMBER(10), STATUS VARCHAR2(20) ) PARTITION BY RANGE(SALES_DATE) SUBPARTITION BY LIST (STATUS) ( PARTITION P1 VALUES LESS THAN(TO_DATE('2003-01-01','YYYY-MM-DD'))TABLESPACE rptfact2009 ( SUBPARTITION P1SUB1 VALUES ('ACTIVE') TABLESPACE rptfact2009, SUBPARTITION P1SUB2 VALUES ('INACTIVE') TABLESPACE rptfact2009 ), PARTITION P2 VALUES LESS THAN (TO_DATE('2003-03-01','YYYY-MM-DD')) TABLESPACE rptfact2009 ( SUBPARTITION P2SUB1 VALUES ('ACTIVE') TABLESPACE rptfact2009, SUBPARTITION P2SUB2 VALUES ('INACTIVE') TABLESPACE rptfact2009 ) )
五.復合范圍散列分區(qū):
這種分區(qū)是基于范圍分區(qū)和散列分區(qū),表首先按某列進行范圍分區(qū),然后再按某列進行散列分區(qū)。
create table dinya_test ( transaction_id number primary key, item_id number(8) not null, item_description varchar2(300), transaction_date date ) partition by range(transaction_date)subpartition by hash(transaction_id) subpartitions 3 store in (dinya_space01,dinya_space02,dinya_space03) ( partition part_01 values less than(to_date(‘2006-01-01','yyyy-mm-dd')), partition part_02 values less than(to_date(‘2010-01-01','yyyy-mm-dd')), partition part_03 values less than(maxvalue) );
(5).有關(guān)表分區(qū)的一些維護性操作:
一、添加分區(qū)
以下代碼給SALES表添加了一個P3分區(qū)
ALTER TABLE SALES ADD PARTITION P3 VALUES LESS THAN(TO_DATE('2003-06-01','YYYY-MM-DD'));
注意:以上添加的分區(qū)界限應(yīng)該高于最后一個分區(qū)界限。
以下代碼給SALES表的P3分區(qū)添加了一個P3SUB1子分區(qū)
ALTER TABLE SALES MODIFY PARTITION P3 ADD SUBPARTITION P3SUB1 VALUES('COMPLETE');
二、刪除分區(qū)
以下代碼刪除了P3表分區(qū):
ALTER TABLE SALES DROP PARTITION P3;
在以下代碼刪除了P4SUB1子分區(qū):
ALTER TABLE SALES DROP SUBPARTITION P4SUB1;
注意:如果刪除的分區(qū)是表中唯一的分區(qū),那么此分區(qū)將不能被刪除,要想刪除此分區(qū),必須刪除表。
三、截斷分區(qū)
截斷某個分區(qū)是指刪除某個分區(qū)中的數(shù)據(jù),并不會刪除分區(qū),也不會刪除其它分區(qū)中的數(shù)據(jù)。當表中即使只有一個分區(qū)時,也可以截斷該分區(qū)。通過以下代碼截斷分區(qū):
ALTER TABLE SALES TRUNCATE PARTITION P2;
通過以下代碼截斷子分區(qū):
ALTER TABLE SALES TRUNCATE SUBPARTITION P2SUB2;
四、合并分區(qū)
合并分區(qū)是將相鄰的分區(qū)合并成一個分區(qū),結(jié)果分區(qū)將采用較高分區(qū)的界限,值得注意的是,不能將分區(qū)合并到界限較低的分區(qū)。以下代碼實現(xiàn)了P1 P2分區(qū)的合并:
ALTER TABLE SALES MERGE PARTITIONS P1,P2 INTO PARTITION P2;
五、拆分分區(qū)
拆分分區(qū)將一個分區(qū)拆分兩個新分區(qū),拆分后原來分區(qū)不再存在。注意不能對HASH類型的分區(qū)進行拆分。
ALTER TABLE SALES SBLIT PARTITION P2 AT(TO_DATE('2003-02-01','YYYY-MM-DD')) INTO (PARTITION P21,PARTITION P22);
六、接合分區(qū)(coalesca)
結(jié)合分區(qū)是將散列分區(qū)中的數(shù)據(jù)接合到其它分區(qū)中,當散列分區(qū)中的數(shù)據(jù)比較大時,可以增加散列分區(qū),然后進行接合,值得注意的是,接合分區(qū)只能用于散列分區(qū)中。通過以下代碼進行接合分區(qū):
ALTER TABLE SALES COALESCA PARTITION;
七、重命名表分區(qū)
以下代碼將P21更改為P2
ALTER TABLE SALES RENAME PARTITION P21 TO P2;
八、相關(guān)查詢
跨分區(qū)查詢
select sum( *) from (select count(*) cn from t_table_SS PARTITION (P200709_1) union all select count(*) cn from t_table_SS PARTITION (P200709_2) );
查詢表上有多少分區(qū)
SELECT * FROM useR_TAB_PARTITIONS WHERE TABLE_NAME='tableName'
查詢索引信息
select object_name,object_type,tablespace_name,sum(value) from v$segment_statistics where statistic_name IN ('physical reads','physical write','logical reads')and object_type='INDEX' group by object_name,object_type,tablespace_name order by 4 desc --顯示數(shù)據(jù)庫所有分區(qū)表的信息: select * from DBA_PART_TABLES --顯示當前用戶可訪問的所有分區(qū)表信息: select * from ALL_PART_TABLES --顯示當前用戶所有分區(qū)表的信息: select * from USER_PART_TABLES --顯示表分區(qū)信息 顯示數(shù)據(jù)庫所有分區(qū)表的詳細分區(qū)信息: select * from DBA_TAB_PARTITIONS --顯示當前用戶可訪問的所有分區(qū)表的詳細分區(qū)信息: select * from ALL_TAB_PARTITIONS --顯示當前用戶所有分區(qū)表的詳細分區(qū)信息: select * from USER_TAB_PARTITIONS --顯示子分區(qū)信息 顯示數(shù)據(jù)庫所有組合分區(qū)表的子分區(qū)信息: select * from DBA_TAB_SUBPARTITIONS --顯示當前用戶可訪問的所有組合分區(qū)表的子分區(qū)信息: select * from ALL_TAB_SUBPARTITIONS --顯示當前用戶所有組合分區(qū)表的子分區(qū)信息: select * from USER_TAB_SUBPARTITIONS --顯示分區(qū)列 顯示數(shù)據(jù)庫所有分區(qū)表的分區(qū)列信息: select * from DBA_PART_KEY_COLUMNS --顯示當前用戶可訪問的所有分區(qū)表的分區(qū)列信息: select * from ALL_PART_KEY_COLUMNS --顯示當前用戶所有分區(qū)表的分區(qū)列信息: select * from USER_PART_KEY_COLUMNS --顯示子分區(qū)列 顯示數(shù)據(jù)庫所有分區(qū)表的子分區(qū)列信息: select * from DBA_SUBPART_KEY_COLUMNS --顯示當前用戶可訪問的所有分區(qū)表的子分區(qū)列信息: select * from ALL_SUBPART_KEY_COLUMNS --顯示當前用戶所有分區(qū)表的子分區(qū)列信息: select * from USER_SUBPART_KEY_COLUMNS --怎樣查詢出oracle數(shù)據(jù)庫中所有的的分區(qū)表 select * from user_tables a where a.partitioned='YES' --刪除一個表的數(shù)據(jù)是 truncate table table_name; --刪除分區(qū)表一個分區(qū)的數(shù)據(jù)是 alter table table_name truncate partition p5;
更多oracle表空間表分區(qū)詳解及oracle表分區(qū)查詢使用方法相關(guān)文章請關(guān)注PHP中文網(wǎng)!

Hei?e KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?er Artikel

Hei?e Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)