この章では、TimesTenデータベースでのPL/SQLの管理方法、接続属性の設定方法、およびシステム提供のパッケージの表示方法について説明します。また、TimesTenでサポートされていないPL/SQL機能の確認にん使用できるttSrcScan
ユーティリティについても説明します。この章の終わりには、プロシージャを設定する際に役立つ例をまとめています。
この章の内容は次のとおりです。
この項の内容は次のとおりです。
TimesTenでは、デフォルトでPL/SQLがインストールされます。PL/SQLのインストールを選択しない場合(インストールをお薦めします)は、TimesTenのttmodinstall
ユーティリティを使用して、後からPL/SQLをインストールできます。詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のttmodinstallに関する説明を参照してください。
注意: このユーティリティを実行できるのは、インスタンス管理者のみです。 |
PL/SQLはデフォルトで有効です(最初の接続属性設定はPLSQL=1
)。データベース内のPL/SQLの状態を次の方法で確認できます。これらの例では、$
はUNIXのプロンプト、またCommand>
はttIsql
のプロンプトを表しています。
ttStatus
ユーティリティを次の例で示されるように使用して、PL/SQLがユーザーのデータベースで有効になっているか識別します。このユーティリティの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のttStatusに関する説明を参照してください。
$ ttstatus
TimesTen status report as of Sat Sep 17 13:58:27 2011
Daemon pid 20921 port 28959 instance myserver
...
------------------------------------------------------------------------
Data store /mypath/install/info/DemoDataStore/sampledb_1122
There are xx connections to the data store
Shared Memory KEY 0x2e0183b1 ID 1343492
PL/SQL Memory KEY 0x2f0183b1 ID 1376261 Address 0x10000000
Type PID Context Connection Name ConnID
Process 16678 0x08f718c0 sampledb_1122 1
...
Replication policy : Manual
Cache Agent policy : Manual
PL/SQL enabled.
------------------------------------------------------------------------
...
End of report
ttIsql
ユーティリティを使用し、ttConfiguration
組込みプロシージャをコールして、データベースのPLSQL
接続属性の設定を確認します。次の例に示すとおり、値1は、PL/SQLが有効になっていることを示します。この組込みプロシージャの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のttConfigurationに関する説明を参照してください。
Command> call ttconfiguration; ... < DataStore, /mypath/install/info/DemoDataStore/sampledb_1122 > ... < PLSQL, 1 > ... < UID, MYUSER > 61 rows found.
次の表6-1に示すとおり、PL/SQLに固有のTimesTen接続属性があります。これらの接続属性の詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のPL/SQL初期接続属性およびPL/SQL一般接続属性に関する説明を参照してください。
この表には、必要なアクセス制御権限、および各接続属性が初期接続属性と一般接続属性のいずれであるかが示されています。初期接続属性はデータベースが最初にロードされるときに設定され、すべての接続に対して有効です。初期接続属性の設定を変更してデータベースをロードできるのは、インスタンス管理者のみです。一般接続属性の設定は1つの接続にのみ適用され、設定を行うのに特別な権限は必要ありません。
表6-1 PL/SQL接続属性
属性 | 概要 |
---|---|
初期接続属性 必要な権限: インスタンス管理者 データベースでPL/SQLを有効にします。
データベースを最初に作成するとき、または、データベースに初めて接続するときに、PL/SQLを有効にすることができます。PL/SQLを一度有効にすると、無効にすることができなくなります。 デフォルト: 1(PL/SQLがサポートされているプラットフォームの場合) |
|
初期接続属性 必要な権限: インスタンス管理者 TimesTenダイレクト・ドライバを使用する各プロセスにPL/SQL共有メモリー・セグメントがロードされる場所を示す仮想アドレス(16進値)を指定します。このメモリー・アドレスは、あるデータベースへのすべての接続、およびそのデータベースに接続するすべてのプロセスで同じである必要があります。 1つのアプリケーションから複数のデータベースに同時にダイレクト接続する場合は、データベースごとに異なる値を設定する必要があります。 デフォルト: プラットフォーム固有の値 プラットフォーム固有の情報の詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のPLSQL_MEMORY_ADDRESSに関する説明を参照してください。 |
|
初期接続属性 必要な権限: インスタンス管理者 すべての接続で共有するPL/SQL共有メモリー・セグメントに割り当てられるメモリーのサイズをMB単位で指定します。このメモリーは最近実行したPL/SQLコードおよびPL/SQLオブジェクトに関するメタデータを保持するために使用します。 デフォルト: プラットフォーム固有の値 PL/SQLメモリー・サイズの計算およびプラットフォーム固有の値とチューニングの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のPLSQL_MEMORY_SIZEに関する説明を参照してください。 |
|
一般接続属性 必要な権限: なし PL/SQLコンパイラで相互参照情報を生成するかどうかを制御します。可能な値は、
デフォルト: |
|
一般接続属性 必要な権限: なし これを使用して、PL/SQLユニットの条件付きコンパイルを操作するための問合せディレクティブを設定すると、確認する条件に応じて、PL/SQLプログラムの機能をカスタマイズできます。これは、アプリケーションを複数のデータベース環境にデプロイできる場合に、特に便利です。たとえば、次のようにデバッグ機能をアクティブにします: PLSQL_CCFLAGS='DEBUG:TRUE' PL/SQLの条件付きコンパイル・フラグは、次のようなCコンパイラのコマンドラインのフラグと概念が似ています。 % cc -DEBUG=TRUE ...
この機能の詳細は、『Oracle Database PL/SQL言語リファレンス』の条件付きコンパイルに関する項を参照してください。 デフォルト: |
|
一般接続属性 必要な権限: なし PL/SQLで現在の接続に割り当てることができるPL/SQL共有メモリー(プロセス・ヒープ・メモリー)の最大サイズを指定します。(このメモリーは、必要になるまで実際には割り当てられません。)このメモリーは、キャッシュされた実行可能コードではなく、大きなPL/SQLコレクションなどの実行時データに使用されるメモリーです。この設定により、使用可能なすべての実行時メモリーをPL/SQLで取得してしまう可能性がある場合に、CやJavaコンポーネントなどのアプリケーションの他の部分が保護されます。 PL/SQL変数によって消費されるメモリー量は、他のプログラミング言語で類似の変数によって消費される量とほぼ同じです。たとえば、次のような文字列の大きな配列を考えてみます。 type chararr is table of varchar2(32767) index by binary_integer; big_array chararr; 配列にそれぞれ100バイトの文字列が100,000個配置される場合、約12MBのメモリーが消費されます。 PL/SQLブロックの変数によって消費されるメモリーは、ブロックの実行中に使用され、その後解放されます。プロシージャやファンクション内ではなくPL/SQLパッケージの指定内または本体内の変数によって消費されるメモリーは、パッケージの存続期間使用されます。PL/SQLプロシージャやファンクション(パッケージ内で定義されているものなど)内の変数によって消費されるメモリーは、そのプロシージャやファンクションの存続期間使用されます。ただし、いずれの場合も、PL/SQLによって解放されたメモリーはオペレーティング・システムに戻されません。かわりに、PL/SQLによって保持され、将来PL/SQLが起動されたときに再利用されます。アプリケーションとTimesTenの接続が切断されると、メモリーは解放されます。
デフォルト: 100MB 注意: |
|
一般接続属性 必要な権限: なし PL/SQLライブラリ・ユニットのコンパイルに使用する最適化レベルを指定します。設定値が高いほど、コンパイラでPL/SQLライブラリ・ユニットを最適化するのに多くの処理が必要になります。可能な値は、0、1、2または3です。
デフォルト: 2 |
|
一般接続属性 必要な権限: なし PL/SQLプログラム・ユニットを終了まで実行できる時間を秒単位で指定します。新しい値を設定すると、その値は現在実行中のPL/SQLプログラムに適用されます。可能な値は、0(時間制限なし)または正の整数です。
(また、『Oracle TimesTen In-Memory Database C開発者ガイド』のSQL文のタイムアウト期間の設定に関する項で説明されている、TimesTen SQL問合せのタイムアウト設定、および『Oracle TimesTen In-Memory Databaseリファレンス』のTTC_Timeoutに関する項で説明されている、TimesTen デフォルト: 30秒 注意:
|
注意: PL/SQLで考慮する必要があるTimesTen接続属性は、他にもあります。それらの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』の次に示す項を参照してください。
|
この項の以降の部分では、PL/SQL接続属性の設定と変更の例をいくつか示します。
例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;TypeMode=0; (Default setting AutoCommit=1)
ttConfiguration
組込みプロシージャをコールして、設定を表示します。これにより、デフォルトのPL/SQL設定が表示されます。
Command> call ttconfiguration; ... < DataBaseCharacterSet, US7ASCII > < DataStore, /mypath/install/info/DemoDataStore/pldef > ... < PLSCOPE_SETTINGS, IDENTIFIERS:NONE > < PLSQL, 1 > < PLSQL_CCFLAGS, <NULL> > ... < PLSQL_CONN_MEM_LIMIT, 100 > < PLSQL_MEMORY_ADDRESS, 0x10000000 > < PLSQL_MEMORY_SIZE, 32 > < PLSQL_OPTIMIZE_LEVEL, 2 > < PLSQL_TIMEOUT, 30 > ... < UID, MYUSER > 61 rows found.
例6-2 ALTER SESSIONを使用した属性設定の変更
次の例では、ALTER SESSION
文を使用してPL/SQL接続属性を変更し、PLSCOPE_SETTINGS
、PLSQL_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プログラムがあり、TimesTenでサポートされていないPL/SQL機能がそのプログラムで使用されているかどうかを確認するには、ttSrcScan
コマンドライン・ユーティリティを使用して、プログラムにサポートされていないファンクション、パッケージ、データ型、データ型コード、属性、モードおよび定数がないかスキャンします。このユーティリティは、TimesTenまたはOracle Databaseがインストールされていない場合でも実行可能なスタンドアロン・ユーティリティであり、TimesTenでサポートされているどのプラットフォームでも動作します。入力としてソース・コード・ファイルが読み取られ、出力としてHTMLおよびテキスト・ファイルが作成されます。サポートされていないアイテムが見つかった場合、それらのアイテムはログに記録され、代替アイテムが提案されます。ttSrcScan
実行可能ファイルは、TimesTenインストールのquickstart/sample_util
ディレクトリにあります。
スキャンするプログラムの入力ファイルまたはディレクトリ、およびttSrcScan
レポートの出力ディレクトリを指定します。その他のオプションも使用できます。詳細は、sample_util
ディレクトリにあるREADMEファイルを参照してください。