主コンテンツへ
Oracle® TimesTen In-Memory Database PL/SQL開発者ガイド
リリース18.1
E98629-04
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

6 PL/SQL環境

この章では、TimesTenデータベースでPL/SQLを管理する方法を説明します。また、TimesTenでサポートされていないPL/SQL機能の確認にん使用できるttSrcScanユーティリティについても説明します。

この章の内容は次のとおりです。

PL/SQL接続属性

次の表6-1に示すとおり、PL/SQLに固有のTimesTen接続属性があります。これらの接続属性の詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のPL/SQL初期接続属性およびPL/SQL一般接続属性に関する説明を参照してください。

この表には、必要なアクセス制御権限、および各接続属性が初期接続属性と一般接続属性のいずれであるかが示されています。初期接続属性はデータベースが最初にロードされるときに設定され、すべての接続に対して有効です。初期接続属性の設定を変更してデータベースをロードできるのは、インスタンス管理者のみです。一般接続属性の設定は1つの接続にのみ適用され、設定を行うのに特別な権限は必要ありません。

この項では、ALTER SESSIONを使用して一般的な接続属性値を変更する例を示します。『Oracle TimesTen In-Memory Database SQLリファレンス』のALTER SESSIONに関する項も参照してください。

表6-1 PL/SQL接続属性

属性 概要

PLSCOPE_SETTINGS

一般接続属性

必要な権限: なし

PL/SQLコンパイラで相互参照情報を生成するかどうかを制御します。可能な値は、IDENTIFIERS:NONEまたはIDENTIFIERS:ALLです。

ALTER SESSION文を使用すると、セッション内でこの値を変更できます。

『Oracle TimesTen In-Memory Databaseリファレンス』のPLSCOPE_SETTINGSも参照してください

PLSQL_CCFLAGS

一般接続属性

必要な権限: なし

これを使用して、PL/SQLユニットの条件付きコンパイルを操作するための問合せディレクティブを設定すると、確認する条件に応じて、PL/SQLプログラムの機能をカスタマイズできます。これは、アプリケーションを複数のデータベース環境にデプロイできる場合に、特に便利です。たとえば、次のようにデバッグ機能をアクティブにします:

PLSQL_CCFLAGS='DEBUG:TRUE'

PL/SQLの条件付きコンパイル・フラグは、次のようなCコンパイラのコマンドラインのフラグと概念が似ています。

% cc -DEBUG=TRUE ...

ALTER SESSION文を使用すると、セッション内でPLSQL_CCFLAGSを変更できます。

この機能の詳細は、『Oracle Database PL/SQL言語リファレンス』の条件付きコンパイルに関する項を参照してください。

『Oracle TimesTen In-Memory Databaseリファレンス』のPLSQL_CCFLAGSも参照してください。

PLSQL_CONN_MEM_LIMIT

一般接続属性

必要な権限: なし

PL/SQLで現在の接続に割り当てることができるPL/SQL共有メモリー(プロセス・ヒープ・メモリー)の最大サイズを指定します。(このメモリーは、必要になるまで実際には割り当てられません。)このメモリーは、キャッシュされた実行可能コードではなく、大きなPL/SQLコレクションなどの実行時データに使用されるメモリーです。この設定により、使用可能なすべての実行時メモリーをPL/SQLで取得してしまう可能性がある場合に、CやJavaコンポーネントなどのアプリケーションの他の部分が保護されます。

PLSQL_CONN_MEM_LIMITの値は、MB単位で指定します。設定0は無制限を意味します。

ALTER SESSION文を使用すると、セッション内でこの値を変更できます。

また、Oracle TimesTen In-Memory DatabaseリファレンスでPLSQL_CONN_MEM_LIMITを参照してください。

ノート: ttPLSQLMemoryStatsの出力で、関連する値CurrentConnectionMemoryは、PL/SQLでmalloc()によって実際に取得したプロセス・ヒープ・メモリーの量を示します。(例 6-3も参照してください。)

PLSQL_MEMORY_ADDRESS

初期接続属性

必要な権限: インスタンス管理者

TimesTenダイレクト・ドライバを使用する各プロセスにPL/SQL共有メモリー・セグメントがロードされる場所を示す仮想アドレス(16進値)を指定します。このメモリー・アドレスは、あるデータベースへのすべての接続、およびそのデータベースに接続するすべてのプロセスで同じである必要があります。

1つのアプリケーションから複数のデータベースに同時にダイレクト接続する場合は、データベースごとに異なる値を設定する必要があります。

プラットフォーム固有の情報の詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のPLSQL_MEMORY_ADDRESSに関する説明を参照してください。

PLSQL_MEMORY_SIZE

初期接続属性

必要な権限: インスタンス管理者

すべての接続で共有するPL/SQL共有メモリー・セグメントに割り当てられるメモリーのサイズをMB単位で指定します。このメモリーは最近実行したPL/SQLコードおよびPL/SQLオブジェクトに関するメタデータを保持するために使用します。

PL/SQLメモリー・サイズの計算およびプラットフォーム固有の値とチューニングの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のPLSQL_MEMORY_SIZEに関する説明を参照してください。

PLSQL_OPEN_CURSORS

初期接続属性

必要な権限: インスタンス管理者

1つのセッションで1回にオープンできるPL/SQLカーソルの最大数を指定します。

この属性の機能はOracle DatabaseのOPEN_CURSORSと同じであることに注意してください。

Oracle TimesTen In-Memory DatabaseリファレンスのPLSQL_OPEN_CURSORSも参照してください。

注意: かわりに、ttDBConfigパラメータPLSQL_OPEN_CURSORSも使用できます。PL/SQLデータベース構成パラメータを参照してください。

PLSQL_OPTIMIZE_LEVEL

一般接続属性

必要な権限: なし

PL/SQLライブラリ・ユニットのコンパイルに使用する最適化レベルを指定します。設定値が高いほど、コンパイラでPL/SQLライブラリ・ユニットを最適化するのに多くの処理が必要になります。可能な値は、0、1、2または3です。

ALTER SESSION文を使用すると、セッション内でこの値を変更できます。

『Oracle TimesTen In-Memory Databaseリファレンス』のPLSQL_OPTIMIZE_LEVELも参照してください。

PLSQL_SESSION_CACHED_CURSORS

一般接続属性

必要な権限: なし

キャッシュするセッション・カーソルの数を指定します。

この属性の機能は、Oracle DatabaseのSESSION_CACHED_CURSORSと同じです。

ALTER SESSION文を使用すると、セッション内でこの値を変更できます。

『Oracle TimesTen In-Memory Databaseリファレンス』のPLSQL_SESSION_CACHED_CURSORSに関する項も参照してください。

PLSQL_TIMEOUT

一般接続属性

必要な権限: なし

PL/SQLプログラム・ユニットを終了まで実行できる時間を秒単位で指定します。新しい値を設定すると、その値は現在実行中のPL/SQLプログラムに適用されます。可能な値は、0(時間制限なし)または正の整数です。

ALTER SESSION文を使用すると、セッション内でこの値を変更できます。

『Oracle TimesTen In-Memory Databaseリファレンス』のPLSQL_TIMEOUTも参照してください。

『Oracle TimesTen In-Memory Database C開発者ガイド』のSQL文のタイムアウト期間の設定に関する項で説明されている、TimesTen SQL問合せのタイムアウト設定、および『Oracle TimesTen In-Memory Databaseリファレンス』のTTC_Timeoutに関する項で説明されている、(クライアント/サーバーに適切な) TimesTen TTC_Timeoutの設定に注意してください。

TimesTen Client/Serverを使用している場合、PLSQL_TIMEOUTTTC_Timeoutより大幅に小さくする必要があり、TTC_Timeoutが0より大きい場合は0 (タイムアウトなし)にはできません。詳細は、前述のTTC_Timeoutについて説明しているドキュメントを参照してください。

タイムアウト値どうしの関係の詳細は、Oracle TimesTen In-Memory Databaseオペレーション・ガイドのSQLおよびPL/SQLのタイムアウト値の選択を参照してください。

ノート: PL/SQLプログラムが、このタイムアウト値に対して実行時間をチェックする間隔は変更可能です。プログラムをタイムアウト値よりも大幅に長い時間実行してから終了できます。



ノート:

PL/SQLで考慮する必要があるTimesTen接続属性は、他にもあります。それらの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』の次に示す項を参照してください。
  • LockLevel一般接続属性が1(データベース・レベルのロック)に設定されている場合、一部のPL/SQL内部ファンクションは実行できません。したがって、接続のLockLevelを0に設定してください。その後、ttLockLevel組込みプロシージャを使用し、必要に応じてトランザクションのロックをデータベース・レベルのロックに切り替えることができます。「LockLevel」および「ttLockLevel」を参照してください。

  • PL/SQL共有メモリーのセグメントは、MemoryLock初期接続属性の影響を受けません。「MemoryLock」を参照してください。


この項の以降の部分では、PL/SQL接続属性の設定と変更の例をいくつか示します。


ノート:

次の例はTimesTen Classicに適用されます。TimesTen Scaleoutでは接続を定義するときに接続属性を設定します。odbc.iniなどの構成ファイルを手動で編集することはできません。Oracle TimesTen In-Memory Database Scaleoutユーザーズ・ガイドのデータベースへの接続を参照してください。

例6-1 デフォルトのPL/SQL接続属性によるデータベースの作成

この例では、PL/SQL接続属性を指定しないでデータベースpldefを定義します。(データベースを作成できるのはインスタンス管理者のみであることに注意してください。)

odbc.iniエントリのサンプル

[pldef]
Driver=/mypath/install/lib/libtten.so
DataStore=/mypath/install/info/DemoDataStore/pldef
DatabaseCharacterSet=US7ASCII

データベースpldefに接続します。

% ttisql pldef
 
Copyright (c) 1996-2011, Oracle.  All rights reserved.
Type ? or "help" for help, type "exit" to quit ttIsql.
 
connect "DSN=pldef";
Connection successful: DSN=pldef;UID=myuser;DataStore=/mypath/install/info/DemoDataStore/pldef;
DatabaseCharacterSet=US7ASCII;ConnectionCharacterSet=US7ASCII;
DRIVER=/mypath/install/lib/libtten.so;
(Default setting AutoCommit=1)

ttConfiguration組込みプロシージャをコールして、設定を表示します。これにより、デフォルトのPL/SQL設定が表示されます。

Command> call ttconfiguration;
...
< PLSCOPE_SETTINGS, IDENTIFIERS:NONE >
...
< PLSQL_CCFLAGS, <NULL> >
...
< PLSQL_CONN_MEM_LIMIT, 100 >
< PLSQL_MEMORY_ADDRESS, 0x0000005000000000 >
< PLSQL_MEMORY_SIZE, 128 >
< PLSQL_OPTIMIZE_LEVEL, 2 >
< PLSQL_TIMEOUT, 30 >
...
< PLSQL_SESSION_CACHED_CURSORS, 50 >
...
88 rows found.

例6-2 ALTER SESSIONを使用した属性設定の変更

次の例では、ALTER SESSION文を使用してPL/SQL接続属性を変更し、PLSCOPE_SETTINGSPLSQL_CONN_MEM_LIMIT、およびPLSQL_OPTIMIZE_LEVELの設定を変更します。次に、ttConfiguration組込みプロシージャをコールして、新しい値を表示します。

Command> ALTER SESSION SET PLSCOPE_SETTINGS = "IDENTIFIERS:ALL";
 
Session altered.
 
Command> ALTER SESSION SET PLSQL_CONN_MEM_LIMIT=200;
 
Session altered.
 
Command> ALTER SESSION SET PLSQL_OPTIMIZE_LEVEL=3;
 
Session altered.
 
Command> call ttconfiguration;
...
< DataStore, /mypath/install/info/DemoDataStore/pldef >
...
< PLSCOPE_SETTINGS, IDENTIFIERS:ALL >
...
< PLSQL_CONN_MEM_LIMIT, 200 >
...
< PLSQL_OPTIMIZE_LEVEL, 3 >
...
< UID, MYUSER >
61 rows found.

例6-3 PL/SQLパフォーマンス統計情報の表示

ttPLSQLMemoryStats組込みプロシージャを使用すると、PL/SQLライブラリ・キャッシュのパフォーマンスやアクティビティに関する統計情報が戻されます。この例では、サンプル出力をいくつか示します。このプロシージャの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のttPLSQLMemoryStatsに関する説明を参照してください。

Command> call ttplsqlmemorystats;
< Gets, 5.000000 >
< GetHits, 0.000000e+00 >
< GetHitRatio, 0.000000e+00 >
< Pins, 4.000000 >
< PinHits, 0.000000e+00 >
< PinHitRatio, 0.000000e+00 >
< Reloads, 0.000000e+00 >
< Invalidations, 0.000000e+00 >
< CurrentConnectionMemory, 0.000000e+00 >
< DeferredCleanups, 0.000000e+00 >
10 rows found.

ノート:

CurrentConnectionMemoryは、「PL/SQL接続属性」に記載されているPLSQL_CONN_MEM_LIMIT接続属性に関連付けられ、PL/SQLによって実際に取得されたヒープ・メモリーの量を示します。

PL/SQLデータベース構成パラメータ

ttDBConfig組込みプロシージャを使用して、データベース構成パラメータPLSQL_OPEN_CURSORSの値を表示または設定できます。

このパラメータは、1つのセッションで1回にオープンできるPL/SQLカーソルの最大数を指定します。これはセッションが過剰な数のカーソルをオープンしないようにするために使用します。

現在の値を取得するには、次のようにします。

call ttdbconfig('PLSQL_OPEN_CURSORS');
< PLSQL_OPEN_CURSORS, 50 >
1 row found.

値を75に設定するには、次のようにします。

call ttdbconfig('PLSQL_OPEN_CURSORS', '75');
< PLSQL_OPEN_CURSORS, 75 >
1 row found.

この組込みプロシージャの詳細とPLSQL_OPEN_CURSORSの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のttDBConfigに関する項を参照してください。


ノート:

かわりに、PLSQL_OPEN_CURSORS接続属性も使用できます。「PL/SQL接続属性」を参照してください。

ttSrcScanユーティリティ

既存のPL/SQLプログラムがあり、TimesTenでサポートされていないPL/SQL機能がそのプログラムで使用されているかどうかを確認するには、ttSrcScanコマンドライン・ユーティリティを使用して、プログラムにサポートされていないファンクション、パッケージ、データ型、データ型コード、属性、モードおよび定数がないかスキャンします。このユーティリティは、TimesTenまたはOracle Databaseがインストールされていない場合でも実行可能なスタンドアロン・ユーティリティであり、TimesTenでサポートされているどのプラットフォームでも動作します。入力としてソース・コード・ファイルが読み取られ、出力としてHTMLおよびテキスト・ファイルが作成されます。サポートされていないアイテムが見つかった場合、それらのアイテムはログに記録され、代替アイテムが提案されます。スキャンするプログラムの入力ファイルまたはディレクトリ、およびttSrcScanレポートの出力ディレクトリを指定します。その他のオプションも使用できます。

ttSrcScanユーティリティはOracle Technology Networkサイトで入手できます。詳細についてはREADMEファイルを参照してください。