ヘッダーをスキップ
Oracle® TimesTen In-Memory Database PL/SQL開発者ガイド
11gリリース2 (11.2.2)
B66723-04
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

6 PL/SQLのインストールおよび環境

この章では、TimesTenデータベースでのPL/SQLの管理方法、接続属性の設定方法、およびシステム提供のパッケージの表示方法について説明します。また、TimesTenでサポートされていないPL/SQL機能の確認にん使用できるttSrcScanユーティリティについても説明します。この章の終わりには、プロシージャを設定する際に役立つ例をまとめています。

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

PL/SQLがインストール済であること、およびTimesTenで有効になっているかどうかの確認

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

PL/SQLインストールおよびttmodinstallユーティリティ

TimesTenでは、デフォルトでPL/SQLがインストールされます。PL/SQLのインストールを選択しない場合(インストールをお薦めします)は、TimesTenのttmodinstallユーティリティを使用して、後からPL/SQLをインストールできます。詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のttmodinstallに関する説明を参照してください。


注意:

このユーティリティを実行できるのは、インスタンス管理者のみです。

PL/SQLがTimesTenデータベースで有効になっているかどうかの確認

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.
    

PL/SQL接続属性

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

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

表6-1 PL/SQL接続属性

属性 概要

PLSQL

初期接続属性

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

データベースでPL/SQLを有効にします。

PLSQL=1の場合、PL/SQLは有効になります。

PLSQL=0の場合、PL/SQLは無効になります。

データベースを最初に作成するとき、または、データベースに初めて接続するときに、PL/SQLを有効にすることができます。PL/SQLを一度有効にすると、無効にすることができなくなります。

デフォルト: 1(PL/SQLがサポートされているプラットフォームの場合)

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に関する説明を参照してください。

PLSCOPE_SETTINGS

一般接続属性

必要な権限: なし

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

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

デフォルト: IDENTIFIERS:NONE

PLSQL_CCFLAGS

一般接続属性

必要な権限: なし

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

PLSQL_CCFLAGS='DEBUG:TRUE'

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

% cc -DEBUG=TRUE ...

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

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

デフォルト: NULL

PLSQL_CONN_MEM_LIMIT

一般接続属性

必要な権限: なし

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の接続が切断されると、メモリーは解放されます。

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

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

デフォルト: 100MB

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

PLSQL_OPTIMIZE_LEVEL

一般接続属性

必要な権限: なし

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

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

デフォルト: 2

PLSQL_TIMEOUT

一般接続属性

必要な権限: なし

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

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

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

デフォルト: 30秒

注意:

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

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



注意:

PL/SQLで考慮する必要があるTimesTen接続属性は、他にもあります。それらの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』の次に示す項を参照してください。
  • データベースでPL/SQLが有効になっている場合、DDLCommitBehavior一般接続属性の値は0である必要があります。「DDLCommitBehavior」を参照してください。

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

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


この項の以降の部分では、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_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によって実際に取得されたヒープ・メモリーの量を示します。

ttSrcScanユーティリティ

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

スキャンするプログラムの入力ファイルまたはディレクトリ、およびttSrcScanレポートの出力ディレクトリを指定します。その他のオプションも使用できます。詳細は、sample_utilディレクトリにあるREADMEファイルを参照してください。