Oracle数据库 分表详细实例

Jun 07, 2016 pm 05:45 PM
oracle サブテーブル データベース 詳しい

使用分区的优点:

  1、增强可用性:如果表的某个分区出现故障,表在其他分区的数据仍然可用;

  2、维护方便:如果表的某个分区出现故障,需要修复数据,只修复该分区即可;

  3、均衡I/O:可以把不同的分区映射到磁盘以平衡I/O,改善整个系统性能;

  4、改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索速度。

  Oracle提供对表或索引的分区方法有三种:

  1、范围分区

  2、Hash分区(散列分区)

  3、复合分区

  下面将以实例的方式分别对这三种分区方法来说明分区表的使用。为了测试方便,我们先建三个表空间。

  create tablespace dinya_space01

  datafile '/test/demo/oracle/demodata/dinya01.dnf' size 50M

  create tablespace dinya_space02

  datafile '/test/demo/oracle/demodata/dinya02.dnf' size 50M

  create tablespace dinya_space03

  datafile '/test/demo/oracle/demodata/dinya03.dnf' size 50M

  1分区表的创建:

  1.1范围分区

  范围分区就是对数据表中的某个值的范围进行分区,根据某个值的范围,决定将该数据存储在哪个分区上。如根据序号分区,根据业务记录的创建日期进行分区等。

  需求描述:有一个物料交易表,表名:material_transactions。该表将来可能有千万级的数据记录数。要求在建该表的时候使用分区表。这时候我们可以使用序号分区三个区,每个区中预计存储三千万的数据,也可以使用日期分区,如每五年的数据存储在一个分区上。

  根据交易记录的序号分区建表:

  SQL> create table dinya_test

  2  (

  3 transaction_id number primary key,

  4 item_id number(8) not null,

  5 item_description varchar2(300),

  6 transaction_date date  not null

  7  )

  8  partition by range (transaction_id)

  9  (

  10 partition part_01 values less than(30000000) tablespace dinya_space01,

  11 partition part_02 values less than(60000000) tablespace dinya_space02,

  12 partition part_03 values less than(maxvalue) tablespace dinya_space03

  13  );

  Table created.

  SQL>

  建表成功,根据交易的序号,交易ID在三千万以下的记录将存储在第一个表空间dinya_space01中,分区名为:par_01,在三千万到六千万之间的记录存储在第二个表空间:dinya_space02中,分区名为:par_02,而交易ID在六千万以上的记录存储在第三个表空间dinya_space03中,分区名为par_03.

  根据交易日期分区建表:

  SQL> create table dinya_test

  2  (

  3 transaction_id number primary key,

  4 item_id number(8) not null,

  5 item_description varchar2(300),

  6 transaction_date date not null

  7  )

  8  partition by range (transaction_date)

  9  (

  10  partition part_01 values less than(to_date('2006-01-01','yyyy-mm-dd')) tablespace dinya_space01,

  11  partition part_02 values less than(to_date('2010-01-01','yyyy-mm-dd')) tablespace dinya_space02,

 

  12  partition part_03 values less than(maxvalue) tablespace dinya_space03

  13  );

  Table created.

  SQL>

  这样我们就分别建了以交易序号和交易日期来分区的分区表。每次插入数据的时候,系统将根据指定的字段的值来自动将记录存储到制定的分区(表空间)中。

  当然,我们还可以根据需求,使用两个字段的范围分布来分区,如partition by range ( transaction_id ,transaction_date),分区条件中的值也做相应的改变,请读者自行测试

  1.2Hash分区(散列分区)

  散列分区为通过指定分区编号来均匀分布数据的一种分区类型,因为通过在I/O设备上进行散列分区,使得这些分区大小一致。如将物料交易表的数据根据交易ID散列地存放在指定的三个表空间中:

  SQL> create table dinya_test

  2  (

  3 transaction_id number primary key,

  4 item_id number(8) not null,

  5 item_description varchar2(300),

  6 transaction_date date

  7  )

  8  partition by hash(transaction_id)

  9  (

  10 partition part_01 tablespace dinya_space01,

  11 partition part_02 tablespace dinya_space02,

  12 partition part_03 tablespace dinya_space03

  13  );

  Table created.

  SQL>

  建表成功,此时插入数据,系统将按transaction_id将记录散列地插入三个分区中,这里也就是三个不同的表空间中。

  

  

   1.3   复合分区

  有时候我们需要根据范围分区后,每个分区内的数据再散列地分布在几个表空间中,这样我们就要使用复合分区。复合分区是先使用范围分区,然后在每个分区内再使用散列分区的一种分区方法,如将物料交易的记录按时间分区,然后每个分区中的数据分三个子分区,将数据散列地存储在三个指定的表空间中:

  SQL> create table dinya_test

  2  (

  3 transaction_id number primary key,

  4 item_id number(8) not null,

  5 item_description varchar2(300),

  6 transaction_date date

  7  )

  8  partition by range(transaction_date)subpartition by hash(transaction_id)

  9 subpartitions 3 store in (dinya_space01,dinya_space02,dinya_space03)

  10  (

  11 partition part_01 values less than(to_date('2006-01-01','yyyy-mm-dd')),

  12 partition part_02 values less than(to_date('2010-01-01','yyyy-mm-dd')),

  13 partition part_03 values less than(maxvalue)

  14  );

  Table created.

  SQL>

  该例中,先是根据交易日期进行范围分区,然后根据交易的ID将记录散列地存储在三个表空间中。

  2分区表操作

  以上了解了三种分区表的建表方法,下面将使用实际的数据并针对按日期的范围分区来测试分区表的数据记录的操作。

  2.1插入记录:

  SQL> insert into dinya_test values(1,12,'BOOKS',sysdate);

  1 row created.

  SQL> insert into dinya_test values(2,12, 'BOOKS',sysdate+30);

  1 row created.

  SQL> insert into dinya_test values(3,12, 'BOOKS',to_date('2006-05-30','yyyy-mm-dd'));

  1 row created.

  SQL> insert into dinya_test values(4,12, 'BOOKS',to_date('2007-06-23','yyyy-mm-dd'));

  1 row created.SQL> insert into dinya_test values(5,12, 'BOOKS',to_date('2011-02-26','yyyy-mm-dd'));

 

  1 row created.

  SQL> insert into dinya_test values(6,12, 'BOOKS',to_date('2011-04-30','yyyy-mm-dd'));

  1 row created.

  SQL> commit;

  Commit complete.

  SQL>

  按上面的建表结果,2006年前的数据将存储在第一个分区part_01上,而2006年到2010年的交易数据将存储在第二个分区part_02上,2010年以后的记录存储在第三个分区part_03上。

  2.2查询分区表记录:

  SQL> select * from dinya_test partition(part_01);

  TRANSACTION_IDITEM_ID  ITEM_DESCRIPTION  TRANSACTION_DATE

  --------------------------------------------------------------------------------

  112  BOOKS  2005-1-14 14:19:

  212  BOOKS  2005-2-13 14:19:

  SQL>

  SQL> select * from dinya_test partition(part_02);

  TRANSACTION_IDITEM_ID ITEM_DESCRIPTION  TRANSACTION_DATE

  --------------------------------------------------------------------------------

  3 12  BOOKS   2006-5-30

  4 12  BOOKS   2007-6-23

  SQL>

  SQL> select * from dinya_test partition(part_03);

  TRANSACTION_IDITEM_IDITEM_DESCRIPTION TRANSACTION_DATE

  --------------------------------------------------------------------------------

  5 12BOOKS  2011-2-26

  6 12BOOKS  2011-4-30

  SQL>

  从查询的结果可以看出,插入的数据已经根据交易时间范围存储在不同的分区中。这里是指定了分区的查询,当然也可以不指定分区,直接执行select * from dinya_test查询全部记录。在也检索的数据量很大的时候,指定分区会大大提高检索速度。

  2.3更新分区表的记录:

  SQL> update dinya_test partition(part_01) t set t.item_description='DESK' where t.transaction_id=1;

  1 row updated.

  SQL> commit;

  Commit complete.

  SQL>

  这里将第一个分区中的交易ID=1的记录中的item_description字段更新为“DESK”,可以看到已经成功更新了一条记录。但是当更新的时候指定了分区,而根据查询的记录不在该分区中时,将不会更新数据,请看下面的例子:

  SQL> update dinya_test partition(part_01) t set t.item_description='DESK' where t.transaction_id=6;

  0 rows updated.

  SQL> commit;

  Commit complete.

  SQL>

  指定了在第一个分区中更新记录,但是条件中限制交易ID为6,而查询全表,交易ID为6的记录在第三个分区中,这样该条语句将不会更新记录。

  2.4删除分区表记录:

  SQL> delete from dinya_test partition(part_02) t where t.transaction_id=4;

  1 row deleted.

  SQL> commit;

  Commit complete.

  SQL>

  上面例子删除了第二个分区part_02中的交易记录ID为4的一条记录,和更新数据相同,如果指定了分区,而条件中的数据又不在该分区中时,将不会删除任何数据。

  3分区表索引的使用:

  分区表和一般表一样可以建立索引,分区表可以创建局部索引和全局索引。当分区中出现许多事务并且要保证所有分区中的数据记录的唯一性时采用全局索引。

  3.1局部索引分区的建立:

  SQL> create index dinya_idx_t on dinya_test(item_id)

  2  local

  3  (

  

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

MySQL:世界で最も人気のあるデータベースの紹介 MySQL:世界で最も人気のあるデータベースの紹介 Apr 12, 2025 am 12:18 AM

MySQLはオープンソースのリレーショナルデータベース管理システムであり、主にデータを迅速かつ確実に保存および取得するために使用されます。その実用的な原則には、クライアントリクエスト、クエリ解像度、クエリの実行、返品結果が含まれます。使用法の例には、テーブルの作成、データの挿入とクエリ、および参加操作などの高度な機能が含まれます。一般的なエラーには、SQL構文、データ型、およびアクセス許可、および最適化の提案には、インデックスの使用、最適化されたクエリ、およびテーブルの分割が含まれます。

なぜMySQLを使用するのですか?利点と利点 なぜMySQLを使用するのですか?利点と利点 Apr 12, 2025 am 12:17 AM

MySQLは、そのパフォーマンス、信頼性、使いやすさ、コミュニティサポートに選択されています。 1.MYSQLは、複数のデータ型と高度なクエリ操作をサポートし、効率的なデータストレージおよび検索機能を提供します。 2.クライアントサーバーアーキテクチャと複数のストレージエンジンを採用して、トランザクションとクエリの最適化をサポートします。 3.使いやすく、さまざまなオペレーティングシステムとプログラミング言語をサポートしています。 4.強力なコミュニティサポートを提供し、豊富なリソースとソリューションを提供します。

Oracle Loopでカーソルを作成する方法 Oracle Loopでカーソルを作成する方法 Apr 12, 2025 am 06:18 AM

Oracleでは、forループループは動的にカーソルを作成できます。手順は次のとおりです。1。カーソルタイプを定義します。 2。ループを作成します。 3.カーソルを動的に作成します。 4。カーソルを実行します。 5。カーソルを閉じます。例:カーソルをサイクルごとに作成して、上位10人の従業員の名前と給与を表示できます。

MySQL対その他のデータベース:オプションの比較 MySQL対その他のデータベース:オプションの比較 Apr 15, 2025 am 12:08 AM

MySQLは、Webアプリケーションやコンテンツ管理システムに適しており、オープンソース、高性能、使いやすさに人気があります。 1)PostgreSQLと比較して、MySQLは簡単なクエリと高い同時読み取り操作でパフォーマンスが向上します。 2)Oracleと比較して、MySQLは、オープンソースと低コストのため、中小企業の間でより一般的です。 3)Microsoft SQL Serverと比較して、MySQLはクロスプラットフォームアプリケーションにより適しています。 4)MongoDBとは異なり、MySQLは構造化されたデータおよびトランザクション処理により適しています。

Oracleビューをエクスポートする方法 Oracleビューをエクスポートする方法 Apr 12, 2025 am 06:15 AM

Oracleビューは、Exputility:Oracleデータベースにログインしてエクスポートできます。 Expユーティリティを開始し、ビュー名とエクスポートディレクトリを指定します。ターゲットモード、ファイル形式、テーブルスペースなどのエクスポートパラメーターを入力します。エクスポートを開始します。 IMPDPユーティリティを使用してエクスポートを確認します。

MySQL:構造化データとリレーショナルデータベース MySQL:構造化データとリレーショナルデータベース Apr 18, 2025 am 12:22 AM

MySQLは、テーブル構造とSQLクエリを介して構造化されたデータを効率的に管理し、外部キーを介してテーブル間関係を実装します。 1.テーブルを作成するときにデータ形式と入力を定義します。 2。外部キーを使用して、テーブル間の関係を確立します。 3。インデックス作成とクエリの最適化により、パフォーマンスを改善します。 4.データベースを定期的にバックアップおよび監視して、データのセキュリティとパフォーマンスの最適化を確保します。

ビジネスの世界におけるオラクルの役割 ビジネスの世界におけるオラクルの役割 Apr 23, 2025 am 12:01 AM

Oracleはデータベース会社だけでなく、クラウドコンピューティングとERPシステムのリーダーでもあります。 1。Oracleは、データベースからクラウドサービスおよびERPシステムへの包括的なソリューションを提供します。 2。Oraclecloudは、AWSとAzureに挑戦し、IAAS、PAAS、SAASサービスを提供します。 3. e-businesssuiteやfusionApplicationsなどのOracleのERPシステムは、企業がオペレーションを最適化するのに役立ちます。

Oracleログがいっぱいの場合はどうすればよいですか Oracleログがいっぱいの場合はどうすればよいですか Apr 12, 2025 am 06:09 AM

Oracleログファイルがいっぱいになると、次のソリューションを採用できます。1)古いログファイルをクリーンします。 2)ログファイルサイズを増やします。 3)ログファイルグループを増やします。 4)自動ログ管理をセットアップします。 5)データベースを再発射化します。ソリューションを実装する前に、データの損失を防ぐためにデータベースをバックアップすることをお勧めします。

See all articles