Oracle TimesTen In-Memory Databaseでは、PL/SQLがシームレスにデータベースに統合されます。 TimesTenでPL/SQLを簡単に管理したり、環境に固有の接続属性を設定できます。 短時間でPL/SQLをTimesTen環境で使用できるようになります。
この章では、TimesTenデータベースでPL/SQLを管理する方法、接続属性を設定する方法およびシステム提供パッケージを表示する方法について説明します。 また、ttSrcScan
ユーティリティについても説明します。このユーティリティを使用すると、TimesTenでサポートされていないPL/SQL機能を確認できます。 設定に役立つ例も記載されています。
この章の内容は次のとおりです。
この項の内容は次のとおりです。
Oracle TimesTen In-Memory Databaseをインストールすると、PL/SQLがデフォルトでインスタンスにインストールされます。 インストール中にPL/SQLのインストールを選択しない場合は、TimesTenのttmodinstall
ユーティリティを使用して、後からPL/SQLをインストールできます。 詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のttmodinstallに関する説明を参照してください。
注意: このユーティリティを実行できるのは、インスタンス管理者のみです。 |
TimesTenでは、初期接続属性PLSQL
を使用してPL/SQLを有効にします。 この属性は、データベースを最初に作成するとき、または作成後初めてデータベースに接続するときに設定できます。 PL/SQLを一度有効にすると(PLSQL=1
)、無効にできないことに注意してください(PLSQL=0
を設定しても効果はありません)。
PL/SQLがプラットフォームでサポートされている場合は、インストール時にPL/SQLを有効にすると、TimesTenではデフォルトでPLSQL=1
が設定されます。 PLSQL
接続属性は、odbc.ini
ファイルまたはアプリケーションで設定することもできます。
PLSQL
接続属性の詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のPLSQLに関する説明を参照してください。
データベースにおけるPL/SQLのステータスを確認するには、いくつかの方法があります。
ttVersion
ユーティリティを使用して、PL/SQLがインスタンスにインストールされているかどうかを確認します。 PL/SQLが有効になっている場合は、次のように表示されます。
$ ttVersion TimesTen Release 11.2.1.0.0 (32 bit Linux/x86) (user:4738) 2008-07-04T22:01:57Z Instance admin: user Instance home directory: /scratch/user... Daemon home directory: /scratch/user... PL/SQL enabled.
ttStatus
ユーティリティを使用して、PL/SQLがデータベースで有効になっているかどうかを確認します。 次の例では、PL/SQLはplsql1
データベースで有効になっていますが、plsql0
データベースでは無効になっています。
$ ttstatus TimesTen status report as of Wed Jul 16 14:35:31 2008 Daemon pid 00000 port 0000 instance user TimesTen server pid 00000 started on port 0000 ------------------------------------------------------------------------ Data store /scratch/user/plsql1 There are no connections to the data store Replication policy : Manual Cache Agent policy : Manual PL/SQL enabled. ------------------------------------------------------------------------ Data store /scratch/user/plsql0 There are no connections to the data store Replication policy : Manual Cache Agent policy : Manual ------------------------------------------------------------------------ ...
ttIsql
ユーティリティを使用し、ttConfiguration
組込みプロシージャをコールして、データベースのPLSQL
接続属性の設定を確認します。このプロシージャの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のttConfigurationに関する説明を参照してください。
次に例を示します。
Command> call ttConfiguration; < CacheGridEnable, 0 > < CacheGridMsgWait, 60 > ... < PLSQL, 1 > ...
表7-1に示すように、PL/SQLに固有のTimesTen接続属性があります。 これらの接続属性の詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のPL/SQL初期接続属性およびPL/SQL一般接続属性に関する説明を参照してください。
この表には、必要なアクセス制御権限、および各接続属性が初期接続属性と一般接続属性のいずれであるかが示されています。 初期接続属性はデータベースが最初にロードされるときに設定され、すべての接続に対して有効です。 初期接続属性の設定を変更してデータベースをロードできるのは、インスタンス管理者のみです。 一般接続属性の設定は1つの接続にのみ適用され、設定を行うのに特別な権限は必要ありません。
表7-1 PL/SQL接続属性
属性 | 概要 |
---|---|
初期接続属性 必要な権限: インスタンス管理者 データベースでPL/SQLを有効にします。
データベースを最初に作成するとき、または、データベースに初めて接続するときに、PL/SQLを有効にすることができます。 PL/SQLを一度有効にすると、無効にすることができなくなります。 デフォルト: 1(PL/SQLがサポートされているプラットフォームの場合) |
|
初期接続属性 必要な権限: インスタンス管理者 仮想アドレスを16進値で指定します。このアドレスのPL/SQL共有メモリー・セグメントが、TimesTenダイレクト・ドライバを使用する各プロセスにロードされます。 このメモリー・アドレスは、特定のデータベースへのすべての接続およびそのデータベースに接続するすべてのプロセスにおいて同じである必要があります。 1つのアプリケーションから2つ以上のTimesTenデータベースに同時にダイレクト・モードで接続する場合は、データベースごとに異なる値を設定する必要があります。 デフォルト: プラットフォーム固有の値。 プラットフォーム固有の情報の詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のPLSQL_MEMORY_ADDRESSに関する説明を参照してください。 |
|
初期接続属性 必要な権限: インスタンス管理者 PL/SQL共有メモリー・セグメントに割り当てられるメモリーのサイズをMB単位で指定します。 このメモリーは、データベース出力などの実行時データを格納するためではなく、直前に実行されたPL/SQLコードとPL/SQLオブジェクトに関するメタデータを保持するために使用されるメモリーです。 『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』のPLSQL_MEMORY_SIZEに関する説明にも、この設定に関連するチューニングの情報があります。 デフォルト: 32MB 重要: 8MB以上の値を使用します。 |
|
一般接続属性 必要な権限: なし PL/SQLコンパイラで相互参照情報を生成するかどうかを制御します。 可能な値は、 ALTER SESSION文を使用すると、セッション内でこの値を変更できます。 デフォルト: |
|
一般接続属性 必要な権限: なし この属性で問合せディレクティブを設定して、PL/SQLユニットの条件付きコンパイルを制御できます。これにより、確認する条件に応じて、PL/SQLプログラムの機能をカスタマイズできます。 このことは、特に、アプリケーションが複数のデータベース環境にデプロイされる場合に有効です。 考えられる用途としては、デバッグ機能やトレース機能のアクティブ化、データベースのバージョンに基づいた機能設定などがあります。 次に例を示します。 PLSQL_CCFLAGS='DEBUG:TRUE, PRODUCTION:YES' PL/SQLの条件付きコンパイル・フラグは、次のようなCコンパイラのコマンドラインのフラグと概念が似ています。 % cc -DEBUG=TRUE -DPRODUCTION=YES ... ALTER SESSION文を使用すると、セッション内で この機能の詳細は、『Oracle Database PL/SQL言語リファレンス』の条件付きコンパイルに関する説明を参照してください。 「UTL_IDENT」にも条件付きコンパイルの例があります。ただし、 デフォルト: NULL |
|
一般接続属性 必要な権限: なし 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の接続が切断されると、メモリーは解放されます。
ALTER SESSION文を使用すると、セッション内でこの値を変更できます。 デフォルト: 100MB 注意: |
|
一般接続属性 必要な権限: なし PL/SQLライブラリ・ユニットのコンパイルに使用する最適化レベルを指定します。 設定値が高いほど、コンパイラでPL/SQLライブラリ・ユニットを最適化するのに多くの処理が必要になります。 可能な値は、0、1、2または3です。 ALTER SESSION文を使用すると、セッション内でこの値を変更できます。 デフォルト: 2 |
|
一般接続属性 必要な権限: なし PL/SQLプロシージャを終了まで実行できる時間を秒単位で指定します。 新しい値を設定すると、その値は現在実行中のPL/SQLプログラム・ユニットに適用されます。 可能な値は、0(時間制限なし)または正の整数です。 ALTER SESSION文を使用すると、セッション内でこの値を変更できます。 デフォルト: 30秒 注意: PL/SQLプログラムが、このタイムアウト値に対して実行時間をチェックする間隔は変更可能です。 プログラムをタイムアウト値よりも大幅に長い時間実行してから終了できます。 |
注意: PL/SQLの使用に関して考慮する必要があるTimesTen接続属性は、他にもあります。 それらの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』の次に示す項を参照してください。
|
この項の以降の部分では、PL/SQL接続属性の設定と変更の例をいくつか示します。
例7-1 デフォルトのPL/SQL接続属性によるデータベースの作成
この例では、PL/SQL接続属性を指定しないでデータベースを作成します。 (データベースを作成できるのはインスタンス管理者のみであることに注意してください。)
サンプルodbc.ini
:
[pldef]
Driver=path/libtten.so
Datastore=/scratch/user/pldef
DatabaseCharacterSet=US7ASCII
データベースpldef
に接続します。
$ ttIsql pldef
Copyright (c) 1996-2009, Oracle. All rights reserved.
Type ? or "help" for help, type "exit" to quit ttIsql.
connect "DSN=pldef";
Connection successful: DSN=pldef;UID=user;DataStore=/scratch/user/pldef;Database
CharacterSet=US7ASCII;ConnectionCharacterSet=US7ASCII;DRIVER=path/libtten.so;
TypeMode=0;
(Default setting AutoCommit=1)
ttConfiguration
組込みプロシージャをコールして、設定を表示します。これにより、デフォルトのPL/SQL設定が表示されます。
Command> call ttConfiguration; ... < ConnectionCharacterSet, US7ASCII > < ConnectionName, pldef > ... < DataBaseCharacterSet, US7ASCII > < DataStore, /scratch/user/pldef > ... < PLSCOPE_SETTINGS, IDENTIFIERS:NONE > < PLSQL, 1 > < PLSQL_CCFLAGS, <NULL> > < PLSQL_CODE_TYPE, INTERPRETED > < PLSQL_CONN_MEM_LIMIT, 100 > < PLSQL_MEMORY_ADDRESS, 0x10000000 > < PLSQL_MEMORY_SIZE, 32 > < PLSQL_OPTIMIZE_LEVEL, 2 > < PLSQL_TIMEOUT, 30 > ...
この例では、PLSQL=1
を指定して、PL/SQLがまだ有効になっていないデータベースへの最初の接続を確立します。 最初の接続であるため、TimesTenによってデータベースでPL/SQLが有効化されます。 サンプルodbc.ini
ファイルには、PLSQL_MEMORY_SIZE
およびPLSQL_MEMORY_ADDRESS
の設定も含まれています。
サンプルodbc.ini
:
[plsql0]
Driver=path/libtten.so
Datastore=/scratch/user/plsql0
DatabaseCharacterSet=US7ASCII
PLSQL=0
PLSQL_MEMORY_SIZE=40
PLSQL_MEMORY_ADDRESS=20000000
PLSQL=1
を指定してplsql0
データベースに接続します。
$ ttisql
Copyright (c) 1996-2009, Oracle. All rights reserved.
Type ? or "help" for help, type "exit" to quit ttIsql.
Command> connect "DSN=plsql0;PLSQL=1";
Connection successful: DSN=plsql0;UID=user;DataStore=/scratch/user/plsql0;
DatabaseCharacterSet=US7ASCII;ConnectionCharacterSet=US7ASCII;DRIVER=path
/libtten.so;TypeMode=0;PLSQL_MEMORY_SIZE=40;PLSQL_MEMORY_ADDRESS=20000000;
(Default setting AutoCommit=1)
ttConfiguration
組込みプロシージャをコールして、PLSQL=1
とodbc.ini
内のPL/SQL設定を確認します。
Command> call ttConfiguration; ... < ConnectionCharacterSet, US7ASCII > < ConnectionName, plsql0 > ... < DataBaseCharacterSet, US7ASCII > < DataStore, /scratch/user/plsql0 > ... < PLSCOPE_SETTINGS, IDENTIFIERS:NONE > < PLSQL, 1 > < PLSQL_CCFLAGS, <NULL> > < PLSQL_CODE_TYPE, INTERPRETED > < PLSQL_CONN_MEM_LIMIT, 100 > < PLSQL_MEMORY_ADDRESS, 0x20000000 > < PLSQL_MEMORY_SIZE, 40 > < PLSQL_OPTIMIZE_LEVEL, 2 > < PLSQL_TIMEOUT, 30 > ...
例7-3 ALTER SESSIONを使用した属性設定の変更
この例では、ALTER SESSION文を使用してPL/SQL接続属性を変更します。具体的には、PLSCOPE_SETTINGS
、PLSQL_OPTIMIZE_LEVEL
およびPLSQL_CONN_MEM_LIMIT
の設定を変更します。 次に、ttConfiguration
組込みプロシージャをコールして、新しい値を表示します。
Command> ALTER SESSION SET PLSCOPE_SETTINGS = "IDENTIFIERS:ALL"; Session altered. Command> ALTER SESSION SET PLSQL_OPTIMIZE_LEVEL=3; Session altered. Command> ALTER SESSION SET PLSQL_CONN_MEM_LIMIT=200; Session altered. Command> call ttconfiguration; ... < PLSCOPE_SETTINGS, IDENTIFIERS:ALL > ... < PLSQL_CONN_MEM_LIMIT, 200 > ... < PLSQL_OPTIMIZE_LEVEL, 3 > ...
次に、PLSQL_TIMEOUT
接続属性を20秒に設定します。 無限にループするプログラムを実行しようとすると、20秒経過後に実行が終了し、TimesTenによってエラーが戻されます。
Command> ALTER SESSION SET PLSQL_TIMEOUT = 20; Session altered. Command> DECLARE v_timeout NUMBER; > BEGIN > LOOP > v_timeout := 0; > EXIT WHEN v_timeout < 0; > END LOOP; > END; > / 8509: PL/SQL execution terminated; PLSQL_TIMEOUT exceeded The command failed.
例7-4 PL/SQLパフォーマンス統計情報の表示
ttPLSQLMemoryStats
組込みプロシージャを使用すると、PL/SQLライブラリ・キャッシュのパフォーマンスやアクティビティに関する統計情報が戻されます。 この例では、サンプル出力を示します。 このプロシージャの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のttPLSQLMemoryStatsに関する説明を参照してください。
Command> call ttplsqlmemorystats; < Gets, 0.000000e+00 > < GetHits, 0.000000e+00 > < GetHitRatio, 1.000000 > < Pins, 0.000000e+00 > < PinHits, 0.000000e+00 > < PinHitRatio, 1.000000 > < Reloads, 0.000000e+00 > < Invalidations, 0.000000e+00 > < CurrentConnectionMemory, 0.000000e+00 > 9 rows found.
注意: CurrentConnectionMemory は、「PL/SQL接続属性」に記載されているPLSQL_CONN_MEM_LIMIT 接続属性に関連付けられ、PL/SQLによって実際に取得されたヒープ・メモリーの量を示します。 |
既存のPL/SQLプログラムがあり、TimesTenでサポートされていないPL/SQL機能がそのプログラムで使用されているかどうかを確認するには、ttSrcScan
コマンドライン・ユーティリティを使用して、プログラムにサポートされていないファンクション、パッケージ、データ型、データ型コード、属性、モードおよび定数がないかスキャンします。 このユーティリティは、TimesTenまたはOracleをインストールせずに実行でき、TimesTenでサポートされているプラットフォームで実行されるスタンドアロン・ユーティリティです。 入力としてソース・コード・ファイルが読み取られ、出力としてHTMLおよびテキスト・ファイルが作成されます。 サポートされていないアイテムが見つかった場合、それらのアイテムはログに記録され、代替アイテムが提案されます。 ttSrcScan
実行可能ファイルは、TimesTenインストールのquickstart/sample_util
ディレクトリにあります。
スキャンするプログラムの入力ファイルまたはディレクトリ、およびttSrcScan
レポートの出力ディレクトリを指定します。 その他のオプションも使用できます。 詳細は、sample_util
ディレクトリにあるREADMEファイルを参照してください。
データベースでPL/SQLを有効にすると、Oracle TimesTen In-Memory Databaseによって提供パッケージがインストールされます。 TimesTenの提供パッケージのリストを表示するには、次の例に示すように、SYSが所有する、オブジェクトのシステム・ビューALL_PROCEDURESを使用します。
Command> select distinct object_name from all_procedures where owner='SYS'; < DBMS_LOCK > < DBMS_OUTPUT > < DBMS_PREPROCESSOR > < DBMS_RANDOM > < DBMS_SQL > < DBMS_STANDARD > < DBMS_SYS_ERROR > < DBMS_UTILITY > < PLITBLM > < STANDARD > < SYS_STUB_FOR_PURITY_ANALYSIS > < UTL_FILE > < UTL_RAW > < UTL_RECOMP > < TT_DB_VERSION > < UTL_IDENT > 16 rows found.
TimesTenにおける提供パッケージの詳細は、第9章「TimesTenが提供するPL/SQLパッケージ」を参照してください。
注意: 他のALL_*システム・ビューと同様に、ALL_PROCEDURESシステム・ビューに対するSELECT権限は、すべてのユーザーに割り当てられています。 |