JavaScriptが無効になっています。
この状態では一部の情報が表示されず、すべての機能を利用することができません。
オラクルの限界性能 Oracle 9i 〜
最近の Linux(32bit 64bitファイル対応)をサーバーとした場合について記述してある。 AIX、Windows、Mac については、プラットフォーム別のマニュアルを参照。
データ型の制限
参照 データ型 および PL/SQL データ型
スキーマオブジェクト
シーケンス
最大値 28 桁 ( 負の場合 10^27 )
備忘欄: 38 桁の typo ではない。 (Oracle 10g 時点)
制約、インデックス
複合キー、インデックスのカラム数は、32カラム以下
但し、ビットマップインデックスは、30カラム以下
おおよそブロックサイズの 80% 程度でエラーとなる。(データブロックサイズにもよる)
今のところ、インデックスでは 行連鎖 の仕組みは採用されていない。
1ブロック同士のメモリ内で比較できないようなキーは通常の業務では考えにくい。しかし、どうしても定常的に比較したい場合でも生データ同士をインデックス化して比較するのは特別な事情がなければ愚行に近い。ハッシュや MD5 関数でハッシュ値を用いて ファンクション索引 で絞り込むのが常套手段である。生データ同士の比較はあくまでも補完である。
プライマリキー
プライマリキー は 32カラム以下 かつ 1 データブロック を超えることはできない。
おおよそブロックサイズの 80% 程度でエラーとなる。
データブロック
データベースのブロック・サイズ
2K/4K/8K/16K/(32K 64bitOS)
最大データブロック数
通常の表領域 1データファイル の最大データブロック数
2^22(4M)-1 ブロックまで
ブロックサイズ 4K ... 約 16GB
BIGFILE 表領域 1データファイルの最大データブロック数
2^32(4G)-1 ブロックまで
ブロックサイズ 4K ... 約 16TB
エクステント
エクステントの大きさ
Oracle 10g 時点
ディクショナリ管理表領域
4GB×ブロック・サイズ(K またはM 修飾子を使用する場合)
4GB(K またはM 修飾子を使用しない場合)
ローカル管理表領域 (UNIFORM(均一) エクステント指定時)
2GB×ブロック・サイズ(K またはM 修飾子を使用する場合)
2GB(K またはM 修飾子を使用しない場合)
MAXEXTENTS
デフォルト値
DB_BLOCK_SIZE 初期化パラメータ
データベース
データベースのキャラクタセットの変更
CREATE DATABSE で作成したデータベースのキャラクタセットは変更することができない。
( ALTER DATABASE CHARACTER SET 構文は無くなった。(実行ができるか未検証) )
日本語キャラクタセットの場合で望まれているであろう、EUC⇔SJISなどのコード変換 を伴う変更は、もともとサポートされていない。
ALTER DATABASE CHARACTER SET で行なうことができた変更は、すべての文字に対して移行先に文字が存在し、同じコードポイント(バイト列)をもつことが必要=スーパーセットである場合に限られていた。
(OK : US7ASCII⇒JA16SJIS、 NG : JA16SJIS ⇔ AL32UTF8(UTF-8)、JA16SJIS ⇔ JA16EUC、etc..)
変換の条件を満たす場合には、
Database Character Set Scanner ユーティリティ群?によって、キャラクタセットを変更することができる。
⇒ データベースの文字コードを変更する
関連マニュアル
Oracle グローバリゼーション・サポート・ガイド 11.キャラクタ・セットの移行
ファイル
制御ファイルのサイズ
ブロックサイズ × 20,000 リカバリカタログを使用しない RMAN に注意
データファイル数
データベースでは、65,533ファイル
1表領域で最大1,022ファイル
参考 初期化パラメータ DB_FILES
データファイル・サイズ
Oracleで利用可能な最大の 1 ファイルサイズ
ファイル OS サイズ DATAFILE UNIX系 すべて 4,194,303 × ブロックサイズ インポート・エクスポート 32bitファイルの場合 2GB 64bitファイルの場合 無制限(最近は、ほとんどが64bitファイル) SQL-LOADERファイル 32bitファイルの場合 2GB 64bitファイルの場合 無制限
通常の表領域では(⇔ BIGFILE 表領域 )
約 4M(1024*1024)*1 × ブロックサイズ
ブロックサイズ 4K ... 約 16GB
ブロックサイズ 8K ... 約 32GB
ブロックサイズ 16K .. 約 64GB
ブロックサイズ 32K .. 約 128GB (一部のUNIXのみ)
(注意事項) OSの各種コマンドが 2GBの壁が残っているかを再確認(dd / tar / etc )しておく。( Linux )
蛇足: ファイルシステムレベルの制限をWebで調べてみたところ以下のような内容だった。(自信を持って自信なし)
Windows NTFS:2TB/ファイル (12EB/パーティション)
FAT32:4GB/ファイル (32GB/パーティション:Win2000/XP) (2TB/サーバー系?)
Linux kernel2.4系以上 1TB (EXT2/EXT3仕様は4TB,ファイルシステムで 1TBに制限)
kernel2.2系 2GB
XFS: 9EB
VxFS ?
Solaris(SPARC)
7 / 8 1TB ?
2.6(FFS/UFS) 1TB
VxFS 2TB以上?
64bit版 Oracle
通常の32bit版の場合、SGAを 約1.7GB*2 までしか使用できない。
それを超える場合には VLM機能を使用する必要がある。
(Window単位に管理されるメモリファイルシステムを経由するため若干性能が低下する)
Linux で 4G以上のメモリを搭載する場合には 64bit環境とそれに対応したオペレーティングシステム、オラクルを検討する。
(Windows は、64bitOS(XP)が出荷されたようですが知りません。)
VLM=Very Large Memory
SQLにおける制限事項
SQL ステートメントの最大長 :65535(バイト) 64K バイト
ミドルウェアによっては 32K バイトという制限がある可能性もありうる
DBMS_SQL パッケージを使用すると 64K バイトの壁を越えることが可能。
SQL ステートメントの最大長 :記述なし ( 64K 以上であることは確認済み:おそらく制限なし)
システム固有の動的SQL の場合には 32K バイトまで
引数が VARCHAR2 の制限と思われる。それを超えると
ORA-06502: PL/SQL: 数値または値のエラー :文字列バッファが小さすぎます。が発生しました
のエラーが発生する。
WHERE 句 での副問い合わせの最大数: 255
IN リストに指定できる式の数: 1000
かなり以前 IN ( val1, val2 ) の値を指定した形式の valn(リテラル) の n が 確か 255 個(確か 256 ではなかったと思う)が上限であった記憶があるが、現在では 1000 個になっている。※副問い合わせの結果セットの件数には制限ない。
GROUP BY : GROUP 式、集計関数 は 1データベースブロック以内
(マニュアルには、こう書いてあるが、その意味を理解できずに不明、それらしい記述をしてみたが分からずじまい)
数に制限はないとされているが ORA-00962: GROUP BY/ORDER BY句が多すぎます。のエラーには 1000 個以下にするという記述もある。どのバージョンの制限かはわからない。(未検証)
ORDER BY : 記述なし
ORA-00962: GROUP BY/ORDER BY句が多すぎます。のエラーには 1000 個以下にするという記述もある。
標準関数の引数の上限
組み込み関数の引数の上限はおそらく COALESCE 関数 の 256 であると思われる。しかし、ほとんどの引数が可変長の関数は DECODE 関数の引数の上限 255 個(※) と同じと思われる。
組み込み関数の引数の上限については特に記述がない。
(※) BIN_TONUM、GREATEST、LEAST、DECODE を調べた結果
集計関数のネスト数: 記述なし(しかし、2ネストまでしか実行できない:グループ関数の方に記述してあると思われる)
注意
記述なし の項目は、それぞれのマニュアル中に散在して記述されていて見つけることができていないだけの可能性があります。
各種制限値はバージョンアップにより撤廃、改良していることが多いのですが、リファレンスマニュアルにキャプションはあっても制限項目すべてが書かれていない状況です。
メジャーバージョンアップ時には、散在している制限項目の記述が削除されて無制限になったのかと思えば制限値は変更されていないなど不備がよくありますので注意してください。
PL/SQLにおける制限事項
ユーザー定義関数の引数の上限
PL/SQL のストアドプロシージャの引数の上限は 65536 。
PL/SQL ソースコードのサイズ
ストアド・プロシージャ、ファンクション、トリガー(※)などの上限
PCODE が 64KB、一部の Windws では 32KB (Oralce 10g が正式にサポートされる OS ならば無関係だと思われる)。
(※) トリガー の本体を数十行にわたって記述することは推奨されていない。(互換性のためか格納方式も独特)
ソースコードが長いと DBMS_METADATA でもエラーになることがある。