ヘッダーをスキップ
Oracle TimesTen In-Memory Database PL/SQL開発者ガイド
リリース11.2.1
B56057-01
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

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

Oracle TimesTen In-Memory Databaseでは、PL/SQLがシームレスにデータベースに統合されます。 TimesTenでPL/SQLを簡単に管理したり、環境に固有の接続属性を設定できます。 短時間でPL/SQLをTimesTen環境で使用できるようになります。

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

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

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

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

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

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


注意:

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

PLSQL接続属性の理解

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がTimesTenデータベースで有効になっているかどうかの確認

データベースにおける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 >
    ...
    

PL/SQL接続属性

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

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

表7-1 PL/SQL接続属性

属性 概要

PLSQL

初期接続属性

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

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

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

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

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

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

PLSQL_MEMORY_ADDRESS

初期接続属性

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

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

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

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

PLSQL_MEMORY_SIZE

初期接続属性

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

PL/SQL共有メモリー・セグメントに割り当てられるメモリーのサイズをMB単位で指定します。 このメモリーは、データベース出力などの実行時データを格納するためではなく、直前に実行されたPL/SQLコードとPL/SQLオブジェクトに関するメタデータを保持するために使用されるメモリーです。

『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』のPLSQL_MEMORY_SIZEに関する説明にも、この設定に関連するチューニングの情報があります。

デフォルト: 32MB

重要: 8MB以上の値を使用します。

PLSCOPE_SETTINGS

一般接続属性

必要な権限: なし

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

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

デフォルト: IDENTIFIERS:NONE

PLSQL_CCFLAGS

一般接続属性

必要な権限: なし

この属性で問合せディレクティブを設定して、PL/SQLユニットの条件付きコンパイルを制御できます。これにより、確認する条件に応じて、PL/SQLプログラムの機能をカスタマイズできます。 このことは、特に、アプリケーションが複数のデータベース環境にデプロイされる場合に有効です。 考えられる用途としては、デバッグ機能やトレース機能のアクティブ化、データベースのバージョンに基づいた機能設定などがあります。 次に例を示します。

PLSQL_CCFLAGS='DEBUG:TRUE, PRODUCTION:YES'

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

% cc -DEBUG=TRUE -DPRODUCTION=YES ...

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

この機能の詳細は、『Oracle Database PL/SQL言語リファレンス』の条件付きコンパイルに関する説明を参照してください。 「UTL_IDENT」にも条件付きコンパイルの例があります。ただし、PLSQL_CCFLAGSは使用されていません。

デフォルト: NULL

PLSQL_CONN_MEM_LIMIT

一般接続属性

必要な権限: なし

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()によって実際に取得したプロセス・ヒープ・メモリーの量を示します。 例7-4「PL/SQLパフォーマンス統計情報の表示」も参照してください。

PLSQL_OPTIMIZE_LEVEL

一般接続属性

必要な権限: なし

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

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

デフォルト: 2

PLSQL_TIMEOUT

一般接続属性

必要な権限: なし

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

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

デフォルト: 30秒

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



注意:

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接続属性の設定と変更の例をいくつか示します。

例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 >
...

例7-2 初回接続時のPL/SQLの有効化

この例では、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=1odbc.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_SETTINGSPLSQL_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によって実際に取得されたヒープ・メモリーの量を示します。

ttSrcScanユーティリティ

既存の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権限は、すべてのユーザーに割り当てられています。