Teradata JDBC Driverの使用

この章では、Javaプログラム上でTeradata JDBC Driverソフトウェアを使用する方法、およびサイトで実行されているTeradata JDBC Driverの以下の手順について説明します。

SQLパッケージのインポートとTeradata JDBC Driverのロード

このセクションでは、Javaスタンドアロン アプリケーションがTeradata JDBC Driverを使用するために必要な手順をリストします。

この情報は、WebSphereやWebLogicなどのアプリケーションサーバー環境に展開されたJ2EEアプリケーションには適用されません。アプリケーション サーバーは、classpathを定義する独自のメカニズムを提供し、アプリケーション サーバーにJDBCドライバ クラスのロードの責任があります。

  1. Teradata JDBC Driverのjarファイルを開発システムにダウンロードまたはコピーする必要があります。

    Teradata JDBC Driver 16.20.00.11以降では、下記の1つのjarファイルが必要となります。
    Teradata JDBC Driverの古いバージョンでは、下記の2つのjarファイルが必要となります。
  2. Teradata JDBC Driver 16.20.00.11以降では、下記の1つのjarファイルがCLASSPATHに記述されている必要があります。
    Teradata JDBC Driverの古いバージョンでは、下記の2つのjarファイルがCLASSPATHに記述されている必要があります。
  3. Javaプログラムの先頭付近に次の1行を挿入します。

    import java.sql.*;

  4. 次の文を使用して、Teradata JDBC Driverをロードし、登録します。

    Class.forName("com.teradata.jdbc.TeraDriver");

データベース接続の作成

Javaプログラムからデータベースにアクセスする場合は、java.sql.DriverManager.getConnectionメソッドを使用して、DriverManagerから新しいjava.sql.Connectionオブジェクトを取得します。

java.sql.DriverManager.getConnectionメソッドでは、引数としてURL文字列を使用します。URL文字列によって、データベースが識別されます。DriverManagerは、URLの接頭辞"jdbc:teradata://"を使用してConnectionオブジェクトにTeradata JDBC Driverを選択します。

説明

Teradata JDBC Driverの接続URLの例

接続パラメータなし

jdbc:teradata://DatabaseServerName

 

DatabaseServerNameはデータベースのホスト名です。

単一の接続パラメータ

jdbc:teradata://DatabaseServerName/ParameterName=Value

 

接続パラメータは任意選択です。ParameterNameと最初のDatabaseServerNameはスラッシュ文字で区切ります。

複数の接続パラメータ

jdbc:teradata://DatabaseServerName/ParameterName=Value,ParameterName=Value

 

複数の接続パラメータを指定する場合は、パラメータをカンマで区切ります。値にカンマが含まれる場合は、その値を単一引用符で囲みます。

 

ParameterNameは接続パラメータで、Valueはパラメータの値になります。これらの説明については、次の表を参照してください。

次に示す表は、Teradata JDBC Driverの接続URLパラメータと値の一覧です。Teradata JDBC Driver 16.00.00.28以降では、Teradata JDBC DriverはURL接続パラメータを検証して、無効なパラメータ名および無効な値にSQLExceptionをスローします。

パラメータ

説明

ACCOUNT

データベース ユーザーに定義されているデフォルトのアカウント文字列を上書きするアカウント文字列を指定します。アカウントは、ワークロード管理とリソース使用量モニターのためにデータベースが使用します。

Teradata Database 14.10以降、アカウント文字列の最大長さは128文字になっています。Teradata Database 14.0以前の場合のアカウント文字列の最大長さは30文字です。

このパラメータはSQL接続で使用できます。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、Teradata JDBC Driver 15.10.00.08以降のJDBC FastExport、JDBC FastLoad、およびJDBC FastLoad CSV接続で使用できます。

このパラメータはJDBC Monitor接続で使用できます。

このパラメータはRaw接続で使用できます。

BROWSER

LOGMECH=BROWSER接続パラメータで選択されたブラウザ認証用のブラウザを開くために、デフォルトのコマンドをオーバーライドするコマンドを指定します。

ブラウザ認証は、WindowsおよびmacOSでサポートされています。 ブラウザ認証は、他のオペレーティング システムではサポートされていません。

指定されたコマンドには、文字通りPLACEHOLDERとして指定されるプレースホルダー トークンが含まれている必要があります。Teradata JDBC Driverは、これをアイデンティティプロバイダの認証エンドポイントURLに置き換えます。PLACEHOLDERトークンでは大文字と小文字が区別されるため、大文字で指定する必要があります。

  • Windowsでは、BROWSER接続パラメータを省略した場合、デフォルトのコマンドはcmd /c start "title" "PLACEHOLDER"です。 Windowsコマンド構文では、引用符で囲まれたURLの前に引用符で囲まれたタイトルを付ける必要があります。
  • macOSでは、BROWSER接続パラメータを省略した場合、デフォルトのコマンドはopen PLACEHOLDERです。 macOSコマンド構文では、URLを引用符で囲むことはできません。

このパラメータは、Teradata JDBC Driver 17.10.00.01以降のSQL接続で使用できます。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、Teradata JDBC Driver 17.10.00.01以降のJDBC FastExport、JDBC FastLoad、およびJDBC FastLoad CSV接続で使用できます。

このパラメータは、Teradata JDBC Driver 17.10.00.01以降のJDBC Monitor接続で使用できます。

このパラメータは、Teradata JDBC Driver 17.10.00.01以降のRaw接続で使用できます。

BROWSER_TAB_TIMEOUT

ブラウザ認証が完了した後、ブラウザのタブを閉じるまでの待機時間を秒数で指定します。この動作はブラウザの制御下にあり、すべてのブラウザがブラウザ タブの自動終了をサポートしているわけではありません。通常、ログオンに使用したタブはいつまでも開いたままになりますが、2番目以降のタブは自動的に閉じられます。

BROWSER_TAB_TIMEOUT接続パラメータを省略した場合、デフォルトは5秒です。タブをすぐに閉じるには、0(ゼロ)を指定します。ブラウザ タブの自動終了をオフにするには、-1を指定します。

ブラウザ認証は、WindowsおよびmacOSでサポートされています。 ブラウザ認証は、他のオペレーティング システムではサポートされていません。

このパラメータは、Teradata JDBC Driver 17.20.00.09以降のSQL接続で使用できます。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、Teradata JDBC Driver 17.20.00.09以降のJDBC FastExport、JDBC FastLoad、およびJDBC FastLoad CSV接続で使用できます。

このパラメータは、Teradata JDBC Driver 17.20.00.09以降のJDBC Monitor接続で使用できます。

このパラメータは、Teradata JDBC Driver 17.20.00.09以降のRaw接続で使用できます。

BROWSER_TIMEOUT

Teradata JDBC Driverがブラウザ認証の完了を待機する秒数を指定します。BROWSER_TIMEOUT接続パラメータを省略した場合、デフォルトは180秒(3分)です。

ブラウザ認証は、WindowsおよびmacOSでサポートされています。 ブラウザ認証は、他のオペレーティング システムではサポートされていません。

このパラメータは、Teradata JDBC Driver 17.10.00.17以降のSQL接続で使用できます。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、Teradata JDBC Driver 17.10.00.17以降のJDBC FastExport、JDBC FastLoad、およびJDBC FastLoad CSV接続で使用できます。

このパラメータは、Teradata JDBC Driver 17.10.00.17以降のJDBC Monitor接続で使用できます。

このパラメータは、Teradata JDBC Driver 17.10.00.17以降のRaw接続で使用できます。

CHARSET

Teradata Databaseとの間で転送される文字データをエンコードおよびデコードする場合のセッション文字セットを指定します。以下のセッション文字セットがサポートされています。

  • ASCII
  • EBCDIC037_0E
  • EBCDIC273_0E
  • EBCDIC277_0E
  • HANGULEBCDIC933_1II
  • HANGULKSC5601_2R4
  • KANJIEBCDIC5026_0I
  • KANJIEBCDIC5035_0I
  • KANJIEUC_0U
  • KANJISJIS_0S
  • LATIN1_0A
  • LATIN9_0A
  • LATIN1252_0A
  • SCHEBCDIC935_2IJ
  • SCHGB2312_1T0
  • TCHBIG5_1R0
  • TCHEBCDIC937_3IB
  • UTF8
  • UTF16

デフォルト値はASCIIです。

Teradata Database V2R6.1およびTeradata JDBC Driver 3.3以降、KerberosまたはLightweight Directory Access Protocol(LDAP)認証でUTF16を使用できます。

このパラメータはSQL接続で使用できます。

このパラメータは、Javaストアド プロシージャのデフォルト接続で使用できますが、指定できるのは、ASCII、UTF8、またはUTF16のみです。

このパラメータは、JDBC FastExport接続とJDBC FastLoad接続で使用できます。

このパラメータは、JDBC FastLoad CSV接続で使用できますが、指定できるのはASCIIまたはUTF8のみです。

このパラメータはJDBC Monitor接続で使用できますが、指定できるのはMonitorのバージョンに応じて特定の文字セットに限られます。詳細は、「JDBC Monitor」を参照してください。

このパラメータはRaw接続で使用できます。

CHATTER

CHATTER値は、ON(デフォルト)またはOFFです。

  • ONに設定すると、JDBC FastLoadおよびJDBC FastLoad CSVは、小さなメッセージでデータベースにデータを送信します。この設定は、低遅延ネットワークを対象としています。
  • OFFに設定すると、JDBCFastLoadおよびJDBCFastLoad CSVは、大きなメッセージでデータベースにデータを送信します。この設定は、待ち時間の長いネットワークを対象としています。

CHATTER接続パラメータは、Teradata JDBC Driverバージョン15.00.00.16から15.10.0.24で使用できます。Teradata JDBC Driver 15.10.0.25以降、CHATTER接続パラメータは使用できなくなっており、MAX_MESSAGE_BODY接続パラメータと置き換えられています。

このパラメータは、SQL接続では使用できません。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、JDBC FastExport接続では使用できません。

このパラメータは、Teradata JDBC Driverバージョン15.00.00.16~15.10.0.24でのJDBC FastLoad接続とJDBC FastLoad CSV接続に使用できます。

このパラメータは、JDBC Monitor接続では使用できません。

このパラメータは、Raw接続では使用できません。

CLIENT_CHARSET

データベースとの間で転送される文字データをエンコードおよびデコードする場合のJava文字セットを指定します。このパラメータはTeradata JDBC Driver標準のTeradataセッション文字セットからJava文字セットへのマッピングを上書きします。

このパラメータはSQL接続で使用できます。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、JDBC FastExport接続とJDBC FastLoad接続で使用できます。

このパラメータは、JDBC FastLoad CSV接続では使用できません。

このパラメータは、JDBC Monitor接続では使用できません。

このパラメータは、Raw接続では使用できません。

注:  通常の使用には推奨されません。使用する場合は、自己責任となります。正しくないJava文字セットが指定されている場合は、データが破損します。この接続パラメータを使用する場合、Teradataではデータの忠実性や品質は保証されません。

COLUMN_NAME

ResultSetMetaDataのgetColumnNameメソッドとgetColumnLabelメソッドの動作を制御します。

  • COLUMN_NAME=OFF(デフォルト)と指定すると、ResultSetMetaData.getColumnNameメソッドはAS句名(可能な場合)、列名(可能な場合)、または列のタイトルを返し、ResultSetMetaData.getColumnLabelメソッドは列のタイトルを返します。
  • COLUMN_NAME=ONと指定すると、StatementInfoパーセル サポートが有効な場合、ResultSetMetaData.getColumnNameメソッドは列名(可能な場合)を返し、ResultSetMetaData.getColumnLabelメソッドはAS句(可能な場合)、列名(可能な場合)、または列のタイトルを返します。StatementInfoパーセル サポートが無効な場合、このオプションは効果がありません。

JDBCエスケープ関数{fn teradata_provide(request_scope_column_name_on)}{fn teradata_provide(request_scope_column_name_off)}は、特定のSQLリクエストの場合にCOLUMN_NAME接続パラメータよりも優先されます。

このパラメータは、Teradata JDBC Driver 16.00.00.28以降、SQL接続で使用できます。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、Teradata JDBC Driver 16.00.00.28以降、JDBC FastExport接続とJDBC FastLoad接続で使用できます。

このパラメータは、JDBC FastLoad CSV接続では使用できません。

このパラメータは、JDBC Monitor接続では使用できません。

このパラメータは、Raw接続では使用できません。

CONNECT_FAILURE_TTL

CONNECT_FAILURE_TTL=秒単位の有効期間(TTL)

このオプションを使用すると、Teradata JDBC Driverは最後に発生した接続失敗の時刻を、IPアドレス/ポートの組み合わせごとに記憶するようになります。さらに、Teradata JDBC Driverは、接続失敗の有効期間(CONNECT_FAILURE_TTL)の値で指定した秒数の間、接続に失敗したIPアドレス/ポートに対するそれ以降の接続の試行を回避します。

値を省略または0に設定すると、この機能は無効になります。

この機能に対する推奨値は、対象のデータベースの再始動にかかる時間の2分の1です。

このパラメータはSQL接続で使用できます。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、JDBC FastExport接続、JDBC FastLoad接続、およびJDBC FastLoad CSV接続で使用できます。

このパラメータはJDBC Monitor接続で使用できます。

このパラメータはRaw接続で使用できます。

注:  この機能は、TCPソケットの接続失敗には適用されますが、COP検出時のホスト名検索には適用されません。そのための接続パラメータ(COP_DISCOVERY_TTLなど)は必要ありません。これは、JVMの設定値を使用することで実現できます。Javaのセキュリティ プロパティのnetworkaddress.cache.negative.ttlを、このドキュメントのInetAddressのキャッシュ で説明するように設定します。

CONNECT_FUNCTION

データベースでこのセッションにログオン シーケンス番号(LSN)を割り当てるのか、このセッションに既存のLSNを関連付けるのかを指定します。

  • CONNECT_FUNCTION=0(デフォルト)と指定すると、このセッションはLSNを使用しません。
  • CONNECT_FUNCTION=1と指定すると、データベースはこのセッションにLSNを割り当てます。
  • CONNECT_FUNCTION = 2は、データベースがこのセッションを既存のLSNに関連付ける必要があることを指定します。このオプションでは、既存のLSNをLOGON_SEQUENCE_NUMBER接続パラメータで指定する必要があります。 データベースは、同じユーザーのセッションのみがLSNを共有することを許可します。

このパラメータはSQL接続で使用できます。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、JDBC FastExport接続、JDBC FastLoad接続、およびJDBC FastLoad CSV接続では使用できません。

このパラメータはJDBC Monitor接続で使用できます。

このパラメータはRaw接続で使用できます。

COP

COP検出を実行するかどうかを指定します。

  • COP=ON(デフォルト)と指定すると、Teradata JDBC DriverはCOP検出を実行します。
  • COP=OFFとするとCOP検出がオフになります。Teradata JDBC DriverによるCOP接尾辞の検索は実行されなくなり、指定したホスト名のみが使用されます。

このパラメータはSQL接続で使用できます。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、JDBC FastExport接続、JDBC FastLoad接続、およびJDBC FastLoad CSV接続で使用できます。

このパラメータはJDBC Monitor接続で使用できます。

このパラメータはRaw接続で使用できます。

COPLAST

COP検出で最後のCOPホスト名を特定する方法を指定します。

  • COPLAST=OFFと指定するか、COPLAST接続パラメータを省略するか、またはCOP=OFF接続パラメータでCOP検出を無効にすると、Teradata JDBC Driverはcoplastホスト名のDNS検索を実行しません。
  • COPLAST=ONと指定し、COP検出を有効にすると、Teradata JDBC Driverはまず、COP検出を実行する前に、coplastホスト名のDNS検索を実行して最後のCOPホスト名のIPアドレスを取得します。その後、COP検出中に、不明のCOPホスト名が検出されるか、IPアドレスがcoplastホスト名のIPアドレスと一致するCOPホスト名が検出されると、Teradata JDBC DriverはCOPホスト名の検索を停止します。

このパラメータは、Teradata JDBC Driver 16.00.00.28以降、SQL接続で使用できます。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、Teradata JDBC Driver 16.00.00.28以降のJDBC FastExport、JDBC FastLoad、およびJDBC FastLoad CSV接続で使用できます。

このパラメータは、Teradata JDBC Driver 16.00.00.28以降、JDBC Monitor接続で使用できます。

このパラメータは、Teradata JDBC Driver 16.00.00.28以降、Raw接続で使用できます。

DATABASE

DATABASE=デフォルト データベース名

データベース ユーザーに定義されているデフォルトのデータベースを上書きする、ログオン後に使用するデフォルトのデータベースを指定します。

このパラメータはSQL接続で使用できます。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、JDBC FastExport接続とJDBC FastLoad接続で使用できます。

このパラメータは、Teradata JDBC Driver 15.10.00.08以降、JDBC FastLoad CSV接続で使用できます。

このパラメータは、JDBC Monitor接続では使用できません。

このパラメータは、Raw接続では使用できません。

注:  DATABASE接続パラメータは、通常パスワードが失効しているユーザーに対して機能しますが、NEW_PASSWORD接続パラメータも指定されている必要があります。ただし、DATABASE接続パラメータは、NEW_PASSWORD接続パラメータが指定されていない場合、パスワードが失効しているユーザーに確立されている条件付き接続に対して効果がありません。この場合、アプリケーションは、MODIFY USER文を実行依頼して、ユーザーに新しいパスワードを割り当てることができます。新しいパスワードが設定されると、アプリケーションはDATABASE文を実行依頼して、接続のデフォルト データベースを変更できます。

DBS_PORT

非HTTPS接続用に指定されたTCP/IPポートでデータベースに接続します。デフォルトのポートは、データベースへの非HTTPS接続の場合は1025です。

このパラメータはSQL接続で使用できます。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、JDBC FastExport接続、JDBC FastLoad接続、およびJDBC FastLoad CSV接続で使用できます。

このパラメータはJDBC Monitor接続で使用できます。

このパラメータはRaw接続で使用できます。

DDSTATS

DDSTATS値は、ONまたはOFFです。

  • ONに設定されている場合、Teradata JDBC DriverのDatabaseMetaDataメソッドは、データ ディクショナリに対する各クエリーを実行する前にDIAGNOSTIC HELPSTATS ONを指定したEXPLAINコマンドを実行します。データベースがいずれかのCOLLECT STATSコマンドを推奨する場合、推奨されるそのコマンドはERRORロギング レベルで記録されます。推奨されるCOLLECT STATSコマンドは実行されません。データベース管理者はCOLLECT STATSコマンドを個別に実行する必要があります。DDSTATS=ONを指定すると、パフォーマンスが影響を受けます。DDSTATS=ONは単なるトラブルシューティング ツールであり、通常の実働使用には推奨されません。
  • OFF(デフォルト)に設定されている場合、Teradata JDBC DriverのDatabaseMetaDataメソッドはEXPLAINコマンドを実行しません。

このパラメータは、Teradata JDBC Driver 13.00.00.25以降、SQL接続で使用できます。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、Teradata JDBC Driver 13.00.00.25以降、JDBC FastExport接続とJDBC FastLoad接続で使用できます。

このパラメータは、JDBC FastLoad CSV接続では使用できません。

このパラメータは、JDBC Monitor接続では使用できません。

このパラメータは、Raw接続では使用できません。

ENCRYPTDATA

ENCRYPTDATA値は、ONまたはOFFです。

  • OFF(デフォルト)に設定すると、Teradata JDBC Driverとデータベース間で交換されるデータは暗号化されません。
  • ONに設定すると、Teradata JDBC Driverとデータベース間で交換されるデータが暗号化されます。 これにより、パフォーマンスは影響を受けますが、セキュリティが強化されます。

暗号化アルゴリズムはログオン メカニズムと関連しています。つまり、LOGMECH接続パラメータは、データが暗号化される場合にどの暗号化メソッドを使用するかを決定します。

このパラメータはSQL接続で使用できます。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、JDBC FastExport接続、JDBC FastLoad接続、およびJDBC FastLoad CSV接続で使用できます。

このパラメータはJDBC Monitor接続で使用できます。

このパラメータはRaw接続で使用できます。

注:  Teradata Database 14.10およびTeradata JDBC Driver 15.00.00.15以降、集中管理で必要とされる場合、またはアプリケーションでENCRYPTDATA=ON接続パラメータが指定される場合には、データが暗号化されます。集中管理により要求される暗号化は、ENCRYPTDATA=OFF接続パラメータより優先されます。

ERROR_QUERY_COUNT

JDBC FastLoad操作の後で、JDBC FastLoadがFastLoadエラー テーブル1のクエリーを実行する最大試行回数を指定します。

このパラメータを省略した場合、デフォルト値は21回です。

FastLoad操作の後で、データベースは拒否された行をエラー テーブルに格納します。拒否された行の数やデータベース システムのワークロードに応じて、エラー テーブルに行が格納されるまでに遅延が生じる可能性があります。JDBC FastLoadは、FastLoadエラー テーブル1から取得した情報を使用して、拒否された行をアプリケーションに対して示すBatchUpdateExceptionを作成します。

このパラメータは、SQL接続では使用できません。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、JDBC FastExport接続では使用できません。

このパラメータは、Teradata JDBC Driver 16.00.00.32以降、JDBC FastLoad接続で使用できます。

このパラメータは、JDBC FastLoad CSV接続では使用できません。

このパラメータは、JDBC Monitor接続では使用できません。

このパラメータは、Raw接続では使用できません。

ERROR_QUERY_INTERVAL

JDBC FastLoad操作の後でJDBC FastLoadがFastLoadエラー テーブル1のクエリーを実行する際の、再試行までの待機時間をミリ秒数で指定します。

このパラメータを省略した場合、デフォルト値は500ミリ秒です。

このパラメータは、SQL接続では使用できません。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、JDBC FastExport接続では使用できません。

このパラメータは、Teradata JDBC Driver 16.00.00.32以降、JDBC FastLoad接続で使用できます。

このパラメータは、JDBC FastLoad CSV接続では使用できません。

このパラメータは、JDBC Monitor接続では使用できません。

このパラメータは、Raw接続では使用できません。

ERROR_TABLE_1_SUFFIX

JDBC FastLoadおよびJDBC FastLoad CSVで作成されるFastLoadエラー テーブル1の名前の接尾辞を指定します。

このパラメータを省略した場合、デフォルトの接尾辞は_ERR_1です。

詳細については、JDBC FastLoad使用時の考慮事項およびJDBC FastLoad CSV使用時の考慮事項を参照してください。

このパラメータは、SQL接続では使用できません。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、JDBC FastExport接続では使用できません。

このパラメータは、Teradata JDBC Driver 16.00.00.31以降、JDBC FastLoad接続とJDBC FastLoad CSV接続で使用できます。

このパラメータは、JDBC Monitor接続では使用できません。

このパラメータは、Raw接続では使用できません。

ERROR_TABLE_2_SUFFIX

JDBC FastLoadおよびJDBC FastLoad CSVで作成されるFastLoadエラー テーブル2の名前の接尾辞を指定します。

このパラメータを省略した場合、デフォルトの接尾辞は_ERR_2です。

詳細については、JDBC FastLoad使用時の考慮事項およびJDBC FastLoad CSV使用時の考慮事項を参照してください。

このパラメータは、SQL接続では使用できません。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、JDBC FastExport接続では使用できません。

このパラメータは、Teradata JDBC Driver 16.00.00.31以降、JDBC FastLoad接続とJDBC FastLoad CSV接続で使用できます。

このパラメータは、JDBC Monitor接続では使用できません。

このパラメータは、Raw接続では使用できません。

ERROR_TABLE_DATABASE

JDBC FastLoadおよびJDBC FastLoad CSVで作成されるFastLoadエラー テーブルのデータベース名を指定します。

このパラメータを省略すると、デフォルトの動作では、ロードされる宛先テーブルと同じデータベースにFastLoadエラー テーブルが作成されます。

詳細については、JDBC FastLoad使用時の考慮事項およびJDBC FastLoad CSV使用時の考慮事項を参照してください。

このパラメータは、SQL接続では使用できません。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、JDBC FastExport接続では使用できません。

このパラメータは、Teradata JDBC Driver 16.00.00.31以降、JDBC FastLoad接続とJDBC FastLoad CSV接続で使用できます。

このパラメータは、JDBC Monitor接続では使用できません。

このパラメータは、Raw接続では使用できません。

FIELD_SEP

JDBC FastLoad CSVで使用する場合にのみフィールド分離文字を指定します。デフォルトの分離(区切り)文字は',' (カンマ)です。詳細は、セクション「JDBC FastLoad CSVによってサポートされるフィールド分離記号」を参照してください。

このパラメータは、SQL接続では使用できません。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、JDBC FastExport接続またはJDBC FastLoad接続では使用できません。

このパラメータは、Teradata JDBC Driver 13.00.00.26以降、JDBC FastLoad CSV接続で使用できます。

このパラメータは、JDBC Monitor接続では使用できません。

このパラメータは、Raw接続では使用できません。

FINALIZE_AUTO_CLOSE

FINALIZE_AUTO_CLOSE値は、OFF (デフォルト)またはONです。

  • OFF (デフォルト)に設定されている場合、Teradata JDBC Driverは、JDBC 4.0 API仕様の動作を提供し、ファイナライズ時にJDBCオブジェクトが自動的に閉じられないようにします。アプリケーションはJDBCオブジェクトを閉じたり、解放したりする責任があります。
  • ONに設定されている場合、Teradata JDBC DriverはJDBC 3.0 API仕様の動作を提供し、ファイナライズ時にJDBCオブジェクトを閉じます。これは、ガベージ コレクションのパフォーマンスに影響するため推奨されません。

Javaプログラミングのベスト プラクティスは、メソッドのファイナライズを完全に回避することです。ファイナライズ メソッドを使用する場合のベスト プラクティスは、その処理時間を最小化し、ネットワーク通信などの、時間がかかる可能性がある操作を回避することです。JDBC 3.0 API仕様は、JDBC Driverがガベージ コレクション時にJDBCオブジェクトを自動的に閉じることを要求していたため、これらのベスト プラクティスと矛盾していました。JDBC 4.0 API仕様では、ガベージ コレクション時にJDBCオブジェクトを自動で閉じるという要件が削除されているため、これらのベスト プラクティスと一致しています。

FINALIZE_AUTO_CLOSEをONに設定すると、ガベージ コレクションを無期限にブロックでき、Teradata JDBC Driverは、メッセージをデータベースに送信して応答スプールを閉じた後、データベースからの応答を受信しません。

このパラメータは、Teradata JDBC Driver 14.00.00.08以降、SQL接続で使用できます。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、Teradata JDBC Driver 14.00.00.08以降、JDBC FastExport接続とJDBC FastLoad接続で使用できます。

このパラメータは、JDBC FastLoad CSV接続では使用できません。

このパラメータは、JDBC Monitor接続では使用できません。

このパラメータは、Raw接続では使用できません。

FLATTEN

FLATTEN値は、OFF(デフォルト)またはONです。

  • OFF(デフォルト)に設定すると、複数のSQLExceptionがチェーンされ、getNextExceptionメソッドを使用してアクセスする必要があります。
  • ONに設定すると、単一のSQLExceptionが複数のSQLExceptionからのメッセージテキストを結合します。

このパラメータは、Teradata JDBC Driver 17.10.00.05以降のSQL接続で使用できます。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、Teradata JDBC Driver 17.10.00.05以降のJDBC FastExportおよびJDBC FastLoad接続で使用できます。

このパラメータは、Teradata JDBC Driver 17.10.00.05以降のJDBC FastLoad CSV接続で使用できます。

このパラメータは、Teradata JDBC Driver 17.10.00.05以降のJDBC Monitor接続で使用できます。

このパラメータは、Teradata JDBC Driver 17.10.00.05以降のRaw接続で使用できます。

GETURL_CREDENTIALS

GETURL_CREDENTIALS値は、OFF(デフォルト)またはONです。

  • OFF(デフォルト)に設定すると、DatabaseMetaData getURLメソッドで返されるURL文字列にUSER、PASSWORD、またはNEW_PASSWORD接続パラメータが含まれません。
  • ONに設定すると、DatabaseMetaData getURLメソッドはUSER、PASSWORD、およびNEW_PASSWORD接続パラメータ(可能な場合)が含まれたURL文字列を返します。接続の信頼証明が公開されてセキュリティ リスクが生じる可能性があるため、このオプションは注意して使用する必要があります。

このパラメータは、Teradata JDBC Driver 16.00.00.28以降、SQL接続で使用できます。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、Teradata JDBC Driver 16.00.00.28以降、JDBC FastExport接続とJDBC FastLoad接続で使用できます。

このパラメータは、JDBC FastLoad CSV接続では使用できません。

このパラメータは、JDBC Monitor接続では使用できません。

このパラメータは、Raw接続では使用できません。

GOVERN

GOVERN値は、ON (デフォルト)またはOFFです。

  • ON (デフォルト)に設定すると、Teradata Active System Management (TASM)はJDBCのFastLoad/FastExport操作を遅延できるようになります。TASMがデータベースで有効になっている場合、FastLoad/FastExport操作はTASMによって制御されます。これにより、TASMのルールに従ってFastLoad/FastExport操作が遅延されたり拒否されたりすることがあります。TASMが無効になっている場合、FastLoad/FastExport操作は遅延されませんが、FastLoad/FastExportの同時操作に許可されている最大数を超えると拒否されることがあります。この制限は、データベースで設定されます。
  • OFFに設定すると、TASMはJDBCのFastLoad/FastExport操作を遅延できなくなります。Teradata Database 14.10およびTeradata JDBC Driver 14.0.0.17以降、ワークロード定義またはスロットル ルールに対してTASMが有効な場合には、JDBC FastLoad/FastExport操作がエラー コード3151で拒否されます。Teradata JDBC Driverおよびデータベースの以前のバージョンでは、JDBCのFastLoad/FastExport操作は、FastLoad/FastExport操作がTASMの制限またはシステム制限を超えた場合に拒否されることはあっても、遅延されることはなくなります。制限を超えた場合は、SQLExceptionがエラー コード2633でスローされます。この動作は、TASMを無効にすると発生します。また、TASMが有効でもスロットル ルールを使用しているときには、この動作が発生します。ただし、GOVERNをOFFにしても、TASMが有効でワークロード定義が使用されているときには目的どおりの効果を示さないことがあります。
  GOVERN OFF GOVERN ON
スロットル ルール:JDBC FastLoad/FastExport Teradata Database 14.10およびTeradata JDBC Driver 14.0.0.17以降、エラー3151でフェイル ファスト動作を行ないます。以前のバージョンのデータベースおよびTeradata JDBC Driverでは効果がありません。 遅延が可能
スロットル ルール:サードパーティ(非Teradata) エラー2633によるフェイル ファスト動作が可能 効果なし
ワークロード定義:JDBC FastLoad/FastExport Teradata Database 14.10およびTeradata JDBC Driver 14.0.0.17以降、エラー3151でフェイル ファスト動作を行ないます。以前のバージョンのデータベースおよびTeradata JDBC Driverでは効果がありません。 遅延が可能
ワークロード定義:サードパーティ(非Teradata) フェイル ファスト動作は不可 効果なし

このパラメータは、SQL接続では使用できません。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、JDBC FastExport接続とJDBC FastLoad接続で使用できます。

このパラメータは、JDBC FastLoad CSV接続では使用できません。

このパラメータは、JDBC Monitor接続では使用できません。

このパラメータは、Raw接続では使用できません。

HTTPS_PORT

HTTPS/TLS接続用に指定されたTCP/IPポートでデータベースに接続します。データベースへのHTTPS/TLS接続のデフォルト ポートは443です。HTTPS/TLS接続は、Teradata JDBC Driver 17.10.00.07およびTeradata Advanced SQL Engine 16.20.53.30以降で使用できます。

このパラメータは、Teradata JDBC Driver 17.10.00.07以降のSQL接続で使用できます。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、Teradata JDBC Driver17.10.00.07以降のJDBC FastExport、JDBC FastLoad、およびJDBC FastLoad CSV接続で使用できます。

このパラメータは、Teradata JDBC Driver 17.10.00.07以降のJDBC Monitor接続で使用できます。

このパラメータは、Teradata JDBC Driver 17.10.00.07以降のRaw接続で使用できます。

HTTPS_PROXY

指定されたプロキシ サーバーを、データベースおよびアイデンティティプロバイダのエンドポイントへのHTTPS/TLS接続に使用します。

プロキシ サーバーは、http://で始まり、コロン:とポート番号を含むURLで指定します。 例: HTTPS_PROXY=http://proxy.domain.com:3128

ドライバは、非TLS HTTP 接続を使用してプロキシ サーバーに接続し、HTTP CONNECTメソッドを使用して宛先へのHTTPS/TLS接続を確立します。

このパラメータを省略した場合、Teradata JDBC Driver 20.00.00.12以降のデフォルト動作では、-Dhttps.proxyHost=hostnameおよび-Dhttps.proxyPort=portコマンドライン オプションで指定されたJavaシステムのプロキシ設定が使用されます。

このパラメータは、Teradata JDBC Driver 20.00.00.12以降のSQL接続で使用できます。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、Teradata JDBC Driver 20.00.00.12以降のJDBC FastExport、JDBC FastLoad、およびJDBC FastLoad CSV接続で使用できます。

このパラメータは、Teradata JDBC Driver 20.00.00.12以降のJDBC Monitor接続で使用できます。

このパラメータは、Teradata JDBC Driver 20.00.00.12以降のRaw接続で使用できます。

HTTPS_PROXY_PASSWORD

HTTPS_PROXYパラメータで識別されるプロキシ サーバーのプロキシ サーバーのパスワードを指定します。このパラメータは、HTTPS_PROXYパラメータとの組み合わせでのみ指定できます。

このパラメータを省略すると、HTTPS_PROXYパラメータで識別されるプロキシ サーバーにプロキシ サーバーのパスワードは提供されません。

このパラメータは、Teradata JDBC Driver 20.00.00.12以降のSQL接続で使用できます。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、Teradata JDBC Driver 20.00.00.12以降のJDBC FastExport、JDBC FastLoad、およびJDBC FastLoad CSV接続で使用できます。

このパラメータは、Teradata JDBC Driver 20.00.00.12以降のJDBC Monitor接続で使用できます。

このパラメータは、Teradata JDBC Driver 20.00.00.12以降のRaw接続で使用できます。

HTTPS_PROXY_USER

HTTPS_PROXYパラメータで識別されるプロキシ サーバーのユーザー名を指定します。このパラメータは、HTTPS_PROXYパラメータとの組み合わせでのみ指定できます。

このパラメータを省略すると、HTTPS_PROXYパラメータで識別されるプロキシ サーバーにプロキシ サーバーのユーザー名は提供されません。

このパラメータは、Teradata JDBC Driver 20.00.00.12以降のSQL接続で使用できます。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、Teradata JDBC Driver 20.00.00.12以降のJDBC FastExport、JDBC FastLoad、およびJDBC FastLoad CSV接続で使用できます。

このパラメータは、Teradata JDBC Driver 20.00.00.12以降のJDBC Monitor接続で使用できます。

このパラメータは、Teradata JDBC Driver 20.00.00.12以降のRaw接続で使用できます。

LITERAL_UNDERSCORE

多くのDatabaseMetaDataメソッドには、オブジェクト名を照合するLIKE予測可能パターンを指定するための引数があります。これらのメソッド引数には、パターンschemaPatternなど、tableNamePatternという単語で終わる名前が付いています。

パターン内では、パーセント符号文字" % "が0個以上の任意の文字に相当するワイルドカードとなり、下線文字" _ "が任意の1文字に相当するワイルドカードとなります。オブジェクト名に含まれる文字通りのワイルドカード文字を照合するには、ワイルドカード文字をバックスラッシュ文字" \ "でエスケープ(直前に挿入)する必要があります。

LITERAL_UNDERSCORE=ONとすると、DatabaseMetaDataメソッドのパターン引数に含まれるエスケープされていないすべての下線文字が自動的にエスケープされます。デフォルト値はOFFです。

このパラメータは、Teradata JDBC Driver 15.10.00.14以降、SQL接続で使用できます。

このパラメータは、Teradata Database 16.0以降、Javaストアド プロシージャのデフォルト接続で使用できます。

このパラメータは、Teradata JDBC Driver 15.10.00.14以降、JDBC FastExport接続とJDBC FastLoad接続で使用できます。

このパラメータは、JDBC FastLoad CSV接続では使用できません。

このパラメータは、JDBC Monitor接続では使用できません。

このパラメータは、Raw接続では使用できません。

LOB_SUPPORT

LOB_SUPPORT=OFFとすると、LOBサポートと関連機能が無効になります。

LOB_SUPPORT=ON(デフォルト)とすると、ラージ オブジェクト(LOB)サポートと関連機能のコレクションが有効になります。アプリケーションで次の処理を行う場合は、LOB_SUPPORTを有効にする必要があります。

  • LOBデータの選択または挿入
  • スクロール可能結果セットの使用
  • 更新可能結果セットの使用

LOB_SUPPORTをON(デフォルト)にすると、アプリケーションでは、データベースからの開かれた応答の数が16に制限されます。データベース エラー3130 "応答制限超過"が発生した場合は、「LOBの処理」を参照してください。

LOB_SUPPORTをOFFにし、続いてスクロール可能な結果セットまたは更新可能な結果セットを使用しようとすると、ドライバはその結果セットを順方向専用(スクロール可能な結果セット)または読取り専用(更新可能な結果セット)にダウングレードします。さらに、ダウングレードであることを示すSQLWarningが返されます。

このパラメータはSQL接続で使用できます。

このパラメータはJavaストアド プロシージャのデフォルト接続で使用できます。

このパラメータは、JDBC FastExport接続とJDBC FastLoad接続で使用できます。

このパラメータは、JDBC FastLoad CSV接続では使用できません。

このパラメータは、JDBC Monitor接続では使用できません。

このパラメータは、Raw接続では使用できません。

LOB_TEMP_TABLE

以下の列を含むテーブルの名前を指定します。id integer、bval blob、cval clob

ユーザーまたはアプリケーションは、事前に表を作成しておく必要があります。Teradata JDBC Driverによって、その表が自動的に作成されることはありません。詳細については、「更新可能LOB」を参照してください。

このパラメータはSQL接続で使用できます。

このパラメータは、Teradata Database 16.0以降、Javaストアド プロシージャのデフォルト接続で使用できます。

このパラメータは、JDBC FastExport接続とJDBC FastLoad接続で使用できます。

このパラメータは、JDBC FastLoad CSV接続では使用できません。

このパラメータは、JDBC Monitor接続では使用できません。

このパラメータは、Raw接続では使用できません。

LOG

接続のロギング レベル(詳細度)を指定します。ロギングは常に有効です。ロギング レベルは、次のリストの順に簡潔から詳細になります。

  • LOG=ERRORは、接続のエラー メッセージをSystem.outに出力します。これはデフォルト値です。
  • LOG=TIMINGは、接続のエラーと経過時間のメッセージをSystem.outに出力します。
  • LOG=INFOは、接続のエラーと経過時間、情報のメッセージをSystem.outに出力します。
  • LOG=DEBUGは、接続のエラーと経過時間、情報、デバッグのメッセージをSystem.outに出力します。このパラメータ値は、Java外部ストアド プロシージャのデフォルト接続用にサポートされています。

このパラメータはSQL接続で使用できます。

このパラメータはJavaストアド プロシージャのデフォルト接続で使用できます。

このパラメータは、JDBC FastExport接続、JDBC FastLoad接続、およびJDBC FastLoad CSV接続で使用できます。

このパラメータはJDBC Monitor接続で使用できます。

このパラメータはRaw接続で使用できます。

LOGDATA

セキュア トークン、識別名、またはドメイン/レルム名など、ログオン メカニズムで必要な追加情報を指定します。LOGDATAの値は、各ログオン メカニズムに固有の値です。LOGDATAは、TD2メカニズムでは使用されません。

  • JWTメカニズムのLOGDATAには、token=を含め、その後にJSON Webトークンを含めます。例:

    LOGDATA=token=dHkiOiJKV1QiLCJoI2tGIS42 ...

  • KRB5メカニズムには、Kerberosのユーザー名、インスタンス、レルム、およびパスワードを含めることができます。使用するかどうかはオプションで、カレント ユーザーはこの情報なしでログオンできます。シーケンス@@は、常にパスワードの前に来ます。例:

    LOGDATA=user1@ESDOM.ESDEV.TDAT@@mypassword

  • LDAPメカニズムのLOGDATAには、スペース、カンマ、および単一引用符を含めることができます。JDBC接続URLのLDAPでこのパラメータを指定する場合は、LOGDATAパラメータを単一引用符で囲む必要があります。引用符で囲まれた文字列内では、単一引用符を二重に使用して単一引用符のインスタンスを表すことができます。DataSourceでこのパラメータを指定する場合、特別な処理は必要ありません。例:

    LOGDATA='authcid=username password=userpassword'

    または

    LOGDATA=username@@userpassword

ユーザー名がLOGDATAパラメータで指定されている場合、DriverManager.getConnectionメソッドを使用してユーザー名を指定したり、USER接続パラメータを使用したりしないでください。

パスワードがLOGDATAパラメータで指定されている場合、DriverManager.getConnectionメソッドを使用してパスワードを指定したり、PASSWORD接続パラメータを使用したりしないでください。

このパラメータはSQL接続で使用できます。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、JDBC FastExport接続、JDBC FastLoad接続、およびJDBC FastLoad CSV接続で使用できます。

このパラメータはJDBC Monitor接続で使用できます。

このパラメータはRaw接続で使用できます。

LOGMECH

接続の認証および暗号化機能を決定するログオン メカニズムを指定します。 ログオン メカニズムの詳細については、「Teradata Vantage™ セキュリティ管理リファレンス」を参照してください。

  • LOGMECH=TD2とすると、Teradata Method 2が使用される
  • LOGMECH = BROWSERは、Teradata Advanced SQL Engine 17.10およびTeradata JDBC Driver 17.10.00.01以降で使用可能なブラウザ認証を使用します。
  • LOGMECH = JWTはJSON Web Tokenを使用します。これは、Teradata Advanced SQL Engine 16.20およびTeradata JDBC Driver 16.20.00.07以降で使用できます。
  • LOGMECH=KRB5とすると、Kerberos V5が使用される
  • LOGMECH=LDAPとすると、Lightweight Directory Access Protocolが使用される
  • LOGMECH=TDNEGOとすると、Teradata Database 15.10およびTeradata JDBC Driver 15.10.00.31以降に使用可能になった適切なログオン メカニズムが自動的に選択される

LOGMECHパラメータを省略すると、Teradata JDBC Driverはローカルのデフォルト メカニズムを使用します。ローカルのデフォルト メカニズムが定義されていない場合、Teradata JDBC Driverは、データベースによって指定されたデフォルトのメカニズムを使用します。

環境によっては、使用できないログオン メカニズムもあります。使用環境で使用できないログオン メカニズムを指定すると、JDBCの接続の試行に失敗し、SQLExceptionがスローされます。

このパラメータはSQL接続で使用できます。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、JDBC FastExport接続、JDBC FastLoad接続、およびJDBC FastLoad CSV接続で使用できます。

このパラメータはJDBC Monitor接続で使用できます。

このパラメータはRaw接続で使用できます。

JWTメカニズムはパスワードなしで使用されます。 KRB5とLDAPのメカニズムはパスワードなしで使用できます。 パスワードなしでログオンメカニズムを使用するには、ユーザーはLOGON WITH NULL PASSWORD権限を持っている必要があります。

LOGON_SEQUENCE_NUMBER

このセッションに関連付ける既存のログオン シーケンス番号(LSN)を指定します。

この接続パラメータは、CONNECT_FUNCTION=2接続パラメータと併用する必要があります。データベースでは、同じユーザーのセッションのみLSNを共有できます。

ログオン シーケンス番号は、ワークロード管理のために複数のセッションをグループ化します。ログオン シーケンス番号の使用は、3ステップのプロセスになっています。まず、CONNECT_FUNCTION=1を付けた制御セッションが確立され、このパラメータによりデータベースはログオン シーケンス番号を割り当てるように指示されます。次に、JDBCエスケープ関数Connection.nativeSQL{fn teradata_logon_sequence_number}メソッドを呼び出して、制御セッションからログオン シーケンス番号が取得されます。最後に、CONNECT_FUNCTION=2およびログオン シーケンス番号を持った、関連付けされたセッションが確立されます。

このパラメータはSQL接続で使用できます。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、JDBC FastExport接続、JDBC FastLoad接続、およびJDBC FastLoad CSV接続では使用できません。

このパラメータはJDBC Monitor接続で使用できます。

このパラメータはRaw接続で使用できます。

MAYBENULL

ResultSetMetaData.isNullableメソッドの動作を制御します。

  • MAYBENULL=OFF(デフォルト)と指定すると、StatementInfoパーセル サポートが有効な場合、ResultSetMetaData.isNullableメソッドの戻り値はデータベースで提供されるStatementInfoパーセルのIsNullableフィールドから決定されます。
  • MAYBENULL=ONと指定すると、StatementInfoパーセル サポートが有効な場合、ResultSetMetaData.isNullableメソッドの戻り値はデータベースで提供されるStatementInfoパーセルのMayBeNullフィールドから決定されます。

StatementInfoパーセル サポートが無効な場合、このパラメータは効果がありません。

JDBCエスケープ関数{fn teradata_provide(request_scope_maybenull_on)}は、特定のSQLリクエストの場合にMAYBENULL接続パラメータよりも優先されます。

このパラメータは、Teradata JDBC Driver 16.00.00.28以降、SQL接続で使用できます。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、Teradata JDBC Driver 16.00.00.28以降、JDBC FastExport接続とJDBC FastLoad接続で使用できます。

このパラメータは、JDBC FastLoad CSV接続では使用できません。

このパラメータは、JDBC Monitor接続では使用できません。

このパラメータは、Raw接続では使用できません。

MAX_MESSAGE_BODY

MAX_MESSAGE_BODY=サイズ(バイト)

最大応答メッセージ サイズ(バイト)を指定します。

この接続パラメータは、Teradata JDBC Driver 15.10.0.25から使用できます。

  • Teradata JDBC Driver 15.10.0.25およびTeradata Database 16.0以降、データベースのResponse Messageの最大サイズは16MBです。MAX_MESSAGE_BODY接続パラメータを省略すると、デフォルト値はResponse Messageの最大サイズである2MBになります。
  • Teradata JDBC Driver 15.10.0.25以降、Teradata Database 16.0より前のデータベースのリリースの場合、データベースのResponse Messageの最大サイズは1MBです。MAX_MESSAGE_BODY接続パラメータを省略すると、デフォルト値は最大応答メッセージ サイズである1MBになります。
  • Teradata JDBC Driver 15.10.0.25より前のTeradata JDBC Driverバージョンの場合、データベースのResponse Messageの最大サイズは1MBです。MAX_MESSAGE_BODY接続パラメータは、Teradata JDBC Driver 15.10.0.25より前のバージョンでは使用できません。

このパラメータはSQL接続で使用できます。

このパラメータは、Teradata Database 16.0以降、Javaストアド プロシージャのデフォルト接続で使用できます。

このパラメータは、JDBC FastExport接続、JDBC FastLoad接続、およびJDBC FastLoad CSV接続で使用できます。

このパラメータはJDBC Monitor接続で使用できます。

このパラメータは、Raw接続では使用できません。

MAX_MESSAGE_BODY接続パラメータを指定する場合、Response Messageの最大サイズは、MAX_MESSAGE_BODY値とデータベースのResponse Messageの最大サイズのうち、小さいほうの値になります。

注:  MAX_MESSAGE_BODYにデフォルトのResponse Messageの最大サイズより小さい値を指定すると、パフォーマンスが低下する可能性があります。このような設定は推奨されません。

MAX_MESSAGE_BODYにデフォルトのResponse Messageの最大サイズより大きい値を指定すると、パフォーマンスが向上する可能性がありますが、JVMメモリの消費量が増大します。十分な容量のJVMメモリを確保しておく必要があります。

NEW_PASSWORD

この接続パラメータにより、アプリケーションは、失効したパスワードを自動的に変更できるようになります。

あるユーザーに対して失効パスワードによって接続が確立されるとき、その接続は、条件付き接続となります。条件付き接続で実行依頼できるSQLリクエストは、ユーザーに新しいパスワードを割り当てるMODIFY USER文のみです。

各データベース ユーザーは、一度に1つの条件付き接続しか確立できません。ユーザーに新しいパスワードを実行依頼するためには、Basic Teradata Query (BTEQ)、SQL Assistant (SQLA)、Teradata JDBC DriverなどのすべてのTeradataクライアント製品およびインターフェースにわたって、そのユーザーに対して以前に確立されたすべての接続を終了する必要があります。

あるユーザーに対して失効パスワードによって接続が確立されると、NEW_PASSWORDパラメータの指定の有無により、以下のように動作が変わります。

  • このパラメータが指定されていて、空でないパスワードが設定されている場合 – Teradata JDBC Driverは自動的にMODIFY USER文をデータベースに送信して、ユーザーのパスワードを更新します。Connection.getWarningsメソッドは、Nullを返します。
  • このパラメータが指定されていません 場合 – Connection.getWarningsメソッドは、失効パスワードを示すデータベース エラー コード3032でSQLWarningを返します。アプリケーションは、MODIFY USER文を実行依頼して、ユーザーに新しいパスワードを割り当てることができます。

MODIFY USER文によって失効パスワードが正常に変更された後の接続は、条件付き接続ではなくなります。その接続は、通常どおりに使用できるようになります。

NEW_PASSWORD接続プロパティがアプリケーション サーバーのDataSourceに対して指定されていて、Teradata JDBC Driverが自動的に失効パスワードを変更する場合、アプリケーション サーバーのDataSource内で定義されている元のパスワードは更新されないことに注意してください。

アプリケーションは、以下のいずれかを実行できます。

  • 元のパスワードとNEW_PASSWORD値を同じにし、単一のDataSourceを使用できるようにする。
  • パスワードが相互に連鎖している循環する複数のDataSourceを定義し、各DataSourceのNEW_PASSWORD値が次のDataSourceのパスワードに一致するようにする。アプリケーションでは、どのDataSourceが現在のDataSourceであるかを追跡する必要があります。この手法は複雑ですが、アプリケーションとは別にDataSource定義内にパスワードのセットを指定し、パスワードの変更が必要なときにはデータベースから一元的に制御できるようになるというセキュリティが実現されます。

このパラメータはSQL接続で使用できます。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、JDBC FastExport接続とJDBC FastLoad接続で使用できます。

このパラメータは、JDBC FastLoad CSV接続では使用できません。

このパラメータは、JDBC Monitor接続では使用できません。

このパラメータは、Raw接続では使用できません。

OIDC_SCOPE

ブラウザ認証に使用するOpenID Connect (OIDC)スコープを指定します。OIDC_SCOPE接続パラメータを省略した場合、デフォルトのスコープは openid です。Teradata JDBC Driver 20.00.00.10およびTeradata Database 17.20.03.11以降では、デフォルトのスコープはデータベースのTdgssUserConfigFile.xmlファイルで、IdPConfig要素のScope属性を使用して指定できます。

ブラウザ認証は、WindowsおよびmacOSでサポートされています。 ブラウザ認証は、他のオペレーティング システムではサポートされていません。

このパラメータは、Teradata JDBC Driver 17.10.00.25以降のSQL接続で使用できます。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、Teradata JDBC Driver 17.10.00.25以降のJDBC FastExport、JDBC FastLoad、およびJDBC FastLoad CSV接続で使用できます。

このパラメータは、Teradata JDBC Driver 17.10.00.25以降のJDBC Monitor接続で使用できます。

このパラメータは、Teradata JDBC Driver 17.10.00.25以降のRaw接続で使用できます。

OIDC_TOKEN

ブラウザ認証に使用するOIDCトークンの種類を指定します。OIDC_TOKEN 接続パラメータを省略すると、access_tokenが使用されます。OIDC_TOKEN=id_tokenを指定すると、access_tokenの代わりにid_tokenが使用されます。

ブラウザ認証は、WindowsおよびmacOSでサポートされています。 ブラウザ認証は、他のオペレーティング システムではサポートされていません。

このパラメータは、Teradata JDBC Driver 17.10.00.25以降のSQL接続で使用できます。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、Teradata JDBC Driver 17.10.00.25以降のJDBC FastExport、JDBC FastLoad、およびJDBC FastLoad CSV接続で使用できます。

このパラメータは、Teradata JDBC Driver 17.10.00.25以降のJDBC Monitor接続で使用できます。

このパラメータは、Teradata JDBC Driver 17.10.00.25以降のRaw接続で使用できます。

PARTITION

接続用のデータベース パーティションを指定します。

  • PARTITION=DBC/SQL(デフォルト) - Teradata JDBC Driverに対して、標準のDBC/SQLパーティションに接続するように指示します。
  • PARTITION=DBC/SQL - Teradata JDBC Driverに対して、モニター パーティションに接続するように指示します。

このパラメータはSQL接続で使用できます。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、JDBC FastExport接続、JDBC FastLoad接続、またはJDBC FastLoad CSV接続では使用できません。

このパラメータはJDBC Monitor接続で使用できます。

このパラメータはRaw接続で使用できます。

PASSWORD

DriverManager.getConnectionメソッドのパスワード引数が省略されているか、あるいはヌルである場合の、接続用のパスワードを指定します。

この接続パラメータは主に、単一引数のDriverManager.getConnection(String url)メソッドで使用するためのものです。

2つの引数のDriverManager.getConnection(String url, Properties info)メソッドを使用した場合、Properties info引数にNull以外の"password"プロパティ値が指定されると、この接続パラメータは上書きされます。

3つの引数のDriverManager.getConnection(String url, String user, String password)メソッドを使用した場合、password引数にNULL以外が指定されると、この接続パラメータは上書きされます。

このパラメータは、Teradata JDBC Driver 14.00.00.13以降、SQL接続で使用できます。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、Teradata JDBC Driver 14.00.00.13以降のJDBC FastExport、JDBC FastLoad、およびJDBC FastLoad CSV接続で使用できます。

このパラメータは、Teradata JDBC Driver 14.00.00.13以降、JDBC Monitor接続で使用できます。

このパラメータは、Teradata JDBC Driver 14.00.00.13以降、Raw接続で使用できます。

PREP_SUPPORT

PreparedStatementまたはCallableStatementの作成時に、データベースが準備操作を実行するかどうかを指定します。

  • PREP_SUPPORT=ON(デフォルト)と指定すると、PreparedStatementまたはCallableStatementの作成時にデータベースは準備操作を実行します。準備操作は、多くのTeradata JDBC Driver機能が適切に動作するために必要です。
  • PREP_SUPPORT=OFFと指定すると、PreparedStatementまたはCallableStatementの作成時に準備操作が回避されます。このオプションを実働環境で使用することは推奨されません。このオプションは、テスト環境でパフォーマンスの問題をトラブルシューティングするためのものです。

このパラメータはSQL接続で使用できます。

このパラメータは、Teradata Database 16.0以降、Javaストアド プロシージャのデフォルト接続で使用できます。

このパラメータは、JDBC FastExport接続、JDBC FastLoad接続、およびJDBC FastLoad CSV接続では使用できません。

このパラメータは、JDBC Monitor接続では使用できません。

このパラメータは、Raw接続では使用できません。

PROXY_BYPASS_HOSTS

ホスト名とアドレスのマッチング パターンを指定して、HTTPS_PROXYパラメータで識別されるプロキシ サーバーをバイパスします。このパラメータは、HTTPS_PROXYパラメータとの組み合わせでのみ指定できます。

複数のホスト名とアドレスは縦棒 | 文字で区切ります。 ワイルドカード文字としてアスタリスク * を指定します。

このパラメータを省略した場合、デフォルトのパターンはlocalhost|127.*|[::1]で、ループバック アドレスの一般的なバリエーションのHTTPS_PROXYパラメータによって識別されるプロキシ サーバーをバイパスします。

HTTPS_PROXYパラメータで識別されるプロキシ サーバーがバイパスされると、Javaシステムのプロキシ設定が使用されます。Javaシステムのプロキシ設定が定義されていない場合は、宛先への直接接続が確立されます。

このパラメータは、Teradata JDBC Driver 20.00.00.12以降のSQL接続で使用できます。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、Teradata JDBC Driver 20.00.00.12以降のJDBC FastExport、JDBC FastLoad、およびJDBC FastLoad CSV接続で使用できます。

このパラメータは、Teradata JDBC Driver 20.00.00.12以降のJDBC Monitor接続で使用できます。

このパラメータは、Teradata JDBC Driver 20.00.00.12以降のRaw接続で使用できます。

RECONNECT_COUNT

Teradataセッションの再接続を有効にします。Teradata JDBC Driverがセッションの再接続を試行する最大回数を指定します。詳細については、「Teradataセッションの再接続」を参照してください。

  • Teradataセッションの再接続は、RECONNECT_COUNTまたはRECONNECT_INTERVALを指定するか、またはRecoverable Network Protocol(RNP)を有効にすることで有効に設定されます。
  • RECONNECT_COUNTを省略し、Teradataセッションの再接続を他の接続パラメータまたは設定によって有効にすると、RECONNECT_COUNTのデフォルト値は11回の試行になります。

このパラメータはSQL接続で使用できます。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、JDBC FastExport接続とJDBC FastLoad接続で使用できます。

このパラメータは、JDBC FastLoad CSV接続では使用できません。

このパラメータは、JDBC Monitor接続では使用できません。

このパラメータはRaw接続で使用できます。

注:  このパラメータを指定すると、接続失敗時の通常のフェイル ファスト動作は上書きされます。

RECONNECT_INTERVAL

Teradataセッションの再接続を有効にします。Teradata JDBC Driverが次にセッションの再接続を試行するまで待機する秒数を指定します。詳細については、「Teradataセッションの再接続」を参照してください。

  • Teradataセッションの再接続は、RECONNECT_COUNTまたはRECONNECT_INTERVALを指定するか、またはRecoverable Network Protocol(RNP)を有効にすることで有効に設定されます。
  • RECONNECT_INTERVALを省略し、Teradataセッションの再接続を他の接続パラメータまたは設定によって有効にすると、RECONNECT_INTERVALのデフォルト値は30秒になります。

このパラメータはSQL接続で使用できます。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、JDBC FastExport接続とJDBC FastLoad接続で使用できます。

このパラメータは、JDBC FastLoad CSV接続では使用できません。

このパラメータは、JDBC Monitor接続では使用できません。

このパラメータはRaw接続で使用できます。

注:  このパラメータを指定すると、接続失敗時の通常のフェイル ファスト動作は上書きされます。

REDRIVE

Teradataセッションの再接続を有効にし、またデータベースの再始動によって中断されたSQLリクエストの自動リドライブを有効にします。詳細については、「Teradataセッションの再接続」を参照してください。

  • REDRIVE=0と指定すると、制御データの使用、Recoverable Network Protocol、SQLリクエストの自動リドライブがそれぞれ無効になります。この設定は、TYPE=RAW接続のデフォルト設定です。
  • REDRIVE=1と指定すると、制御データの使用が有効になりますが、Recoverable Network ProtocolとSQLリクエストの自動リドライブが無効になります。
  • REDRIVE=2と指定すると、制御データの使用とRecoverable Network Protocolが有効になりますが、SQLリクエストの自動リドライブが無効になります。
  • REDRIVE=3と指定すると、制御データの使用とRecoverable Network Protocolが有効になり、SQLリクエストの自動リドライブについては設定が何も指定されません。この設定は、SQL接続のデフォルト設定です。
  • REDRIVE=4と指定すると、制御データの使用、Recoverable Network Protocol、SQLリクエストの自動リドライブが有効になります。

このパラメータは、Teradata Database 14.10およびTeradata JDBC Driver 15.00.00.12以降、SQL接続で使用できます。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、Teradata Database 14.10およびTeradata JDBC Driver 15.00.00.12以降、JDBC FastExport接続とJDBC FastLoad接続で使用できます。

このパラメータは、JDBC FastLoad CSV接続では使用できません。

このパラメータは、JDBC Monitor接続では使用できません。

このパラメータはRaw接続で使用できます。

注:  アプリケーションは、REDRIVE接続パラメータを使用して要求する機能を受け取ることが保証されていません。 データベースは、データベースのdbscontrolフィールドであるRedriveProtection (67)、 RedriveDefaultParticipation (68)、およびDisableRecoverableNetProtocol (77)に応じて、機能が提供されているかどうかを判別します。

RUNSTARTUP

RUNSTARTUP値にOFFまたはONを指定します。デフォルト値はOFFです。

  • 省略するか、またはOFFに設定すると、ユーザーのSTARTUP SQLリクエストを実行しないように指定されます。
  • ONに設定すると、ユーザーのSTARTUP SQLリクエストはログオン後に実行されます。詳細は、『ユーザーのSTARTUP SQLリクエスト』を参照してください。

このパラメータはSQL接続で使用できます。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、Teradata JDBC Driver 15.10.00.08以降のJDBC FastExport、JDBC FastLoad、およびJDBC FastLoad CSV接続で使用できます。

このパラメータは、JDBC Monitor接続では使用できません。

このパラメータは、Raw接続では使用できません。

SESSIONS

作成するFastLoadまたはFastExport接続の数を指定します(1 <= FastLoadまたはFastExport接続の数<= AMPの数)。

このパラメータは、SQL接続では使用できません。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、JDBC FastExport接続、JDBC FastLoad接続、およびJDBC FastLoad CSV接続で使用できます。

このパラメータは、JDBC Monitor接続では使用できません。

このパラメータは、Raw接続では使用できません。

注:  SESSIONSパラメータを省略し、データベースに適切な数のFastLoad接続またはFastExport接続を判断させることを推奨します。

SIP_SUPPORT

データベースおよびTeradata JDBC DriverがStatementInfoパーセル(SIP)をメタデータの転送に使用するかどうかを制御します。

  • SIP_SUPPORT=ON(デフォルト)と指定すると、データベースおよびTeradata JDBC Driverはメタデータの転送にSIPを使用します。SIPは、多くのデータベース機能およびTeradata JDBC Driver機能が適切に動作するために必要です。
  • SIP_SUPPORT=OFFと指定すると、SIPを使用したメタデータの転送が無効になります。このオプションを実働環境で使用することは推奨されません。このオプションは、テスト環境でパフォーマンスの問題をトラブルシューティングするためのものです。

このパラメータはSQL接続で使用できます。

このパラメータは、Teradata Database 16.0以降、Javaストアド プロシージャのデフォルト接続で使用できます。

このパラメータは、JDBC FastExport接続、JDBC FastLoad接続、およびJDBC FastLoad CSV接続では使用できません。

このパラメータは、JDBC Monitor接続では使用できません。

このパラメータは、Raw接続では使用できません。

SLOB_RECEIVE_THRESHOLD

データベースから小さいLOB値を受け取る方法を制御します。小さいLOB値は、アプリケーションがBLOB/CLOBオブジェクトからデータを明示的に読み取る前に、データベースからプリフェッチされます。

  • SLOB_RECEIVE_THRESHOLD=負でないサイズ(バイト)(デフォルトは1000バイト)と指定すると、ResultSet行データと連動してデータベースから最大サイズの小さいLOB値を受け取ります(プリフェッチします)。指定のサイズを超えるLOB値は、データベースからLOBロケータとして受け取ります。実際のデータを取得するには、追加のラウンド トリップが必要です。
  • SLOB_RECEIVE_THRESHOLD=負の値と指定すると、データベースからすべてのLOB値をLOBロケータとして受け取り、プリフェッチが無効になります。実際のデータを取得するには、追加のラウンド トリップが必要です。

このパラメータを省略した場合、デフォルトのしきい値は1000バイトです。

このパラメータは、Teradata Database 15.10およびTeradata JDBC Driver 15.10.00.05以降、SQL接続で使用できます。

このパラメータは、Teradata Database 16.0以降、Javaストアド プロシージャのデフォルト接続で使用できます。

このパラメータは、JDBC FastExport接続、JDBC FastLoad接続、およびJDBC FastLoad CSV接続では使用できません。

このパラメータは、JDBC Monitor接続では使用できません。

このパラメータは、Raw接続では使用できません。

注: このパラメータを指定する場合は注意が必要です。デフォルトよりも大きいしきい値を指定すると、パフォーマンスが向上する可能性がありますが、JVMメモリの消費量が増大します。十分な容量のJVMメモリを確保しておく必要があります。各メッセージ内のスペースに対して、小さいLOB値が非LOBデータ値と競合することに注意する必要があります。また、MAX_MESSAGE_BODY接続パラメータを使用して最大メッセージ サイズを増やす必要があります。

SLOB_TRANSMIT_THRESHOLD

小さいLOB値をデータベースに送信する方法を制御します。

  • SLOB_TRANSMIT_THRESHOLD=負でないサイズ(バイト)(デフォルトは1000バイト)と指定すると、他のパラメータ値を使用して最大サイズの小さいLOB値がデータベースに送信されます。指定のサイズを超えるLOB値はデータベースに保留のLOB値として送信されます。実際のデータを送信するには、追加の「明示的な」ラウンド トリップが必要です。
  • SLOB_TRANSMIT_THRESHOLD=負の値と指定すると、すべてのLOB値が保留のLOB値としてデータベースに送信されます。実際のデータを送信するには、追加の「明示的な」ラウンド トリップが必要です。

このパラメータを省略した場合、デフォルトのしきい値は1000バイトです。

このパラメータは、Teradata Database 15.10およびTeradata JDBC Driver 15.10.00.05以降、SQL接続で使用できます。

このパラメータは、Teradata Database 16.0以降、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、JDBC FastExport接続、JDBC FastLoad接続、およびJDBC FastLoad CSV接続では使用できません。

このパラメータは、JDBC Monitor接続では使用できません。

このパラメータは、Raw接続では使用できません。

注: このパラメータを指定する場合は注意が必要です。デフォルトよりも大きいしきい値を指定すると、パフォーマンスが向上する可能性がありますが、JVMメモリの消費量が増大します。十分な容量のJVMメモリを確保しておく必要があります。各メッセージ内のスペースに対して、小さいLOB値が非LOBデータ値と競合することに注意する必要があります。また、MAX_MESSAGE_BODY接続パラメータを使用して最大メッセージ サイズを増やす必要があります。

SP_SPL

Teradataストアド プロシージャを作成または置換する場合の動作を指定します。

  • SP_SPL=SPL(デフォルト) - データベースに対して、ストアド プロシージャが作成されたときにストアド プロシージャ言語(SPL)のソース テキストを保存するよう指示します。
  • SP_SPL=NOSPL - データベースに対して、ストアド プロシージャ言語(SPL)のソース テキストを保存しないよう指示します。ソース テキストなしでストアド プロシージャを作成すると、SHOW PROCEDURE SQL文でエラーが返されます。

このパラメータはSQL接続で使用できます。

このパラメータはJavaストアド プロシージャのデフォルト接続で使用できます。

このパラメータは、JDBC FastExport接続とJDBC FastLoad接続で使用できます。

このパラメータは、JDBC FastLoad CSV接続では使用できません。

このパラメータは、JDBC Monitor接続では使用できません。

このパラメータは、Raw接続では使用できません。

SSLCA

SSLMODE=VERIFY-CA または VERIFY-FULL で使用するCertificate Authority (CA)証明書を含むPEMファイルのファイル名を指定します。HTTPS/TLS接続は、Teradata JDBC Driver 17.10.00.07およびTeradata Advanced SQL Engine 16.20.53.30以降で使用できます。

このパラメータは、Teradata JDBC Driver 17.10.00.07以降のSQL接続で使用できます。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、Teradata JDBC Driver 17.10.00.07以降のJDBC FastExport、JDBC FastLoad、JDBC FastLoad CSV接続で使用できます。

このパラメータは、Teradata JDBC Driver 17.10.00.07以降のJDBC Monitor接続で使用できます。

このパラメータは、Teradata JDBC Driver 17.10.00.07以降のRaw接続で使用できます。

SSLCAPATH

SSLMODE=VERIFY-CA または VERIFY-FULL で使用するCertificate Authority (CA)証明書を含むPEMファイルのディレクトリを指定します。拡張子が.pemのファイルのみ使用されます。指定されたディレクトリ内の他のファイルは使用されません。HTTPS/TLS接続は、Teradata JDBC Driver 17.10.00.07およびTeradata Advanced SQL Engine 16.20.53.30以降で使用できます。

このパラメータは、Teradata JDBC Driver 17.10.00.07以降のSQL接続で使用できます。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、Teradata JDBC Driver 17.10.00.07以降のJDBC FastExport、JDBC FastLoad、JDBC FastLoad CSV接続で使用できます。

このパラメータは、Teradata JDBC Driver 17.10.00.07以降のJDBC Monitor接続で使用できます。

このパラメータは、Teradata JDBC Driver 17.10.00.07以降のRaw接続で使用できます。

SSLCIPHER

HTTPS/TLS接続のTLS暗号を指定します。HTTPS/TLS接続は、Teradata JDBC Driver 17.10.00.07およびTeradata Advanced SQL Engine 16.20.53.30以降で使用できます。

このパラメータを省略することをお勧めします。 省略した場合、データベースとクライアントは最も適切なTLS暗号を選択します。 このパラメータは、指定されたTLS暗号のパフォーマンスをテストする場合にのみ使用してください。

このパラメータは、Teradata JDBC Driver 17.10.00.07以降のSQL接続で使用できます。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、Teradata JDBC Driver 17.10.00.07以降のJDBC FastExport、JDBC FastLoad、JDBC FastLoad CSV接続で使用できます。

このパラメータは、Teradata JDBC Driver 17.10.00.07以降のJDBC Monitor接続で使用できます。

このパラメータは、Teradata JDBC Driver 17.10.00.07以降のRaw接続で使用できます。

SSLCRC

SSLMODEがVERIFY-FULLに設定されている場合に、HTTPS/TLS接続のTLS証明書失効チェックを制御します。SSLMODEがVERIFY-FULLに設定されていない限り、このパラメータは無視されます。

  • ALLOW(デフォルト)に設定するか省略し、SSLMODEをVERIFY-FULLに設定すると、証明書失効チェック中に通信障害が無視されるような「soft fail」動作が提供されます。
  • REQUIREに設定し、SSLMODEをVERIFY-FULLに設定した場合、成功させるには証明書失効チェックが必要です。

このパラメータは、Teradata JDBC Driver 20.00.00.02以降のSQL接続で使用できます。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、Teradata JDBC Driver 20.00.00.02以降のJDBC FastExport、JDBC FastLoad、JDBC FastLoad CSV接続で使用できます。

このパラメータは、Teradata JDBC Driver 20.00.00.02以降のJDBC Monitor接続で使用できます。

このパラメータは、Teradata JDBC Driver 20.00.00.02以降のRaw接続で使用できます。

SSLDEBUG

HTTPS/TLS接続のJavaデバッグ ログを制御します。デフォルトはOFFです。HTTPS/TLS接続は、Teradata JDBC Driver 17.10.00.07およびTeradata Advanced SQL Engine 16.20.53.30 以降で使用できます。

  • ONに設定すると、HTTPS/TLS接続に対してJavaデバッグ ログが有効になります。Teradata JDBC Driver 20.00.00.08 以降、Javaシステムのプロパティjavax.net.debugall に設定されます。Teradata JDBC Driver 17.10.00.07から20.00.00.07では、javax.net.debugssl:handshakeに設定されます。
  • OFFに設定するか省略した場合、Javaシステム プロパティjavax.net.debugは変更されません。

このパラメータは、Teradata JDBC Driver 17.10.00.07以降のSQL接続で使用できます。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、Teradata JDBC Driver 17.10.00.07以降のJDBC FastExport、JDBC FastLoad、JDBC FastLoad CSV接続で使用できます。

このパラメータは、Teradata JDBC Driver 17.10.00.07以降のJDBC Monitor接続で使用できます。

このパラメータは、Teradata JDBC Driver 17.10.00.07以降のRaw接続で使用できます。

SSLMODE

データベースへの接続のモードを指定します。HTTPS/TLS接続は、Teradata JDBC Driver 17.10.00.07およびTeradata Advanced SQL Engine 16.20.53.30以降で使用できます。

  • SSLMODE=DISABLEは、HTTPS/TLS接続を無効にし、非TLS接続のみを使用します。
  • SSLMODE=ALLOWは、データベースにHTTPS/TLS接続が必要で、JavaにTLSv1.2がない限り、非TLS接続を使用します。Java 7およびJava 8ではTLSv1.2のサポートが制限されているため、Teradata JDBC DriverがTLS対応のデータベースに接続できなくなる可能性があります。 Java 7およびJava 8でこの問題を回避するには、SSLMODE=ALLOWを指定します。
  • SSLMODE=PREFERは、データベースがHTTPS/TLS接続を提供しないか、JavaにTLSv1.2がない場合を除き、HTTPS/TLS接続を使用します。 SSLMODE=PREFERは、Teradata JDBC Driver 17.10.00.09以降のデフォルトです。
  • SSLMODE=REQUIREは、HTTPS/TLS接続を使用します。
  • SSLMODE=VERIFY-CAは、HTTPS/TLS接続を使用し、サーバー証明書が有効で信頼できることを確認します。
  • SSLMODE=VERIFY-FULLは、HTTPS/TLS接続を使用し、サーバー証明書が有効で信頼できることを確認し、サーバー証明書がデータベースのホスト名と一致することを確認します。

このパラメータは、Teradata JDBC Driver 17.10.00.07以降のSQL接続で使用できます。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、Teradata JDBC Driver 17.10.00.07以降のJDBC FastExport、JDBC FastLoad、JDBC FastLoad CSV接続で使用できます。

このパラメータは、Teradata JDBC Driver 17.10.00.07以降のJDBC Monitor接続で使用できます。

このパラメータは、Teradata JDBC Driver 17.10.00.07以降のRaw接続で使用できます。

SSLPROTOCOL

HTTPS/TLS接続のTLSプロトコルを指定します。HTTPS/TLS接続は、Teradata JDBC Driver 17.10.00.07およびTeradata Advanced SQL Engine 16.20.53.30以降で使用できます。

省略した場合、デフォルトはTLSv1.2です。

このパラメータは、Teradata JDBC Driver 17.10.00.07以降のSQL接続で使用できます。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、Teradata JDBC Driver 17.10.00.07以降のJDBC FastExport、JDBC FastLoad、JDBC FastLoad CSV接続で使用できます。

このパラメータは、Teradata JDBC Driver 17.10.00.07以降のJDBC Monitor接続で使用できます。

このパラメータは、Teradata JDBC Driver 17.10.00.07以降のRaw接続で使用できます。

SSLTRUSTSTORE

SSLMODE=VERIFY-CAまたはVERIFY-FULLで使用する、信頼されたデータベース サーバー証明書やCertificate Authority (CA)証明書を含むJava TrustStoreファイルのファイル名を指定します。HTTPS/TLS接続は、Teradata JDBC Driver 17.10.00.07およびTeradata Advanced SQL Engine 16.20.53.30 以降で以降で使用できます。

このパラメータは、Teradata JDBC Driver 17.10.00.07以降のSQL接続で使用できます。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、Teradata JDBC Driver 17.10.00.07以降のJDBC FastExport、JDBC FastLoad、JDBC FastLoad CSV接続で使用できます。

このパラメータは、Teradata JDBC Driver 17.10.00.07以降のJDBC Monitor接続で使用できます。

このパラメータは、Teradata JDBC Driver 17.10.00.07以降のRaw接続で使用できます。

SSLTRUSTSTORE_PASSWORD

SSLTRUSTSTORE接続パラメータで識別されるJava TrustStoreファイルのパスワードを指定します。このパラメータを省略すると、Java TrustStoreファイルのパスワードは指定されません。

このパラメータは、Teradata JDBC Driver 20.00.00.14以降のSQL接続で使用できます。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、Teradata JDBC Driver 20.00.00.14以降のJDBC FastExport、JDBC FastLoad、JDBC FastLoad CSV接続で使用できます。

このパラメータは、Teradata JDBC Driver 20.00.00.14以降のJDBC Monitor接続で使用できます。

このパラメータは、Teradata JDBC Driver 20.00.00.14以降のRaw接続で使用できます。

SSLTRUSTSTORE_TYPE

SSLTRUSTSTORE接続パラメータで識別されるJava TrustStoreファイルのタイプを指定します。このパラメータを省略すると、Java TrustStoreファイルはJavaのデフォルトのTrustStoreタイプとみなされます。

このパラメータは、Teradata JDBC Driver 20.00.00.14以降のSQL接続で使用できます。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、Teradata JDBC Driver 20.00.00.14以降のJDBC FastExport、JDBC FastLoad、JDBC FastLoad CSV接続で使用できます。

このパラメータは、Teradata JDBC Driver 20.00.00.14以降のJDBC Monitor接続で使用できます。

このパラメータは、Teradata JDBC Driver 20.00.00.14以降のRaw接続で使用できます。

STRICT_ENCODE

データベースに送信する文字データをエンコードする動作を指定します。 デフォルトはOFFです。

  • ONに設定されている場合、SQLリクエストテキストまたは任意のパラメータ値にセッションの文字セットで表現できない文字が含まれていると、Teradata JDBC DriverはSQLExceptionをスローします。
  • OFFに設定されているか、省略されている場合、Teradata JDBC Driverはセッションの文字セットで表現できない各文字を疑問符で置き換えます。

このパラメータは、Teradata JDBC Driver 14.10.00.18以降、SQL接続で使用できます。

このパラメータは、Teradata Database 16.0以降、Javaストアド プロシージャのデフォルト接続で使用できます。

このパラメータは、Teradata JDBC Driver 14.10.00.18以降のJDBC FastExport、JDBC FastLoad、およびJDBC FastLoad CSV接続で使用できます。

このパラメータは、Teradata JDBC Driver 14.10.00.18以降、JDBC Monitor接続で使用できます。

このパラメータは、Raw接続では使用できません。

注:  STRICT_ENCODE=ONと指定すると、文字データをデータベースに転送するパフォーマンスが低下することがあります。STRICT_ENCODE=ONは、UTF8およびUTF16以外のセッション文字セットを使用するためのものです。すべてのUnicode文字はUTF8およびUTF16セッションの文字セットで表現できるためです。

JDK 5.0以降の環境では、サポートされているすべてのセッション文字セットでSTRICT_ENCODE=ONを使用できます。

JDK 1.4.2環境では、次のセッション文字セットの場合にSTRICT_ENCODE=ONを使用できません。

  • EBCDIC037_0E
  • EBCDIC273_0E
  • EBCDIC277_0E
  • HANGULEBCDIC933_1II
  • SCHEBCDIC935_2IJ
  • TCHEBCDIC937_3IB
  • KANJIEBCDIC5026_0I
  • KANJIEBCDIC5035_0I

STRICT_NAMES

接続パラメータ名をチェックする動作を指定します。デフォルトはONです。

  • ONに設定するか省略すると、JDBCの接続URLまたはgetConnectionメソッドのProperties引数に予期しない接続パラメータ名が指定されると、Teradata JDBC DriverはSQLExceptionをスローします。
  • OFFに設定すると、Teradata JDBC Driverは、JDBCの接続URLまたはgetConnectionメソッドのProperties引数にある予期しない接続パラメータ名を無視します。

このパラメータは、DataSourceまたはConnectionPoolDataSourceでは使用できません。DataSourceまたはConnectionPoolDataSourceに予期しない接続パラメータ名を指定することはできません。

このパラメータは、Teradata JDBC Driver 17.10.00.18以降のSQL接続で使用できます。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、Teradata JDBC Driver 17.10.00.18以降のJDBC FastExport、JDBC FastLoad、およびJDBC FastLoad CSV接続で使用できます。

このパラメータは、Teradata JDBC Driver 17.10.00.18以降のJDBC Monitor接続で使用できます。

このパラメータは、Teradata JDBC Driver 17.10.00.18以降のRaw接続で使用できます。

TCP

TCPソケットの設定値を指定します。複数の設定値はプラス記号("+")で区切ります。

次に示すTCPソケットの設定値が指定できます。

  • KEEPALIVE - TCPキープアライブをオンにします。省略すると、デフォルトでTCPキープアライブがオフになります。
  • NODELAY - TCP Nodelayをオンにします。つまり、Nagleアルゴリズムをオフにします。デフォルトまたは省略時には、Nagleアルゴリズムが使用されます。
  • SENDn - TCPソケットの送信バッファを、整数値nで指定したバイト数のサイズに設定します。Teradata JDBC Driver 15.10.0.25以降では、省略すると、デフォルトで基盤となるプラットフォーム/オペレーティング システムのデフォルト送信バッファ サイズが使用されます。以前のバージョンのTeradata JDBC Driverでは、省略すると、デフォルトでTCPソケットの送信バッファ サイズが65,156バイトになります。
  • RECEIVEn - TCPソケットの受信バッファを、整数値nで指定したバイト数のサイズに設定します。Teradata JDBC Driver 15.10.0.25以降では、省略すると、デフォルトで基盤となるプラットフォーム/オペレーティング システムのデフォルト受信バッファ サイズが使用されます。以前のバージョンのTeradata JDBC Driverでは、省略すると、デフォルトでTCPソケットの受信バッファ サイズが65,156バイトになります。
  • NOLINGER - TCPソケットを閉じる際のLinger (遅延)をオフにします。この設定値は、LINGERnと相互排他的になります。省略すると、デフォルトでLINGER10になります。
  • LINGERn - TCPソケットを閉じる際のLinger (遅延)をオンにして、遅延をn秒にします。デフォルトまたは省略時には、LINGER10になります(10秒間の遅延)。
  • TRAFFICn - TCPトラフィック クラスを整数値nに設定します。省略すると、デフォルトでは、TCPトラフィック クラスは明示的に設定されないため、JVMのデフォルトが使用されます。詳細は、java.net.Socket.setTrafficClassメソッドに関するJavaDocを参照してください。

SENDnとRECEIVEnの設定は、基層になるプラットフォームやオペレーティング システムのTCPスタックに対する要求またはヒントにすぎません。一部のプラットフォームやオペレーティング システムでは、要求した値を切り上げまたは切り捨てることも、完全に無視することもあります。

SENDnとRECEIVEnの設定は、Response Messageの最大サイズとは別個の設定です。詳細は、MAX_MESSAGE_BODY接続パラメータの説明を参照してください。

このパラメータはSQL接続で使用できます。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、JDBC FastExport接続、JDBC FastLoad接続、JDBC FastLoad CSV接続で使用できます。

このパラメータはJDBC Monitor接続で使用できます。

このパラメータはRaw接続で使用できます。

 

例:

  • TCP=NOLINGER - TCPソケットを閉じる際のLinger (遅延)をオフにします。
  • TCP=LINGER30 - TCPソケットを閉じる際のLinger (遅延)をオンにして、遅延を30秒にします。
  • TCP=SEND8192+RECEIVE8192 - TCPソケットの送信バッファと受信バッファのサイズに8KBを要求します。一部のプラットフォームやオペレーティング システムでは、要求した値を切り上げまたは切り捨てることも、完全に無視することもあります。

設定値は、どの順序で指定しても構いません。例えば、TCP=NODELAY+KEEPALIVEと、TCP=KEEPALIVE+NODELAYは同義です。

TMODE

接続用のトランザクション モードを指定します。

  • TMODE=ANSI - ANSI(米国規格協会)トランザクション セマンティクスを使用します。このモードが推奨されます。
  • cMODE=ANSI - 旧来のTeradataトランザクション セマンティクスを使用します。このモードは、Teradataトランザクション セマンティクスが必要な旧来のアプリケーションに対してのみ推奨されます。
  • TMODE=DEFAULT(デフォルト) - データベース用に構成したデフォルトのトランザクション セマンティクスを使用します(ANSIモードかTERAモードのいずれかになります)。

ANSIおよびTeradataのトランザクション モードについては、「トランザクション モード」を参照してください。

このパラメータはSQL接続で使用できます。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、JDBC FastExport接続とJDBC FastLoad接続で使用できます。

このパラメータは、JDBC FastLoad CSV接続では使用できません。

このパラメータは、JDBC Monitor接続では使用できません。

このパラメータはRaw接続で使用できます。

TNANO

TNANO=小数点以下桁数

PreparedStatementまたはCallableStatementにバインドされ、 TIMEまたはTIME WITH TIME ZONE値としてデータベースに送信される、すべてのjava.sql.Time値の小数秒精度を指定します。

このパラメータにより、データベースに送信される小数点以下桁数が潜在的に増大または減少(切り捨て)する可能性があります。例えば、この接続パラメータをTNANO=3と指定すると、java.sql.Timeの値10:02:30はTIME値10:02:30.000としてデータベースに送信されます。

このパラメータはSQL接続で使用できます。

このパラメータはJavaストアド プロシージャのデフォルト接続で使用できます。

このパラメータは、JDBC FastExport接続、JDBC FastLoad接続、およびJDBC FastLoad CSV接続では使用できません。

このパラメータはJDBC Monitor接続で使用できます。

このパラメータは、Raw接続では使用できません。

TRUSTED_SQL

TRUSTED_SQL値は、ONかOFFです。デフォルト値はOFFです。

この接続パラメータは、この要求を作成するデータベース ユーザーに"WITH TRUST_ONLY"を使用して"GRANT CONNECT THROUGH"権限が付与されている場合にのみ効果があります。"GRANT CONNECT THROUGH"権限が"TRUST_ONLY"オプションなしで付与されていると、TRUSTED_SQLパラメータの効果はなくなります。

  • OFFに設定すると、"WITH TRUST_ONLY"を使用して"GRANT CONNECT THROUGH"権限が付与されたデータベース ユーザーが、現在のプロキシ ユーザーを設定または削除するためにSET QUERY_BANDコマンドを試行しても、その要求はデータベースによって拒否されます。
  • ONに設定すると、データベースは、現在のプロキシ ユーザーを設定または削除するためのSET QUERY_BANDコマンドを許可するようになります。この機能は、実行するSQLに{fn teradata_untrusted}エスケープ関数を組み込むことで、要求単位の無効化が可能になります。

このパラメータはSQL接続で使用できます。

このパラメータは、Teradata Database 16.0以降、Javaストアド プロシージャのデフォルト接続で使用できます。

このパラメータは、JDBC FastExport接続とJDBC FastLoad接続で使用できます。

このパラメータは、JDBC FastLoad CSV接続では使用できません。

このパラメータは、JDBC Monitor接続では使用できません。

このパラメータは、Raw接続では使用できません。

TSNANO

TSNANO=小数点以下桁数

PreparedStatementまたはCallableStatementにバインドされ、 TIMESTAMPまたはTIMESTAMP WITH TIME ZONE値としてデータベースに送信される、すべてのjava.sql.Timestamp値の小数秒精度を指定します。

このパラメータにより、データベースに送信される小数点以下桁数が潜在的に増大または減少(切り捨て)する可能性があります。例えば、この接続パラメータをTSNANO=3と指定すると、java.sql.Timestampの値2016-05-17 10:02:30.123456はTIMESTAMP値2016-05-17 10:02:30.123としてデータベースに送信されます。

このパラメータはSQL接続で使用できます。

このパラメータはJavaストアド プロシージャのデフォルト接続で使用できます。

このパラメータは、JDBC FastExport接続、JDBC FastLoad接続、およびJDBC FastLoad CSV接続では使用できません。

このパラメータはJDBC Monitor接続で使用できます。

このパラメータは、Raw接続では使用できません。

TYPE

SQL文に対してデータベースで使用するプロトコルの種類を指定します。オプションは、以下のとおりです。

  • TYPE=DEFAULT - Teradata JDBC Driverに対して、すべてのSQL文に標準のプロトコルを使用するように指示します。
  • TYPE=FASTLOAD - Teradata JDBC Driverに対して、FastLoad対応のSQL INSERT文にはFastLoadプロトコルを使用し、その他のすべてのSQL文には標準のプロトコルを使用するように指示します。
  • TYPE=FASTLOADCSV - Teradata JDBC Driverに対して、FastLoadCSV対応のSQL INSERT文にはFastLoadプロトコルを使用するように指示します。このタイプの接続では他のSQL文はサポートされていません。この機能は、Teradata JDBC Driver 13.00.00.26以降で使用できます。
  • TYPE=FASTEXPORT - Teradata JDBC Driverに対して、FastExport対応のSQL SELECT文にはFastExportプロトコルを使用し、その他のすべてのSQL文には標準のプロトコルを使用するように指示します。
  • TYPE=RAW - Raw接続を構成します。これは、CLIのバッファ モードに相当し、データベースに送信されるメッセージの作成とデータベースから受信するメッセージの解析がアプリケーションの責任で行なわれます。

このパラメータはSQL接続で使用できます。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、JDBC FastExport接続、JDBC FastLoad接続、およびJDBC FastLoad CSV接続で使用できます。

このパラメータは、JDBC Monitor接続では使用できません。代わりに、PARTITION=MONITORと指定してJDBC Monitor接続を作成します。

このパラメータはRaw接続で使用できます。

USER

DriverManager.getConnectionメソッドのユーザー引数が省略されているか、あるいはヌルである場合の、接続用のユーザー名を指定します。

この接続パラメータは主に、単一引数のDriverManager.getConnection(String url)メソッドで使用するためのものです。

2つの引数のDriverManager.getConnection(String url, Properties info)メソッドを使用した場合、Properties info引数にNull以外の"user"または"username"プロパティ値が指定されると、この接続パラメータは上書きされます。

3つの引数のDriverManager.getConnection(String url, String user, String password)メソッドを使用した場合、user引数にNULL以外が指定されると、この接続パラメータは上書きされます。

このパラメータは、Teradata JDBC Driver 14.00.00.13以降、SQL接続で使用できます。

このパラメータは、Javaストアド プロシージャのデフォルト接続では使用できません。

このパラメータは、Teradata JDBC Driver 14.00.00.13以降のJDBC FastExport、JDBC FastLoad、およびJDBC FastLoad CSV接続で使用できます。

このパラメータは、Teradata JDBC Driver 14.00.00.13以降、JDBC Monitor接続で使用できます。

このパラメータは、Teradata JDBC Driver 14.00.00.13以降、Raw接続で使用できます。

USEXVIEWS

DatabaseMetaDataメソッドから結果セットを返すために問い合わせるデータ ディクショナリ ビューを指定します。

  • USEXVIEWS=OFF(デフォルト) - Teradata JDBC Driverに対して、非Xビューに問い合わせてDatabaseMetaDataを取得するように指示します。
  • USEXVIEWS=ON - Teradata JDBC Driverに対して、Xビューに問い合わせてDatabaseMetaDataを取得するよう指示します。データベースのデータ ディクショナリのXビューは、ユーザーがアクセス権を持っているデータベース オブジェクトに関する情報のみを提供するように制限されます。Xビューではデータベース オブジェクトのアクセス権を調べ、パフォーマンス上のペナルティが科されるため、結果としてXビューを使用すると非Xビューの場合よりも動作が遅くなります。

Xビューの詳細は、Teradata Vantage™データ ディクショナリを参照してください

このパラメータはSQL接続で使用できます。

このパラメータは、Teradata Database 16.0以降、Javaストアド プロシージャのデフォルト接続で使用できます。

このパラメータは、JDBC FastExport接続とJDBC FastLoad接続で使用できます。

このパラメータは、JDBC FastLoad CSV接続では使用できません。

このパラメータは、JDBC Monitor接続では使用できません。

このパラメータは、Raw接続では使用できません。

XXE_PROCESSING

データベースから返されたXML値の解析中に、DocumentBuilderFactoryにおけるXML External Entity Referencing(XML外部エンティティ参照)を許可するかどうかを指定します。

  • XXE_PROCESSING = OFF(デフォルト)は、Teradata JDBC DriverにDocument Type Definition(DTD)の指定を許可しないように指示します。
  • XXE_PROCESSING = ONは、Teradata JDBC DriverにDTDの指定を許可するように指示します。

このパラメータに関する追加情報については、XML External Entity (XXE)対策を参照してください。

このパラメータはSQL接続で使用できます。

このパラメータは、Javaストアド プロシージャのデフォルト接続には使用できません。

このパラメータは、JDBC FastExport接続とJDBC FastLoad接続で使用できます。

このパラメータは、JDBC FastLoad CSV接続では使用できません。

このパラメータは、JDBC Monitor接続では使用できません。

このパラメータは、Raw接続では使用できません。

データ ソースのインターフェース

アプリケーション サーバーを使用する場合、java.sql.Connectionを取得するためには、java.sql.DataSourceインターフェースを使用することを推奨します。

DataSourceを使用すると、論理名を持つ1つのオブジェクト内でデータベース接続の取得に関係するすべてのパラメータをカプセル化できます。パラメータのカプセル化ができると、Teradata1というような論理名への接続を要求するだけでよいので、この要求を満たすために必要な多数のパラメータを知らなくても接続ができるようになります。

DataSourceは、使用する前に作成する必要があります。DataSource作成のジョブは、通常はシステム管理者が実行します。Driver Manager URLに関連するパラメータをDataSourceオブジェクト内に設定し、この設定をファイルまたはネットワーク接続可能なリソースとして保存します。

これらのパラメータの名前は、大文字/小文字の区別を含め、URLで使用される名前と同一にする必要があります。例えば、CHARSETを使用して文字セット プロパティを設定した場合、CharSet、CHARSet、またはCHARSEtは違う設定と見なされます。さらに、dataSourceName、description、user、およびpasswordの各プロパティはDataSourceレベルでのみ利用できます。Teradata JDBC Driver 16.00.00.28以降、Teradata JDBC Driverはデータ ソースのプロパティ値を検証して、無効なパラメータ値にSQLExceptionをスローします。

詳細は、TeraDataSourceクラスを参照してください。

DataSourceには、Java Naming and Directory Interface(JNDI)を使用してアクセスします。詳細については、http://www.oracle.com/technetwork/java/jndi/を参照してください。

プール接続では、不要になった接続は閉じてください。そのままでは、接続は接続プールに戻りません。プール接続を使用する場合は、接続を確実に閉じるために、try/catchブロックの後にfinallyブロックを設けることを推奨します。

セッション属性に関する警告

データベースでは、セッションの属性をリセットする方法を提供していません。したがって、接続プールのデータ ソースを使用する場合は、セッション属性に影響を及ぼすコマンドを使用しないでください。セッション属性への変更はすべて、次にその接続を使用するユーザーに引き続き適用されます。

変更してはいけないセッション属性には、次のようなものがあります。

COP検出

COP=ON接続パラメータが指定されている場合、またはCOP接続パラメータが省略されている場合、Teradata JDBC DriverでCOP(通信プロセッサ)検出動作を使用できます。

データベース システムを複数のデータベース ノードで構成できます。データベースGatewayプロセスを実行するように1つまたは複数のデータベース ノードを構成できます。データベースGatewayプロセスを実行する各データベース ノードは、COP(通信プロセッサ)と呼ばれます。COP検出は、使用可能なすべてのCOPホスト名とそのIPアドレスを識別する手順のことです。COPホスト名は、DNSに定義するか、またはクライアント システムのhostsファイルに定義できます。COPホスト名をクライアント システムのhostsファイルではなくDNSに定義することを強く推奨します。COPホスト名をDNSに定義すると、一元管理を実現でき、データベースを再構成するときにCOPホスト名を一元的に変更できます。

Teradata JDBC Driver 16.00.00.28以降では、COPLAST接続パラメータを使用して、COP検出で最後のcopホスト名を特定する方法を指定します。接続パラメータCOPLAST=OFFと指定するか、COPLAST接続パラメータを省略するか、またはCOP=OFF接続パラメータでCOP検出を無効にすると、Teradata JDBC Driverはcoplastホスト名のDNS検索を実行しません。

JDBC Driver 16.00.00.28以降では、接続パラメータCOPLAST=ONと指定して、COP検出を有効にすると、Teradata JDBC Driverはまず、COP検出を実行する前に、coplastホスト名のDNS検索を実行して最後のCOPホスト名のIPアドレスを取得します。その後、COP検出中に、不明のCOPホスト名が検出されるか、IPアドレスがcoplastホスト名のIPアドレスと一致するCOPホスト名が検出されると、Teradata JDBC DriverはCOPホスト名の検索を停止します。

COP検出の実行時に、Teradata JDBC Driverは、データベースのホスト名にcop1が追加されたものから開始し、cop2、cop3、...、copNの順番で進みます。Teradata JDBC Driverは、COP検出およびcoplastホスト名のドメイン名修飾をサポートしています。DNS検索接尾辞の不要なDNS検索が回避されてパフォーマンスが向上するため、ドメイン名修飾を使用することを推奨します。

次の表に、仮定の3ノード データベース システム"whomooz"で実行されるDNS検索を示します。

 

ドメイン名修飾を使用しない

ドメイン名修飾を使用する(推奨)

アプリケーションによって指定されたデータベース ホスト名

whomooz

whomooz.domain.com

COP検出を有効にして、COPLAST=OFFとするか省略する場合のDNS検索

 

(デフォルトの動作)

whomoozcop110.0.0.1

whomoozcop210.0.0.2

whomoozcop310.0.0.3

whomoozcop4 → 未定義

 

不明なCOPホスト名が検出されるまで、DNS検索を実行。

whomoozcop1.domain.com10.0.0.1

whomoozcop2.domain.com10.0.0.2

whomoozcop3.domain.com10.0.0.3

whomoozcop4.domain.com → 未定義

COP Discoveryを有効にして、COPLAST=ONとする場合のDNS検索

whomoozcoplast10.0.0.3

whomoozcop110.0.0.1

whomoozcop210.0.0.2

whomoozcop310.0.0.3

 

IPアドレスがcoplastホスト名と一致するCOPホスト名が検出されるか、不明のCOPホスト名が検出されるまで、DNS検索を実行。

whomoozcoplast.domain.com10.0.0.3

whomoozcop1.domain.com10.0.0.1

whomoozcop2.domain.com10.0.0.2

whomoozcop3.domain.com10.0.0.3

COP検出を無効(COP=OFF)にする場合のDNS検索

whomooz → ラウンド ロビン リスト10.0.0.110.0.0.210.0.0.3

 

ラウンド ロビンはDNSでのみ可能。クライアント システムのhostsファイルでは不可能。

whomooz.domain.com → ラウンド ロビン リスト10.0.0.110.0.0.210.0.0.3

Teradata JDBC Driverは、COPホスト名と非COPホスト名に対して複数のIPアドレスの定義をサポートしています。Teradata JDBC Driverは、Java APIメソッドInetAddress.getAllByNameを呼び出して各ホスト名に定義されているすべてのIPアドレスを取得します。

特定のデータベース システムに初めて接続する場合、Teradata JDBC Driverは乱数を生成してCOPのリストに索引を付けます。その後の接続では、Teradata JDBC Driverは先頭に戻るまで保存した索引を増やしていきます。この動作は検出されたCOPすべてに負荷を分散します。

ダウンしたCOPへの接続失敗はTeradata JDBC Driverによってマスクされるため、ほとんどの接続失敗はクライアント アプリケーションには隠蔽されます。すべてのCOPがそのデータベースでダウンした場合にのみ、例外がアプリケーションにスローされます。COPがダウンすると、シーケンスの次のCOP(最初のCOPへのラップを含む)が、ダウンしたCOPが受けるはずだった接続を追加で受信します。COPのDNSに複数のIPアドレスが定義されている場合、Teradata JDBC DriverはCOPの各IPアドレスへの接続を試行し、COPのすべてのIPアドレスへの接続試行が失敗した場合のみ、COPはダウンしていると見なされます。

COP検出を無効にするか、COPホスト名がDNSに定義されていない場合、Teradata JDBC Driverは接続URLに指定されているデータベース ホスト名に直接接続します。これにより、COP検出以外の負荷分散スキーマが可能になります。例えば、ラウンド ロビン方式のDNSやTCP/IPの負荷分散製品を使用できます。COP検出は、単純なデータベース ホスト名検索に優先します。別の負荷分散スキーマを使用するには、COPホスト名をDNSに定義しないか、あるいはCOP=OFF接続パラメータを指定します。

InetAddressのキャッシュ

DNS検索はJVMでキャッシュされ、Teradata JDBC DriverはDNS名解決のキャッシュを管理しません。管理者は、キャッシュ制御用の標準JVMシステム プロパティをInetAddressクラスのjavadocの定義どおり使用できます。

InetAddressクラスは、成功および不成功の両方のホスト名解決をキャッシュします。ポジティブ キャッシュではDNSスプーフィング攻撃から防御され、ネガティブ キャッシュではパフォーマンスが向上します。

デフォルトでは、キャッシュのエントリを削除する安全な時期を決定する一般的なルールがないため、成功したホスト名解決の結果は永遠にキャッシュされます。ホスト名解決が失敗した場合の結果は、パフォーマンスの向上のために短時間(10秒)だけキャッシュされます。

DNSの不正アクセスによる攻撃が不可能と判定できる特定の環境では、Javaセキュリティ プロパティをポジティブ キャッシュの別の有効期間(TTL)値に設定することができます。同様に、システム管理者は必要に応じて別のネガティブ キャッシュTTL値を設定できます。2つのJavaセキュリティ プロパティにより、ポジティブおよびネガティブのホスト名解決のキャッシュに使用するTTL値を制御します。

networkaddress.cache.ttl (default: -1) 

ネーム サービスで成功したネーム参照のキャッシュ ポリシーを示します。成功した参照をキャッシュする秒数を示す整数値を指定します。

値-1は、永遠にキャッシュすることを示します。

networkaddress.cache.negative.ttl (default: 10) 

ネーム サービスで成功しなかったネーム参照のキャッシュ ポリシーを示します。成功しなかった参照をキャッシュする秒数を示す整数値を指定します。

値0は、キャッシュしないことを示します。

値-1は、永遠にキャッシュすることを示します。

プロキシ サーバーのサポート

プロキシ サーバーのサポートは、Teradata JDBC Driver 20.00.00.12以降で使用できます。

次の表は、ドライバによって行われる各種類のネットワーク接続の一覧と、プロキシ サーバーを指定するために使用できるオプションを示しています。

接続タイプ

接続パラメータのプロキシ サーバー設定

Javaシステムのプロキシ サーバー設定

データベースへのHTTPS接続

使用可能

使用可能

データベースへの非HTTPS接続

 

使用可能

アイデンティティプロバイダのエンドポイントへのHTTPS接続

使用可能

使用可能

アイデンティティプロバイダのエンドポイントへのHTTP接続

 

使用可能

CRLおよびOCSP証明書失効チェックのためのHTTP接続

 

使用可能

最も高い優先度

接続パラメータを使用して、HTTPS接続のプロキシ サーバーを指定できます。これらの接続パラメータは、HTTPS接続のプロキシ サーバー設定を決定する際に最も優先度が高くなります。

特に、プロキシ サーバーを指定する接続パラメータは、Javaシステムのプロキシ サーバー設定よりも優先度が高くなります。

プロキシ サーバーの接続パラメータが指定され、その接続の種類に適用可能な場合、JDBCドライバは指定された接続パラメータのプロキシ サーバー設定を接続に使用します。

それ以外の場合、プロキシ サーバーの接続パラメータが指定されていないか、接続の種類に適用できない場合、JDBCドライバは接続に優先度の低いプロキシ サーバー設定を使用します。

接続パラメータ

説明

HTTPS_PROXY=プロキシURL

プロキシ サーバーは、http://で始まり、コロン:とポート番号を含むURLで指定します。例: HTTPS_PROXY=http://proxy.domain.com:3128

HTTPS_PROXY_USER=proxy username

オプションで、HTTPS_PROXYパラメータで識別されるプロキシ サーバーのユーザー名を指定します。このパラメータは、HTTPS_PROXYパラメータとの組み合わせでのみ指定できます。

HTTPS_PROXY_PASSWORD=proxy password

オプションで、HTTPS_PROXYパラメータで識別されるプロキシ サーバーのプロキシ サーバーのパスワードを指定します。このパラメータは、HTTPS_PROXYパラメータとの組み合わせでのみ指定できます。

PROXY_BYPASS_HOSTS=pattern

オプションで、ホスト名とアドレスのマッチング パターンを指定して、HTTPS_PROXYパラメータで識別されるプロキシ サーバーをバイパスします。このパラメータは、HTTPS_PROXYパラメータとの組み合わせでのみ指定できます。

複数のホスト名とアドレスは縦棒 | 文字で区切ります。ワイルドカード文字としてアスタリスク * を指定します。

このパラメータを省略した場合、デフォルトのパターンはlocalhost|127.*|[::1]で、ループバック アドレスの一般的なバリエーションのHTTPS_PROXYパラメータによって識別されるプロキシ サーバーをバイパスします。

このパラメータが原因でバイパスが発生すると、JDBCドライバは接続に優先度の低いプロキシ サーバー設定を使用します。

たとえば、PROXY_BYPASS_HOSTSでは、データベースCOPホスト名ワイルドカードを指定して、データベースへのHTTPS接続にはプロキシ サーバーをバイパスし、他のHTTPS接続にはプロキシ サーバーを使用できます。

JDBC接続のURLの例

jdbc:teradata://whomooz.domain.com/CHARSET=UTF8,PROXY_BYPASS_HOSTS=whomoozcop*.domain.com,HTTPS_PROXY=http://proxy.domain.com:3128

2番目に高い優先度

Javaシステムのプロキシ サーバーの設定は2番目に高い優先度であり、接続パラメータのプロキシ サーバー設定よりも優先度が低くなります。

データベースへのHTTPS接続およびアイデンティティプロバイダのエンドポイントへのHTTPS接続の場合:

Javaコマンドラインの例

java -Dhttps.proxyHost=proxy.domain.com -Dhttps.proxyPort=3128 -jar MyApplication.jar

アイデンティティプロバイダのエンドポイントへのHTTP接続、およびCRLおよびOCSP 証明書失効チェックのHTTP接続の場合:

Javaコマンドラインの例

java -Dhttp.proxyHost=proxy.domain.com -Dhttp.proxyPort=3128 -jar MyApplication.jar

HTTPSおよびHTTP Javaシステムのプロキシ サーバー設定を一緒に指定できます。

Javaコマンドラインの例

java -Dhttps.proxyHost=proxy.domain.com -Dhttps.proxyPort=3128 -Dhttp.proxyHost=proxy.domain.com -Dhttp.proxyPort=3128 -jar MyApplication.jar

Javaシステムのプロパティhttp.nonProxyHostsは、Javaシステムのプロパティhttps.proxyHostおよびhttp.proxyHostで識別されるプロキシ サーバーをバイパスするために、ホスト名とアドレスの一致パターンをオプションで指定します。同じプロパティhttp.nonProxyHostsが HTTPSとHTTPの両方で使用されます。

 

たとえば、http.nonProxyHostsでデータベースCOPホスト名ワイルドカードを指定すると、データベースへのHTTPS接続にはプロキシ サーバーをバイパスし、他の種類の接続にはプロキシ サーバーを使用できます。

Javaコマンドラインの例

java -Dhttp.nonProxyHosts="whomoozcop*.domain.com" -Dhttps.proxyHost=proxy.domain.com -Dhttps.proxyPort=3128 -Dhttp.proxyHost=proxy.domain.com -Dhttp.proxyPort=3128 -jar MyApplication.jar

3番目に高い優先度

他のJavaシステムのプロキシ サーバー設定を指定せずに、Javaシステムのプロパティjava.net.useSystemProxies=trueが指定されている場合、オペレーティング システムのプロキシ サーバー設定が使用されます。

Javaシステムのプロパティ java.net.useSystemProxies は、WindowsとmacOSでのみ使用できます。

Javaプロキシの優先順度の動作は、OpenJDKファイルsrc/java.base/share/conf/net.propertiesに記載されています。 "プロキシを明示的に設定するシステム プロパティ(http.proxyHostなど)は、java.net.useSystemProxiesがtrueに設定されている場合でも、システム設定よりも優先されることに注意してください。"

Javaコマンドラインの例

java -Djava.net.useSystemProxies=true -jar MyApplication.jar

最も低い優先度

Javaシステムのプロキシ サーバー設定が指定されていないか、接続の種類に適用できない場合は、直接接続が行われ、プロキシ サーバーは使用されません。

 

保存されたパスワードの保護

概要

Teradata JDBC Driver Stored Password Protectionによりアプリケーションでは、JDBC接続パスワードを暗号化形式でTeradata JDBC Driverに送信することができます。またアプリケーションでは、NEW_PASSWORD接続パラメータの値も暗号化形式で送信することができます。

Stored Password Protectionは、Teradata JDBC Driver 16.00.00.24以降で使用できます。

アプリケーションでは、以下に示すようにいくつかの方法でTeradata JDBC Driverに対してパスワードを指定することができ、それらのすべてで暗号化パスワードを使用できます。

  1. DriverManager.getConnection(String,String,String)メソッドに対する3番目の引数としてログイン パスワードを指定する。
  2. DriverManager.getConnection(String,Properties)メソッドに対する"password"プロパティとしてログイン パスワードを指定する。
  3. DriverManager.getConnection(String)メソッドでPASSWORD接続URLパラメータとしてログイン パスワードを指定する。
  4. DriverManager.getConnectionメソッドの変則形のいずれかのLOGDATA接続URLパラメータ内でログイン パスワードを指定する。
  5. DataSourceまたはConnectionPoolDataSourceパスワード パラメータとしてログイン パスワードを指定する。
  6. DataSourceまたはConnectionPoolDataSource LOGDATAパラメータ内でログイン パスワードを指定する。
  7. DriverManager.getConnectionメソッドの変則形のいずれかでNEW_PASSWORD接続URLパラメータとして新しいパスワードを指定する。
  8. DataSourceまたはConnectionPoolDataSource NEW_PASSWORDパラメータとして新しいパスワードを指定する。
  9. DriverManager.getConnectionメソッドのバリアントを使用して、SSLTRUSTSTORE_PASSWORD接続のURLパラメータとして指定された新しいパスワード。
  10. DataSourceまたはConnectionPoolDataSource SSLTRUSTSTORE_PASSWORDパラメータとして指定された新しいパスワード。

ただし、指定するパスワードが接頭辞"ENCRYPTED_PASSWORD("で始まる場合は、指定するパスワードの形式を次のようにする必要があります。

   ENCRYPTED_PASSWORD(PasswordEncryptionKeyResourceName,EncryptedPasswordResourceName)

PasswordEncryptionKeyResourceNameは、1つのカンマでEncryptedPasswordResourceNameと区別する必要があります。

PasswordEncryptionKeyResourceNameにより、パスワードの暗号化キーと関連情報が格納されているリソースの名前を指定します。EncryptedPasswordResourceNameにより、暗号化パスワードと関連情報が格納されているリソースの名前を指定します。その2つのリソースの説明を以下に示します。

PASSWORD、NEW_PASSWORD、SSLTRUSTSTORE_PASSWORD、LOGDATA接続のURLパラメータに暗号化されたパスワードが指定されている場合は、値を一重引用符で囲み、リソース名の"ENCRYPTED_PASSWORD("構文のコンマ区切り文字を囲む必要があります。そうしないと、そのカンマが次の接続URLパラメータの区切り文字として解釈されます。

TJEncryptPasswordプログラム

TJEncryptPassword.javaは、Teradata JDBC Driver Stored Password Protectionで使用する暗号化パスワード ファイルを作成するためのサンプル プログラムです。

このプログラムは、Teradata JDBC Driver Stored Password Protectionと連携動作します。このプログラムにより、パスワード暗号化キーと暗号化パスワードを保存したファイルが作成されます。ファイルはその後、"ENCRYPTED_PASSWORD("構文を使用してTeradata JDBC Driverに対して指定できます。

パスワード暗号化キーと暗号化パスワードを保存したファイルを作成するためにこのプログラムを使用する必要はありません。独自のファイルを開発して必要なファイルを作成することができます。唯一の要件は、ファイルの形式が、以下に示すTeradata JDBC Driverで予期される形式と一致する必要があることです。

このプログラムは、パスワードを暗号化すると、そのパスワードを正常に復号化できることを確認するため、その後すぐに復号化します。このプログラムは、Teradata JDBC Driverのパスワード復号化の実装方法を模倣しており、その動作をオープンに示し、コミュニティによってセキュリティを有効にすることを意図されています。

暗号化パスワードは、その2つのファイルがある場合にのみ安全です。ユーザーには、パスワード暗号化キーと暗号化パスワードを保存したファイルへのアクセスを制限する責任があります。攻撃者は、両方のファイルを取得すれば、パスワードを復号化できます。それら2つのファイルに対するオペレーティング システムのファイル アクセス権は、可能な限り制限して絞り込み、意図されたオペレーティング システムのユーザーIDに対してのみファイルへのアクセス権が付与されるようにします。

2つのファイルは、別々の物理ボリュームに保存して、両方のファイルを同時に失う危険性を低減することができます。ファイルの一方または両方がネットワーク ボリューム上に格納されている場合は、sshfs、暗号化NFSv4、または暗号化SMB 3.0などの暗号化ワイヤー プロトコルを使用してネットワーク ボリュームにアクセスすることができます。


このプログラムは、8個のコマンドライン引数を受け入れます。

引数

説明

1.Transformation

Cipher.getInstanceメソッドの変換引数を指定します。

例: AES/CBC/NoPadding

2.KeySizeInBits

KeyGenerator.initメソッドのキーサイズ引数を指定します。

変換のデフォルトのキー サイズを使用する-defaultを指定します。

例: -default

 

192ビットまたは256ビット キーのAESを使用するには、OracleからJava Cryptography Extension(JCE) Unlimited Strength Jurisdiction Policy FilesをダウンロードしてJREにインストールする必要があります。

例: 256

3.MAC

Mac.getInstanceメソッドのアルゴリズム引数を指定します。

MACアルゴリズムHmacSHA256はJDK 5以降で使用できます。MACアルゴリズムHmacSHA1はJDK 1.4.2で使用できます。

例: HmacSHA256

4. PasswordEncryptionKeyFileName

現在のディレクトリ、相対パス名、または絶対パス名でファイル名を指定します。

このファイルはこのプログラムによって作成されます。ファイルがすでに存在する場合は、新しいファイルによって上書きされます。

例: PassKey.properties

5. EncryptedPasswordFileName

現在のディレクトリ、相対パス名、または絶対パス名でファイル名を指定します。

ファイル名またはパス名は、PasswordEncryptionKeyFileNameと異なっている必要があります。

このファイルはこのプログラムによって作成されます。ファイルがすでに存在する場合は、新しいファイルによって上書きされます。

例: EncPass.properties

6.Hostname

データベースのホスト名を指定します。

例: whomooz

7.Username

データベースのユーザー名を指定します。

例: guest

8.Password

暗号化するデータベースのパスワードを指定します。

パスワード内のUnicode文字は、\uXXXXエスケープ シーケンスに従って指定できます。

例: please

TJEncryptPasswordを使用する場合の前提条件

Teradata JDBC Driverサンプル プログラムのダウンロード、コンパイル、および実行方法のすべてについてはここで説明されています。

以下の一覧に、TJEncryptPasswordプログラムを使用する場合に必要な準備操作のサマリーを示します。

コマンド例

以下のコマンドでは、samples.jarから抽出されたファイル、コンパイルされたクラス ファイル、およびTeradata JDBC Driverのjarファイルのすべてが現在のディレクトリに格納されていると想定しています。現在のディレクトリはclasspathで指定する必要があります。

TJEncryptPasswordプログラムでは、Teradata JDBC Driverを使用し、指定されたデータベースに暗号化パスワードでログオンするため、TJEncryptPasswordプログラムには、classpath上のTeradata JDBC Driverのjarファイルへのアクセス権が必要です。

Teradata JDBC Driver 16.20.00.11以降では、classpathに現在のディレクトリとterajdbc4.jarがリストされている必要があります。

Teradata JDBC Driverの古いバージョンでは、classpathに現在のディレクトリ、 terajdbc4.jar、およびtdgssconfig.jarをリストする必要があります。

以下のコマンド例は、JCE Unlimited Strength Jurisdiction Policy Filesで使用可能な256ビットAESキーと、JDK 5から使用可能になったHmacSHA256アルゴリズムを使用して、WindowsでTJEncryptPasswordプログラムを実行する方法を示しています。

java -cp .;terajdbc4.jar TJEncryptPassword AES/CBC/NoPadding 256 HmacSHA256 PassKey.properties EncPass.properties whomooz guest please

以下のコマンド例は、JCE Unlimited Strength Jurisdiction Policy Filesが欠落している場合のデフォルトのAESキー サイズと、JDK 5から使用可能になったHmacSHA256アルゴリズムを使用して、WindowsでTJEncryptPasswordプログラムを実行する方法を示しています。

java -cp .;terajdbc4.jar TJEncryptPassword AES/CBC/NoPadding -default HmacSHA256 PassKey.properties EncPass.properties whomooz guest please

以下のコマンド例は、JDK 1.4.2で使用可能なHmacSHA1アルゴリズムを使用して、WindowsでTJEncryptPasswordプログラムを実行する方法を示しています。

java -cp .;terajdbc4.jar TJEncryptPassword AES/CBC/NoPadding -default HmacSHA1 PassKey.properties EncPass.properties whomooz guest please

パスワード暗号化キーのファイル形式

パスワード暗号化キーと暗号化パスワードを保存したファイルを作成するためにTJEncryptPasswordプログラムを使用する必要はありません。独自のファイルを開発して必要なファイルを作成することができますが、ファイル形式はTeradata JDBC Driverで予期される形式と一致する必要があります。

パスワード暗号化キー ファイルは、Java Propertiesファイル形式のテキスト ファイルで、ISO 8859-1文字エンコーディングを使用します。

ファイルには、以下の文字列プロパティが保存されている必要があります。

プロパティ

説明

version=1

バージョン番号は1にする必要があります。

このプロパティは必須です。

transformation=TransformationName

この値は、Cipher.getInstanceメソッドの有効な変換引数である必要があります。

このプロパティは必須です。

algorithm=AlgorithmName

この値は、変換のアルゴリズム部に対応している必要があります。

この値は、KeyGenerator.getInstanceメソッドの有効なアルゴリズム引数である必要があります。

このプロパティは必須です。

match=MatchValue

パスワード暗号化キー ファイルと暗号化パスワード ファイルには、同じ一致値が保存されている必要があります。

一致値は2つの指定ファイルが相関することを確認するために比較され、そのようにして構成エラーを防止するための"正常性チェック"が行われます。

このプロパティは必須です。

 

注:TJEncryptPasswordプログラムでは、共有一致値としてタイムスタンプを使用しますが、タイムスタンプは不要です。すべての共有文字列を一致値として使用することができます。タイムスタンプはどのような点でもパスワードの暗号化との関連がなく、タイムスタンプを使用してパスワードを復号化することはできません。

key=HexDigits

この値は、16進数としてエンコードされたパスワード暗号化キーです。

このプロパティは必須です。

mac=AlgorithmName

この値は、Mac.getInstanceメソッドの有効なアルゴリズム引数である必要があります。

Teradata JDBC Driver Stored Password Protectionは、パディング オラクル攻撃から保護するためEncrypt-then-MACを実行します。

このプロパティは必須です。

mackey=HexDigits

この値は、16進数としてエンコードされたMACキーです。

このプロパティは必須です。

暗号化パスワード ファイル形式

暗号化パスワード ファイルは、Java Propertiesファイル形式のテキスト ファイルで、ISO 8859-1文字エンコーディングを使用します。

ファイルには、以下の文字列プロパティが保存されている必要があります。

プロパティ

説明

version=1

バージョン番号は1にする必要があります。

このプロパティは必須です。

match=MatchValue

パスワード暗号化キー ファイルと暗号化パスワード ファイルには、同じ一致値が保存されている必要があります。

一致値は2つの指定ファイルが相関することを確認するために比較され、そのようにして構成エラーを防止するための"正常性チェック"が行われます。

このプロパティは必須です。

 

注:TJEncryptPasswordプログラムでは、共有一致値としてタイムスタンプを使用しますが、タイムスタンプは不要です。すべての共有文字列を一致値として使用することができます。タイムスタンプはどのような点でもパスワードの暗号化との関連がなく、タイムスタンプを使用してパスワードを復号化することはできません。

password=HexDigits

この値は、16進数としてエンコードされた暗号化パスワードです。

このプロパティは必須です。

params=HexDigits

この値にはサイファー アルゴリズムのパラメータが含まれていることがあり、含まれている場合には16進数としてエンコードされます。

一部のサイファーには、キーから派生させることができない初期化ベクトルなどのアルゴリズム パラメータが必要です。

このプロパティはオプションで、サイファー アルゴリズムに関連付けられたパラメータがあるかどうかで決まります。

hash=HexDigits

この値は予期されるメッセージ認証コード(MAC)で、16進数としてエンコードされます。

暗号化後、サイファーテキスト、変換名、およびアルゴリズム パラメータがある場合にはそのパラメータを使用して、予期されるMACが計算されます。

復号化後、Teradata JDBC Driverは、サイファーテキスト、変換名、およびアルゴリズム パラメータがある場合にはそのパラメータを使用してMACを計算し、計算されたMACが予期されるMACと一致するかどうか確認します。計算されたMACが予期されるMACと異なる場合は、ファイルの一方または両方が改ざんされている可能性があります。

このプロパティは必須です。

変換、キー サイズ、およびMAC

変換は、指定された入力で実行され、変換された出力を生成する操作のセットを記述した文字列です。

変換には常に、DESやAESなどの暗号アルゴリズムの名称が含まれ、オプションでフィードバック モードと埋め込みスキーマが続きます。

javax.crypto.CipherのJDK 7 javadocは、すべてのJava実装で以下の変換をサポートする必要があることを示します。

   AES/CBC/NoPadding
   AES/CBC/PKCS5Padding
   AES/ECB/NoPadding
   AES/ECB/PKCS5Padding
   DES/CBC/NoPadding
   DES/CBC/PKCS5Padding
   DES/ECB/NoPadding
   DES/ECB/PKCS5Padding
   DESede/CBC/NoPadding
   DESede/CBC/PKCS5Padding
   DESede/ECB/NoPadding
   DESede/ECB/PKCS5Padding
   RSA/ECB/PKCS1Padding
   RSA/ECB/OAEPWithSHA-1AndMGF1Padding
   RSA/ECB/OAEPWithSHA-256AndMGF1Padding

Teradata JDBC Driver Stored Password Protectionでは、DESやAESなどの対称暗号化アルゴリズムを使用し、パスワードの暗号化と復号化で同じ秘密鍵が使用されます。Teradata JDBC Driver Stored Password Protectionでは、公開鍵と秘密鍵が別々にあるRSAなどの非対称暗号化アルゴリズムを使用しません。

Teradata JDBC Driver Stored Password Protectionは、末尾にNULLバイトを追加してUTF-8エンコード パスワードの長さを拡張することによって、暗号化パスワード ファイルでのパスワードの長さを隠します。この長さは、次の512バイト境界まで拡張されます。

暗号化の強度は、選択するサイファー アルゴリズムとキー サイズによって決まります。

リソース名

TJEncryptPasswordプログラムには、ファイル名を指定するためのコマンドラインPasswordEncryptionKeyFileNameおよびEncryptedPasswordFileNameがあります。

それとは対照的に、Teradata JDBC Driverの"ENCRYPTED_PASSWORD("構文では、ファイルの保存場所とアクセスの柔軟性を高めるため、ファイル名ではなくリソース名を使用します。

   ENCRYPTED_PASSWORD(PasswordEncryptionKeyResourceName,EncryptedPasswordResourceName)

TJEncryptPasswordプログラムによって作成されたファイルは、その後リソースとしてTeradata JDBC Driverからアクセスされます。リソース名には、リソースへの必要なアクセス方法を示す接頭辞が含まれています。リソース名が"classpath:"接頭辞で始まる場合、Teradata JDBC Driverはclasspathからリソースをロードします。"classpath:"接頭辞を付けてリソース名を指定する場合は、Teradata JDBC Driverのclasspathに確実にリソースを含める必要があります。

セキュリティ上の理由により、classpathリソースには特定のリソース名接頭辞を含める必要があります。PasswordEncryptionKeyResourceName"PassKey"で始める必要があり、EncryptedPasswordResourceName"EncPass"で始める必要があります。

例:

   ENCRYPTED_PASSWORD(classpath:PassKeyJohnDoe.properties,classpath:EncPassJohnDoe.properties)

リソース名が"classpath:"以外の接頭辞で始まる場合、Teradata JDBC Driverはnew URL(resourcename).openStream()メソッドを介してリソースをロードします。classpath以外のリソースの場合には、特定のリソース名接頭辞を含める必要はありません。Teradata JDBC Driverからclasspath以外のリソースに確実にアクセスできるようにしておく必要があります。

リソース名は"file:"接頭辞で始めることができ、relative-pathnameファイルからリソースをロードするにはTeradata JDBC Driverの相対パス名を指定する必要があります。

現在のディレクトリにあるファイルでの例:

   ENCRYPTED_PASSWORD(file:JohnDoeKey.properties,file:JohnDoePass.properties)

相対パスでの例:

   ENCRYPTED_PASSWORD(file:../dir1/JohnDoeKey.properties,file:../dir2/JohnDoePass.properties)

リソース名は"file:"接頭辞で始めることができ、absolute-pathnameファイルからリソースをロードするにはTeradata JDBC Driverの絶対パス名を指定する必要があります。

Windows上の絶対パスでの例:

   ENCRYPTED_PASSWORD(file:c:/dir1/JohnDoeKey.properties,file:c:/dir2/JohnDoePass.properties)

Linux上の絶対パスでの例:

   ENCRYPTED_PASSWORD(file:/dir1/JohnDoeKey.properties,file:/dir2/JohnDoePass.properties)

Teradata JDBC Driverのアクション

1つの暗号化パスワードに指定されている2つのリソース名は、Teradata JDBC Driverからアクセスすることができ、上記のプロパティのファイル形式に従っている必要があります。リソース名が"classpath:"接頭辞で始まっていても、classpathにリソースが含まれていないと、Teradata JDBC DriverはSQLExceptionをスローします。またTeradata JDBC Driverは、classpath以外のリソースにアクセスできない場合にもSQLExceptionをスローします。Teradata JDBC Driverは、リソースが必須のプロパティ ファイル形式に従っていない場合にSQLExceptionをスローします。

Teradata JDBC Driverは、2つのリソースに一致値が存在し、相互に一致することを確認します。Teradata JDBC Driverは、一致値が相互に異なる場合にSQLExceptionをスローします。一致値は2つの指定リソースが相関することを確認するために比較され、そのようにして構成エラーを防止するための"正常性チェック"が行われます。TJEncryptPasswordプログラムでは、共有一致値としてタイムスタンプを使用しますが、タイムスタンプは不要です。すべての共有文字列を一致値として使用することができます。タイムスタンプはどのような点でもパスワードの暗号化との関連がなく、タイムスタンプを使用してパスワードを復号化することはできません。

復号化後、Teradata JDBC Driverは、サイファーテキスト、変換名、およびアルゴリズム パラメータがある場合にはそのパラメータを使用してMACを計算し、計算されたMACが予期されるMACと一致するかどうか確認します。Teradata JDBC Driverは、計算されたMACが予期されるMACと異なる場合にはSQLExceptionをスローし、リソースの一方または両方が改ざんされた可能性があることを示します。

ログオン パスワードの場合、Teradata JDBC Driverは復号化パスワード文字列を使用してデータベースにログオンします。新しいパスワードの場合、Teradata JDBC DriverはMODIFY USERコマンドで復号化パスワード文字列を使用して期限切れパスワードを更新します

クライアント システムの情報

Teradata JDBC Driverがデータベースとの接続を確立すると、Teradata JDBC Driverはクライアント システムとクライアント ソフトウェアについての情報をデータベースに送信します。データベースはこの情報をデータ ディクショナリのシステム表に記録し、データベース管理者によるクライアント システムのデモグラフィック分析を可能にします。次のセクションでは、クライアント属性機能とLogonSource列について説明します。

クライアント属性

Teradata Database 14.0およびTeradata JDBC Driver 13.10.00.21から、クライアント属性機能によってクライアント システムやクライアント ソフトウェアについての情報をシステム表、DBC.SessionTblおよびDBC.EventLogに記録できます。このクライアント属性機能は、システム表、DBC.SessionTblとDBC.EventLogのLogonSource列に記録される情報に代わるものです。

クライアント属性は、セッションのログオン時に記録されます。次に、システム ビューDBC.SessionInfoVとDBC.LogOnOffVのクエリーを実行し、クライアント システムおよびクライアント ソフトウェアについての情報をセッションごとに取得できます。クライアント属性の値は、セッションの文字セットなどの要素に応じて、大小文字の混合または大文字でデータベースに記録できます。記録されたクライアント属性の分析は、大小文字の混合または大文字の値に柔軟に対応する必要があります。

警告:  

このセクションの情報は、Teradata JDBC Driverの将来のリリースに応じて変更される場合があります。クライアント属性はクライアント システムのデモグラフィックについての情報を探すために利用できますが、今後クライアント属性フォーマットが変更された場合は、クライアント属性の値を解析するアプリケーションにも変更を加える必要があります。

クライアント属性は、ワークロード管理のために使用することを目的としていません。代わりにクエリー バンドをワークロード管理のために使用します。将来的なクライアント属性の変更や拡張に応じて、ワークロード管理のためのクライアント属性の使用が可能になる場合があります。

クライアント属性

ソース

説明

MechanismName

データベース

接続のログイン メカニズム。例えば、TD2、LDAPなど。

ClientIpAddress

データベース

データベースにより決まる、クライアントIPアドレス

ClientTcpPortNumber

データベース

データベースにより決まる、接続のクライアントTCPポート番号

ClientIPAddrByClient

Teradata JDBC Driver

Teradata JDBC Driverにより決まる、クライアントIPアドレス。このクライアント属性は、Teradata Database 14.10およびTeradata JDBC Driver 14.00.00.33から利用できます。

ClientPortByClient

Teradata JDBC Driver

Teradata JDBC Driverにより決まる、接続のクライアントTCPポート番号。このクライアント属性は、Teradata Database 14.10およびTeradata JDBC Driver 14.00.00.33から利用できます。

ClientJDBCDriverVersion

Teradata JDBC Driver

Teradata JDBC Driverバージョン番号。このクライアント属性は、DBS DR 174576の修正をともなうデータベース システムのDBC.LogOnOffVビューで利用できます。

ClientProgramName

Teradata JDBC Driver

Teradata JDBC Driver 17.20.00.03およびJDK 9以降では、このクライアント属性は、接続が確立された時点でのJava実行可能パス名と、それに続くパッケージ名およびクラス名の合理化されたスタック トレースを記録します。
Teradata JDBC Driver 17.20.00.03およびJDK 8以前では、このクライアント属性は、接続が確立された時点でのシステム プロパティjava.homeの後にパッケージ名とクラス名の合理化されたスタックトレースを記録します。
Teradata JDBC Driver 17.20.00.03 より前のバージョンでは、このクライアント属性は、接続が確立された時点での現在のスレッドの最後のスタック要素のクラス名、メソッド名、およびソース行(使用可能な場合)を記録します。

ClientSystemUserId

Teradata JDBC Driver

Javaシステム プロパティのuser.name

ClientOsName

Teradata JDBC Driver

Javaシステム プロパティのos.name、os.version、os.arch、スペース区切りにより連結されます。

ClientProcThreadId

Teradata JDBC Driver

JDK 9およびTeradata JDBC Driver 16.20.00.03以降で、ProcessHandle.pidメソッドによりレポートされるJVMプロセスID。それ以外の場合は、java.lang.management.RuntimeMXBean.getNameメソッドによりレポートされるJVMプロセスID。このクライアント属性はJDK 5以降で利用できます。

ClientJavaVersion

Teradata JDBC Driver

Javaシステム プロパティのjava.version

ClientVmName

Teradata JDBC Driver

Javaシステム プロパティのjava.vm.vendor、java.vm.name、java.vm.version、スペース区切りにより連結されます。

ClientTdHostName

Teradata JDBC Driver

Teradata Database 14.10とTeradata JDBC Driver 14.00.00.33から、このクライアント属性はアプリケーションにより指定されたデータベース ホスト名をCOP接尾辞なしで記録します。
Teradata Database 14.10とTeradata JDBC Driver 14.00.00.33より以前では、このクライアント属性は、アプリケーションにより指定されたホスト名、セミコロン、COP接尾辞付きホスト名および/またはデータベース ノードのIPアドレス、コロン、データベース ノードへのTCP接続の宛先ポート番号の順に記録します。

ClientCOPSuffixedHostName

Teradata JDBC Driver

Teradata JDBC Driverにより選択されるCOP接尾辞付きデータベース ホスト名。このクライアント属性は、Teradata Database 14.10およびTeradata JDBC Driver 14.00.00.33から利用できます。Teradata JDBC Driver 15.10.00.19以降、このクライアント属性は、ホスト名ではなくデータベースの実際のIPアドレスが指定されている場合には利用できません。

ServerIPAddrByClient

Teradata JDBC Driver

Teradata JDBC Driverにより決まる、データベース ノードのIPアドレス。このクライアント属性は、Teradata Database 14.10およびTeradata JDBC Driver 14.00.00.33から利用できます。

ServerPortByClient

Teradata JDBC Driver

Teradata JDBC Driverにより決まる、データベース ノードへのTCP接続の宛先ポート番号。このクライアント属性は、Teradata Database 14.10およびTeradata JDBC Driver 14.00.00.33から利用できます。

ClientConfType

Teradata JDBC Driver

Teradata JDBC Driverによって決定される機密性タイプ。このクライアント属性は、Teradata JDBC Driver 17.10.00.08およびTeradata Advanced SQL Engine 16.20.53.30以降で使用できます。

  • V — 完全な証明書検証を伴う暗号化に使用されるTLS
  • C — 認証局(CA)検証を使用した暗号化に使用されるTLS
  • R — 暗号化に使用されるTLS、証明書の検証なし
  • E — TLSは試行されず、TDGSSが暗号化に使用されました
  • U — TLSは試行されず、TDGSS暗号化は中央管理に依存しています
  • F — TLSが試行されましたが、TLSハンドシェイクが失敗したため、これは暗号化にTDGSSを使用するためのフォールバックです
  • H — SSLMODEはPREFERに設定されましたが、非TLS 接続が確立され、TDGSS暗号化は中央管理に依存しています

ServerConfType

データベース

データベースによって決定される機密性タイプ。 このクライアント属性は、Teradata Advanced SQL Engine 16.20.53.30以降で使用できます。 HTTPS/TLS接続は、Teradata JDBC Driver 17.10.00.07およびTeradata Advanced SQL Engine 16.20.53.30以降で使用できます。

  • T — TLSは暗号化に使用されます
  • E — TDGSSは暗号化に使用されます
  • U — Data転送は暗号化されていません

ClientConfVersion

データベース

データベースによって決定されたTLSバージョン(HTTPS/TLS接続の場合)。 このクライアント属性は、Teradata Advanced SQL Engine 16.20.53.30以降で使用できます。 HTTPS/TLS接続は、Teradata JDBC Driver 17.10.00.07およびTeradata Advanced SQL Engine 16.20.53.30以降で使用できます。

ClientConfCipherSuite

データベース

データベースによって決定されたTLS暗号(HTTPS/TLS接続の場合)。 このクライアント属性は、Teradata Advanced SQL Engine 16.20.53.30以降で使用できます。 HTTPS/TLS接続は、Teradata JDBC Driver 17.10.00.07およびTeradata Advanced SQL Engine 16.20.53.30以降で使用できます。

ClientAttributesEx

Teradata JDBC Driver

この列では、その他のクライアント属性をname=valueペアのリストとして利用でき、それぞれセミコロンで終了します。個別の値には、NVPシステム関数を使用してアクセスします。

  • JAVA — Javaシステム プロパティのjava.version
  • MEM — JVMの使用可能な最大メモリ容量
  • TZ — JVMのデフォルトのタイム ゾーン
  • CID — 接続ID(接続で使用するプライベート オブジェクトのハッシュ コード)
  • TYPE — TYPE接続パラメータ
  • GOV —接続がワークロード管理により制御されるかどうかのY/Nインジケータ(JDBC FastLoadとJDBC FastExportに適用されます)
  • SCS —セッション文字セット
  • CCS — 接続のJava文字セット
  • LOB — LOBサポートのY/Nインジケータ
  • SIP — StatementInfoパーセル サポートのY/Nインジケータ
  • TM — A(ANSI)またはT(TERA)のトランザクション モード インジケータ。Teradata JDBC Driver14.00.00.33以降で使用できます。
  • ENC — ENCRYPTDATA接続パラメータのY/Nインジケータ。Teradata JDBC Driver14.00.00.33以降で使用できます。
  • SE — 文字データの厳密なエンコーディングのY/Nインジケータ。Teradata JDBC Driver 14.10.00.18以降で使用できます。
  • RED — リドライブおよびRecoverable Network Protocolの情報。Teradata JDBC Driver 14.10.00.23以降で使用できます。
  • DP — DBS_PORT接続パラメータ。Teradata JDBC Driver 17.10.00.05以降で使用できます。
  • HP — HTTPS_PORT接続パラメータ。Teradata JDBC Driver 17.10.00.05以降で使用できます。
  • SSL — SSLMODEに対応する数値レベル。Teradata JDBC Driver 17.10.00.05以降で使用できます。
  • SSLM — SSLMODE接続パラメータ。Teradata JDBC Driver 17.10.00.05以降で使用できます。
  • CERT — TLS証明書のステータス。Teradata JDBC Driver 17.10.00.05以降で使用できます。
  • BA — ブラウザ認証を使用するためのY / Nインジケータ。Teradata JDBC Driver 17.10.00.05以降で使用できます。

CERT属性は、これがHTTPS/TLS接続の場合、TLS証明書のステータスを示します。 HTTPS/TLS接続は、Teradata JDBC Driver 17.10.00.07およびTeradata Advanced SQL Engine 16.20.53.30 以降で使用できます。 CERT属性がTLS証明書が有効(V)または無効(I)であることを示している場合、追加のTLS証明書ステータスの詳細が一連のコンマ区切りの2文字コードとして提供されます。

  • U — TLS証明書のステータスは利用できません
  • V — TLS証明書のステータスは有効です
  • I — TLS証明書のステータスが無効です
  • PU — SSLCA PEMファイルはサーバー証明書の検証に使用できません
  • PA — サーバー証明書がSSLCA PEMファイルTrustManagerによって受け入れられました
  • PR — サーバー証明書がSSLCA PEMファイルTrustManagerによって拒否されました
  • DU — SSLCAPATH PEMディレクトリはサーバー証明書の検証に使用できません
  • DA — サーバー証明書がSSLCAPATH PEMディレクトリTrustManagerによって受け入れられました
  • DR — サーバー証明書がSSLCAPATH PEMディレクトリTrustManagerによって拒否されました
  • TU — TrustStoreファイルはサーバー証明書の検証に使用できません
  • TA — サーバー証明書がTrustStoreファイルTrustManagerによって受け入れられました
  • TR — サーバー証明書がTrustStoreファイルTrustManagerによって拒否されました
  • JU — JavaのデフォルトのTrustManagerは、サーバー証明書の検証には使用できません
  • JA — サーバー証明書はJavaのデフォルトのTrustManagerによって受け入れられました
  • JR — サーバー証明書がJavaのデフォルトのTrustManagerによって拒否されました
  • CY — サーバー証明書がVERIFY-CAチェックにパスしました
  • CN — サーバー証明書がVERIFY-CAチェックに失敗しました
  • HU — データベースのIPアドレスが指定されているため、サーバーのホスト名をサーバー証明書の照合に使用できません
  • HY — サーバーのホスト名がサーバー証明書と一致します
  • HN — サーバーのホスト名がサーバー証明書と一致しません
  • RU — データベースのIPアドレスが指定されたため、解決されたサーバーのホスト名は、サーバー証明書の照合に使用できません
  • RY — 解決されたサーバーのホスト名がサーバー証明書と一致します
  • RN — 解決されたサーバーのホスト名がサーバー証明書と一致しません
  • IY — IPアドレスがサーバー証明書と一致します
  • IN — IP アドレスがサーバー証明書と一致しません
  • FY — サーバ証明書がVERIFY-FULLチェックにパスしました
  • FN — サーバー証明書がVERIFY-FULLチェックに失敗しました

LogonSource列

Teradata Database 14.0からは、LogonSource列は過去のものと見なされ、クライアント属性機能が優先的に扱われます。LogonSource列は使用されなくなり、データベースの今後のリリースでは削除される方針です。

Teradata JDBC Driverがデータベースへの接続を確立すると、Teradata JDBC DriverはString値を作成し、その値はシステム表、DBC.SessionTblおよびDBC.EventLogのLogonSource列に保存されます。LogonSource列は、DBC.SessionInfoVやDBC.LogOnOffVなどのシステム ビューに含まれています。Teradata JDBC Driverや他のクライアントによって提供されるすべてのLogonSource値は、データベースに大文字で記録されます。

Teradata JDBC Driverは、『Teradata データ ディクショナリ』のセクション「システム ビュー列の一覧表」に記載されているネットワーク接続のLogonSource値のフォーマットに準拠しています。ネットワーク接続のLogonSource値には、8つのフィールドがあり、各フィールドは空白で区切られています。フィールド 1~3はデータベースにより作成され、フィールド 4~8はTeradata JDBC Driverにより作成されます。

  1. リテラル"(TCP/IP)"。接続タイプを示す。
  2. クライアント システム上のTCPポート番号。16進数形式。
  3. クライアント システムのIPアドレス。
  4. データベース ホスト名。Teradata Directory Program Identifier"TDPID"と呼ばれる。
  5. クライアントのプロセス/スレッドID。
  6. クライアント システムのユーザーID。
  7. クライアント システム上で使用されているプログラム。
  8. リテラル"01 LSS"。LogonSource文字列のバージョン 01を示す。

フィールド4~8の詳細については、以降のセクションを参照してください。 

警告:  

このセクションの情報は、Teradata JDBC Driverの将来のリリースに応じて変更される場合があります。アプリケーションがLogonSource値を構文解析しないようにすることを強く推奨します。LogonSource値を構文解析するアプリケーションは、今後LogonSourceフォーマットを変更すると必ず変更が必要になります。

クライアント情報とはすべて、Teradata JDBC Driverを含むJVMを実行しているシステムを指します。通常、これはアプリケーション サーバーです。クライアント情報は、Webブラウザなど、アプリケーション サーバーと通信しているほかのクライアントは指しません。

例 - LogonSource値

                                                                                                   1         1         1

         1         2         3         4         5         6         7         8         9         0         1         2

12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678

<--set by Teradata Database--><-------------------------------------------set by client---------------------------------------->

(TCP/IP) 11AB 153.64.135.140  CHARON;CHARONCOP1/192.168.16.144:1025     CID=C2A132   ROOTUSER JDBC03.02.00.00;1.4.2_01   01 LSS

(TCP/IP) 11AB 153.64.135.140  CHARON.SD.TERADATA.COM;CHARONCOP1.SD.TERA CID=C2A132   ROOTUSER JDBC03.02.00.00;1.4.2_01   01 LSS

----------------------------- ----------------------------------------- ------------ -------- -------------------------- ------

                                       1         2         3         4           1                     1         2

                              12345678901234567890123456789012345678901 123456789012 12345678 12345678901234567890123456 123456

                                       Truncated to the space            Will be     Trunc'ed    Trunc'ed to 26 chars    Always

                                  remaining in the 97 chars, after       12 chars   to 20 chars      (may be less)       6 chars

                                 the subsequent fields are composed      or less   (may be less)

各フィールドは、厳密に1つの空白文字で互いに区切られます。

フィールド4 - TDPID (ターゲットのデータベース ホスト名)フィールド

TDPIDフィールドの構成は、次のとおりです。

このTDPIDフィールドは、他のフィールドがすべて作成された後に、97文字のうちの残りのスペースに切り捨てられます。 

アプリケーションがデータベース ホスト名"CHARON"を指定する場合のこのフィールドの値の例: CHARON;CHARONCOP1/192.168.16.144:1025

アプリケーションが完全修飾データベース ホスト名"CHARON.SD.TERADATA.COM"を指定する場合のこのフィールドの切り捨て済み値の例: CHARON.SD.TERADATA.COM;CHARONCOP1.SD.TERA

フィールド5 - クライアント プロセスID/スレッドIDフィールド

注:  Teradata JDBC Driverは、このフィールドにJavaスレッドIDを指定しません。

アプリケーション サーバー環境では、スレッドは、特定のデータベース接続に結び付けられていません。この結果、特定のスレッドが、元々は別のスレッドで作成された接続上で要求を実行できます。

混乱を避けるため、Teradata JDBC DriverはLogonSource値のフィールド5に接続IDを指定します。この接続IDは、例外メッセージとログ メッセージでも表示されます。このため、LogonSource値と例外メッセージおよびログ メッセージ間で各接続ID値を関連付けることができます。Teradata JDBC Driverは必ず、接続ID値に接頭辞"cid="を付けて、接続ID値とその他の値を区別しやすくします。

接続IDは、接続で使用されるプライベート オブジェクトのハッシュ コードです。これは、データベースとの特定の接続に対応した簡単な一意の識別子を提供します。

クライアント プロセス/スレッドIDフィールドの構成は、次のとおりです。

このフィールドの値は、例えば、次のようになります。CID=1E51060

フィールド6 - クライアント プロセス ユーザー フィールド

クライアント プロセス ユーザー フィールドの構成は、System.getProperty("user.name")です。

このフィールドは20文字に切り捨てられます。ただし、20文字より短くてもかまいません。 

このフィールドの値は、例えば、次のようになります。ROOTUSER

フィールド7 - クライアント プログラム名フィールド

クライアント プログラム名フィールドの構成は、次のとおりです。

このフィールドは26文字に切り捨てられます。ただし、26文字より短くてもかまいません。

このフィールドの値は、例えば、次のようになります。JDBC03.02.00.00;1.4.2_04

フィールド8 -  LogonSource文字列バージョン1

このフィールドの構成は、01 LSSです。

ユーザーのSTARTUP SQLリクエスト

CREATE USERコマンドと、MODIFY USERコマンドには、特定の初期セッション設定値を指定するためのSTARTUP句が用意されています。さらに、Teradata JDBC Driverにも、特定の初期セッション設定値を指定するための接続パラメータと、それに対応するDataSourceプロパティが用意されています。

セッション設定値のいくつかは、SQL DDLセッション コマンドを実行することでのみ指定できます。次のテーブルに、セッション設定値の多くをリストし、CREATE/MODIFY USER句またはJDBCの接続パラメータで指定する初期設定値を示します。SET SESSIONコマンドの全一覧は、リファレンス/「Teradata Vantage™ SQLデータ定義言語 構文規則および例」セクションに掲載されています。

セッション設定値

SQL DDLセッション コマンド

CREATE/MODIFY USER句

JDBC接続パラメータ

セッション コマンドでのみ使用可能

揮発表

CREATE VOLATILE TABLE

-

-

はい

現在のデータベース

DATABASE

DEFAULT DATABASE

DATABASE

いいえ

診断の設定値

DIAGNOSTIC …FOR SESSION

-

-

はい

セッションのクエリー バンド

SET QUERY_BAND …FOR SESSION

-

-

はい

現在のロール

SET ROLE

DEFAULT ROLE

-

いいえ

現在のアカウント

SET SESSION ACCOUNT ...FOR SESSION

ACCOUNT

ACCOUNT

いいえ

Unicodeパス スルー

SET SESSION CHARACTER SET UNICODE PASS THROUGH ON

-

-

はい

現在のトランザクション分離

SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL

-

-

はい

照合順序

SET SESSION COLLATION

COLLATION

-

いいえ

テンポラル修飾子

SET SESSION CURRENT VALIDTIME AND CURRENT TRANSACTIONTIME

-

-

はい

現在のデータベース

SET SESSION DATABASE

DEFAULT DATABASE

DATABASE

いいえ

日付フォーマット

SET SESSION DATEFORM

DATEFORM

-

いいえ

関数の追跡

SET SESSION FUNCTION TRACE

-

-

はい

レプリケーション サービス制御

SET SESSION OVERRIDE REPLICATION

-

-

はい

現在のタイムゾーン

SET TIME ZONE

TIME ZONE

-

いいえ

Unicodeパス スルーのサポートは、Teradata Database 16.0およびTeradata JDBC Driver 15.10.00.08以降で使用できます。

ユーザーのSTARTUP SQLリクエストは、CREATE/MODIFY USER句やJDBC接続パラメータでは設定できない初期セッション設定値を確立するために使用できます。例えば、次に示すコマンドでは、ユーザー"susan"に対してトランザクション分離を非コミット読み取りに変更するSTARTUP SQLリクエストを設定しています。

MODIFY USER susan AS STARTUP='SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL RU'

ログオン後にユーザーのSTARTUP SQLリクエストを実行するには、Teradata JDBC DriverのRUNSTARTUP=ON接続パラメータを指定する必要があります。デフォルトの動作はRUNSTARTUP=OFFです。RUNSTARTUP接続パラメータが省略されている場合は、ユーザーのSTARTUP SQLリクエストは実行されません。

Teradataセッションの再接続

Javaアプリケーションは、JDBC java.sql.Connectionオブジェクトを使用してデータベース セッションと対話します。JDBC接続は、Teradata JDBC Driverの制御の範囲外で、以下に示すさまざまな理由でデータベース セッションから切断されることがあります。

Teradataセッションの再接続は、Teradata JDBC Driver 13.10.00.24から使用できます。Teradataセッションの再接続が有効になっている場合、Teradata JDBC Driverは、通信エラー後にデータベース セッションへのJDBC接続の再接続を試行します。Teradataセッションの再接続は、以下の1つ以上の条件が満たされる場合に有効になります。

再接続を試行する指定可能な最大経過時間:

    (ReconnectCount - 1) * ReconnectInterval

Teradata Database 14.10およびTeradata JDBC Driver 15.00.00.12からは、Teradataセッションの再接続はRecoverable Network Protocolによって拡張されるので、再接続は一時的なネットワーク エラーなど幅広いエラー イベントでサポートされます。Teradata Database 14.10およびTeradata JDBC Driver 15.00.00.12より以前では、Teradataセッションの再接続はデータベースの再始動後のみにサポートされ、一時的なネットワーク エラーなど他のイベント後の再接続はサポートされません。

Recoverable Network Protocolは、データベースとTeradata JDBC Driverの構成パラメータの組み合わせ、特にデータベースdbscontrolフィールドのRedriveProtection (67)、RedriveDefaultParticipation (68)、DisableRecoverableNetProtocol (77)、およびレベル2以上のTeradata JDBC Driver接続パラメータREDRIVEによって、有効または無効になります。

Teradataセッションの再接続が無効で、通信エラーが発生した場合、進行中の操作が失敗し、Teradata JDBC DriverがJDBC接続を終了してSQLState 08S01でSQLExceptionをスローします。

Teradataセッションの再接続が有効でありながら、Recoverable Network Protocolが有効でなく、通信エラーが発生した場合、進行中の操作が失敗し、Teradata JDBC Driverが再接続を試行し、以下のエラー コードのいずれかでSQLExceptionをスローして再接続試行の結果を示します。

JDBC接続が閉じられている間は、通信エラーが発生しても再接続は試行されません。

データベースは再始動後に、限られた時間だけセッションへの再接続を実行します。この時間は、データベース ユーティリティ プログラム"gtwcontrol"を使用して設定されます。標準値は20分です。この時間が過ぎると、データベースはすべての再接続試行を拒否します。

Teradataセッションの再接続が有効でありながら、Recoverable Network Protocolが有効でない場合、データベースが再始動されると各セッションの状態の重要な部分は破棄されます。

Recoverable Network ProtocolなしにTeradataセッションの再接続を使用するアプリケーションは、どの時点でも起き得るセッション状態の喪失に対応できるように設計する必要があります。Recoverable Network ProtocolなしのTeradataセッションの再接続は、JDBC接続プールでの使用には推奨されません

Teradataセッションの再接続、Recoverable Network Protocol、SQLリクエストの自動リドライブがすべて有効で、通信エラーが発生した場合、進行中の操作は失敗しますが、自動で再始動され、セッションの状態は保持され、Teradata JDBC Driverは再接続を試行し、再接続に成功すれば例外をスローしません。

トランザクション モード

TMODE接続パラメータを使用すると、アプリケーションで接続用のトランザクション モードを指定できます。

一般にはANSIモードが推奨されますが、アプリケーションはそれぞれ異なっており、一部のアプリケーションではTERAモードを使用する必要があります。ANSIモードとTERAモードにおける以下の相違が標準的なユーザーまたはアプリケーションに影響する可能性があります。

  1. TERAモードでは挿入されたデータのサイレント切り捨てが発生しますが、ANSIモードでは発生しません。ANSIモードの場合、データベースは、切り捨てデータの代わりにエラーを返します。
  2. ANSIモードで作成されるテーブルは、デフォルトでMULTISETです。TERAモードで作成されるテーブルは、デフォルトでSETです。
  3. ANSIモードで作成されるテーブルの場合、文字の列はデフォルトでCASESPECIFICです。TERAモードで作成されるテーブルの場合、文字の列はデフォルトでNOT CASESPECIFICです。
  4. ANSIモードでの文字リテラルはCASESPECIFICです。TERAモードでの文字リテラルはNOT CASESPECIFICです。

最後の2つの動作の相違が合わさって、TERAモードでは文字データ比較(WHERE句の条件など)では大文字と小文字が区別されませんが、ANSIモードでは大文字と小文字が区別されます。このため、ANSIモードとTERAモードでは異なる問合せ結果が返されることがあります。2つのNOT CASESPECIFIC式の比較はモードに関係なく大文字と小文字を区別せずに行われ、CASESPECIFIC式と任意の種類の別の式の比較はモードに関係なく大文字と小文字を区別して行われます。式をCASESPECIFICまたはNOT CASESPECIFICとして明示的にCASTし、アプリケーションで必要とされる文字データ比較を取得することができます。

リファレンス/「Teradata Vantage™ SQLリクエストおよびトランザクション処理」セクションでは、すべての新しいアプリケーションでANSIモードを使用することが推奨されています。ANSIモードを使用することの主要な利点は、不注意によるデータ切り捨てを防止することです。それとは対照的に、TERAモードを使用する場合には、データが挿入されるときにサイレント データ切り捨てが発生する可能性があります。これは、サイレント データ切り捨てがTERAモードの機能だからです。

ANSIモードを使用する場合の欠点は、ANSIモードを使用して作成されたストアド プロシージャしか呼び出すことができず、TERAモードを使用して作成されたストアド プロシージャは呼び出すことができないことです。正常に動作するためにTERAモードが必要なレガシー アプリケーションを使用している可能性があるので、ANSIモード専用に切り替えることは不可能です。この欠点は、2つの異なるユーザー/データベースで、1つはANSIモードを使用して、もう1つはTERAモードを使用して、ストアド プロシージャを2回作成することによって回避できます。

ANSIとTERAのトランザクション モードの相違に関する詳細は、「Teradata Vantage™ SQLリクエストおよびトランザクション処理」を参照してください。

自動コミット

自動コミットはJDBC API仕様の基本機能であり、Teradata JDBC Driverには、ANSIとTERAの両方のモードの場合に、自動コミットのオンおよびオフ機能が適切に実装されています。

接続が初めて確立されると、デフォルトのJDBC自動コミット設定(オン、true)が開始されます。自動コミットがオンの場合は、JDBC Driverがトランザクションを管理する全責任を負い、JDBC Driverによって各SQLリクエストがコミットされて正常に実行されます。自動コミットがオンの場合、アプリケーションでは、トランザクション管理のSQLコマンドを何も実行しないようにする必要があります。自動コミットがオンの場合、アプリケーションでは、Connection.commitメソッドまたはConnection.rollbackメソッドを呼び出さないようにする必要があります。

アプリケーションでは、自動コミットをオフに切り替えるfalseの引数を指定してConnection.setAutoCommitメソッドを呼び出すことによって管理できます。自動コミットがオフの場合、JDBC Driverは各SQLリクエストが実行された後に現在のトランザクションを開いたままにします。アプリケーションには、Connection.commitまたはConnection.rollbacメソッドを呼び出すことによって、それぞれトランザクションをコミットまたはロールバックする役割があります。

ベスト プラクティスでは、BT、ET、ABORT、COMMIT、またはROLLBACKなどのデータベース ベンダー固有のトランザクション管理コマンドをアプリケーションで実行することを回避するよう推奨されています。これは、そのようなコマンドがベンダーごとに異なるためです(それらは、Teradataの2つのモードANSIとTERAの間でも異なっています)。代わりにベスト プラクティスでは、トランザクション管理のために、アプリケーションで標準のJDBC APIメソッド(Connection.setAutoCommit、Connection.commit、およびConnection.rollback)のみを呼び出すことが推奨されています。

  1. ANSIモードで自動コミットがオンの場合、Teradata JDBC Driverは、すべてのSQLリクエストが正常に実行されるごとにCOMMIT WORKを自動的に実行します。
  2. ANSIモードで自動コミットがオフの場合、Teradata JDBC DriverはCOMMIT WORKを自動的に実行しません。アプリケーションがConnection.commitメソッドを呼び出すと、Teradata JDBC DriverはCOMMIT WORKを実行します。
  3. TERAモードで自動コミットがオンの場合、Teradata JDBC Driverは、アプリケーションでBTまたはETコマンド自体が明示的に実行されない限り(実行することは推奨されていません)、BTまたはETを実行しません。
  4. TERAモードで自動コミットがオフの場合、Teradata JDBC Driverは、新しいトランザクションについてのアプリケーションの最初のSQLリクエストを実行依頼する前にBTを実行します。アプリケーションがConnection.commitメソッドを呼び出すと、Teradata JDBC Driverはトランザクションが完了するまでETを実行します。

データベースとTeradataクライアント インターフェース ソフトウェア(Teradata JDBC Driverなど)の間のワイヤー プロトコルの一部として、データベースからクライアントに送信される各メッセージには、セッションに進行中のトランザクションがあるかどうかを示すための1ビットが指定されています。したがって、クライアント インターフェース ソフトウェアには、セッションに進行中のトランザクションがあるかどうかに関して通知され続けます。

自動コミットがオフのTERAモードでは、アプリケーションがTeradata JDBC Driverを使用してSQLリクエストを実行すると、セッションに進行中のトランザクションがない場合、Teradata JDBC DriverはアプリケーションのSQLリクエストを実行する前にBTを自動的に実行します。その後、自動コミットがオフのTERAモードでは、アプリケーションがTeradata JDBC Driverを使用して別のSQLリクエストを実行し、セッションに進行中のトランザクションがすでに存在する場合、Teradata JDBC Driverでは、アプリケーションのSQLリクエストを実行する前にBTを実行する必要がありません。

TERAモードでは、BTとETのペアを入れ子にすることができ、データベースは入れ子レベルを追跡します。最も外側のBT/ETペアによりトランザクション スコープが定義されます。データベースには実際のトランザクション入れ子がないため、内側のBT/ETペアによるトランザクションへの影響はありません。トランザクションをコミットするには、入れ子がアンワインドされるまでETコマンドを繰り返し実行する必要があります。Teradataワイヤー プロトコル ビット(上述)は、入れ子がアンワインドされ、トランザクションが完了していることを示します。アプリケーションがTERAモードでConnection.commitメソッドを呼び出すと、Teradata JDBC Driverは、入れ子がアンワインドされてトランザクションが完了するまでETコマンドを繰り返し実行します。

まれな場合ですが、アプリケーションがベスト プラクティスに従わず、トランザクション管理コマンドを明示的に実行することがあります。そのようなアプリケーションでは、BT、ET、ABORT、COMMIT、またはROLLBACKなどのトランザクション管理コマンドを実行する前に、自動コミットをオフにする必要があります。アプリケーションには、有効なトランザクション モードで適切なコマンドを実行する役割があります。TERAモードのコマンドは、BT、ET、およびABORTです。ANSIモードのコマンドは、COMMITとROLLBACKです。アプリケーションでは、自動コミットがオフのTERAモードでトランザクションを開く場合には特に注意する必要があります。自動コミットがオフのTERAモードでアプリケーションがSQLリクエストを実行する場合、セッションに進行中のトランザクションがないと、Teradata JDBC DriverはアプリケーションのSQLリクエストを実行する前にBTを自動的に実行します。したがってアプリケーションでは、BTを実行してトランザクションを開始することのないようにする必要があります。

// 望ましくないBT/ETネスティングを示すTERAモードの例

con.setAutoCommit(false);

stmt.execute("BT"); // BTは、この前にJDBCドライバによって自動的に実行され、ネストされたBTを生成する

stmt.execute("insert into mytable1 values(1, 2)");

stmt.execute("insert into mytable2 values(3, 4)");

sstmt.execute("ET"); // ネスティングを巻き戻す

stmt.execute("ET"); // トランザクションを完了する

// BT/ETネストを回避する方法を示すTERAモードの例

con.setAutoCommit(false);

stmt.execute("insert into mytable1 values(1, 2)"); // この前にJDBCドライバによってBTが自動的に実行されます

stmt.execute("insert into mytable2 values(3, 4)");

stmt.execute("ET"); // トランザクションの完了

上記の例はどれもベスト プラクティスを示していません。ベスト プラクティスとしては、トランザクション管理のために、アプリケーションで標準のJDBC APIメソッド(Connection.setAutoCommit、 Connection.commit、およびConnection.rollback)のみを呼び出すことが推奨されています。

// ベスト プラクティスを示す例

con.setAutoCommit(false);

stmt.execute("insert into mytable1 values(1, 2)");

stmt.execute("insert into mytable2 values(3, 4)");

con.commit();

SQLリテラルとSQLインジェクション攻撃

SQL文字列リテラルを含むSQLリクエストを作成する場合、アプリケーションは、単一引用符を適切にエスケープする必要があります。SQL文字列リテラルは単一引用符で囲みます(例:'New York')。SQL文字列リテラル内で単一引用符を使用するには、単一引用符を繰り返す必要があります(例: 'Joe"s Diner')。

ユーザー入力が直接SQLテキスト文字列内に代入されるような、ユーザー入力に基づくSQLリクエストを作成するアプリケーションは、SQLインジェクション攻撃に対して弱いことがあります。

例えば、アプリケーションが、ユーザーの姓を入力するように指示し、その姓の人間を全員探す問合わせを作成するとします。

String sql = "SELECT * FROM customer WHERE lastname = '" + lastname + "'"

この例では、SQLテキストのハードコード部分に、SQL文字列リテラルの両側で使用する単一引用符が指定されていることに注意してください。この手法が有効なのは、ユーザーの入力値に単一引用符が指定されていない場合に限ります。

しかし、ユーザーが姓として"O'Malley"と指定すると、アプリケーションは間違って次の問合わせを作成します。この問合わせは、構文エラーとしてデータベースに拒否されます。

SELECT * FROM customer WHERE lastname = 'O'Malley'

SQLインジェクション攻撃は、アプリケーション コード内のこの種の不備を利用して、不正を実行します。例えば、悪意ある入力値には、次のようなものがあります。

 x';delete from important_table;select 'x

この結果、アプリケーションは、次のSQLテキスト文字列を作成します。

SELECT * FROM customer WHERE lastname = 'x';delete from important_table;select 'x'

この例で、悪意あるユーザーは、入力値として、その両側に、ハードコードされた単一引用符と対となって動作する値が来るような入力値を注意深く選択しています。データベースは、このSQL文字列の実行に成功します。悪意あるユーザーが、重要な表への書き込みアクセスを実行できたら、この重要な表から行がすべて削除され、サービス妨害が実行されてしまいます。

アプリケーションは、単一引用符を処理し、SQLリクエストを適切に作成するように、コーディングされる必要があります。

インジェクション攻撃に対する最も一般的な保護方法としては、ユーザーがSQLテキストを変更しないように、プリペアード文を使用することを推奨します。この結果、ユーザーの入力値は、あくまで、プリペアード文のバインド パラメータとして使用されます。

アプリケーションがプリペアード文を使用できない場合、例えば、データ定義言語(DDL)コマンドの作成などの場合、ユーザーの入力値を妥当性検査してエスケープすることを推奨します。例:

JDBCエスケープ句

JDBCエスケープ句処理が有効になっている場合、Teradata JDBC Driverは、エスケープ構文を探し、この構文を、データベースのネイティブSQL構文に変換します。この結果、どのデータベースからも独立したエスケープ構文が作成されます。

JDBCエスケープ句処理のデフォルトはENABLEDです。次の各メソッドを呼び出せば、クラスStatementおよびRowSetで、エスケープ句処理を無効にできます。

次に、エスケープ句の一般構文を記載します。

{keyword parameters...}

Teradata JDBC Driverでは、次のタイプのエスケープ句がサポートされています。

日付と時刻のリテラル

リテラル タイプ

フォーマット

注記

Date

{d 'yyyy-mm-dd'}

 

Time

{t 'hh:mm:ss'}

 

Timestamp

{ts 'yyyy-mm-dd hh:mm:ss'}
{ts 'yyyy-mm-dd hh:mm:ss.f'}

小数点と小数桁は省略されるか、または1桁~6桁の小数が小数点の後に指定されます。

スカラー関数

次の表は、Teradata JDBC DriverによりサポートされるJDBCエスケープ構文スカラー関数のリストです。

数値関数

戻り値

注記

{fn ABS(number)}

numberの絶対値

 

{fn ACOS(float)}

floatのアークコサイン(単位: ラジアン)

 

{fn ASIN(float)}

floatのアークサイン(単位: ラジアン)

 

{fn ATAN(float)}

floatのアークタンジェント(単位: ラジアン)

 

{fn ATAN2(y, x)}

y / xのアークタンジェント(単位: ラジアン)

パラメータの順序はJDBC API仕様とは異なります。

{fn CEILING(number)}

number以上の最小の整数

Teradata Database 14.0およびTeradata JDBC Driver 15.00.00.22以降で使用できます

{fn COS(float)}

floatラジアンのコサイン

 

{fn COT(float)}

floatラジアンのコタンジェント

Teradata JDBC Driver 15.00.00.22以降で使用できます

{fn DEGREES(number)}

numberラジアンの度数

Teradata JDBC Driver 15.00.00.22以降で使用できます

{fn EXP(float)}

efloat

 

{fn FLOOR(number)}

number以下の最大の整数

Teradata Database 14.0およびTeradata JDBC Driver 15.00.00.22以降で使用できます

{fn LOG(float)}

eの自然対数(底float)

 

{fn LOG10(float)}

floatの10を底とした対数

Teradata JDBC Driver 15.00.00.22以降で使用できます

{fn MOD(integer1, integer2)}

integer1 / integer2の余り

 

{fn PI()}

定数pi、3.14159...とほぼ等しい

 

{fn POWER(number, integer)}

numberinteger

Teradata Database 14.0およびTeradata JDBC Driver 15.00.00.22以降で使用できます

{fn RADIANS(number)}

number度数のラジアン

Teradata JDBC Driver 15.00.00.22以降で使用できます

{fn RAND(seed)}

0 ≤値< 1に相当するランダムfloat値

seedは無視されます。Teradata Database 14.0およびTeradata JDBC Driver 15.00.00.22以降で使用できます

{fn ROUND(number, places)}

numberを小数点以下places桁に丸める

Teradata Database 14.0およびTeradata JDBC Driver 15.00.00.22以降で使用できます

{fn SIGN(number)}

numberが負の場合は-1; numberが0の場合は0; numberが正の場合は1

Teradata Database 14.0およびTeradata JDBC Driver 15.00.00.22以降で使用できます

{fn SIN(float)}

floatラジアンのサイン

 

{fn SQRT(float)}

floatの平方根

 

{fn TAN(float)}

floatラジアンのタンジェント

 

{fn TRUNCATE(number, places)}

numberを小数点以下places桁に切り捨て

Teradata Database 14.0およびTeradata JDBC Driver 15.00.00.22以降で使用できます

文字列関数

戻り値

注記

{fn ASCII(string)}

stringの最初の文字のASCIIコード

Teradata Database 14.0およびTeradata JDBC Driver 15.00.00.22以降で使用できます

{fn CHAR(code)}

ASCII codeを持つ文字

Teradata Database 14.0およびTeradata JDBC Driver 15.00.00.22以降で使用できます

{fn CHAR_LENGTH(string)}

stringの文字の長さ

Teradata Database 14.0およびTeradata JDBC Driver 15.00.00.22以降で使用できます

{fn CHARACTER_LENGTH(string)}

stringの文字の長さ

Teradata Database 14.0およびTeradata JDBC Driver 15.00.00.22以降で使用できます

{fn CONCAT(string1, string2)}

string1string2を連結して形成される文字列

 

{fn DIFFERENCE(string1, string2)}

string1string2のSoundexコードに基づいてこれらの音声的な類似性を示す0~4の間の数

戻り値が大きいほど音声的な類似性が高いことを示します。0は類似性なし、4は高い類似性を示します。Teradata Database 14.0およびTeradata JDBC Driver 15.00.00.22以降で使用できます

{fn INSERT(string1, position, length, string2)}

lengthでのstring1position文字数セグメントをstring2に置き換えることで形成される文字列。

Teradata Database 15.0およびTeradata JDBC Driver 15.00.00.22以降で使用できます

{fn LCASE(string)}

stringに含まれるすべての大文字をそれらの小文字に置き換えることで形成される文字列。

 

{fn LEFT(string, count)}

countの左端のstringの文字

Teradata JDBC Driver 15.00.00.22以降で使用できます

{fn LENGTH(string)}

stringの文字の長さ

 

{fn LOCATE(string1, string2)}

string2string1が最初に出現する位置

string2string1が含まれない場合は0を返します。

{fn LTRIM(string)}

stringから先頭のスペースを削除することで形成される文字列。

 

{fn OCTET_LENGTH(string)}

stringのオクテット単位での長さ。

Teradata Database 14.0およびTeradata JDBC Driver 15.00.00.22以降で使用できます

{fn POSITION(string1 IN string2)}

string2string1が最初に出現する位置

string2string1が含まれない場合は0を返します。Teradata Database 14.0およびTeradata JDBC Driver 15.00.00.22以降で使用できます

{fn REPEAT(string, count)}

stringcount回繰り返すことで形成される文字列。

Teradata Database 15.0およびTeradata JDBC Driver 15.00.00.22以降で使用できます

{fn REPLACE(string1, string2, string3)}

string2で出現するすべてのstring1string3に置き換えることで形成される文字列。

Teradata Database 14.0およびTeradata JDBC Driver 15.00.00.22以降で使用できます

{fn RIGHT(string, count)}

countの右端のstringの文字。

Teradata Database 15.0およびTeradata JDBC Driver 15.00.00.22以降で使用できます

{fn RTRIM(string)}

stringから末尾のスペースを削除することで形成される文字列。

 

{fn SOUNDEX(string)}

stringのSoundexコード。

 

{fn SPACE(count)}

count数のスペースを含んでいる文字列。

Teradata Database 14.0およびTeradata JDBC Driver 15.00.00.22以降で使用できます

{fn SUBSTRING(string, position, length)}

lengthでのstringposition文字数のセグメント。

 

{fn UCASE(string)}

stringに含まれるすべての小文字をそれらの大文字に置き換えることで形成される文字列。

 

システム関数

戻り値

注記

{fn DATABASE()}

現在のデフォルトのデータベース名

 

{fn IFNULL(expression, value)}

expressionがNULLでない場合はexpression、またはvalueがNULLの場合はexpression

 

{fn USER()}

ログオン ユーザー名

SET QUERY_BANDがプロキシ ユーザーを設定した後は、現在の認証済みユーザー名はログオン ユーザー名と異なる場合があります。

時刻/日付関数

戻り値

注記

{fn CURDATE()}

現在の日付

 

{fn CURRENT_DATE()}

現在の日付

Teradata JDBC Driver 15.00.00.22以降で使用できます

{fn CURRENT_TIME()}

現在の時刻

Teradata JDBC Driver 15.00.00.22以降で使用できます

{fn CURRENT_TIMESTAMP()}

現在の日付と時刻

Teradata JDBC Driver 15.00.00.22以降で使用できます

{fn CURTIME()}

現在の時刻

 

{fn DAYOFMONTH(date)}

dateで月の日付を示す1~31の整数。

 

{fn EXTRACT(field FROM value)}

日付および/または時刻fieldvalueコンポーネント。

fieldは以下のいずれかになります。

  • YEAR
  • MONTH
  • DAY
  • HOUR
  • MINUTE
  • SECOND

Teradata JDBC Driver 15.00.00.22以降で使用できます

{fn HOUR(time)}

timeの時間を示す0~23の整数。

 

{fn MINUTE(time)}

timeの分を示す0~59の整数。

 

{fn MONTH(date)}

dateの月を示す1~12の整数。

 

{fn NOW()}

現在の日付と時刻

 

{fn SECOND(time)}

timeの秒を示す0~59の整数。

 

{fn TIMESTAMPADD(interval, count, timestamp)}

count interval(s)をtimestampに加えることで形成されるタイムスタンプ。

intervalは以下のいずれかになる必要があります。

  • SQL_TSI_YEAR
  • SQL_TSI_MONTH
  • SQL_TSI_DAY
  • SQL_TSI_HOUR
  • SQL_TSI_MINUTE
  • SQL_TSI_SECOND

{fn TIMESTAMPDIFF(interval, timestamp1, timestamp2)}

intervaltimestamp2よりも多くあるtimestamp1数。

intervalは以下のいずれかになる必要があります。

  • SQL_TSI_YEAR
  • SQL_TSI_MONTH
  • SQL_TSI_DAY
  • SQL_TSI_HOUR
  • SQL_TSI_MINUTE
  • SQL_TSI_SECOND

{fn WEEK(date)}

dateの年の何週目にあたるかを表す1から53までの整数

Teradata Advanced SQL Engine 16.20およびTeradata JDBC Driver 16.20.00.05以降で使用できます

{fn YEAR(date)}

dateの年。

 

変換関数

データ タイプ変換のエスケープ句では、次に示す構文を使用します。

{fn CONVERT(value, SQLtype)}

SQLtypeは、次の表に示したデータ タイプのいずれかになります。

変換関数

DATE

DECIMAL

DOUBLE

INTEGER

FLOAT

LONGVARCHAR

SMALLINT

TIME

TIMESTAMP

TINYINT

VARBINARY

VARCHAR

CHAR

BINARY

LIKE述部エスケープ文字

Teradata JDBC Driverは、次の構文を使用して、LIKE SQL文のエスケープ文字をサポートします。

{escape 'escape-character'}

このエスケープ句は、エスケープ文字を指定します。この結果、SQL LIKE文でワイルドカード(%_等)を文字どおりに解釈できます。

外部結合

Teradata JDBC Driverは、外部結合に対応したエスケープ句をサポートしています。次に、外部結合の構文を記載します。

{oj outer-join}

この言語ルールでは、外部結合の構造は次のとおりです。

table {LEFT|RIGHT|FULL} OUTER JOIN {table | outer-join}

ON search-condition

ストアド プロシージャの呼び出し

ストアド プロシージャの呼び出しに対応したエスケープ句構文は、次のとおりです。

{call procedure_name(?, ?, . . .)}

エスケープ句では、次のことが真になります。

Teradata Tools and Utilities 08.01.00およびTeradata JDBC Driver Release 03.03.00では、JDBCエスケープ構文を使用しないSQL CALL文に括弧を追加しないことになりました。この動作変更により、JDBCエスケープ構文を使用しない場合、アプリケーションのSQL文を変更しないままデータベースに渡せるようになりました。

推奨は、アプリケーションが必ず、標準のベンダー独立JDBCエスケープ構文を使用して、ストアド プロシージャを呼び出すことです。JDBCエスケープ構文を使用してストアド プロシージャを呼び出す場合、例えば、次のような場合、

{call storedproc}

Teradata JDBC Driverは、必要に応じてSQL文を変更して、データベースの正確な構文要件を満たします。このリリースのTeradata JDBC Driverでは、ストアド プロシージャの呼び出しに対応したJDBCエスケープ構文機能は変更されません。

アプリケーションが、不注意により旧リリースのTeradata JDBC Driverの動作に依存しており、JDBCエスケープ構文を使用しないSQL CALL文の変更を期待していた場合、次のどちらかにアプリケーションを変更する必要があります。

接続関数

次に示す表は、Connection.nativeSQLメソッドで使用するためのJDBCエスケープ構文関数の一覧です。この関数を使用して、接続に関する情報を取得したり接続の動作を制御したりします。情報を提供する関数により、ローカルにキャッシュされた情報を返したり、データベースとのラウンド トリップを回避したりします。

接続関数

戻り値

注記

{fn teradata_amp_count}

データベース システムのAMPの数

 

{fn teradata_getloglevel}

現在のログ レベル

LOG接続パラメータのいずれかの値を返します。

{fn teradata_logon_sequence_number}

セッションのログオン シーケンス番号(可能な場合)

 

{fn teradata_provide(config_response)}

JSON形式のConfig Responseパーセルの内容

Teradata JDBC Driver 17.10.00.09以降で使用できます。

{fn teradata_provide(connection_id)}

接続ID(接続で使用するプライベート オブジェクトのハッシュ コード)

Teradata JDBC Driver 16.00.00.30以降で使用できます。

{fn teradata_provide(default_connection)}

これがJavaストアド プロシージャで使用するJDBCデフォルト接続かどうかを示すtrueまたはfalse

Teradata JDBC Driver 16.00.00.30以降で使用できます。

{fn teradata_provide(gateway_config)}

JSON形式のGateway Configパーセルの内容

Teradata JDBC Driver 17.10.00.09以降で使用できます。

{fn teradata_provide(governed)}

GOVERN接続パラメータ設定を示すtrueまたはfalse

Teradata JDBC Driver 20.00.00.07以降で使用できます。

{fn teradata_provide(host_id)}

セッションのホストID

select LogicalHostId from DBC.SessionInfoV where Session = SessionNoと同じ値を返します。

Teradata JDBC Driver 16.00.00.03以降で使用できます。

{fn teradata_provide(java_charset_name)}

CLIENT_CHARSET接続パラメータで指定されるJava文字セット名。または、CLIENT_CHARSET接続パラメータが省略されている場合、セッション文字セットに対応するJava文字セット名。

Teradata JDBC Driver 16.00.00.03以降で使用できます。

{fn teradata_provide(local_address)}

接続のTCPソケットのローカル アドレス

JDBCデフォルト接続に空の文字列を返します。

Teradata JDBC Driver 16.00.00.30以降で使用できます。

{fn teradata_provide(local_port)}

接続のTCPソケットのローカル ポート

JDBCデフォルト接続に空の文字列を返します。

Teradata JDBC Driver 16.00.00.30以降で使用できます。

{fn teradata_provide(original_hostname)}

元の指定されたデータベースのホスト名

JDBCデフォルト接続に空の文字列を返します。

Teradata JDBC Driver 16.00.00.30以降で使用できます。

{fn teradata_provide(redrive_active)}

この接続のRedriveがアクティブかどうかを示すtrueまたはfalse

Teradata JDBC Driver 16.00.00.30以降で使用できます。

{fn teradata_provide(remote_address)}

接続されるデータベース ノードのホスト名(可能な場合)とIPアドレス

JDBCデフォルト接続に空の文字列を返します。

Teradata JDBC Driver 16.00.00.30以降で使用できます。

{fn teradata_provide(remote_port)}

データベースのTCPポート番号

JDBCデフォルト接続に空の文字列を返します。

Teradata JDBC Driver 16.00.00.30以降で使用できます。

{fn teradata_provide(rnp_active)}

この接続のRecoverable Network Protocolがアクティブかどうかを示すtrueまたはfalse

Teradata JDBC Driver 16.00.00.30以降で使用できます。

{fn teradata_provide(session_charset_code)}

セッション文字セット コード

Teradata JDBC Driver 16.00.00.03以降で使用できます。

{fn teradata_provide(session_charset_name)}

セッション文字セット名

HELP SESSIONで出力される列7の"Character Set"と同じ値を返します。

Teradata JDBC Driver 16.00.00.03以降で使用できます。

{fn teradata_provide(transaction_mode)}

セッションのトランザクション モード(ANSIまたはTERA)

Teradata JDBC Driver 16.00.00.03以降で使用できます。

{fn teradata_provide(uses_check_workload)}

trueまたはfalse は、この接続がCHECK WORKLOADを使用するかどうかを示します。

Teradata JDBC Driver 20.00.00.07以降で使用できます。

{fn teradata_session_number}

セッション番号

select Sessionと同じ値を返します。

{fn teradata_socket_info}

データベースへのTCPソケット接続に関する情報の文字列

返される情報の形式が変更される場合があります。アプリケーションが特定の形式の情報に依存しないようにする必要があります。

{fn teradata_useansidate}

空の文字列

java.sql.Date値をデフォルトのY2K問題に対応した動作に切り替え、PreparedStatement/CallableStatementのsetDateメソッドまたはsetObjectメソッドに渡した後、宛先のCHAR/VARCHAR列およびパラメータに送信します。

{fn teradata_useintegerdate}

空の文字列

java.sql.Date値をY2K問題非対応の動作に切り替え、PreparedStatement/CallableStatementのsetDateメソッドまたはsetObjectメソッドに渡した後、宛先のCHAR/VARCHAR列およびパラメータに送信します。

要求スコープ関数

次に示す表は、Connection.createStatementConnection.prepareStatement、またはConnection.prepareCallメソッドで使用するためのJDBCエスケープ構文関数の一覧です。これらの関数を使用して、対応するStatement、PreparedStatement、またはCallableStatementを制御します。これらの関数は、これらの関数が指定されている特定のSQLリクエストに限定されます。

要求スコープ関数

戻り値

注記

{fn teradata_auto_out_param}

空の文字列

StatementおよびPreparedStatementが未設定のパラメータ マーカーの妥当性検査をスキップし、未設定のパラメータ マーカーをOUTパラメータとして自動的に処理するように指定します。これにより、StatementおよびPreparedStatementを使用してOUTパラメータでストアド プロシージャを呼び出すことができます。

この関数がCallableStatementで使用されている場合は、例外がスローされます。

Teradata JDBC Driver 15.10.00.09以降で使用できます。

{fn teradata_call_param_rs}

空の文字列

StatementまたはPreparedStatementを使用してストアド プロシージャの呼び出しが実行された場合、ストアド プロシージャのINOUTおよびOUTパラメータの出力値を結果セットとして返すように指定します。

この関数がCallableStatementで使用されている場合は、例外がスローされます。

Teradata JDBC Driver 15.10.00.09以降で使用できます。

{fn teradata_failfast}

空の文字列

このSQLリクエストをワークロード管理ルールまたはスロットルによって遅延させるのではなく、拒否(「フェイル ファスト」)するように指定します。

Teradata Database 14.10およびTeradata JDBC Driver 14.00.00.17以降で使用できます。

{fn teradata_provide(request_scope_catalog_json)}

空の文字列

ResultSetMetaData.getCatalogNameメソッドが、データベースから受信したすべての結果セット列メタデータを含むJSON文字列を返すように指定します。

Teradata JDBC Driver 20.00.00.06以降で使用できます

{fn teradata_provide(request_scope_column_name_off)}

空の文字列

ResultSetMetaData.getColumnNameメソッドがAS句名(可能な場合)、列名(可能な場合)、または列のタイトルを返すように指定し、ResultSetMetaData.getColumnLabelメソッドが列のタイトルを返すように指定します。

このSQLリクエストのCOLUMN_NAME接続パラメータよりも優先されます。

Teradata JDBC Driver 16.00.00.28以降で使用できます。

{fn teradata_provide(request_scope_column_name_on)}

空の文字列

StatementInfoパーセル サポートが有効な場合、ResultSetMetaData.getColumnNameメソッドが列名(可能な場合)を返すように指定し、ResultSetMetaData.getColumnLabelメソッドがAS句名(可能な場合)、列名(可能な場合)、または列のタイトルを返すように指定します。

StatementInfoパーセル サポートが無効な場合、この関数は効果がありません。

このSQLリクエストのCOLUMN_NAME接続パラメータよりも優先されます。

Teradata JDBC Driver 16.00.00.28以降で使用できます。

{fn teradata_provide(request_scope_maybenull_on)}

空の文字列

StatementInfoパーセルのサポートが使用可能な場合、ResultSetMetaData.isNullableメソッドの戻り値が、データベースによって提供されるStatementInfoパーセルのMayBeNullフィールドから決定されることを指定します。

StatementInfoパーセル サポートが無効な場合、この関数は効果がありません。

このSQLリクエストのMAYBENULL接続パラメータよりも優先されます。

Teradata JDBC Driver 16.00.00.28以降で使用できます。

{fn teradata_provide(request_scope_refresh_rsmd)}

空の文字列

PreparedStatementまたはCallableStatementが実行された場合、ResultSetMetaDataを更新するように指定します。

データ型ST_GEOMETRY、DATASET STORAGE FORMAT AVRO、およびDATASET STORAGE FORMAT CSVを返すPreparedStatementまたはCallableStatementのこの関数で、接続に対してSET TRANSFORM GROUPコマンドを実行するように指定します。

Teradata JDBC Driver 16.20.00.06以降で使用できます。

{fn teradata_untrusted}

空の文字列

SQLリクエストを信頼済みでないとしてマークします。詳細については、信頼済みSQLとクエリー バンドの偽装を参照してください。

クエリー バンド

Teradata Database 12.0では、クエリー バンドが導入されています。クエリー バンドは、SQLリクエストの発行元を識別する目的でセッションまたはトランザクションに対して設定できる、名前/値のペアのセットです。

クエリー バンドが必要な理由

使用状況のシナリオ

あるWebベースのJavaアプリケーションでは、接続プールがWebサーバー上に存在しています。プール内のすべての接続は、同じTeradataユーザー(例:appuser)向けのものです。このようなユーザーは、一般にロボット ユーザーと呼ばれています。このアプリケーションは、ブラウザのCookieを使用して、Webブラウザを使用しているエンドユーザーを識別します。

ユーザーがWebページ上のリンクをクリックするたびに、ユーザーのWebブラウザは、Webサーバーに要求を送信し、要求の一部としてブラウザのCookieを送信します。Webサーバーは、要求を処理するためにアプリケーションを呼び出します。アプリケーションは、Teradataへの問合わせの実行依頼などの、何らかの処理を行ないます。Teradataに問合わせを実行依頼する直前に、アプリケーションは、まず以下の文を実行依頼します。

PreparedStatement pstmt = conn.prepareStatement("Set QUERY_BAND=? FOR TRANSACTION");

pstmt.setString (1, "custIdFromCookie=46734832");

pstmt.executeUpdate ();

次に、アプリケーションは以下のような問合わせを実行依頼できるようになります。

SELECT col1, col2 FROM TableName WHERE condition1 = ? AND condition2 = ?

問合わせによって結果セットが返された後、アプリケーションはHTMLページをWebブラウザに出力します。

使用状況のシナリオ

構文

クエリー バンドは、文字列内で名前=値のペアとしてデータベースに渡されます。アプリケーションでは、名前と値の両方を定義します。クエリー バンドは、トランザクションやセッションに対して設定できます。Teradata Database 15.10から、デフォルトのクエリー バンドをプロファイルに設定できます。

上記のSQLコマンドの詳細は、「Teradata Vantage™ SQLデータ定義言語」の説明を参照してください。

クエリー バンドの構文規則は以下のとおりです。

PreparedStatementを使用せずSQL文字列リテラルを使用してトランザクションにクエリー バンドの値を設定する手順:

stmt = conn.createStatement();

stmt.executeUpdate("SET QUERY_BAND='Org=Finance; report=EndOfYear; universe=west;' FOR TRANSACTION");

PreparedStatementを使用してトランザクションにクエリー バンドの値を設定する手順:

pstmt=conn.prepareStatement("SET QUERY_BAND=? FOR TRANSACTION");

pstmt.setString (1, "Org = Finance; report = EndOfYear; universe=west;);

pstmt.executeUpdate ();

トランザクションのクエリー バンドの値をクリアする手順:

stmt = conn.CreateStatement();

stmt.executeUpdate("SET QUERY_BAND = NONE for TRANSACTION");

クエリー バンド値の取得

Teradata JDBC Driver 14.00.00.33から、JDK 6.0以降の環境で実行されているアプリケーションは次のメソッドを使用してクエリー バンド値を取得できます。

最初のメソッドは、すべてのアクティブなクエリー バンドの名前/値ペアを含むPropertiesオブジェクトを返します。2番目のメソッドは、指定した名前のクエリー バンド値を返します。

複数のコンテキストで同じクエリー バンド名がアクティブな場合は、該当するクエリー バンドの値の1つのみがこれらのメソッドにより返されます。トランザクション クエリー バンドの値はセッション クエリー バンドの値よりも優先し、後者の値はプロファイル クエリー バンドの値よりも優先します。プロファイル クエリー バンドの値は、Teradata Database 15.10およびTeradata JDBC Driver 15.00.00.23からサポートされます。

推奨されるクエリー バンドの名前

JDBC 4.0の仕様で定義されている標準のクライアント情報プロパティ名は、以下のとおりです。

標準のクライアント情報プロパティに対応する情報をクエリー バンドの名前/値のペアとして使用する必要のあるアプリケーションの場合は、標準のクライアント情報プロパティの名前をクエリー バンドの名前として使用することを推奨します。

アプリケーションで使用できる名前は、標準のクライアント情報プロパティ名だけに限られているわけではありません。標準のクライアント情報プロパティに対応しないクエリー バンドの名前/値のペアを使用するアプリケーションの場合は、データベースでサポートされている範囲のクエリー バンド名であれば、自由に使用することが可能です。

クエリー バンドの使用

信頼済みSQLとクエリー バンドの偽装

Teradata Database 13.10から、信頼済みセッションの拡張セキュリティによって、現在のプロキシ ユーザーの設定や削除にSET QUERY_BAND SQLが使用されないようにしています。これは、すべてのSQLリクエストをTrusted (信頼済み)、またはUntrusted (未信頼)として分類することで実現しています。

すべてのSQLリクエストを独自に作成し、その要求をすべて信頼するアプリケーションでは、この機能を使用しません。この機能は、信頼済みのSQLリクエストと未信頼のSQLリクエストの両方を利用して作業するアプリケーションに使用します。未信頼のSQLリクエストの一例として、ユーザーから取得したSQLリクエストが挙げられます。未信頼のSQLリクエストには、悪意のあるユーザーからのSQLインジェクション攻撃が含まれている可能性があります。

信頼済みのSQLリクエストと未信頼のSQLリクエストを利用して作業するアプリケーションは、次に示すプロセスに従って、この機能を使用します。

このエスケープ関数は、SQLリクエストを信頼済みから未信頼にダウングレードします。SQLリクエストを未信頼から信頼済みにアップグレードするメカニズムは、SQLインジェクション攻撃に利用される可能性があるために用意されていません。

日付、時刻、タイムスタンプ値とタイムゾーン

java.sql.Date、Time、およびTimestampオブジェクト

次に示す表では、java.sql.Date、TimeおよびTimestampクラスのvalueOfメソッドと、toStringメソッドの動作を説明しています。

メソッド

動作

valueOf

JVMデフォルト タイムゾーンに相対する値を生成する。

toString

JVMデフォルト タイムゾーンに相対する値を出力する。

Teradata JDBC DriverのPreparedStatementおよびCallableStatement setterメソッドのsetDate、setTime、およびsetTimestampはそれぞれ、Teradata Databaseにjava.sql.Date、Time、またはTimestamp値を送信します。各値は、java.sql.Date、Time、またはTimestampオブジェクトのtoStringメソッドが、setterメソッドの呼び出し時点に出力する内容と一致します。つまり、値はsetterメソッドの呼び出し時点のJVMデフォルト タイムゾーンに相対的なものになります。

そのため、アプリケーションはjava.sql.Date、TimeまたはTimestampオブジェクトの作成時や、setDate、setTimeまたはsetTimestampの呼び出し時に、JVMデフォルト タイムゾーンが有効であることを確認する必要があります。

Date値の送信

メソッド

Calendarを使用しない

Calendarを使用

setDate

SQLデータ タイプのDATE値をデータベースに送信します。

 

DATE値は、setterメソッドが呼び出された時点でjava.sql.DateオブジェクトのtoStringメソッドが出力する内容と一致します。つまり、この値は、setterメソッドが呼び出された時点でのJVMデフォルト タイムゾーンに相対するということです。

SQLデータ タイプのDATE値をデータベースに送信します。

 

Teradata JDBC Driverバージョン13.00.00.09以降では、setDateのCalendar引数を使用して、java.sql.Date値をUTCに変換してから、DATE値をデータベースに送信します。このため、宛先の列がDATEの場合には予期したとおりに動作しますが、宛先の列がTIMESTAMPやTIMESTAMP WITH TIME ZONEの場合には予期しない結果が現れます。

 

Teradata JDBC Driverバージョン13.00.00.09より前のバージョンを使用すると、Calendar引数は無視され、メソッドの動作はCalendarを使用しないsetDateとまったく同じになります。

Teradata DatabaseにはDATE WITH TIME ZONEデータ タイプが用意されていないため、アプリケーションからはCalendarを使用しないsetDateのみを呼び出して、Calendarを使用するsetDateを呼び出さないことが推奨されます。

Time値の送信

メソッド

Calendarを使用しない

Calendarを使用

setTime

SQLデータ タイプのTIME値をデータベースに送信します。

 

TIME値は、setterメソッドが呼び出された時点でTimeオブジェクトのtoStringメソッドが出力する内容と一致します。つまり、この値は、setterメソッドが呼び出された時点でのJVMデフォルト タイムゾーンに相対するということです。

 

TIME宛先列での使用を目的としており、TIME WITH TIME ZONE宛先列での使用は意図されていません。

SQLデータ タイプのTIME WITH TIME ZONEをデータベースに送信します。

 

TIME部は、setterメソッドが呼び出された時点でTimeオブジェクトのtoStringメソッドが出力する内容と一致します。つまり、この値は、setterメソッドが呼び出された時点でのJVMデフォルト タイムゾーンに相対するということです。

 

Calendar引数のタイムゾーンは、個別のTIME ZONEフィールドとして送信されます。Teradata JDBC DriverはアプリケーションからどのようなCalendar引数でも受け取ります。つまり、Teradata JDBC Driverは、Timeオブジェクトが元々作成されたときに有効であったタイムゾーンに一致するように、Calendar引数のタイムゾーンを制限できませんし、しません。

 

TIME WITH TIME ZONE宛先列での使用を目的としており、TIME宛先列での使用は意図されていません。

Time値には付随する日付がないため、夏時間がTime値に適用されることはありません。また、カレンダー引数のタイムゾーンの夏時間は無視されます。TIME ZONEフィールドは、UTCから直接計算したタイムゾーンのオフセットとしてデータベースに送信されます(夏時間の影響は受けません)。

Timestamp値の送信

メソッド

Calendarを使用しない

Calendarを使用

setTimestamp

SQLデータ タイプのTIMESTAMP値をデータベースに送信します。

 

TIMESTAMP値は、setterメソッドが呼び出された時点でTimestampオブジェクトのtoStringメソッドが出力する内容と一致します。つまり、この値は、setterメソッドが呼び出された時点でのJVMデフォルト タイムゾーンに相対するということです。

 

TIMESTAMP宛先列での使用を目的としており、TIMESTAMP WITH TIME ZONE宛先列での使用は意図されていません。

SQLデータ タイプのTIMESTAMP WITH TIME ZONEをデータベースに送信します。

 

TIMESTAMP部は、setterメソッドが呼び出された時点でTimestampオブジェクトのtoStringメソッドが出力する内容と一致します。つまり、この値は、setterメソッドが呼び出された時点でのJVMデフォルト タイムゾーンに相対するということです。

 

Calendar引数のタイムゾーンは、個別のTIME ZONEフィールドとして送信されます。Teradata JDBC DriverはアプリケーションからどのようなCalendar引数でも受け取ります。つまり、Teradata JDBC Driverは、Timestampオブジェクトが元々作成されたときに有効であったタイムゾーンに一致するように、Calendar引数のタイムゾーンを制限できませんし、しません。

 

TIMESTAMP WITH TIME ZONE宛先列での使用を目的としており、TIMESTAMP宛先列での使用は意図されていません。

夏時間は、Timestamp値には使用されません。データベースは、TIMESTAMP WITH TIME ZONE値を、UTCから直接計算したオフセットとして格納します。データベースとの一貫性を保つために、Teradata JDBC DriverではCalendar引数のタイムゾーンの夏時間を無視します。TIME ZONEフィールドは、UTCから直接計算したタイムゾーンのオフセットとしてデータベースに送信されます(夏時間の影響は受けません)。

TIMESTAMP WITH TIME ZONE値が夏時間を反映する必要があるアプリケーションでは、カスタム タイムゾーンを使用したCalendar引数を指定する必要があります。

例えば、東部標準時間を示すために、アプリケーションでは次に示すようにCalendar引数を指定します。

prepstmt.setTimestamp(index, timestamp,
  Calendar.getInstance(TimeZone.getTimeZone("GMT-05:00")));

東部夏時間を示すには、アプリケーションでは次に示すようにCalendar引数を指定します。

prepstmt.setTimestamp(index, timestamp,
  Calendar.getInstance(TimeZone.getTimeZone("GMT-04:00")));

TIME WITH TIME ZONEおよびTIMESTAMP WITH TIME ZONE値を送信するためのsetObjectの使用

Teradata JDBC Driver 14.10.00.26以降、アプリケーションはPreparedStatementまたはCallableStatement setObjectメソッドを使用して、Struct値をTIME WITH TIME ZONEまたはTIMESTAMP WITH TIME ZONEデータ タイプとして疑問符パラメータ マーカーにバインドできます。Teradata JDBC Driver 14.10.00.26より前のバージョンでは、TIME WITH TIME ZONE値をバインドするにはsetTime(Time, Calendar)メソッドが必要でした。TIMESTAMP WITH TIME ZONE値をバインドするにはsetTimestamp(Timestamp, Calendar)メソッドが必要でした。これらのメソッドは引き続き以前と同様に機能します。アプリケーションが新しい機能を使用する必要があるのは、setTime/setTimestampメソッドがサポートしていない場合、特にUDTのTIME WITH TIME ZONEおよびTIMESTAMP WITH TIME ZONEの属性値とPeriodデータ タイプをバインドする場合のみです。

アプリケーションは各データ値を、2つの属性を持つjava.sql.Struct値として作成する必要があります。Structの最初の属性にはjava.sql.Timeまたはjava.sql.Timestamp値を指定する必要があります。Structの2番目の属性にはTimeZone属性で目的のタイム ゾーンを指定するCalendar値を指定する必要があります。この方法で作成したStructは、Calendar引数を持つsetTime/setTimestampメソッドと同じように処理されます。Calendar引数を持つsetTime/setTimestampメソッドの動作の説明については、上記の文を参照してください。

java.sql.Structインターフェースを実装するクラスは、アプリケーションが提供する必要があります。

public class MyStruct implements java.sql.Struct

{

  private String m_typeName ;

  private Object [] m_attributes ;

  public MyStruct(String typeName, Object [] attributes) { m_typeName = typeName ; m_attributes = attributes ; }

  public String getSQLTypeName() { return m_typeName ; }

  public Object [] getAttributes() { return m_attributes ; }

  public Object [] getAttributes(java.util.Map map) { return m_attributes ; }

}

アプリケーションはこのクラスのインスタンスを使用して、TIME WITH TIME ZONEおよびTIMESTAMP WITH TIME ZONE値を作成します。

Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT+08:00")) ;

Time time = Time.valueOf( ...

Timestamp ts = Timestamp.valueOf( ...

// 2つの列を持つテーブルを想定する。TIME WITH TIME ZONEとTIMESTAMP WITH TIME ZONE

PreparedStatement ps = con.prepareStatement ("INSERT INTO MyTable VALUES(?,?)") ;

ps.setObject(1, new MyStruct("TIME WITH TIME ZONE", new Object [] {time, cal})) ;

ps.setObject(2, new MyStruct("TIMESTAMP WITH TIME ZONE", new Object [] {ts, cal})) ;

DATE、TIMEおよびTIMESTAMP値の受信

Teradata JDBC Driver 13.00.00.09以降では、ResultSetインターフェースとCallableStatementインターフェースのCalendar引数を使用したgetDate、getTime、およびgetTimestampメソッドによってCalendar引数のTimeZone属性が変更され、データベースから受信したTIME WITH TIME ZONEとTIMESTAMP WITH TIME ZONEのデータ値のタイムゾーン部分が提供されます。

さらに、Teradata JDBC Driverバージョン13.00.00.09以降では、ResultSetインターフェースとCallableStatementインターフェースのgetDate、getTime、およびgetTimestampメソッドにより、データベースから受信するDATE、TIME、およびTIMESTAMPのデータ値の暗黙的なデータ タイプ変換も提供されます。

データベースのTIME値には最大6桁の小数秒が格納されていることがありますが、java.sql.Time値はミリ秒まで(3桁の小数秒)の制限があります。アプリケーションはgetTimestampメソッドを使用してデータベースのTIME値を取得することで、java.sql.Time値の制限を回避できます。getTimestampメソッドは、TIMEからjava.sql.Timestampへの暗黙的なデータ タイプの変換を提供します。また、TIME値の小数秒のすべての桁数が維持されます。

次の表では、ResultSetおよびCallableStatementインタフェースのgetDate、getTime、およびgetTimestampメソッドの動作を説明しています。 データベースとのデータ値の適切なラウンドトリップ交換を確実にするために、(意図していない使用)と指定されている組み合わせは避けてください。

メソッド

DATE値の受信

TIME値の受信

TIME WITH TIME ZONE値の受信

TIMESTAMP値の受信

TIMESTAMP WITH TIME ZONE値の受信

getDate(Calendarを使用しない)

DATE値は、java.sql.DateオブジェクトのtoStringメソッドが出力する内容と一致するように、java.sql.Dateオブジェクトに変換される。

許容されない。

許容されない。

最初に、TIMESTAMP値は時間フィールドを00:00:00に設定することでDATE値に変換される。

 

次にDATE値は、java.sql.DateオブジェクトのtoStringメソッドが出力する内容と一致するように、java.sql.Dateオブジェクトに変換される。

最初に、TIMESTAMP WITH TIME ZONE値は、タイムゾーン フィールドを切り捨てることでTIMESTAMP値に変換される。

 

次に、TIMESTAMP値は時間フィールドを00:00:00に設定することでDATE値に変換される。

 

最後にDATE値は、java.sql.DateオブジェクトのtoStringメソッドが出力する内容と一致するように、java.sql.Dateオブジェクトに変換される。

 

(意図していない使用)

getDate(Calendarを使用)

最初に、DATE値は時間フィールド00:00:00と結合されてから、Calendar引数のTimeZoneと結合され、TIMESTAMP WITH TIME ZONE値が作成される。

 

次に、TIMESTAMP WITH TIME ZONE値が、UTCのTIMESTAMP値に変換される。

 

次に、TIMESTAMP値は時間フィールドを00:00:00に設定することでDATE値に変換される。

 

最後にDATE値は、java.sql.DateオブジェクトのtoStringメソッドが出力する内容と一致するように、java.sql.Dateオブジェクトに変換される。

 

(意図していない使用)

許容されない。

許容されない。

最初に、TIMESTAMP値はCalendar引数のTimeZoneと結合され、TIMESTAMP WITH TIME ZONE値が作成される。

 

次に、TIMESTAMP WITH TIME ZONE値が、UTCのTIMESTAMP値に変換される。

 

次に、TIMESTAMP値は時間フィールドを00:00:00に設定することでDATE値に変換される。

 

最後にDATE値は、java.sql.DateオブジェクトのtoStringメソッドが出力する内容と一致するように、java.sql.Dateオブジェクトに変換される。

 

(意図していない使用)

最初に、TIMESTAMP WITH TIME ZONE値は、タイムゾーン フィールドを切り捨てることでTIMESTAMP値に変換される。

 

それとは別に、タイムゾーン フィールドがCalendar引数のTimeZoneに格納される。

 

次に、TIMESTAMP値は時間フィールドを00:00:00に設定することでDATE値に変換される。

 

最後にDATE値は、java.sql.DateオブジェクトのtoStringメソッドが出力する内容と一致するように、java.sql.Dateオブジェクトに変換される。

getTime(Calendarを使用しない)

許容されない。

TIME値は、TimeオブジェクトのtoStringメソッドが出力する内容と一致するように、Timeオブジェクトに変換される。

 

TIME値の小数秒は、Timeオブジェクトの精度がミリ秒までなので3桁にまで切り捨てられる。

最初に、TIME WITH TIME ZONE値は、タイムゾーン フィールドを切り捨てることでTIME値に変換される。

 

次にTIME値は、TimeオブジェクトのtoStringメソッドが出力する内容と一致するように、Timeオブジェクトに変換される。

 

TIME値の小数秒は、Timeオブジェクトの精度がミリ秒までなので3桁にまで切り捨てられる。

 

(意図していない使用)

最初に、TIMESTAMP値は日付フィールドを1970-01-01に設定することでTIME値に変換される。

 

次にTIME値は、TimeオブジェクトのtoStringメソッドが出力する内容と一致するように、Timeオブジェクトに変換される。

 

TIME値の小数秒は、Timeオブジェクトの精度がミリ秒までなので3桁にまで切り捨てられる。

最初に、TIMESTAMP WITH TIME ZONE値は、タイムゾーン フィールドを切り捨てることでTIMESTAMP値に変換される。

 

次に、TIMESTAMP値は日付フィールドを1970-01-01に設定することでTIME値に変換される。

 

最後にTIME値は、TimeオブジェクトのtoStringメソッドが出力する内容と一致するように、Timeオブジェクトに変換される。

 

TIME値の小数秒は、Timeオブジェクトの精度がミリ秒までなので3桁にまで切り捨てられる。

 

(意図していない使用)

getTime(Calendarを使用)

許容されない。

最初に、TIME値はCalendar引数のTimeZoneと結合され、TIME WITH TIME ZONE値が作成される。

 

次に、TIME WITH TIME ZONE値が、UTCのTIME値に変換される。

 

最後にTIME値は、TimeオブジェクトのtoStringメソッドが出力する内容と一致するように、Timeオブジェクトに変換される。

 

TIME値の小数秒は、Timeオブジェクトの精度がミリ秒までなので3桁にまで切り捨てられる。

 

(意図していない使用)

最初に、TIME WITH TIME ZONE値は、タイムゾーン フィールドを切り捨てることでTIME値に変換される。

 

それとは別に、タイムゾーン フィールドがCalendar引数のTimeZoneに格納される。

 

次にTIME値は、TimeオブジェクトのtoStringメソッドが出力する内容と一致するように、Timeオブジェクトに変換される。

 

TIME値の小数秒は、Timeオブジェクトの精度がミリ秒までなので3桁にまで切り捨てられる。

最初に、TIMESTAMP値はCalendar引数のTimeZoneと結合され、TIMESTAMP WITH TIME ZONE値が作成される。

 

次に、TIMESTAMP WITH TIME ZONE値が、UTCのTIMESTAMP値に変換される。

 

次に、TIMESTAMP値は日付フィールドを1970-01-01に設定することでTIME値に変換される。

 

最後にTIME値は、TimeオブジェクトのtoStringメソッドが出力する内容と一致するように、Timeオブジェクトに変換される。

 

TIME値の小数秒は、Timeオブジェクトの精度がミリ秒までなので3桁にまで切り捨てられる。

 

(意図していない使用)

最初に、TIMESTAMP WITH TIME ZONE値は、タイムゾーン フィールドを切り捨てることでTIMESTAMP値に変換される。

 

それとは別に、タイムゾーン フィールドがCalendar引数のTimeZoneに格納される。

 

次に、TIMESTAMP値は日付フィールドを1970-01-01に設定することでTIME値に変換される。

 

最後にTIME値は、TimeオブジェクトのtoStringメソッドが出力する内容と一致するように、Timeオブジェクトに変換される。

 

TIME値の小数秒は、Timeオブジェクトの精度がミリ秒までなので3桁にまで切り捨てられる。

getTimestamp(Calendarを使用しない)

最初に、DATE値は時間フィールド00:00:00と結合され、TIMESTAMP値が作成される。

 

次にTIMESTAMP値は、TimestampオブジェクトのtoStringメソッドが出力する内容と一致するように、Timestampオブジェクトに変換される。

最初に、TIME値は日付フィールド1970-01-01と結合され、TIMESTAMP値が作成される。

 

次にTIMESTAMP値は、TimestampオブジェクトのtoStringメソッドが出力する内容と一致するように、Timestampオブジェクトに変換される。

最初に、TIME WITH TIME ZONE値は、タイムゾーン フィールドを切り捨てることでTIME値に変換される。

 

次に、TIME値は日付フィールド1970-01-01と結合され、TIMESTAMP値が作成される。

 

最後にTIMESTAMP値は、TimestampオブジェクトのtoStringメソッドが出力する内容と一致するように、Timestampオブジェクトに変換される。

 

(意図していない使用)

TIMESTAMP値は、TimestampオブジェクトのtoStringメソッドが出力する内容と一致するように、Timestampオブジェクトに変換される。

最初に、TIMESTAMP WITH TIME ZONE値は、タイムゾーン フィールドを切り捨てることでTIMESTAMP値に変換される。

 

次にTIMESTAMP値は、TimestampオブジェクトのtoStringメソッドが出力する内容と一致するように、Timestampオブジェクトに変換される。

 

(意図していない使用)

getTimestamp(Calendarを使用する)

最初に、DATE値は時間フィールド00:00:00と結合されてから、Calendar引数のTimeZoneと結合され、TIMESTAMP WITH TIME ZONE値が作成される。

 

次に、TIMESTAMP WITH TIME ZONE値が、UTCのTIMESTAMP値に変換される。

 

最後にTIMESTAMP値は、TimestampオブジェクトのtoStringメソッドが出力する内容と一致するように、Timestampオブジェクトに変換される。

 

(意図していない使用)

最初に、TIME値はCalendar引数のTimeZoneと結合され、TIME WITH TIME ZONE値が作成される。

 

次に、TIME WITH TIME ZONE値が、UTCのTIME値に変換される。

 

次に、TIME値は日付フィールド1970-01-01と結合され、TIMESTAMP値が作成される。

 

最後にTIMESTAMP値は、TimestampオブジェクトのtoStringメソッドが出力する内容と一致するように、Timestampオブジェクトに変換される。

 

(意図していない使用)

最初に、TIME WITH TIME ZONE値は、タイムゾーン フィールドを切り捨てることでTIME値に変換される。

 

それとは別に、タイムゾーン フィールドがCalendar引数のTimeZoneに格納される。

 

次に、TIME値は日付フィールド1970-01-01と結合され、TIMESTAMP値が作成される。

 

最後にTIMESTAMP値は、TimestampオブジェクトのtoStringメソッドが出力する内容と一致するように、Timestampオブジェクトに変換される。

最初に、TIMESTAMP値はCalendar引数のTimeZoneと結合され、TIMESTAMP WITH TIME ZONE値が作成される。

 

次に、TIMESTAMP WITH TIME ZONE値が、UTCのTIMESTAMP値に変換される。

 

最後にTIMESTAMP値は、TimestampオブジェクトのtoStringメソッドが出力する内容と一致するように、Timestampオブジェクトに変換される。

 

(意図していない使用)

最初に、TIMESTAMP WITH TIME ZONE値は、タイムゾーン フィールドを切り捨てることでTIMESTAMP値に変換される。

 

それとは別に、タイムゾーン フィールドがCalendar引数のTimeZoneに格納される。

 

次にTIMESTAMP値は、TimestampオブジェクトのtoStringメソッドが出力する内容と一致するように、Timestampオブジェクトに変換される。

セッションのDateForm

セッションの現在のDateFormでは、主に、DATE値をデータベースからTeradata JDBC Driverに転送する方法を指示します。また、セッションの現在のDateFormは、データベースがPreparedStatement/CallableStatement setString値から宛先のDATE列またはパラメータへの暗黙の変換を実行する方法を指示します。

推奨されるDateFormは、ANSIDateです。セッションの現在のDateFormがANSIDateの場合、データベースはDATE値を10文字の値("YYYY-MM-DD"の形式)でTeradata JDBC Driverに送信します。データベースはPreparedStatement setString値から宛先のDATE列またはパラメータへのY2Kに準拠していない暗黙の変換を拒否します。(この場合、Teradata Databaseエラー2666が返されます。)

レガシー アプリケーションには、IntegerDate DateFormが用意されています。セッションの現在のDateFormがIntegerDateの場合、データベースはDATE値を4バイトのバイナリ値でTeradata JDBC Driverに送信します。データベースはPreparedStatement setString値から宛先のDATE列またはパラメータへのY2Kに準拠していない暗黙の変換を許可します。(この場合、データベースは年の世紀の桁に19を使用します。)

Teradata Databaseユーザーの場合、CREATE USERコマンド、またはMODIFY USERコマンドを使って、DateForm属性を指定できます。セッションが初めて確立されると、セッションの現在のDateFormは、あればユーザーのDateFormに、またはDBSControlレコードにDATEFORMパラメータで定義されているシステム デフォルトに設定されます。

HELP SESSIONコマンドは、セッションの現在のDateFormを表示します。

セッションの現在のDateFormは、SQLコマンドのSET SESSION DATEFORM=ANSIDATEまたはSET SESSION DATEFORM=INTEGERDATEを実行して変更できます。Javaアプリケーションの場合、アプリケーション サーバー内のプール接続を使ってSET SESSION DATEFORMコマンドを実行することは推奨されません。

Teradata DatabaseからのDATE値の受信

Teradata JDBC DriverのTTU 8.1以前のリリースでは、セッションの現在のDateFormがANSIDateの場合、DATE値として正確さに欠ける情報が渡されていました。データベースから受信したDATA値については、ResultSetMetadata getColumnTypeメソッドはjava.sql.Types.CHAR、ResultSetMetadata getColumn ClassNameメソッドはjava.lang.String、ResultSet getObjectメソッドはString値を返していました。

TTU 8.2 Teradata JDBC Driver 3.4から、セッションの現在のDateFormがANSIDateの場合でも、DATE値としてより正確な情報が渡されるようになりました。データベースから受信したDATA値については、ResultSetMetadata getColumnTypeメソッドはjava.sql.Types.DATE、ResultSetMetadata getColumnClassNameメソッドはjava.sql.Date、ResultSet getObjectメソッドはjava.sql.Date値を返します。

Teradata DatabaseへのDATE値の送信

Teradata JDBC Driver 12.0およびTeradata Database 12.0以降、Teradata JDBC Driverはjava.sql.Date値を、ANSIDate DateFormを使用したDATE値として、データベースに送信するようになりました。これは、PreparedStatement/CallableStatement setDateまたはsetObjectメソッドで指定されたjava.sql.Date値にY2K準拠の暗黙の変換を実行し、宛先のCHAR/VARCHAR列およびパラメータに送信します。

Y2Kに準拠していない動作を必要とするレガシー アプリケーションは、Teradata JDBC Driver 12.0に導入されている、Teradata固有のエスケープ構文を使用できます。アプリケーションがPreparedStatement/CallableStatement setDateまたはsetObjectメソッドを呼び出した時点に有効であったDateFormは、データベースに送信される対応するDATA値に使用されるDateFormです。

// DateForm=IntegerDateは、java.sql.DateからCHAR/VARCHARへの

// 非Y2K準拠の暗黙的な変換を提供する

connection.nativeSQL("{fn teradata_useintegerdate}");

// DateForm=ANSIDateは、java.sql.DateからCHAR/VARCHARへの

// Y2K準拠の暗黙的な変換を提供する(デフォルトの動作)

connection.nativeSQL("{fn teradata_useansidate}");

DateFormがセッションの現在のDateFormと一致するDATE値を受け取るのは、Teradata Databaseのリリース12.0から12.0.1.1のみです。セッションの現在のDateFormによって次のようになります。

この制限は、Teradata Database 12.0.1.2からなくなりました。

Session Time Zone

すべてのTIMEおよびTIMESTAMPデータは、明示的または暗黙的にタイムゾーンに関連付けられています。ユーザーのデフォルトのタイムゾーンは、データベースとの接続(セッション)が確立された当初有効になります。ユーザーにデフォルトのタイムゾーンが定義されていない場合、接続の当初有効になるのはシステムのデフォルトのタイムゾーンです。接続のタイムゾーンは、SET TIME ZONE文で変更できます。詳細は、『Teradata Database SQLデータ定義言語』の「SET TIME ZONE」を参照してください。

PreparedStatementインターフェースは、setTimeおよびsetTimestampメソッドをCalendar引数のある場合とない場合の両方を定義します。

TIMEテーブルとTIMESTAMPテーブルの列およびストアド プロシージャ パラメータは、タイムゾーン フィールド(TIME、TIME WITH TIME ZONE、TIMESTAMP、およびTIMESTAMP WITH TIME ZONE)を付けて、または付けずに宣言できます。

表12 は、データベースで入力データ値とその暗黙的、または明示的に関連付けられているタイムゾーンを組み合わせて使われる方法について示すほか、TIMEまたはTIMESTAMPの宛先に保存される結果データ値を判断するために、宛先がタイムゾーン フィールドありとなしのどちらで宣言されているかを示します。

表12: TIMEまたはTIMESTAMPの宛先に保存されるデータ値の判断

接続のタイムゾーン

Calendar引数が使用されているか?

宛先データ型(表列またはストアド プロシージャ パラメータ)にタイムゾーン フィールドが含まれているか?

結果

UTC+00:00

いいえ

  • Calendar引数を持たないPreparedStatement setTime
  • Calendar引数を持たないPreparedStatement setTimestamp

いいえ

  • TIME
  • TIMESTAMP

このため、宛先データ値はUTCに相対的

データベースは入力データ値が接続のタイムゾーンに相対的と見なす。接続のタイムゾーンはUTCであるため、データベースは変換を実行しない

setTime(int index, Time x) x = 17:10:47:046が生成する列値:17:10:47.046000

setTimestamp(int index, Timestamp x) x = 2006-04-12 17:10:47:046が生成する列値:12.04.06 17:10:47.046000

-10:00

いいえ

  • Calendar引数を持たないPreparedStatement setTime
  • Calendar引数を持たないPreparedStatement setTimestamp

いいえ

  • TIME
  • TIMESTAMP

このため、宛先データ値はUTCに相対的

データベースは入力データ値が接続のタイムゾーンに相対的と見なす。データベースは入力データ値をUTCに変換してから宛先にデータ値を渡す

setTime(int index, Time x) x = 17:10:47:046が生成する列値:03:10:47.046000

setTimestamp(int index, Timestamp x) x = 2006-04-12 17:10:47:046が生成する列値:2006-04-13 03:10:47.046000

関連なし

はい

  • Calendar引数を持つPrepared Statement setTime
  • Calendar引数を持つPrepared Statement setTimestamp

いいえ

  • TIME
  • TIMESTAMP

このため、宛先データ値はUTCに相対的

データベースは入力データ値が明示的なタイムゾーンを含んでいると見なす。データベースは入力データ値をUTCに変換してから宛先にデータ値を渡す

setTime(int index, Time x, Calendar cal) x = 17:10:47:046 Calendar time zone = -08:00が生成する列値:01:10:47.046000

setTimestamp(int index, Time x, Calendar cal) x = 2006-04-12 17:10:47:046; Calendar time zone = -08:00が生成する列値:2006-04-13 01:10:47.046000

関連なし

はい

  • Calendar引数を持つPrepared Statement setTime
  • Calendar引数を持つPrepared Statement setTimestamp

はい

  • TIME WITH TIME ZONE
  • TIMESTAMP WITH TIME ZONE

データベースは入力データ値が明示的なタイムゾーンを含んでいると見なす。データベースは変換を実行せずに、入力データ値とそのタイムゾーンを宛先に渡す

setTime(int index, Time x, Calendar cal) x = 17:10:47:046 Calendar time zone = -08:00が生成する列値:17:10:47.046000-08:00

setTimestamp(int index, Time x, Calendar cal) x = 2006-04-12 17:10:47:046 Calendar time zone = -08:00が生成する列値:2006-04-12 17:10:47.046000‑08:00

UTC+00:00

いいえ

  • Calendar引数を持たないPrepared Statement setTime
  • Calendar引数を持たないPrepared Statement setTimestamp

はい

  • TIME WITH TIME ZONE
  • TIMESTAMP WITH TIME ZONE

データベースは入力データ値が接続のタイムゾーンに相対的と見なす。データベースは変換を実行せずに、入力データ値と接続のタイムゾーンを宛先に渡す

setTime(int index, Time x) x = 17:10:47:046が生成する列値:17:10:47.046000+00:00

setTimestamp(int index, Time x) x = 2006-04-12 17:10:47:046が生成する列値:2006-04-12 17:10:47.046000‑00:00

-10:00

いいえ

  • Calendar引数を持たないPrepared Statement setTime
  • Calendar引数を持たないPrepared Statement setTimestamp

はい

  • TIME WITH TIME ZONE
  • TIMESTAMP WITH TIME ZONE

データベースは入力データ値が接続のタイムゾーンに相対的と見なす。データベースは変換を実行せずに、入力データ値と接続のタイムゾーンを宛先に渡す

setTime(int index, Time x) x = 17:10:47:046が生成する列値:17:10:47.046000-10:00

setTimestamp(int index, Time x) x = 2006-04-12 17:10:47:046が生成する列値:2006-04-12 17:10:47.046000‑10:00

ストアド プロシージャTIMEとTIMESTAMP INOUTパラメータ

データベースは、INOUTパラメータのバインド入力値と同じデータ型属性に正確に従うように、ストアド プロシージャで設定された出力値をINOUTパラメータに強制します。

TIME WITH TIME ZONEおよび/またはTIMESTAMP WITH TIME ZONE型のINOUTパラメータを持つストアド プロシージャを呼び出す際、アプリケーションはCalendar引数を付けた、CallableStatementメソッドのsetTimeまたはsetTimestampをそれぞれ使って値をバインドする必要があります。Calendar引数を使用しない場合、データベースはエラー3996 (文字列データの右を切り捨て)を返します。また、setNullメソッドを使用して、TIME WITH TIME ZONEまたはTIMESTAMP WITH TIME ZONE型のINOUTパラメータにNULL値をバインドすることはできません。代わりに、setTimeまたはsetTimestampメソッドにCalendar引数を付けて、NULLデータ値を指定する必要があります。

現在のところ、データベースは値の小数部の桁数を減らす、TIMEおよびTIMESTAMP値の暗黙的、または明示的なデータ型変換機能を提供していませんし、許可していません。

Teradata JDBC Driver接続パラメータのTNANOとTSNANOは、このデータベースの制限に対応するために用意されています。TNANOおよびTSNANO接続パラメータは、すべてのTIMEデータ値に同じ小数桁数(TNANOで指定)を強制するほか、すべてのTIMESTAMPデータ値にINOUTパラメータのバインド入力値と同じデータ型属性を強制するため、使いづらいパラメータです。

この制約は、特にストアド プロシージャのTIMEとTIMESTAMPのINOUTパラメータに影響します。その理由は、INOUTパラメータの出力値をストアド プロシージャで設定するときに、その出力値がINOUTパラメータのバインド入力値と完全に同じデータ型属性になるように、データベースが強制する方法にあります。

例えば、このような問題は、次のストアド プロシージャに生じます。

REPLACE PROCEDURE MyProc(INOUT p1 TIMESTAMP(2), INOUT p1 TIMESTAMP(5))

PreparedStatementまたはCallableStatementパラメータにバインドされているNULL TIMEとTIMESTAMP値について、TNANOまたはTSNANO接続パラメータが指定されていない場合、Teradata JDBC Driverのデフォルト動作では、NULL TIMEまたはTIMESTAMP値の小数桁数はそれぞれ0と見なされます。このデフォルト動作は、宣言で小数桁数が使われているかどうかに関係なく、すべての考えられるINSERTおよびUPDATEの宛先TIME列とTIMESTAMP列に適用されます。このデフォルトの動作は、1以上の小数桁数で宣言されているストアド プロシージャのINOUTパラメータには適用されません。

データベースの機能が強化されるまで、TIMEおよびTIMESTAMP INOUTパラメータを伴うストアド プロシージャを呼び出すアプリケーションは、次のガイドラインに従う必要があります。

  1. TNANOおよびTSNANO接続パラメータを指定する必要がある
  2. ストアド プロシージャのTIMEおよびTIMESTAMP INOUTパラメータの小数桁数は、すべて同じに宣言し、それぞれTNANOおよびTSNANO接続パラメータと一致するように宣言する必要があります。

複文要求

複文要求は、複数のSQLコマンドをセミコロンで区切って入力した1つのSQL文で実行できます。複文要求は、Statement.execute()メソッドで実行できます。アプリケーションは、Statement.getResultSet()またはStatement.getUpdateCount()メソッドを使って結果を取得できるほか、複数の結果が返される場合は、Statement.getMoreResults()メソッドを使ってこれらの結果を繰り返し取得する必要があります。

データベースのマクロ

データベースのマクロは、1つまたは複数のSQL文で構成されます。マクロは、Statement.execute()メソッドで実行できます。アプリケーションは、Statement.getResultSet()またはStatement.getUpdateCount()メソッドを使って結果を取得できるほか、複数の結果が返される場合は、Statement.getMoreResults()メソッドを使ってこれらの結果を繰り返し取得する必要があります。

ユーザー定義関数と外部ストアド プロシージャの作成

ユーザー定義関数

CREATE/REPLACE FUNCTION文を使用して、ユーザー定義関数(UDF)を作成します。この文は、常に結果セットを返します。この文の実行には、Statement.executeQuery()メソッドやStatement.execute()メソッドを使用します。

UDFの詳細は、『Teradata Database SQL外部ルーチン プログラミング』の、ユーザー定義関数の説明を参照してください。

外部ストアド プロシージャ

CREATE/REPLACE PROCEDURE文を使用して、外部ストアド プロシージャ(XSP)を作成します。これは、Statement.execute()やStatement.executeUpdate()メソッドを使って実行できます。Statement.getWarnings()メソッドは、Statementオブジェクトで返されたSQLWarningの取得に使用できます。

XSPの詳細は、『Teradata Database SQL外部ルーチン プログラミング』の、外部ストアド プロシージャの説明を参照してください。

Java XSPの詳細は、この章の「Java外部ストアド プロシージャ」セクションを参照してください。

JDBCでのソース ファイルの場所

Teradata JDBC Driverは、サーバーまたはクライアント上に格納されているソース ファイルからUDF、UDM、またはXSPを作成できます。クライアント上に格納されているソース ファイルは、クライアント ノードからサーバー ノードに転送する必要があります。

セキュリティの目的で、Teradata JDBC Driverでは、すべてのリソースをロードするためにclasspathが使用されます。そのため、クライアント上のソース ファイルをclasspathに指定する必要があります。classpathを設定した後、Teradata JDBC Driverはソース ファイルをサーバー ノードに転送できるようになります。

ユーザー定義型

ユーザー定義型(UDT)の作成

Teradata JDBC Driverを使用したUDTの作成は、その他の種類のデータベース オブジェクトの作成方法と同じように実行します。Javaアプリケーションでは、StatementのexecuteメソッドやexecuteUpdateメソッドを呼び出すことで、目的に適ったCREATEコマンドを発行できます。

CREATE/REPLACE TYPEコマンドは、UDTを作成するために使用します。データベースによってCREATE/REPLACE TYPEコマンドが実行されると、アプリケーションはStatementのgetWarningsメソッドから得られる一連のSQLWarningオブジェクトとして、コマンドからの出力メッセージを取得できます。

CREATE TYPEコマンドの後には、目的に合わせてCREATE METHOD、CREATE FUNCTION、CREATE TRANSFORMおよびCREATE ORDERINGコマンドを実行して型を完全に作成します。

UDMとUDFの作成時、メソッド定義を含むソース ファイルがクライアント側にあることを"CREATE METHOD"文や"CREATE FUNCTION"文で示している場合、そのソース ファイルはclasspath上のリソースとして使用可能にしておく必要があります。Teradata JDBC Driverは、classpathから自動的にリソースをロードして、データベースに転送します。

上記のSQLコマンドの詳細は、「Teradata Vantage™ SQLデータ定義言語」の説明を参照してください。

データベースとのUDT値の転送

Teradata JDBC Driverでは、次に示すUDTの機能をサポートしています。

UDTメタデータ

UDTメタデータは、DatabaseMetaData、ResultSetMetaData、およびParameterMetaDataメソッドから使用できます。

MetaDataメソッド

UDTメタデータ

説明

DatabaseMetaData

getAttributes

あるスキーマとカタログで使用できる、UDTのある型のある属性の説明を取得する(Teradataでサポートされているカタログがないため、カタログはNull)。UDT型のUDT属性の場合、型名は完全に修飾される。UDT属性型はATTR_TYPE_NAME列に返される。

DatabaseMetaData

getUDTs

特定のスキーマで定義されているUDTの説明を取得する。スキーマ固有のUDTSの型はSTRUCTとDISTINCT。(JAVA_OBJECT型はTeradataではサポートされていない。)UDT名はTYPE_NAME列に返される。接続のタイプ マップにUDTのエントリが存在する場合、UDTにマップされているJavaクラス名はCLASS_NAME列に返される。

DatabaseMetaData

getColumns

指定したスキーマとカタログ内で使用できるテーブルの列の説明を取得する。(Teradataでサポートされているカタログがないため、カタログはNULLになる。)UDT型の列の場合、型名は完全に修飾される。UDT名はTYPE_NAME列に返される。

DatabaseMetaData

getProcedureColumns

指定したスキーマとカタログのストアド プロシージャ パラメータと結果列の説明を取得する。(Teradataでサポートされているカタログがないため、カタログはNULLになる。)UDT型の列の場合、型名は完全に修飾される。UDT名はTYPE_NAME列に返される。

DatabaseMetaData

getBestRowIdentifier

指定したスキーマとカタログの行を一意に識別する、テーブルの最適列セットの説明を取得する。(Teradataでサポートされているカタログがないため、カタログはNULLになる。)UDT型の列の場合、型名は完全に修飾される。UDT名はTYPE_NAME列に返される。

DatabaseMetaData

getTypeInfo

このデータベースでサポートされている標準SQLタイプすべての説明を取得する。TeradataはSQL DISTINCT型と構造型をサポートしているため、返される結果セットには、DISTINCTのTYPE_NAMEとjava.sql.Types.DISTINCTのDATA_TYPEを持つ1行、およびSTRUCTのTYPE_NAMEとjava.sql.Types.STRUCTのDATA_TYPEを持つ1行が含まれる。

ResultSetMetaData

getColumnTypeName

列の型がUDTの場合、完全修飾型名が返される。

ResultSetMetaData

getColumnClassName

接続タイプがUDTであり、接続のタイプ マップにUDTのエントリが存在する場合、UDTにマップされているJavaクラス名が返される。

ParameterMetaData

getParameterTypeName

列の型がUDTの場合、完全修飾型名が返される。

ParameterMetaData

getParameterClassName

接続タイプがUDTであり、接続のタイプ マップにUDTのエントリが存在する場合、UDTにマップされているJavaクラス名が返される。

UDTの制約

Geospatial (地理空間)データ タイプを、java.sql.Structで使用することはできません。

ResultSetMetaDataのgetColumnDisplaySizeメソッドは、STRUCTURED型UDTの列値にゼロを返します。

UDTの属性がLOBデータ タイプの場合、アプリケーションはInputStreamを使用してLOB属性の値を設定することはできません。アプリケーションでは、Blob値またはClob値(それぞれ、getBlobメソッドまたはgetClobメソッドで取得する)を使用してLOB属性の値を設定する必要があります。

Connection createStructメソッドで作成されたStructオブジェクトは、JDBCカスタム タイプのマッピングの対象とはなりません。そのgetAttributesメソッドは、作成時に指定された属性値を返します。

DISTINCTのUDTであるストアド プロシージャINOUTパラメータでは、カスタム タイプのマッピングはサポートされません。

PERIODデータ タイプ

Teradata Database 13.10とTeradata JDBC Driver 13.00.00.18からは、java.sql.StructでPERIODデータ タイプが使用できるようになりました。

アプリケーションは各Periodデータ値を、2つの属性を持つjava.sql.Struct値として作成する必要があります。最初の属性は期間の開始に、2番目の属性は期間の終了に対応します。PERIODデータ タイプについての詳細は、「Teradata Vantage™ データ タイプおよびリテラル」のPERIODデータ タイプについての説明を参照してください。

PERIOD(TIME WITH TIME ZONE)値を送信する例

java.sql.Structインターフェースを実装するクラスは、アプリケーションが提供する必要があります。

public class MyStruct implements java.sql.Struct

{

  private String m_typeName ;

  private Object [] m_attributes ;

  public MyStruct(String typeName, Object [] attributes) { m_typeName = typeName ; m_attributes = attributes ; }

  public String getSQLTypeName() { return m_typeName ; }

  public Object [] getAttributes() { return m_attributes ; }

  public Object [] getAttributes(java.util.Map map) { return m_attributes ; }

}

アプリケーションはこのクラスのインスタンスを使用して、PERIOD(TIME WITH TIME ZONE)値を作成します。

Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT+08:00")) ;

Time time1 = Time.valueOf( ...

Time time2 = Time.valueOf( ...

// Teradata JDBC Driver 14.10.00.26 以降で使用可能

Struct timetz1 = new MyStruct("TIME WITH TIME ZONE", new Object [] {time1, cal}) ;

Struct timetz2 = new MyStruct("TIME WITH TIME ZONE", new Object [] {time2, cal}) ;

// 2つの列を持つテーブルを想定する。INTEGERとPERIOD(TIME WITH TIME ZONE)

PreparedStatement ps = con.prepareStatement ("INSERT INTO MyTable VALUES(?,?)") ;

ps.setInt(1, id) ;

ps.setObject(2, new MyStruct("PERIOD(TIME WITH TIME ZONE)", new Object [] {timetz1, timetz2})) ;

ARRAYデータ タイプ

Teradata Database 14.0とTeradata JDBC Driver 14.00.00.04からは、java.sql.ArrayインターフェースおよびSQL ARRAYデータ タイプがサポートされています。Teradata SQL ARRAYは、1つ以上の次元で定義されており、同じデータ タイプの多くの値をシーケンシャルに、あるいはマトリックスのようなフォーマットで保管する場合に使用されます。

配列の規則および制限

アプリケーションは、データベースに送信するjava.sql.Array値を作成するためにConnection createArrayOfメソッドを使用できます。createArrayOfメソッドのObject[]引数は、1次元のObject[]配列または多次元のObject[][][]...配列にできますが、配列は以下の規則に従う必要があります。

SQL ARRAYデータ タイプについての詳細は、「Teradata Vantage™ データ タイプおよびリテラル」のARRAY/VARRAYデータ タイプについての説明を参照してください。

XMLデータ タイプ

Teradata Database 14.10とTeradata JDBC Driver 14.00.00.19からは、java.sql.SQLXMLインターフェースおよびSQL XMLデータ タイプがサポートされています。アプリケーションはTeradata JDBC Driverを使用して、データベースへのXMLデータ送信や、データベースからのXMLデータ受信を実行できます。java.sql.SQLXMLインターフェースはJDK 6.0以降で使用できます。SQLXMLはJDK 5.0以前では使用できません。

SQLXMLの機能および制限

XML External Entity (XXE)対策

XMLライブラリーを使用するJavaアプリケーションは、ほとんどのJava XMLパーサーのデフォルト設定がプロセスXML外部エンティティーであるため、XXE攻撃に対して脆弱です。Teradata JDBC Driverは、DocumentBuilderFactoryを使用してデータベースから返されたXML値を解析します。 Teradata JDBC Driver 16.20.00.10から、DocumentBuilderFactoryにおけるDocument Type Definition(DTD)処理が無効になり、ほとんどのXMLエンティティ攻撃が阻止されます。アプリケーションでこの機能が必要な場合は、XXE_PROCESSING = ONの接続パラメータを指定してください。

JDK6およびJDK7の初期のビルドでは、DTD処理が無効になっているとNullPointerExceptionが発生するJava Bug(JDK-7157610)の影響を受けます。最善の解決策は、Java Bug(JDK-7157610)の修正が含まれるJDKのバージョンにアップグレードすることです。Java Bug(JDK-7157610)の回避策としては、XXE_PROCESSING=ONの接続パラメータを指定してください。

SQL XMLデータ タイプについての詳細は、「Teradata Vantage™ データ タイプおよびリテラル」のSQL XMLデータ タイプについての説明を参照してください。

NUMBERデータ タイプ

Teradata Database 14.0とTeradata JDBC Driver 14.00.00.09からは、SQL NUMBERデータ タイプがサポートされています。JDBCデータ タイプの識別子Types.NUMERICはSQL NUMBERデータ タイプに対応しています。

Teradata Database 14.0とTeradata JDBC Driver 14.00.00.09からは、アプリケーションがBigDecimal値をPreparedStatementパラメータ マーカーにバインドした場合、Teradata JDBC Driverはデフォルトの動作として、BigDecimal値をSQL NUMBERデータ タイプとしてデータベースに送信します。アプリケーションはこの動作を上書きして、BigDecimal値をSQL DECIMALデータ タイプとしてデータベースに送信するようTeradata JDBC Driverに強制できます。さらに、データベースから受信したSQL NUMBER値は、Types.NUMERIC、およびBigDecimal値としてアプリケーションに提供されます。

以前のソフトウェア バージョンでは、Teradata JDBC DriverはBigDecimal値をSQL DECIMALデータ タイプとしてデータベースに送信します。SQL NUMBERデータ タイプはサポートされていません。

PreparedStatement/CallableStatementメソッド

Teradata Database 14.0以降(NUMBERデータ タイプを使用)

Teradata Database 13.10以前

setBigDecimal

NUMBERとして送信

DECIMALとして送信

setObject (BigDecimalデータ値を含み、targetSqlType引数を含まない)

NUMBERとして送信

DECIMALとして送信

setObject (BigDecimalデータ値を含み、targetSqlType引数にTypes.NUMERICを含む)

NUMBERとして送信

DECIMALとして送信

setObject (BigDecimalデータ値を含み、targetSqlType引数にTypes.DECIMALを含む)

DECIMALとして送信

DECIMALとして送信

setNull (targetSqlType引数にTypes.NUMERICを含む)

NUMBERとして送信

DECIMALとして送信

setNull (targetSqlType引数にTypes.DECIMALを含む)

DECIMALとして送信

DECIMALとして送信

データベースでは、特定のパラメータ マーカーにバインドされたPreparedStatementバッチのすべてのデータ値を同じデータ タイプにする必要があります。アプリケーションは、パラメータ マーカーにバインドされたすべての値がNUMBERとDECIMALの組み合わせではなくいずれかになるように、null値と非null値を適切にバインドする必要があります。

SQL NUMBERデータ タイプについての詳細は、「Teradata Vantage™ データ タイプおよびリテラル」の数値データ タイプについての説明を参照してください。

INTERVALデータ タイプ

Teradata JDBC Driver 14.10.00.26以降、アプリケーションはPreparedStatementまたはCallableStatement setObjectメソッドを使用して、Struct値を疑問符パラメータ マークにINTERVALデータ タイプとしてバインドできます。Teradata JDBC Driver 14.10.00.26より前のバージョンでは、INTERVAL値をバインドするためにsetStringメソッド必要でした。setStringメソッドはINTERVAL値に対して引き続き以前と同じように機能します。アプリケーションが新しい機能を使用する必要があるのは、setStringメソッドが対応できない場合のみです。このような場合の例を次に示します。

アプリケーションは各INTERVALデータ値を、1つの属性を持つjava.sql.Struct値として作成する必要があります。Structの唯一の属性は、INTERVAL値の文字表現を含むString値にする必要があります。

アプリケーションは、String内のINTERVAの桁数がINTERVALデータ タイプのINTERVALのデフォルト桁数と一致するかを確認します。INTERVAL...SECONDデータ タイプの場合、アプリケーションはString内の小数点以下桁数がINTERVALデータ タイプのデフォルトの小数点以下桁数と一致するかも確認します。次の表に、SQLタイプの名前、および各INTERVAL データ タイプに必要な桁数を示します。

SQLタイプ名

INTERVAL桁数

小数点以下桁数

INTERVAL YEAR

2

0

INTERVAL YEAR TO MONTH

2

0

INTERVAL MONTH

2

0

INTERVAL DAY

2

0

INTERVAL DAY TO HOUR

2

0

INTERVAL DAY TO MINUTE

2

0

INTERVAL DAY TO SECOND

2

6

INTERVAL HOUR

2

0

INTERVAL HOUR TO MINUTE

2

0

INTERVAL HOUR TO SECOND

2

6

INTERVAL MINUTE

2

0

INTERVAL MINUTE TO SECOND

2

6

INTERVAL SECOND

2

6

java.sql.Structインターフェースを実装するクラスは、アプリケーションが提供する必要があります。

public class MyStruct implements java.sql.Struct

{

  private String m_typeName ;

  private Object [] m_attributes ;

  public MyStruct(String typeName, Object [] attributes) { m_typeName = typeName ; m_attributes = attributes ; }

  public String getSQLTypeName() { return m_typeName ; }

  public Object [] getAttributes() { return m_attributes ; }

  public Object [] getAttributes(java.util.Map map) { return m_attributes ; }

}

アプリケーションはこのクラスのインスタンスを使用して、INTERVAL値を作成します。

データベースの組み込み型EXTRACT関数の呼び出し例

この例では、INTERVAL YEAR TO MONTHとして56年3か月を送信します。EXTRACT YEAR FROM式によって値56が抽出されます。WHERE句の条件によって、年数が50を超えているかどうかがテストされます。この場合、単一行のResultSetが返され、そこに値'Y'が格納されています。

  PreparedStatement ps = con.prepareStatement("SELECT 'Y' WHERE EXTRACT(YEAR FROM ?) > 50") ;

  ps.setObject(1, new MyStruct("INTERVAL YEAR TO MONTH", new Object [] {"56-03"})) ;

  ResultSet rs = ps.executeQuery() ;

INTERVAL値の暗黙的なタイプ変換の例

この例では、INTERVAL YEAR TO MONTH宛先列にINTERVAL YEAR値を挿入し、データベースを利用してINTERVAL YEARからINTERVAL YEAR TO MONTHへの暗黙的なタイプ変換を実行します。

  // 単一のINTERVAL YEAR TO MONTH列を持つテーブルを想定する

  PreparedStatement ps = con.prepareStatement("INSERT INTO MyTable VALUES(?)") ;

  ps.setObject(1, new MyStruct("INTERVAL YEAR", new Object [] {"56"})) ;

  ps.executeUpdate() ;

PreparedStatementバッチにNULLと非NULL両方の間隔値を挿入する例

以下に、PreparedStatementバッチによってNULLおよび非NULLのINTERVAL YEAR値をINTERVAL YEAR宛先列に挿入する例を示します。

  // 単一のINTERVAL YEAR列を持つテーブルを想定する

  PreparedStatement ps = con.prepareStatement("INSERT INTO MyTable VALUES(?)") ;

  ps.setObject(1, new MyStruct("INTERVAL YEAR", new Object [] {"56"})) ;

  ps.addBatch() ;

  ps.setObject(1, new MyStruct("INTERVAL YEAR", new Object [] {null})) ;

  ps.addBatch() ;

  ps.executeBatch() ;

JSONデータ タイプ

Teradata Database 15.0およびTeradata JDBC Driver 15.00.00.11から、JSONデータ タイプがサポートされます。JDBC APIはまだ標準JSONデータ タイプを定義しないので、Teradata JDBC Driverは、アプリケーションがPreparedStatementまたはCallableStatement setObjectメソッドを使用してStruct値を疑問符パラメータ マーカーにJSONデータ タイプとしてバインドできるように、Teradata固有の機能を提供します。アプリケーションはVARCHAR値およびCLOB値をJSON宛先列に挿入することもできます。アプリケーションがJSONデータ タイプの組み込み関数を十分活用できるように、Struct値を使用してJSON疑問符パラメータ マーカーを設定する必要があります。(下記例を参照)

データベースはJSON値をCLOB値として返します。アプリケーションは以下のメタデータ メソッドを使用してJSON値と実際のCLOB値を区別できます。これらのメソッドは"JSON"を返してJSON値を示し、"CLOB"を返してCLOB値を示します。

アプリケーションが、JSON値をStruct値として指定するTeradata固有の機能を使用する場合、Struct値には以下のいずれかの属性が含まれている必要があります。

また、StructにReader属性が含まれる場合、Structには、ストリームの文字数を指定する整数タイプとなる第2の属性が含まれる必要があります。

アプリケーションが、JSON値をStruct値として指定するTeradata固有の機能を使用する場合、java.sql.Structインターフェースを実装するクラスは、アプリケーションが提供する必要があります。

public class MyStruct implements java.sql.Struct

{

  private String m_typeName ;

  private Object [] m_attributes ;

  public MyStruct(String typeName, Object [] attributes) { m_typeName = typeName ; m_attributes = attributes ; }

  public String getSQLTypeName() { return m_typeName ; }

  public Object [] getAttributes() { return m_attributes ; }

  public Object [] getAttributes(java.util.Map map) { return m_attributes ; }

}

アプリケーションは、そのクラスのインスタンスを使用してJSON値を作成します。

JSONデータ タイプ結合メソッドの呼び出し例

この例では2つのJSON値を結合して単一のJSONオブジェクトを生成します。この場合、単一行のResultSetが返され、そこに値{"name" :"Jim","name" :"Joe"}が格納されています。

  PreparedStatement ps = con.prepareStatement("SELECT CAST(?AS JSON).combine(?)") ;

  ps.setObject(1, new MyStruct("JSON", new Object [] {"{\"name\" : \"Jim\"}"})) ;

  ps.setObject(2, new MyStruct("JSON", new Object [] {"{\"name\" : \"Joe\"}"})) ;

  ResultSet rs = ps.executeQuery() ;

PreparedStatementバッチにNULLおよび非NULLのJSON値を挿入する例

次に、PreparedStatementバッチによってNULLおよび非NULLのJSON値をJSON宛先列に挿入する例を示します。

  // INTEGERカラムとJSONカラムを持つテーブルを想定する

  PreparedStatement ps = con.prepareStatement("INSERT INTO MyTable VALUES(?, ?)") ;

  ps.setInt(1, 123) ;

  ps.setObject(2, new MyStruct("JSON", new Object [] {"{\"name\" : \"Kimberly\"})) ;

  ps.addBatch() ;

  ps.setInt(1, 456) ;

  ps.setObject(2, new MyStruct("JSON", new Object [] {null})) ;

  ps.addBatch() ;

  ps.executeBatch() ;

JSONデータ タイプ非互換エラー

アプリケーションが、Teradata Database 15.0以降でJSONデータ タイプをサポートしない古いバージョンのTeradata JDBC Driverと連携し、JSON値をStruct値として指定するTeradata固有の機能を使用しようとすると、以下の例外がスローされる場合があります。この解決策としては、JSONデータ タイプをサポートする、より新しいバージョンのTeradata JDBC Driverにアップグレードします。

[Error 3922] [SQLState HY000] Invalid Repr in DataInfo Parcel.

 

アプリケーションが、Teradata Database 14.10以前のバージョンでJSONデータ タイプをサポートするバージョンのTeradata JDBC Driverと連携し、JSON値をStruct値として指定するTeradata固有の機能を使用しようとすると、以下の例外がスローされる場合があります。この解決策としては、Teradata Database 15.0以降にアップグレードします。

[Error 1451] [SQLState HY000] Teradata Database JSON data type support is required, and StatementInfo parcel support must be enabled

 

アプリケーションが、JSONデータ タイプをサポートしないTeradata JDBC Driverの古いバージョンを使用しながら、データベースからJSONデータ値を返すクエリーを実行する場合、以下の例外がスローされる場合があります。この解決策としては、JSONデータ タイプをサポートする、より新しいバージョンのTeradata JDBC Driverにアップグレードします。

[Error 1245] [SQLState HY000] Unable to obtain data value because the Teradata Database indicated that the data type is ambiguous

 

DATASETデータ タイプ

データベースのDATASETデータ型は、各データ値がファイル全体またはドキュメント全体に対応する複雑なデータ型です。保存できるファイルまたはドキュメントのタイプは、DATASETデータ型の関連する「ストレージ フォーマット」で指定できます。

DATASETストレージ形式のAvro

Teradata Database 16.0およびTeradata JDBC Driver 15.10.00.23以降では、DATASETデータ型でAvroストレージ フォーマットが提供されます。JDBC APIはまだ標準DATASETデータ型を定義しないので、Teradata JDBC Driverは、アプリケーションがPreparedStatementまたはCallableStatement setObjectメソッドを使用してStruct値を疑問符パラメータ マーカーにAvroフォーマットDATASETデータ型としてバインドできるように、Teradata固有の機能を提供します。アプリケーションでは、VARBYTE値とBLOB値をAvroフォーマットDATASET宛先列に挿入することもできます。アプリケーションがDATASETデータ型の組み込み関数を十分活用できるようにするには、Struct値を使用してDATASET疑問符パラメータ マーカーを設定する必要があります(下記例を参照)。

データベースは、AvroフォーマットDATASET値をBLOB値として返します。アプリケーションでは、以下のメタデータ メソッドを使用してAvroフォーマットDATASET値と実際のBLOB値を区別できます。これらのメソッドでは、AvroフォーマットDATASET値を示す"DATASET STORAGE FORMAT AVRO"を返し、BLOB値を示す”BLOB"を返します。

アプリケーションがAvroフォーマット値をStruct値として指定するTeradata固有の機能を使用する場合、Struct値には以下のいずれかの属性が含まれている必要があります。

また、StructにInputStream属性が含まれる場合、Structには、ストリームのバイト数を指定する整数タイプとなる第2の属性が含まれる必要があります。

AvroフォーマットDATASET値をStruct値として指定するTeradata固有の機能を使用するため、アプリケーションでは、java.sql.Structインターフェースを実装するクラスを用意する必要があります。

public class MyStruct implements java.sql.Struct

{

  private String m_typeName ;

  private Object [] m_attributes ;

  public MyStruct(String typeName, Object [] attributes) { m_typeName = typeName ; m_attributes = attributes ; }

  public String getSQLTypeName() { return m_typeName ; }

  public Object [] getAttributes() { return m_attributes ; }

  public Object [] getAttributes(java.util.Map map) { return m_attributes ; }

}

次にアプリケーションでは、そのクラスのインスタンスを使用してAvroフォーマットDATASET値を作成します。

AVRO_CHECK関数の呼び出し例

この例では、AvroフォーマットDATASET値を検証します。この場合は、値"OK"を含む単一行のResultSetが返されます。

  PreparedStatement ps = con.prepareStatement("SELECT AVRO_CHECK(?)") ;

  ps.setObject(1, new MyStruct("DATASET STORAGE FORMAT AVRO", new Object [] {avroInputStream, nLength})) ;

  ResultSet rs = ps.executeQuery() ;

PreparedStatementバッチへのNULLおよび非NULL AvroフォーマットDATASET値の挿入例

以下に、PreparedStatementバッチによってNULLおよび非NULLのAvroフォーマットDATASET値をAvroフォーマットDATASET宛先列に挿入する例を示します。

  // INTEGERカラムとDATASET STORAGE FROMAT AVROカラムを持つテーブルを想定する

  PreparedStatement ps = con.prepareStatement("INSERT INTO MyTable VALUES(?, ?)") ;

  ps.setInt(1, 123) ;

  ps.setObject(2, new MyStruct("DATASET STORAGE FORMAT AVRO", new Object [] {avroInputStream, nAvroLength})) ;

  ps.addBatch() ;

  ps.setInt(1, 456) ;

  ps.setObject(2, new MyStruct("DATASET STORAGE FORMAT AVRO", new Object [] {null})) ;

  ps.addBatch() ;

  ps.executeBatch() ;

DATASETストレージ形式のCSV

Teradata Advanced SQL Engine 16.20およびTeradata JDBC Driver 16.20.00.01以降では、DATASETデータ型でカンマ区切り値(CSV)のストレージ フォーマットが提供されます。JDBC APIはまだ標準DATASETデータ型を定義しないので、Teradata JDBC Driverは、アプリケーションがPreparedStatementまたはCallableStatement setObjectメソッドを使用してStruct値を疑問符パラメータ マーカーにCSVフォーマットDATASETデータ型としてバインドできるように、Teradata固有の機能を提供します。アプリケーションでは、VARBYTE値とCLOB値をCSVフォーマットDATASET宛先列に挿入することもできます。アプリケーションがDATASETデータ型の組み込み関数を十分活用できるようにするには、Struct値を使用してDATASET疑問符パラメータ マーカーを設定する必要があります(下記例を参照)。

データベースは、CSVフォーマットDATASET値をCLOB値として返します。アプリケーションでは、以下のメタデータ メソッドを使用してCSVフォーマットDATASET値と実際のCLOB値を区別できます。これらのメソッドは、CSVフォーマットDATASET値を示す"DATASET STORAGE FORMAT CSV"を返し、CLOB値を示す"CLOB"を返します。

アプリケーションがCSVフォーマット値をStruct値として指定するTeradata固有の機能を使用する場合、Struct値には以下のいずれかの属性が含まれている必要があります。

また、StructにReader属性が含まれる場合、Structには、Readerの文字数を指定する整数型となる第2の属性が含まれる必要があります。

CSVフォーマットDATASET値をStruct値として指定するTeradata固有の機能を使用するため、アプリケーションでは、java.sql.Structインターフェースを実装するクラスを用意する必要があります。

public class MyStruct implements java.sql.Struct

{

  private String m_typeName ;

  private Object [] m_attributes ;

  public MyStruct(String typeName, Object [] attributes) { m_typeName = typeName ; m_attributes = attributes ; }

  public String getSQLTypeName() { return m_typeName ; }

  public Object [] getAttributes() { return m_attributes ; }

  public Object [] getAttributes(java.util.Map map) { return m_attributes ; }

}

次にアプリケーションでは、そのクラスのインスタンスを使用してCSVフォーマットDATASET値を作成します。

validateメソッドの呼び出し例

この例では、CSVフォーマットDATASET値を検証します。このケースでは、当てはまる場合は整数値1を格納した単一行のResultSetが返され、当てはまらない場合は0を格納した単一行のResultSetが返されます。

  PreparedStatement ps = con.prepareStatement("SELECT CAST (? as DATASET STORAGE FORMAT CSV).validate ()") ;

  ps.setObject(1, new MyStruct("DATASET STORAGE FORMAT CSV", new Object [] {csvReader, nLength})) ;

  ResultSet rs = ps.executeQuery() ;

PreparedStatementバッチへのNULLおよび非NULL CSVフォーマットDATASET値の挿入例

以下に、PreparedStatementバッチによってNULLおよび非NULLのCSVフォーマットDATASET値をCSVフォーマットDATASET宛先列に挿入する例を示します。

  // INTEGERカラムとDATASET STORAGE FROMAT CSVカラムを持つテーブルを想定する

  PreparedStatement ps = con.prepareStatement("INSERT INTO MyTable VALUES(?, ?)") ;

  ps.setInt(1, 123) ;

  ps.setObject(2, new MyStruct("DATASET STORAGE FORMAT CSV", new Object [] {csvReader, nCSVLength})) ;

  ps.addBatch() ;

  ps.setInt(1, 456) ;

  ps.setObject(2, new MyStruct("DATASET STORAGE FORMAT CSV", new Object [] {null})) ;

  ps.addBatch() ;

  ps.executeBatch() ;

DATASETデータ タイプ非互換エラー

DATASETデータ タイプをサポートしないTeradata JDBC Driverの古いバージョンを使用しながら、データベースからAvroフォーマットDATASETデータ値を返す問合わせをアプリケーションで実行する場合、以下の例外がスローされる場合があります。

DATASETデータ タイプをサポートしない古いバージョンのTeradata JDBC Driverと連携し、アプリケーションがTeradata Database 16.0以降でAvroフォーマットDATASET値をStruct値としてバインドするTeradata固有の機能を使用しようとすると、以下の例外がスローされます。この解決策は、DATASETデータ タイプをサポートする、より新しいバージョンのTeradata JDBC Driverにアップグレードすることです。

[Error 3922] [SQLState HY000] Invalid Repr in DataInfo Parcel.

 

AvroフォーマットDATASETデータ タイプをサポートするバージョンのTeradata JDBC Driverと連携し、アプリケーションがTeradata Database 15.10以前のバージョンでAvroフォーマットDATASET値をStruct値としてバインドするTeradata固有の機能を使用しようとすると、以下の例外がスローされます。この解決策は、Teradata Database 16.0以降にアップグレードすることです。

[Error 1509] [SQLState HY000] Teradata Database DATASET STORAGE FORMAT AVRO data type support is required, and StatementInfo parcel support must be enabled

 

DATASETデータ型をサポートしない古いバージョンのTeradata JDBC Driverを使用しながら、データベースからCSVフォーマットDATASETデータ型を返すクエリーをアプリケーションで実行する場合、データ型がCLOBとして返されます。

DATASETデータ型をサポートしない古いバージョンのTeradata JDBC Driverと連携し、アプリケーションがTeradata Advanced SQL Engine 16.20以降でCSVフォーマットDATASET値をStruct値としてバインドするTeradata固有の機能を使用しようとすると、以下の例外がスローされます。この解決策は、DATASETデータ型をサポートする、より新しいバージョンのTeradata JDBC Driverにアップグレードすることです。

[Error 3922] [SQLState HY000] Invalid Repr in DataInfo Parcel.

 

CSVフォーマットDATASETデータ型をサポートするバージョンのTeradata JDBC Driverと連携し、アプリケーションがTeradata Database 16.10以前のバージョンでCSVフォーマットDATASET値をStruct値としてバインドするTeradata固有の機能を使用しようとすると、以下の例外がスローされます。この解決策は、Teradata Advanced SQL Engine 16.20以降にアップグレードすることです。

[Error 1509] [SQLState HY000] Teradata Database DATASET STORAGE FORMAT CSV data type support is required, and StatementInfo parcel support must be enabled

 

更新可能LOB

一時表

LOB更新をTeradata JDBC Driverで使用できるようにするためには、以下の列が入った表を作成しておく必要があります。

通常のアプリケーションの使用においては、データベース管理者がグローバル一時表(GTT)として表を作成します。ただし、通常の表を作成して、その表をデバッグなどの特殊な用途のケースで使用することもできます。

id integer列は、基本索引として使用します。必要であれば、固有基本索引に指定することが可能です。

CREATE TABLEによってGTTを作成する場合は、ON COMMIT PRESERVE ROWS句を指定して、Teradata JDBC DriverがトランザクションすべてでLOBを操作できるようにする必要があります。

下記の例に示されているテーブル名JdbcLobUpdateは、一例でしかありません。表には任意の名前を選択できます。

create global temporary table JdbcLobUpdate(

    id integer not null,

    bval blob,

    cval clob character set unicode)

  unique primary index upi_JdbcLobUpdate(id)

  on commit preserve rows

接続パラメータ

一時表として選択した名前は、接続パラメータLOB_TEMP_TABLEに設定する必要があります。

LOB_TEMP_TABLE=tableName

データベース名は、必要に応じて指定できます。

LOB_TEMP_TABLE=databaseName.tableName

LOBの更新

アプリケーションで表内の既存のLOB値を更新する必要がある場合は、いずれかのLOB更新メソッドを呼び出した後でUPDATE文も実行して、変更後のLOB値を元の行に戻さなければなりません。

Teradata JDBC Driverは、実装によってLOBのコピーが更新されたことを示すために、DatabaseMetaData locatorsUpdateCopyからtrueを返します。

ResultSet rs = stmt.executeQuery("SELECT id,data FROM datatab");

rs.next();

int id = rs.getInt(1);

Blob data = rs.getBlob(2);

int numWritten = data.setBytes(1, val);

if (dbmd.locatorsUpdateCopy() == true){

  PreparedStatement ps = conn.prepareStatement(

   "UPDATE datatab SET data = ? WHERE id = ?");

  try {

    ps.setBlob(1, data);

    ps.setInt(2, id);

    ps.executeUpdate();

  } finally {

    ps.close();

  }

}

freeの呼び出し

freeメソッドはBlobまたはClobオブジェクトが保持しているリソースを解放します。freeが呼び出された後は、そのオブジェクトを使用することはできません。

freeメソッドは、Teradata JDBC Driver 14.00.00.08から使用できるようになりました。BlobまたはClobオブジェクトを更新した場合、アプリケーションは、そのオブジェクトの使用が終わったときにfreeを呼び出す必要があります。そうしないと、データベース エラー3130 (応答制限超過)が発生する場合があります。

JDK 6.0以降では、freeメソッドはjava.sql.Blobおよびjava.sql.Clobインターフェースで定義されており、アプリケーションによって直接呼び出すことができます。JDK 5.0以前では、リフレクションを使用してfreeメソッドを呼び出す必要があります。

Integer.MAX_VALUEを超える行番号と更新件数

データベースは数10億の行を含む表に対応できますが、行番号や更新件数を使用するJDBC APIメソッドは符号付きの32ビット整数(Java int)を使用して行数または更新件数を表わします。符号付き32ビット整数で保持できる最大の正数は、約20億です。これは定数Integer.MAX_VALUEで示されます。

行番号

ResultSetメソッドの中には、行番号を引数として取るものや、行番号を返すものがあります。大きな結果セットには20億を超える行が含まれている可能性がありますが、ResultSetメソッドは当初の行数のみを利用できるように制限されていて、行番号はInteger.MAX_VALUE未満になります。

更新件数

Teradata Database 14.10およびTeradata JDBC Driver 14.00.00.25以降、データベースから受け取った行数の値が大きすぎて、符号付き32ビット正数に収まらない場合、Teradata JDBC DriverはInteger.MAX_VALUEの更新件数をアプリケーションに返して、エラー コード1474のSQLWarningを送り、メッセージ テキスト内に実際の行数を示します。

この動作は、次のJDBC APIメソッドで行なわれます。

JDBCインターフェース

JDBCメソッド

Statement (文)

int [] executeBatch ()

int executeUpdate (String sql)

int executeUpdate (String sql, int autoGeneratedKeys)

int executeUpdate (String sql, int [] columnIndexes)

int executeUpdate (String sql, String [] columnNames)

int getUpdateCount ()

PreparedStatement、CallableStatement

int executeUpdate ()

マルチスレッドの問題

マルチスレッドを使用すると、アプリケーションのパフォーマンスを向上させることができます。複数の同時セッションによって同時に実行できる要求を判別し、各セッションで要求の実行を依頼します。ただし、同時要求を1セッションに複数、実行依頼することは避けてください。

注:  データベースは、1つのセッションに対する複数のアクティブ要求をサポートしていません。アプリケーションが同時要求を1セッションに複数、実行依頼すると、前の要求が戻るまでTeradata JDBC Driverはブロックします。したがって、アプリケーションのパフォーマンスを低下させる可能性があります。

表13 に、JDBCオブジェクト スレッド セーフの情報を示します。

表13: JDBC オブジェクト スレッド セーフ

JDBCオブジェクト

スレッド セーフ

Connection(接続)

Connectionオブジェクトは完全にスレッドセーフであるため、複数のスレッドで使用できます。ただし、実行される要求は一度に1つのみです。直前の要求の実行が完了するまで、後続の要求はブロックされます。

Statement、PreparedStatement、CallableStatement

ステートメントとそのサブクラス オブジェクトは、通常、スレッドセーフではありません。特定のケースが1つサポートされます。別のスレッドがcancel()メソッドを呼び出すと、実行中の要求に割り込むことができます。

ResultSet

ResultSetオブジェクトは、スレッドセーフではありません。ResultSetオブジェクトは、単一のスレッドでのみ使用する必要があります。ResultSetオブジェクトには、スレッドセーフでない状態情報が含まれています。例えば、最も最近呼び出されたgetterメソッドがNULLを返したかどうかを示すwasNull状態が挙げられます。

Blob、Clob

BlobとClobの各オブジェクトは、スレッドセーフではありません。BlobとClobの各オブジェクトは、単一のスレッドでのみ使用する必要があります。Blob/Clobオブジェクトは、ResultSet.getBlob/getClobメソッドを使用してResultSetを所有するスレッドによりResultSetから取得する必要があります。Blob/Clobオブジェクトは、ResultSetから取得されると、その後、別のスレッドで使用できます。このため、複数のスレッドを使用してLOBデータにアクセスできます。ただし、各Blob/Clobオブジェクト自体は、1つのスレッドでのみ使用する必要があります。

DatabaseMetaDataメソッドによるデータ ディクショナリのアクセス

Teradata JDBC DriverのDatabaseMetaDataメソッドのいくつかは、DatabaseMetaDataのメソッドを呼び出すアプリケーションの代わりに、データベースに対して問合わせの実行を依頼します。アプリケーションの設計者は、必要なデータ ディクショナリの表とビューアクセスするために、そのアプリケーションに十分な権限を与えていることを確認する必要があります。

次の表は、データ ディクショナリの表やビューに問合わせを行う各DatabaseMetaDataメソッドと、それら各メソッドに必要なアクセス権限のリストです。

Teradata JDBC Driver13.00.00.25からは、Teradata Database 12.0以降に接続したときにデータ ディクショナリVビューが使用されます。次の表に記された[V]という接尾辞は、データベース バージョンによる条件でVビューが使用されるかどうかを示します。

USEXVIEWS接続パラメータでは、通常のビューとXビューのどちらを使用するかを制御します。次の表に記された[X]という接尾辞は、USEXVIEWS接続パラメータの設定による条件でXビューが使用されるかどうかを示します。

DatabaseMetaDataのメソッド

必要な権限

getAttributes

DBC.TablesでのSelectアクセス権[V][X]

DBC.ColumnsでのSelectアクセス権[V][X]

DBC.UDTInfoでのSelectアクセス権(Teradata Database 16.0またはTeradata JDBC Driver 15.10.00.33より前)

DBC.UDTInfoVでのSelectアクセス権(Teradata Database 16.0およびTeradata JDBC Driver 15.10.00.33以降)

getBestRowIdentifier

DBC.TablesでのSelectアクセス権[V][X]

DBC.ColumnsでのSelectアクセス権[V][X]

DBC.IndicesでのSelectアクセス権[V][X]

DBC.UDTInfoでのSelectアクセス権(Teradata Database 16.0またはTeradata JDBC Driver 15.10.00.33より前)

DBC.UDTInfoVでのSelectアクセス権(Teradata Database 16.0およびTeradata JDBC Driver 15.10.00.33以降)

getColumnPrivileges

DBC.TablesでのSelectアクセス権[V][X]

DBC.ColumnsでのSelectアクセス権[V][X]

DBC.AllRightsでのSelectアクセス権[V][X]

getColumns

DBC.TablesでのSelectアクセス権[V][X]

DBC.ColumnsでのSelectアクセス権[V][X](Teradata Database 16.0またはTeradata JDBC Driver 15.10.00.20より前)

DBC.ColumnsJQVでのSelectアクセス権[X](Teradata Database 16.0およびTeradata JDBC Driver 15.10.00.20以降)

DBC.UDTInfoでのSelectアクセス権(Teradata Database 16.0またはTeradata JDBC Driver 15.10.00.33より前)

DBC.UDTInfoVでのSelectアクセス権(Teradata Database 16.0およびTeradata JDBC Driver 15.10.00.33以降)

HELP COLUMNおよびHELP TYPEを使用して、Teradata Database 16.0またはTeradata JDBC Driver 15.10.00.20より前のビュー列に関する情報を取得する

getCrossReference

DBC.All_RI_ParentsでのSelectアクセス権[V][X]

getExportedKeys

DBC.All_RI_ParentsでのSelectアクセス権[V][X]

getFunctions

DBC.TablesでのSelectアクセス権[V][X]

DBC.FunctionsでのSelectアクセス権[V][X]

getFunctionColumns

DBC.TablesでのSelectアクセス権[V][X]

DBC.FunctionsでのSelectアクセス権[V][X]

DBC.ColumnsでのSelectアクセス権[V][X]

DBC.UDTInfoでのSelectアクセス権(Teradata Database 16.0またはTeradata JDBC Driver 15.10.00.33より前)

DBC.UDTInfoVでのSelectアクセス権(Teradata Database 16.0およびTeradata JDBC Driver 15.10.00.33以降)

getImportedKeys

DBC.All_RI_ParentsでのSelectアクセス権[V][X]

getIndexInfo

DBC.IndicesでのSelectアクセス権[V][X] (Teradata JDBC Driver 14.00.00.24以降)

DBC.IndexStatsに対するSelectアクセス[V] (Teradata JDBC Driver 14.00.00.24以降)

DBC.TablesでのSelectアクセス権[V][X] (Teradata JDBC Driver 14.00.00.24以降)

HELP STATISTICSおよびHELP INDEXを使用(Teradata JDBC Driver 14.00.00.24より前)

getPrimaryKeys

DBC.IndicesでのSelectアクセス権[V][X]

getProcedureColumns

DBC.TablesでのSelectアクセス権[V][X]

DBC.ColumnsでのSelectアクセス権[V][X]

DBC.UDTInfoでのSelectアクセス権(Teradata Database 16.0またはTeradata JDBC Driver 15.10.00.33より前)

DBC.UDTInfoVでのSelectアクセス権(Teradata Database 16.0およびTeradata JDBC Driver 15.10.00.33以降)

getProcedures

DBC.TablesでのSelectアクセス権[V][X]

getSchemas

DBC.DatabasesでのSelectアクセス権[V][X]

getTablePrivileges

DBC.TablesでのSelectアクセス権[V][X]

DBC.AllRightsでのSelectアクセス権[V][X]

getTables

DBC.TablesでのSelectアクセス権[V][X]

getUDTs

DBC.TablesでのSelectアクセス権[V][X]

DBC.ColumnsでのSelectアクセス権[V][X]

DBC.UDFInfoでのSelectアクセス権(Teradata Database 16.0またはTeradata JDBC Driver 15.10.00.33より前)

DBC.UDTInfoでのSelectアクセス権(Teradata Database 16.0またはTeradata JDBC Driver 15.10.00.33より前)

DBC.UDTInfoVでのSelectアクセス権(Teradata Database 16.0およびTeradata JDBC Driver 15.10.00.33以降)

DBC.UDTTransformでのSelectアクセス権(Teradata Database 16.0またはTeradata JDBC Driver 15.10.00.33より前)

DBC.UDTTransformVでのSelectアクセス権[X](Teradata Database 16.0およびTeradata JDBC Driver 15.10.00.33以降)

Sun JDK 5.0実装のJDBC RowSetインターフェースの使用

Teradata JDBC Driverは、Sun JDK 5.0実装のJDBC RowSetインターフェースが動作します。

com.sun.rowset.JdbcRowSetImpl(java.sql.Connection connection)とcom.sun.rowset.JdbcRowSetImpl(String url, String user, String password)の使用時には、Connection.prepareStatement(String sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE)が呼び出されます。ただし、12.0より前のデータベース バージョンについては、CONCUR_UPDATABLEはサポートされていません。

Teradata JDBC Driverは、データベース バージョンが12.0より前の場合や、取り出した結果セットをTeradata Database 12.0以降用に更新できない場合に、サポートされていないResultSet並列性(CONCUR_UPDATABLE)を、サポートされている並列性(CONCUR_READ_ONLY)にダウングレードします。更新可能結果セットの使用法の詳細については、「結果セットの更新可能化」を参照してください。

暗号化、認証、許可

Teradata JDBC Driverには、ログオンメカニズムを選択するためのLOGMECH接続パラメータがあります。 使用可能なログオ ンメカニズムは下記のとおりです。

BROWSERおよびJWTメカニズムは、パスワードなしで使用されます。KRB5およびLDAPメカニズムは、パスワードなしで使用できます。パスワードなしでログオンメカニズムを使用するには、ユーザーは「logon with null password」権限を持っている必要があります。

シングルサインオン(SSO)は、BrowserおよびKerberosログオン メカニズムのみでサポートされます。これらのメカニズムについての詳細は、『Teradata Vantage™ セキュリティ管理』を参照してください。

Teradata JDBC Driverでは常に暗号化ログオンを使用します。これは、ネットワークを介してデータベースに送信されるときに、ログオン パスワードが暗号化されることを意味します。

Teradata JDBC Driverには、接続に対してデータ暗号化をオンまたはオフにするためのENCRYPTDATA接続パラメータがあります。ここでの「データ暗号化」とは、非ログオンメッセージ トラフィックの暗号化を意味します。デフォルトでは、Teradata JDBC Driverはログオンのみを暗号化し、ログオン以外のメッセージ トラフィックは暗号化しません。Teradata JDBC Driverがログオン以外のメッセージ トラフィックを暗号化するには、JDBC接続パラメータENCRYPTDATA=ONを指定してください。

URLおよびDataSourceパラメータ

表 14では、認証と暗号化のためのURLとデータソースのパラメータを説明しています。パラメータの取得と設定が可能なメソッドについての説明は、TeraDataSourceクラスに記載されています。

表14: URLおよびDataSourceパラメータ

URLおよびData Sourceパラメータ

説明

LOGMECH

LOGMECHパラメータは、選択したメカニズムを指定します。

LOGDATA

LOGDATAパラメータは、通常使用されるTeradataのユーザー名とパスワード以上の情報を要求するメカニズムで使用される情報を伝えます。

ENCRYPTDATA

ENCRYPTDATAパラメータは、データベースとの通信の暗号化を制御します。ENCRYPTDATA=ONと指定すると、暗号化が有効になります。

Teradata Database 14.10およびTeradata JDBC Driver 15.00.00.15以降、集中管理で必要とされる場合、またはアプリケーションでENCRYPTDATA=ON接続パラメータが指定される場合には、データが暗号化されます。集中管理により要求される暗号化は、ENCRYPTDATA=OFF接続パラメータより優先されます。

暗号化の場合の「集中管理」は、Teradataクライアント ソフトウェアとデータベースの間でメッセージ トラフィックが確実に暗号化されるようにLDAPディレクトリおよび/またはデータベースを構成することを意味します。

特定のユーザーのメッセージ トラフィック暗号化を必要とするようにLDAPディレクトリを構成する方法については、『Teradata Vantage™ セキュリティ管理』の章「ネットワーク セキュリティ ポリシーの管理」の「機密性QOPポリシーの構成」セクションを参照してください。

gtwcontrolコマンドを使用し、すべてのデータベース ユーザーでメッセージ トラフィック暗号化が必要とされるようにする方法については、『Teradata Vantage™ セキュリティ管理』の章「ネットワーク セキュリティ ポリシーの管理」の「機密性の必要」セクションを参照してください。

前提条件

以下のテーブルに、各メソッドの前提条件を示します。

メソッド

接続パラメータ

説明

Teradata Method 2

LOGMECH=TD2

特別な設定は不要です。すぐに使用できます。

ブラウザ認証

LOGMECH=BROWSER

ブラウザ認証を使用する場合は、ユーザー、パスワード、およびLOGDATAをすべて省略する必要があります。

ブラウザ認証は、WindowsおよびmacOSでサポートされています。 ブラウザ認証は、他のオペレーティング システムではサポートされていません。

データベースは、フェデレーション認証の ID プロバイダ情報で構成する必要があります。これらのタスクについては、参照のTeradata Vantage™ セキュリティ管理で説明します。

Teradata Advanced SQL Engine 16.20およびTeradata JDBC Driver 17.10.00.01以降で使用できます。

JSON Web Token (JWT)

LOGMECH=JWT

アプリケーションは、アプリケーションがアクセスできるユーザー サービスから有効なJWTを取得する必要があります。データベースは、ユーザー サービスによって発行されたJWTを信頼するように構成する必要があります。これらのタスクについては、「Teradata Vantage™ セキュリティ管理」で説明されています。

Teradata Advanced SQL Engine 16.20およびTeradata JDBC Driver 16.20.00.07以降で使用できます。

Kerberos

LOGMECH=KRB5

Teradata JDBC Driverを実行しているマシン上で多数の管理タスクを要求します。詳細は、「Kerberos前提条件の合致」を参照してください。

LDAP

LOGMECH=LDAP

LDAP環境を設定するための多くの管理作業が必要です。このタスクについては、『セキュリティ管理ガイド』を参照してください。

管理作業が完了すると、Teradata JDBC Driverを実行しているマシン上で追加作業なしでLDAPが使用できます。

TDNEGO

LOGMECH=TDNEGO

Teradata Database 15.10およびTeradata JDBC Driver 15.10.00.31以降に使用可能になった適切なログオン メカニズムを自動的に選択します。

Kerberos前提条件の合致

Kerberosの操作をする前に、システム管理者は次の前提条件に合致させる必要があります。

Kerberosのドメインとレルムを設定する

Kerberosのドメインとレルムは、ドメインにあるマシン用に設定します。システム管理者はこの作業を実行する必要があります。『セキュリティ管理ガイド』を参照してください。

ユーザーをアクティブ ディレクトリ内に定義する

Kerberosのユーザーをすべて、Windowsドメインのアクティブ ディレクトリ内に定義する必要があります。Kerverosのユーザー名では、大文字と小文字が区別されます。ユーザーは、アクティブ ディレクトリ内で定義されたとおりにマシンにログオンすることが重要です。DR818999としてアクティブ ディレクトリに定義されたユーザーは、dr818999(大文字と小文字の変更)としてドメインにログオンできますが、Kerberosが動作するためには、ユーザーはDR818999としてドメインにログインする必要があります。

注:  アクティブ ディレクトリ内のユーザーの定義で[Kerberos事前認証を必要としない]がチェックされていることを確認します。

Kerberosクライアント サポートを検証する

Kerberos認証は次のクライアント システムでサポートされています。

Active DirectoryまたはLinux Kerberos Key Distribution Center(KDC)を使用するようにサポートされているクライアント システムを構成する方法については、「Teradata Vantage™ セキュリティ管理」を参照してください。

各システムにkrb5.iniまたはkrb5.confファイルが含まれていることを確認する

重要なKerberos構成情報は、Windows上ではkrb5.iniファイルに、それ以外のプラットフォームではkrb5.confファイルに指定します。Javaは、次の順序でkrb5.iniまたはkrb5.confを検索します。

Windows上のkrb5.iniファイルは、MIT KerberosとHeimdal Kerberosの両方の標準であるkrb5.confファイルと同じです。各種設定の詳細については、MIT Kerberosのドキュメントを参照してください。

次のファイルは例です。修正し、実際のドメイン、レルム、キー配布センター(KDC)を反映する必要があります。

[libdefaults]
ticket_lifetime = 6000
default_realm = ESROOTDOM.ESDEV.TDAT
clockskew = 13000
checksum_type=2
[realms]
ESROOTDOM.ESDEV.TDAT = {
    kdc = esroot.esrootdom.esdev.tdat:88
    default_domain = esrootdom
}
[domain_realm]
esrootdom = {
    .esrootdom = ESROOTDOM.ESDEV.TDAT
    esrootdom = ESROOTDOM.ESDEV.TDAT
}

Linuxクライアントの場合は、krb5.confファイルの[libdefaults]エントリの下に次の行を追加します。

    default_tkt_enctypes = arcfour-hmac rc4-hmac
    default_tgs_enctypes = arcfour-hmac rc4-hmac

レルム名とホスト名の命名規則

DNSドメイン名とホスト名では、大文字と小文字が区別され、規則により小文字で表記されます。

対照的に、Kerberosレルム名は大文字で表記され、大文字と小文字が区別されます。Kerberosレルム名はドメイン名の大文字版です。

Kerberos認証は、krb5.iniまたはkrb5.confファイルでKerberosレルム名が大文字で指定されない限り機能しません。

kinitを実行する

SSOを実行するためには、ユーザーはkinitプログラムを実行できなければなりません。このプログラムは、Kerberosチケット保証チケット(TGT)を取得し、キャッシュします。このプログラムは、Java JDKのjre/binディレクトリにあります。例は以下のとおりです。

C:\j2sdk1.4.2_04\jre\bin>kinit
Password for DR818999@ESROOTDOM.ESDEV.TDAT:Mypassword
New ticket is stored in cache file C:\Documents and Settings\DR818999\krb5cc_DR818999

Credential Delegation(クレデンシャルの委譲)とTeradata Unity Director

KerberosとTeradata Unity Directorを使用している場合、Credential Delegation(クレデンシャルの委譲)を有効にする必要があります。Credential Delegation(クレデンシャルの委譲)を使用するためには、転送可能なチケット保証チケット(TGT)を取得します。この操作を実行するためには、kinitのforwardableオプションを使用します。例えば、次のようにします。

kinit -f

このオプションは、Teradata Unity Directorが認証リクエストをデータベースにルーティングするために使用する必要があります。

krb5.ini(Windows)またはkrb5.conf(Linux)ファイルの[libdefaults]セクション下でforwardable=trueオプションを設定します。Credential Delegation(クレデンシャルの委譲)を使用するために変更された前述のkrb5.iniまたはkrb5.confファイルは、次のようになります。

[libdefaults]
forwardable = true
ticket_lifetime = 6000
default_realm = ESROOTDOM.ESDEV.TDAT
clockskew = 13000
checksum_type=2
[realms]
ESROOTDOM.ESDEV.TDAT = {
    kdc = esroot.esrootdom.esdev.tdat:88
    default_domain = esrootdom
}
[domain_realm]
esrootdom = {
    .esrootdom = ESROOTDOM.ESDEV.TDAT
    esrootdom = ESROOTDOM.ESDEV.TDAT
}

ログイン設定情報の検証

Kerberos認証には、以下のログイン構成ファイルが必要です。このファイルは、選択したディレクトリに格納できます。

com.sun.security.jgss.initiate
{
  com.sun.security.auth.module.Krb5LoginModule sufficient useTicketCache=true;
};
other
{
  com.sun.security.auth.module.Krb5LoginModule required;
};

java.security.auth.login.config Javaシステム プロパティでログイン構成ファイル名を指定できます。

例えば、ログイン構成ファイルに名前TeraJDBC.configを指定し、このファイルを現在のディレクトリに格納する場合、次のJVMコマンド ライン オプションを指定します。

-Djava.security.auth.login.config=TeraJDBC.config

または、ログイン構成ファイルをシステム全体の設定として指定することもできます。JREのjava.securityディレクトリ内にあるlib/securityファイルを編集して、login.config.url.Nプロパティを追加します。

java.securityファイルを確認して、既存のlogin.config.url.Nプロパティがあるかどうかを特定します。既存のプロパティと競合しないように、Nの値を選択する必要があります。また、Nの値は連続した番号である必要があります。

login.config.url.という名前の、Nlogin.config.url.1値が1つだけある例を以下に示します。この例では、構成ファイルはC:\dmr\TeraJDBC.configにあります。

login.config.url.1=file:C:/dmr/TeraJDBC.config

プロパティ値のURLは、フォワード スラッシュで指定する必要があります。Windowsでは、フォワード スラッシュの代わりにバックスラッシュを使用します。

Windowsのレジストリを設定する

Microsoft Windowsの通常の構成では、Kerberos Ticket-Granting Ticket(TGT)のセッション キーのエクスポートは許可されません。Kerberos SSOを使用するためには、Windowsのレジストリ設定を変更してKerberos TGTのセッション キーのエクスポートを有効にする必要があります。

  HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\Kerberos\Parameters
  Value Name:AllowTgtSessionKey
  Value Type:REG_DWORD
  Value:      0x01  (default is 0)

Active DirectoryアカウントがクライアントPC上のローカル管理者グループに属する場合、Windowsでは、AllowTgtSessionKeyレジストリ値が0x1に設定されていても、Kerberos TGTのセッション キーをエクスポートしません。したがって、クライアントPC上のローカル管理者グループに属するアカウントでKerberos SSOを使用することはできません。

JVMオプションを指定する

SSOを有効にするためには、JVMオプションを指定する必要があります。

-Djavax.security.auth.useSubjectCredsOnly=false

Kerberos SSOを有効にする

Kerberos SSOログオンを有効にするには、データベースで定義されているユーザーが、ユーザーのログオンパスワードと同じパスワードを持ち、SSOをサポートしている必要があります。 SSOをサポートするには、DDLステートメント

grant logon with null password

が必要です。

例えば、ユーザーdr818999に必要な権限を付与するためには、以下のログオン付与を使用します。

grant logon on all to dr818999 with null password;

このステートメントの詳細については、Teradata Vantage™ Teradata Database SQLデータ定義言語リファレンスを参照してください。

サーバー サイド デフォルト認証メカニズム

Teradataセキュリティ管理者は、デフォルト認証メカニズムをTD2からサーバー サイド(Teradata Database)の別のメカニズムへ変更できます。ただし、管理者は、あるメカニズムは特定のプラットフォームでしかサポートされないことを認識する必要があります。例えば、Teradata Database 14.0以前では、KerberosサポートはWindowsクライアントにのみ制限されます。

サーバー サイドのデフォルト メカニズムを、サイトで使用しているすべてのクライアント プラットフォーム上でサポートされているわけではないメカニズムへ変更する場合は、余分の準備が必要です。サーバー サイドのデフォルト メカニズムを変更する前に、計画されたサーバー サイドのデフォルト メカニズムをサポートしていないクライアント プラットフォーム上のすべてのJavaアプリケーションを、LOGMECH=接続パラメータを使用して、サポートされる認証メカニズムを明示的に指定するように構成する必要があります。

例えば、Teradata Database 14.0以前を使用して、WindowsとLinuxの両方のプラットフォームに展開されるJavaアプリケーションを使用するサイトがあるとします。管理者がサーバー サイドのデフォルト メカニズムをTD2からKerberosへ変更することを決定した場合、管理者は、Linuxに展開されたJavaアプリケーションがLOGMECH=TD2接続パラメータを指定していることを検証する必要があります。

生成キー

Teradata JDBC Driver,のバージョン3.4では、次の各メソッドが追加されるか、次の各メソッドで生成キーをサポートできるようになりました。

複文要求

複文要求に生成キーが要求されている場合、アプリケーションは、getGeneratedKeys()を呼び出して最初の文の生成キーを取得できます。その後、getGeneratedKeys()を追加呼び出しするたびに、その前に、getMoreResults()を呼び出す必要があります。INSERT文でない場合、空の結果セットが返されます。

JDBCの仕様には、アプリケーションが複文要求から複数の生成キー結果セットを取得する方法は規定されていません。JDBCの仕様では、次の生成キー結果セットに進むためにgetMoreResults()を使用することを要求したり禁止したりしていません。これは、最も明確で直感的な選択のように思われるゆえのTeradata JDBC Driverの設計です。

PreparedStatementバッチ要求

PreparedStatementバッチ要求に生成キーが取得される場合、各行は結合して単一の自動生成キー結果セットになり、getGeneratedKeys()から返されます。バッチ要求内への最大挿入数は1024個に制限されます。 

INSERT …SELECT文

要求がINSERT ... SELECT文である場合、結果セットに複数の行が返されます。各行の順序は決まっていません。

例外

エラー1125

次の場合、One or more of the generated keys specified do not match a column name in the table.(指定された生成キーが1つ以上、テーブル内の列名と一致しません。)Change the list of column names to match the column names in the table where the row is being inserted.(列名のリストを変更して、行が挿入されるテーブル内の列名と一致させてください。)というメッセージが返されることがあります。

エラー1126

次の場合、One or more of the generated key indexes are invalid.(1つ以上の生成キー インデックスが無効です。)Change the indexes so that they are greater than 0 and less than or equal to the number of columns in the table where the row is being inserted.(インデックスの数が0より多く、行が挿入されるテーブル内の列数以下になるように、インデックスを変更してください。)というメッセージが返されることがあります。

エラー1127

列名配列または列インデックス配列に対応するNULL値が含まれているメソッドが呼び出された場合、Column names array or column index array cannot be null.(列名配列または列インデックス配列はNullになれません。)というメッセージが返されることがあります。

エラー1128

自動生成キーを要求するメソッドが呼び出された場合、AutoGenerated Keys are not supported with this release of database software.(このリリースのデータベース ソフトウェアでは自動生成キーはサポートされていません。)The database must be running V2R6.2 or higher.(V2R6.2以上のTeradata Databaseを実行する必要があります。)というメッセージが返されることがあります。

Statement.executeUpdate()

次の各例外は、現在、PreparedStatement.executeUpdate()に使用されていますが、自動生成キーが要求されているStatement.executeUpdate()に使用されるようになります。

Upsert文の未サポート

getGeneratedKeysでは、Upsert文はサポートされていません。Upsert文の後にgeneratedKeysが要求されると、空の結果セットが返されます。

ParameterMetaDataとあいまいな型

ParameterMetaDataを使用する場合、パラメータのデータ型があいまいになることがあります。この状態が発生するのは、?パラメータが特定の式で使用される場合、または?パラメータが、オーバーロードされたUDF/UDMの呼び出しで使用される場合です。次に例を挙げます。

        単純なINSERT操作:

    INSERT INTO T1 VALUES (?, ?, ?);

これは、(?, ?, ?)で示される3つのパラメータをテーブルT1に挿入する単純な操作です。この例では、表内の列/フィールドに各パラメータが単純に割り当てられます。返されるパラメータ メタデータは明確です。このパラメータ メタデータは、パラメータ データにより入力される各列を表わします。

        式を使用したINSERT操作:

    INSERT INTO T1 VALUES (? * 3, ? + 1, ? MOD 3);

この例では、ターゲットテーブルの各列には、? * 3, ? + 1、および?MOD 3の各式の結果が割り当てられます。この3つのパラメータと関連付けられているメタデータがあいまいになります。これは、このメタデータを、複数のSQLタイプにマップできるからです。この場合、このパラメータのデータ型は不明とみなされます。また、メソッドjava.sql.ParameterMetaData.getParameterType()は、java.sql.Types.NULLを返します。

表16 では、パラメータのデータ型があいまいな場合に返され、不明なデータ型とみなされるものについて概説します。

表16: あいまい/不明なデータ型

java.sql.ParameterMetaDataメソッド

不明なデータ型の場合に返される値

String getParameterClassName(int param)

NULL

int getParameterType(int param)

java.sql.Types.NULL

String getParameterTypeName(int param)

NULL

int getPrecision(int param)

0

int getScale(int param)

0

int isNullable(int param)

ParameterMetaData.parameterNullableUnknown

boolean isSigned(int param)

false

int getParameterMode(int param)

ParameterMetaData.parameterModeUnknown

SELECT文のSELECTリストに?パラメータが指定されていると、ParameterMetaDataに加えて、ResultSetMetaDataがあいまいになることがあります。

    SELECT ?

注:   Teradata Database V2R6.2.0.19からは、SELECT文内のSELECTリストで疑問符パラメータ マーカーを使用できます。

表17 では、パラメータのデータ型があいまいな場合に返され、不明なデータ型とみなされるものについて概説します。

表17: あいまい/不明なデータ型

java.sql.ResultSetMetaDataメソッド

不明なデータ型の場合に返される値

getCatalogName

"" (ゼロ長の文字列)

getColumnClassName

NULL

getColumnDisplaySize

0

getColumnType

java.sql.Types.NULL

getColumnTypeName

NULL

getPrecision

0

getScale

0

getSchemaName

"" (ゼロ長の文字列)

getTableName

"" (ゼロ長の文字列)

isAutoIncrement

false

isCaseSensitive

false

isCurrency

false

isDefinitelyWritable

false

isNullable

ResultSetMetaData.columnNullableUnknown

isReadOnly

false

isSearchable

false

isSigned

false

isWritable

false

Java外部ストアド プロシージャ

ANSI SQL規格のJava外部ストアド プロシージャ(XSP)部分は、Teradata Database 12.0以降をTeradata JDBC Driver 12.0以降と連携して使用することで提供されます。これには、SQLJデータベースおよび表、jarファイルのインストール、Java XSP定義、およびJDBCデフォルト接続へのJava XSPアクセスが含まれます。

詳細は、『Teradata Database SQL外部ルーチン プログラミング』を参照してください。

Java XSPは、次のように使用します。

作成したら、他のXSPと同じ方法でJavaルーチンにアクセスします。Java XSPは、標準のJDBCドライバ インターフェースを使用してSQLコードを実行できます。ストアド プロシージャはデータベース上で実行され、ログオンしたセッション内から呼び出されるため、接続URL jdbc:default:connectionを使用する必要があります。

JARファイル

jarファイルには、Javaクラスの集合体が格納されます。クラス(コンパイルされたJavaバイト コード)は、EXTERNAL NAME句を使用して外部Javaルーチンが作成されたときに参照されます。jarファイルは、データベースの外部で作成されます。クラスを参照できるようにするためには、先に登録してSQL環境にコピーする必要があります。jarファイルをデータベースにインストールした後は、ファイルの内容を変更することはできません。ファイル全体を削除または置換することのみが可能になります。

jarファイルは、グローバルではなく、SQLJ.INSTALL_JAR()を呼び出してjarファイルをインストールしたユーザーのみが使用できます。C/C++のUDFおよびXSPのインフラストラクチャと同様に、jarが格納されているデータベースごとに1つのディレクトリがサーバー上に作成されます。特定のデータベース内の1つまたは複数のUDFまたはXSPに対して作成されたC/C++のDLLには、他のユーザーやデータベースからはアクセスできません。jarファイルの場合も同様です。このことと関連して、jarファイルに対して新しいアクセス権は作成されません。したがって、ユーザー データベースAは、ユーザー データベースBにインストールされたjarを参照するXSPを作成できません。ただし、C/C++のUDF/XSP用に設計された同じアクセス権を使用することにより、ユーザー データベースBで作成されたJava XSPへのアクセス権をユーザー データベースAに付与することは可能です。 Java XSPに関して適用できるモデルは、同じデータベース内にすべてのjarをインストールし、すべてのJava XSPを作成してから、それらのJava XSPの実行を必要とするすべてのユーザーに、Java XSPへのアクセス権を付与することです。

jarファイルは、次のXSPによってインストール、置換、削除、またはパス指定されます。

クライアントからDBSサーバーへのJava XSPの転送

JDBCを使用する場合は、サーバーまたはクライアント上に格納されているXSP用のjarファイルを使用します。クライアント上にあるJava XSP用のjarファイルは、クライアント ノードからサーバー ノードに転送する必要があります。セキュリティの目的で、Teradata JDBC Driverでは、すべてのリソースをロードするためにclasspathが使用されます。Java XSPが格納されているjarファイルをclasspath自体に指定することはできません。その代わりに、jarファイルのコンテナをclasspathに指定する必要があります。例えば、ファイル システム上のディレクトリにjarファイルがある場合は、そのディレクトリの名前がclasspath内になければなりません。別の例として、warファイルまたはearファイルの内部にjarファイルを配置することも可能です。アプリケーション サーバーは、warファイルやearファイルの内容を自動的にclasspathで使用可能にするためです。classpathを設定した後、Teradata JDBC Driverはソース ファイルをサーバー ノードに転送できるようになります。

SQLJを使用してjarファイルのインストールとクライアントからDBSサーバーへの転送を行うコードをJDBCのサンプル クラス抜粋して以下に示します。

stmt.executeUpdate("{call sqlj.install_jar('cj!SampleXJSP.jar', 'SampleXJSP',0)}");

この例では、locspecパラメータを使用してjarファイルの場所を指定しています。<locspec>は、元のjarファイルがある場所を指定します。<location designator>に'CJ!'が指定されている 場合、jarの場所は、クライアント上の、Teradata JDBC Driverのclasspathによって指定されたクライアント解釈の場所になります。<location designator>に'SJ!'が指定されている場合、jarの場所は、データベース サーバー上の、<server jar path>によって指定された場所になります。

SQLルーチンの定義

jarファイルをインストールした後の次の手順は、Javaクラス プロシージャDeptJobInfoを作成することです。例:

REPLACE PROCEDURE getDeptJobInfo

(IN name VARCHAR(30), OUT dept VARCHAR(50), OUT job VARCHAR(300))

LANGUAGE JAVA MODIFIES SQL DATA

PARAMETER STYLE JAVA

EXTERNAL NAME 'SampleXJSP:DeptJobInfo.getDeptJobInfo';

パラメータの使用例

次の例は、さまざまなパラメータのタイプに対するプロシージャ定義を示したものです。SQL文:

REPLACE PROCEDURE getEmpInfo

(IN name VARCHAR(30), OUT id INTEGER, OUT dept VARCHAR(50),

OUT job VARCHAR(300), OUT res CLOB)

LANGUAGE JAVA MODIFIES SQL DATA

PARAMETER STYLE JAVA

EXTERNAL NAME 'SampleXJSP:EmpInfo.getEmpInfo(

java.lang.String,

java.lang.Integer[],

java.lang.String[],

java.lang.String[],

java.sql.Clob[])';

上記で定義されたJavaストアド プロシージャのソース コード:

public class EmpInfo

{

  public static void getEmpInfo(String name,

                        java.lang.Integer[] id,

                        String[] dept,

                        String[] job,

                        java.sql.Clob[] res) throws SQLException

  {

    /* Establish default connection.*/

    Connection con =     DriverManager.getConnection("jdbc:default:connection");

    String query = "SELECT empID, empDept, empJob, empResume" +

             "FROM employee 2" +

             "WHERE empName = ?;";

    /* Executing the command */

    PreparedStatement pStmt = con.prepareStatement(query);

    try

    {

      pStmt.setString(1, name);

      ResultSet rs = pStmt.executeQuery();

      boolean more = rs.next();

      if(more)

      {

        id[0] = new java.lang.Integer(rs.getInt(1));

        dept[0] = rs.getString(2);

        job[0] = rs.getString(3);

        res[0] = rs.getClob(4);

      }

    }

    finally

    {

      pStmt.close();

    }

}

ここに提示されているJava XSP内のパラメータは、SQLタイプからJavaタイプに明示的にマップされます。このようなマッピングは、暗黙的にすることもできます。外部Java XSPパラメータのSQLタイプからJavaタイプへのマッピングについては、「SQLデータ タイプ マッピング」で定義されています。

デフォルト接続

前述の例のJava XSPは、データベース上で実行され、ログオンしたセッション内から呼び出されています。結果として、使用されている接続URLはjdbc:default:connectionになっています。これにより、呼び出し側のセッションおよび現在のトランザクションに参加するデフォルト接続が作成されます。接続のcloseメソッドが呼び出されても、ログオフは行なわれません。デフォルト接続は、呼び出し側と同じセッションを使用するためです。デフォルト接続は、1つのスレッド(特にJava XSPを呼び出したスレッド)からのみアクセスできます。

説明

JDBCデフォルト接続のURLの例

接続パラメータなし

jdbc:default:connection

単一の接続パラメータ

jdbc:default:connection/ParameterName=Value

 

接続パラメータは任意選択です。最初のParameterNameの後にフォワード スラッシュ文字が続きます。

複数の接続パラメータ

jdbc:default:connection/ParameterName=Value,ParameterName=Value

 

複数の接続パラメータを指定する場合は、パラメータをカンマで区切ります。値にカンマが含まれる場合は、その値を単一引用符で囲みます。

 

ParameterNameは接続パラメータ、Valueはこのパラメータの値です。

JDBCからのJava XSPの呼び出し

JDBCクライアントからのJava XSPの呼び出しは、他のストアド プロシージャの呼び出しと同じです。次の例では、CallableStatementを使用しています。

String sCall = "{call getEmpInfo(?,?,?,?,?)}";

String sName = "Brian Lee";

// プリコンパイルされたSQLステートメントを表す

// CallableStatementオブジェクトを作成し、呼び出し可能な

// ステートメントの実行を準備する

CallableStatement cStmt = con.prepareCall(sCall);

// 入力パラメータ値を設定する

cStmt.setString(1, sName);

// パラメータの型を宣言して、データ取得用の

// 出力パラメータを設定する

cStmt.registerOutParameter(2, Types.INTEGER);

cStmt.registerOutParameter(3, Types.VARCHAR);

cStmt.registerOutParameter(4, Types.VARCHAR);

cStmt.registerOutParameter(5, Types.CLOB);

System.out.printIn("\n Calling the procedure with '"

           + sName + '"...");

// プロシージャ呼び出しを実行する

cStmt.executeUpdate();

// プロシージャ呼び出しの結果を表示する

System.out.printIn(" Call successful.");

System.out.printIn("\n Displaying output of the call to"

           + "getEmpInfo(...):");

System.outprintIn("\n" + sName);

System.out.printIn("---------------");

int id = cStmt.getInt(2);

System.out.printIn(" Employee ID : " + id);

System.out.printIn(" Department : " + cStmt.getString(3));

System.out.printIn(" Job Description : " + cStmt.getString(4));

System.out.print(" Resume: ");

// レビューのためにCLOBデータをファイルに書き出す

createClobFile(cStmt.getClob(5),(id + "resumeT20604.txt"));

トランザクション セマンティックスとJava XSP

トランザクション セマンティックス(ANSIまたはTeradata)は、セッションがログオンされた時点で設定され、後で変更することはできません。Teradata JDBC Driverの使用時には、トランザクション セマンティックスはTMODE接続パラメータを使用して指定されます。Java XSPが使用するデフォルト接続は、常に、呼び出し側のセッションを確立するために使用されたトランザクション セマンティックスを継承します。

制限

次のSQL文は、動的結果セットの生成に使われている場合、Javaストアド プロシージャでサポートされません 。つまり、複文要求で動的結果セットを生成するSQL文が他に使われている場合に、それらの文と混在させることができないことを意味します。

次の制限は、自動生成キー結果セットがJavaストアド プロシージャから返される場合に適用されます。

Javaストアド プロシージャは直接的でも間接的でも、別のJavaストアド プロシージャを呼び出すことはできません。

Javaストアド プロシージャではINまたはINPUT LOBパラメータを更新できません。

Javaストアド プロシージャで使用されるLOB_TEMP_TABLEは、Javaストアド プロシージャを呼び出すJDBC接続によって使用されるLOB_TEMP_TABLEから分離する必要があります。

Teradata Database 12.0および13.0は、JDK 1.4.2またはJDK 5.0によってのみコンパイルされたJavaストアド プロシージャをサポートします。

JDK 6.0でコンパイルされたJavaストアド プロシージャは、Teradata Database 13.10以降でサポートされます。

更新可能結果セット

結果セットの更新可能化

以下のメソッドの呼び出し時には、デフォルトのResultSetオブジェクトが返されます。

このデフォルトのResultSetオブジェクトは更新可能ではなく、カーソルは順方向にのみ移動します。

以下のメソッドを呼び出すことにより、スクロール可能で更新可能なResultSetオブジェクトを作成できます。

上記のメソッドからのResultSetオブジェクトを更新可能にするためには、以下の要件が満たされている必要があります。

更新不能結果セット

Teradata JDBC Driverは、単一の表または複数の結合表から取り出された結果セットからの、更新要求、挿入要求、削除要求を満たそうとします。しかし、データベースから返された結果セットが更新可能ではない場合があります。例えば、次のような場合などです。

内部結合

内部結合の表に対して更新可能結果セットを使用することには、何の問題もありません。内部結合表からは、一致した行のみが選択され、不一致の行にNULL値が埋め込まれることはないためです。

ただし、複数の内部結合テーブルから取り出された結果セットにおいて、結果セットに列が含まれているすべてのテーブルに対して下記の固有インデックスの要件が満たされていない場合には、メソッドupdateRowとdeleteRowは失敗し、Teradata JDBC DriverはSQLExceptionをスローし、メソッドinsertRowではデータベースからエラー メッセージが返されます。

取り出された結果セットには、1つの固有索引の唯一のメンバーである列か、テーブルの1つまたは複数の固有索引のメンバーである列が含まれていなければなりません。最低1つの固有索引のすべての列が、結果セット内で選択されている必要があります。

外部結合

複数の外部結合テーブルから取り出された結果セットにおいて、結果セットに列が含まれているすべてのテーブルに対して下記の固有インデックスの要件が満たされていない場合には、メソッドupdateRowとdeleteRowは失敗し、Teradata JDBC DriverはSQLExceptionをスローし、メソッドinsertRowではデータベースからエラー メッセージが返されます。

取り出された結果セットには、1つの固有インデックスの唯一のメンバーである列か、テーブルの1つまたは複数の固有インデックスのメンバーである列が含まれていなければなりません。最低1つの固有インデックスのすべての列が、結果セット内で選択されている必要があります。

また、上記の固有索引要件から選択された固有索引列がNULLでない場合のみ、Teradata JDBC Driverは、1つの結合からの1つの結果セット行を更新可能にできます。ただし、外部結合では、1つまたは複数の結合テーブルの、このような固有索引列に対してNULL値を含めることができます。この場合、updateRow()操作とdeleteRow()操作は失敗し、Teradata JDBC DriverはSQLExceptionをスローします。

更新可能結果セットの使用

Teradata JDBC Driverで更新可能結果セットを使用する際の一般的なシナリオを以下に示します。

結果セットの型と並列性のアップグレードおよびダウングレード

結果セットの型と並列性のアップグレードまたはダウングレードが必要になるシナリオがいくつかあります。

シナリオ1: 型のアップグレード

Teradata JDBC Driverでは、更新可能結果セットを、結果セット型ResultSet.TYPE_SCROLL_INSENSITIVEとして実装します。

ユーザーが以下の結果セット型を使用しようとした場合、

ResultSet.TYPE_FORWARD_ONLYおよび並行モード

以下のメソッドでのResultSet.CONCUR_UPDATABLE:

さらに、以下の要件が満たされている場合、

取り出された結果セットの型はResultSet.TYPE_SCROLL_INSENSITIVEにアップグレードされ、ConnectionオブジェクトにSQLWarningが追加されます。

シナリオ2: 並列性のダウングレード

ユーザーが以下の結果セット並列性を使用しようとした場合、

以下のメソッドでのResultSet.CONCUR_UPDATABLE:

さらに、以下の要件が満たされていません 場合、

取り出された結果セットの並行モードはResultSet.READ_ONLYにダウングレードされ、ConnectionオブジェクトにSQLWarningが追加されます。

例外

更新可能結果セットを使用する際のTeradata JDBC Driverの例外シナリオを以下に示します。

ストアド プロシージャの動的結果セット

動的結果セットを返すストアド プロシージャは、複文要求に類似しています。

結果セットが動的であるということは、文の実行が終了するまでは結果のメタデータを参照できないことを意味します。

特殊な浮動小数点値

データベースは、正の無限大、負の無限大、非数(NaN)などの特殊な浮動小数点値について完全にはサポートしていません。Javaアプリケーションでは、PreparedStatementを使用して、特殊な浮動小数点値をデータベースのFLOAT列にバインドして挿入することは可能です。ただし、特殊な浮動小数点値はデータベースでは完全サポートではないため、特殊な浮動小数点値を参照するWHERE句条件を持つSELECT文では、不正な結果やデータベース エラーが発生することがあります。

PreparedStatementバッチ

PreparedStatementバッチは、実行依頼ごとに、SQL文は同じでデータ値のみが異なる場合に、データの挿入、更新、削除を、効率的に実行できます。

挿入のパフォーマンスは多くの要因に左右されます。例えば、列の数、列のデータ型、データ値のサイズなどです。表18 に、各挿入方法を遅いものから速いものの順に比較して示します。

表18: 挿入のパフォーマンス

スループット

挿入方法

注釈

最も遅い

リテラル データ値を使ったSQL非プリペアード文による挿入

疑問符パラメータを使ったSQL PreparedStatement挿入(非バッチ)

上記の方法よりも大幅に高速

疑問符パラメータを使った、推奨されるバッチ サイズのSQL PreparedStatementバッチ挿入。ほとんどのアプリケーションでバッチ サイズは5,000~10,000が最適

上記の方法よりも10~40倍高速

最も速い

疑問符パラメータを使った、推奨されるバッチ サイズのJDBC FastLoad PreparedStatementバッチ。ほとんどのアプリケーションでバッチ サイズは50,000~100,000が最適

上記の方法よりも3~10倍高速。大容量のデータのロード(少なくとも全部で100,000行)で推奨されるのは、JDBC FastLoadのみ

JDBCのPreparedStatementおよびCallableStatementバッチ機能は、Teradata Databaseの"iterated request(反復要求)"機能を使用してTeradata JDBC Driverによって実装されます。PreparedStatementバッチを、反復要求(INSERT、UPDATE、DELETE など)と互換性のあるSQLリクエストで使用すると、パフォーマンスの向上が期待できます。

複数ステートメントの要求、およびストアド プロシージャへのCALLは、Teradata Databaseの制限により、反復要求と互換性がありません。複数ステートメントの要求は、PreparedStatementバッチでは使用できません。

Teradata JDBC Driverは、PreparedStatement(または CallableStatement)バッチを使用したストアド プロシージャへのCALLの特殊なケースをサポートします。Teradata Databaseは、ストアド プロシージャへのCALLの反復要求をサポートしていないため、Teradata JDBC Driverは、SQLリクエストがストアード・プロシージャーへのCALLである場合、反復要求としてバッチを送信できません。代わりに、Teradata JDBC Driverは、バインドされたパラメータ値のセットごとに1回、ストアード プロシージャへのCALLを繰り返し実行します。ストアード プロシージャへのCALLにバッチが使用される場合、パフォーマンスの向上は期待できません。

PreparedStatementのBatchUpdateException処理

Teradata Database 13.10とTeradata JDBC Driver 13.00.00.16からは、PreparedStatementのバッチ実行でパラメータ セットごとの成功状態およびエラー状態が個別に返されるようになりました。

PreparedStatementのexecuteBatchメソッドを使用するアプリケーションには、BatchUpdateException用のcatchブロックを用意して、BatchUpdateExceptionのgetErrorCodeメソッドから返されたエラー コードをアプリケーションで検査する必要があります。

アプリケーションがBatchUpdateExceptionを検出した場合、そのアプリケーションはBatchUpdateExceptionのgetUpdateCountsメソッドが返す整数値のupdateCount配列を反復します。updateCount配列内の各整数値は、PreparedStatementのバッチで設定したパラメータ セットと同じ順序で対応します。

この整数値が0以上、またはSuccess.SUCCESS_NO_INFOと等しい場合、パラメータ セットは正常に実行されています。アプリケーションが、それ以上の対処を取る必要はありません。

配列内の整数値がStatement.EXECUTE_FAILEDと等しい場合、そのパラメータ セットの処理は失敗しています。アプリケーションは、整数値がStatement.EXECUTE_FAILEDと等しくなった各パラメータ セットを処理する必要があります。

表19:BatchUpdateException処理
新機能
旧機能

BatchUpdateExceptionのエラー コードが1338の場合、新機能が利用できます。BatchUpdateExceptionのエラー コード1338は、成功しなかった各更新カウントが連鎖されたSQLExceptionに対応することを示します。

BatchUpdateExceptionのエラー コードが1338以外の場合、新機能は利用できません。また、成功しなかった各更新カウントに対するSQLExceptionsの連鎖は存在しません。これは、Teradata Database 13.0以前の場合、またはTeradata JDBC Driverのバージョンが13.00.00.16より前の場合には必ず発生します。Teradata Database 13.10以降とTeradata JDBC Driver 13.00.00.16以降を使用している場合、データベースによって行が正常に処理される前にエラーが発生すると、エラー コードが1338以外になることがあります。

アプリケーションは、BatchUpdateExceptionのgetNextExceptionメソッドが返すSQLExceptionの連鎖を取得します。アプリケーションがupdateCount配列の各整数値を検査する場合、そのアプリケーションはSQLExceptionの連鎖を辿ります。連鎖内の各SQLExceptionは、失敗したパラメータ セットと同じ順序で対応します。

  • SQLExceptionのgetErrorCodeメソッドが負のエラー コードを返した場合、アプリケーションは、拒否されたパラメータ セットに適した何らかの処理(そのパラメータ セットをエラー ファイルに設定するなど)を実行する必要があります。

  • 個別の実行が成功している場合、アプリケーションはそれ以上の手順を進める必要はありません。

  • SQLExceptionのgetErrorCodeメソッドが、非負のエラー コードを返した場合、そのパラメータ セットはPreparedStatementのexecuteUpdateメソッドを使用して、個別に再発行する必要があります。

  • 個別の実行が失敗した場合や、SQLExceptionのgetErrorCodeメソッドが負のエラー コードを返した場合、アプリケーションは、拒否されたパラメータ セットに適した何らかの処理(そのパラメータ セットをエラー ファイルに設定するなど)を実行する必要があります。

失敗した各パラメータ セットは、PreparedStatementのexecuteUpdateメソッドを使用して、個別に再発行する必要があります。

  • 個別の実行が成功した場合、アプリケーションはそのパラメータ セットに対してそれ以上の処理を実行する必要はありません。

  • 個別の実行が失敗した場合、アプリケーションは拒否されたパラメータ セットに適した何らかの処理(そのパラメータ セットをエラー ファイルに追加するなど)を実行する必要があります。

JDBC FastLoad

JDBC FastLoadは、データベース内の空の宛先表に大量のデータを迅速にロードするメソッドを提供します。JDBC FastLoadの実際のパフォーマンスは、アプリケーションとデータベースの構成に応じて変わります。

例えば、制約のないネットワークの場合、JDBC FastLoadは対応するSQL PreparedStatementバッチ挿入よりも3~10倍高速になります。つまり、JDBC FastLoadは同等の機能を実行するSQL PreparedStatementバッチ挿入にかかる時間の10%~33%で済みます。

JDBC FastLoadの有効化

JDBC FastLoadは、URL接続文字列にTYPE=FASTLOADを指定して有効にします。有効になると、FastLoad対応のSQL INSERT文に対して、FastLoadプロトコルがデータベースで使用されます。他のすべてのSQL文と、FastLoad非対応のSQL INSERT文に対しては、標準のプロトコルがデータベースで使用されます。

JDBC FastLoadを実行できるようにするためには、SQL INSERT文で以下の基準が満たされていなければなりません。

JDBC FastLoad使用時の考慮事項

JDBC FastLoadはパフォーマンスを向上させますが、すべてのアプリケーションで適切な選択肢であるわけではありません。アプリケーションでのJDBC FastLoadの使用可能性を評価する場合、以下の要因を考慮する必要があります。

JDBC FastLoadによってサポートされるJDBCのデータ型

Teradata JDBC DriverによってサポートされるJDBCのデータ型のすべてがJDBC FastLoadによってサポートされるとは限りません。例えば、BLOBやCLOBなどです。同様に、Teradata JDBC DriverによってサポートされるJDBCのデータ型変換のすべてがJDBC FastLoadによってサポートされるとは限りません。

JDBC FastLoadを支援するJDBCエスケープ関数

Connection.nativeSQL("{fn teradata_amp_count()}")

これは、データベース用に設定されたAMPの数を返します。この情報は、作成可能なJDBC FastLoad接続の最大数を判定する際に役立ちます。

Connection.nativeSQL("{fn teradata_logon_sequence_number()}")

これは、このPreparedStatement によって作成されたJDBC FastLoadのConnection(接続)の、JDBC FastLoad対応のPreparedStatement.hashCode()と関連ログオン シーケンス番号(LSN)との、カンマで区切られたペアを返します。

例えば、文字列"6166383,1850,22323092,1851"は、616638322323092がJDBC FastLoad PreparedStatementのハッシュ コードであることを示し、18501851がそれぞれのLSNであることを示します。

この情報は、プログラム例に示されているような、JDBC FastLoad接続のDBC.SessionInfo.SessionNoを探す際に役立ちます。ただし、LSNを取得できるのは、auto-commit (自動コミット)モードがfalseに設定されていて、最低1つの列値がJDBC FastLoad対応のPreparedStatement を使用して事前にバインドされている場合に限ります。

JDBC FastLoad CSV

JDBC FastLoad CSVは、データベース内の空の宛先表に大量のデータを迅速にロードするメソッドを提供します。アプリケーションは、データをカンマ区切り値(CSV) フォーマットの可変長テキストを含むInputStreamとして提供する必要があります。デフォルトの分離(区切り)文字は',' (カンマ)です。『JDBC FastLoad CSVによってサポートされるフィールド分離記号』に示されているように、他の分離文字もサポートされています。この機能は、Teradata JDBC Driver 13.00.00.26以降で使用できます。

JDBC FastLoad CSVの有効化

JDBC FastLoad CSVは、URL接続文字列にTYPE=FASTLOADCSVを指定して有効にします。有効になると、FastLoadCSV対応のSQL INSERT文に対して、FastLoadプロトコルがデータベースで使用されます。他の種類のSQL文は、JDBC FastLoad CSV接続ではサポートされていません。

JDBC FastLoad CSVを実行できるようにするためには、SQL INSERT文で以下の基準が満たされていなければなりません。

JDBC FastLoad CSV使用時の考慮事項

JDBC FastLoad CSVはパフォーマンスを向上させますが、すべてのアプリケーションで適切な選択肢であるわけではありません。アプリケーションでのJDBC FastLoad CSVの使用可能性を評価する場合、以下の要因を考慮する必要があります。

JDBC FastLoad CSVによってサポートされるJDBCのデータ型

Teradata JDBC DriverによってサポートされるJDBCのデータ型のすべてがJDBC FastLoad CSVによってサポートされるとは限りません。例えば、BLOB、CLOB、およびBINARYなどです。同様に、Teradata JDBC DriverによってサポートされるJDBCのデータ タイプ変換のすべてがJDBC FastLoad CSVによってサポートされるとは限りません。

JDBC FastLoad CSVによってサポートされるフィールド分離記号

JDBC FastLoad CSVは、可変長テキストのInputStreamデータ セットでデータの列を分離するために、フィールド分離文字を使用します。デフォルトの分離文字は',' (カンマ)ですが、以下の文字を除く、Unicodeの基本多言語面文字セットの'\u0000'から'\u007f'までのその他の文字に変更できます。

カンマ以外の、一般的に使用される分離文字は、'\u003b' (';'セミコロン)、'\u007c' ('|'縦線)、および'\u0009' ('\t'タブ)です。

セミコロンまたは縦線など、ほとんどの印刷可能な分離文字はTeradata JDBC Driverの接続URLで指定できます。エスケープまたは引用符は不要です。たとえば、縦線のフィールド分離文字はTeradata JDBC Driverの接続URL内で以下のように指定されます。

            Connection con = DriverManager.getConnection( "jdbc:teradata://MySystem/FIELD_SEP=|,TYPE=FASTLOADCSV", user, password);

印刷不能文字または特殊文字をフィールド分離文字として使用する場合、Unicodeエスケープ シーケンスを使用する必要があります。たとえば、タブのフィールド分離文字はTeradata JDBC Driverの接続URL内で以下のように指定されます。バックスラッシュ('\')がJavaストリング リテラルに含まれる場合、バックスラッシュ文字を前に付けてそのバックスラッシュをエスケープする必要があることに注意してください。

            Connection con = DriverManager.getConnection( "jdbc:teradata://MySystem/FIELD_SEP=\\u0009,TYPE=FASTLOADCSV", user, password);

一部の印刷可能な文字はTeradata JDBC Driverの接続URL自体にとって重要です。Unicodeエスケープ シーケンスを使用するか、あるいはフィールド分離文字を単一引用符で囲むことができます。たとえば、カンマがフィールド分離文字として明示的に指定されている場合、Teradata JDBC Driverの接続URL内でカンマを単一引用符で囲む必要があります。

            Connection con = DriverManager.getConnection( "jdbc:teradata://MySystem/FIELD_SEP=',',TYPE=FASTLOADCSV", user, password);

データ セットのデータ値に一般的なフィールド分離文字および引用符がすべて含まれる場合は、ASCIIユニット分離文字(US)制御文字('\u001f')をフィールド分離文字として使用できます。これは、'\u001c'がこの目的に指定された制御文字であるためです。

JDBC FastExport

JDBC FastExportは、データベースの表やビューから大量のデータを簡単に取得する方法を提供します。JDBC FastExportの実際のパフォーマンスは、アプリケーションとデータベースの構成に応じて変わります。

例えば、制約のないネットワークの場合、JDBC FastExportは対応するSQL PreparedStatement selectよりも2~3倍高速になります。つまり、JDBC FastExportは同等の機能を実行するSQL PreparedStatement selectにかかる時間の33%~50%で済みます。

JDBC FastExportの有効化

JDBC FastExportは、URL接続文字列にTYPE=FASTEXPORTを指定して有効にします。有効になると、FastExport対応のSQL SELECT文に対して、FastExportプロトコルがデータベースで使用されます。他のすべてのSQL文と、FastExport非対応のSQL SELECT文に対しては、標準のプロトコルがデータベースで使用されます。

JDBC FastExportを実行できるようにするためには、SQL SELECT文で以下の基準が満たされていなければなりません。

JDBC FastExport使用時の考慮事項

JDBC FastExportによってサポートされるJDBCのデータ型

Teradata JDBC DriverによってサポートされるJDBCのデータ型のすべてがJDBC FastExportによってサポートされるとは限りません。例えば、BLOBやCLOBなどです。

JDBC FastExportを支援するJDBCエスケープ関数

JDBC Monitor

JDBC Monitorは、データベース内の標準の性能モニターおよびプロダクト制御機能にアクセスし、使用するメソッドを提供します。

JDBC Monitorの有効化

JDBC Monitorは、PARTITION=MONITOR接続パラメータを指定して有効にします。有効にすると、データベースとの通信でMonitorプロトコルが専用に使用されます。データベースPM/API Monitorのコマンドのみ、Monitorプロトコルに従って実行できます。SQL DMLとSQL DDL文は、Monitorプロトコルを使用して実行できません。

JDBC Monitor使用時の考慮事項

JDBC MonitorによってサポートされるデータベースPM/API文

JDBC MonitorによってサポートされるデータベースPM/API文を以下の各表に示します。各Monitor文についての詳細は、「ワークロード管理API:PM/APIおよびオープンAPI 」を参照してください。

表20 に、IDENTIFY文の説明を示します。

表20: IDENTIFY文

パラメータ

PreparedStatement

説明

1 (mon_ver_id)

setShort

MonitorソフトウェアのバージョンID

2 (host_id)

setShort

ホスト(またはクライアント)の論理ID

注:  NULL受入れ可能

3 (session_no)

setInt

セッション番号。host_idとsession_noの組み合わせによって、ブロックを引き起こしているユーザーが識別されます。

注:  NULL受入れ可能

4 (database_id)

setInt

このセッションのデータベースのID

注:  NULL受入れ可能

5 (user_id)

setInt

このセッションのユーザーのID

注:  NULL受入れ可能

6 (table_id)

setInt

テーブルの固有ID

注:  NULL受入れ可能

表21 に、MONITOR PHYSICAL CONFIG文の説明を示します。

表21: MONITOR PHYSICAL CONFIG文

パラメータ

PreparedStatement

説明

1 (mon_ver_id)

setShort

MonitorソフトウェアのバージョンID

表22 に、MONITOR PHYSICAL RESOURCE文の説明を示します。

表22: MONITOR PHYSICAL RESOURCE文

パラメータ

PreparedStatement

説明

1 (mon_ver_id)

setShort

MonitorソフトウェアのバージョンID

表23 に、MONITOR PHYSICAL SUMMARY文の説明を示します。

表23: MONITOR PHYSICAL SUMMARY文

パラメータ

PreparedStatement

説明

1 (mon_ver_id)

setShort

MonitorソフトウェアのバージョンID

表24 に、MONITOR SESSION文の説明を示します。MONITOR SESSIONを正常に実行できるようにするためには、SET SESSION RATEを実行して有効なセッション レートを設定しておく必要があります。

表24: MONITOR SESSION文

パラメータ

PreparedStatement

説明

1 (mon_ver_id)

setShort

MonitorソフトウェアのバージョンID

2 (host_id)

setShort

ホスト(またはクライアント)の論理ID

注:  NULL受入れ可能

3 (session_no)

setInt

セッション番号。host_idとsession_noの組み合わせによって、ブロックを引き起こしているユーザーが識別されます。

注:  NULL受入れ可能

4 (user_name)

setString

このセッションを実行しているユーザーまたはデータベースの名前

注:  NULL受入れ可能

表25 に、MONITOR SQL文の説明を示します。

表25: MONITOR SQL文

パラメータ

PreparedStatement

説明

1 (mon_ver_id)

setShort

MonitorソフトウェアのバージョンID

注:  MONITOR SQLの実行時には、バージョンID "2"をバインドしてはなりません。バージョンID "2"をバインドすると、Teradata JDBC Driverは、エラー コード1214および1178に連鎖したSQL例外をスローします。これは、データベースの不備によるものです。バージョンID "2"は、古いバージョンです。使用しないでください。

2 (host_id)

setShort

ホスト(またはクライアント)の論理ID

注:  NULL受入れ可能

3 (session_no)

setInt

セッション番号。host_idとsession_noの組み合わせによって、ブロックを引き起こしているユーザーが識別されます。

注:  NULL受入れ可能

4 (RunPEVprocNo)

setShort

セッションが実行されているPE vproc番号

注:  NULL受入れ可能

注:  引数"RunPEVprocNo"は、Teradata Database V2R5.1の後のリリースで追加されたので、古いバージョンでは使用できません。

表26 に、MONITOR VERSION文の説明を示します。

表26: MONITOR VERSION文

パラメータ

PreparedStatement

説明

1 (mon_ver_id)

setShort

MonitorソフトウェアのバージョンID

表27 に、MONITOR VIRTUAL CONFIG文の説明を示します。

表27: MONITOR VIRTUAL CONFIG文

パラメータ

PreparedStatement

説明

1 (mon_ver_id)

setShort

MonitorソフトウェアのバージョンID

表28 に、MONITOR VIRTUAL RESOURCE文の説明を示します。

表28: MONITOR VIRTUAL RESOURCE文

パラメータ

PreparedStatement

説明

1 (mon_ver_id)

setShort

MonitorソフトウェアのバージョンID

表29 に、MONITOR VIRTUAL SUMMARY文の説明を示します。

表29: MONITOR VIRTUAL SUMMARY文

パラメータ

PreparedStatement

説明

1 (mon_ver_id)

setShort

MonitorソフトウェアのバージョンID

表30 に、SET SESSION RATE文の説明を示します。

表30: SET SESSION RATE文

パラメータ

PreparedStatement

説明

1 (mon_ver_id)

setShort

MonitorソフトウェアのバージョンID

2 (sample_rate)

setShort

サンプル間隔の値

3 (local_change)

setString

このレートの変更を適用するセッションのタイプ

注:  NULL受入れ可能

表31 に、TDWM STATISTICS文の説明を示します。

表31: TDWM STATISTICS文

パラメータ

PreparedStatement

説明

1 (mon_ver_id)

setShort

MonitorソフトウェアのバージョンID

2 (request_flag)

setShort

要求のタイプを示す

表32 に、TDWM SUMMARY文の説明を示します。

表32: TDWM SUMMARY文

パラメータ

PreparedStatement

説明

1 (mon_ver_id)

setShort

MonitorソフトウェアのバージョンID

Raw接続

概要

Teradata JDBC DriverはRaw接続機能を提供します。これはCLIのバッファ モードに類似しています。TYPE=RAW接続パラメータを指定することで、アプリケーションにRaw接続が与えられます。

JavaアプリケーションがRaw接続を使用するとき、そのアプリケーションが要求メッセージ全体をJavaバイト配列として責任を持って作成し、Teradata JDBC Driverはデータベースからアプリケーションに応答メッセージを別のJavaバイト配列として提供します。

Raw接続の作成

Raw接続を得るにはTYPE=RAW接続パラメータを指定する必要があります。

Connection con = DriverManager.getConnection ("jdbc:teradata://mysystem/TYPE=RAW", "guest", "please") ;

TYPE=RAWに加えて、TMODEやLOG接続パラメータなど他の接続パラメータを指定できます。

Connection con = DriverManager.getConnection ("jdbc:teradata://mysystem/TYPE=RAW,TMODE=TERA,LOG=DEBUG", "guest", "please") ;

Raw接続の使用

Raw接続ではPreparedStatementオブジェクトのみが提供されます。Raw接続では、通常のStatementオブジェクトとCallableStatementオブジェクトを提供できません。アプリケーションはprepareStatement接続メソッドを使用する必要があります。

アプリケーションは、Raw接続のprepareStatementメソッドの引数としてNULLを指定する必要があります。これはTeradata JDBC DriverがRaw接続のSQLリクエストテキストを処理しないためで、この処理はアプリケーションが責任を持って行ないます。

PreparedStatement setBytesメソッドは、Raw接続のPreparedStatementオブジェクトでサポートされる唯一のデータ バインディング メソッドです。アプリケーションはバイト配列をパラメータ1として結合する必要があります。結合されたバイト配列は、メッセージ ヘッダーとメッセージ本文を含む要求メッセージ全体となる必要があります。Teradata JDBC Driverはセッション番号と認証値を要求メッセージのヘッダーに自動で設定しますが、他のメッセージ ヘッダー フィールドはすべてアプリケーションが責任を持って設定します。

PreparedStatement executeQueryメソッドは、データベースへの要求メッセージ送信でサポートされる唯一のメソッドです。

            byte [] abyRequestMsg = new byte [nRequestMsgSize] ; // ... application composes request message ...PreparedStatement ps = con.prepareStatement (null) ; try { ps.setBytes (1, abyRequestMsg) ; ResultSet rs = ps.executeQuery () ; try { rs.next () ; byte [] abyResponseMsg = rs.getBytes (1) ; // ... application processes response message ... } finally { rs.close () ; } } finally { ps.close () ; }
            

PreparedStatement executeQueryメソッドは要求メッセージをデータベースに送信した直後に返し、データベースが応答するのを待ちません。この動作は、アプリケーションに最大限の制御と柔軟性をもたらします。アプリケーションはAsynchronous Abort Messageを送信することもできます。

ResultSet nextメソッドはソケットの読み取りをブロックし、データベースが応答メッセージを返すまで待ちます。Raw接続のResultSetには、1つの行と1つの列の値のみが含まれています。

ResultSet getBytesメソッドは、Raw接続のResultSetオブジェクトでサポートされる唯一のデータ取得メソッドです。アプリケーションは列の値1を要求する必要があります。返されるバイト配列は、データベースからの応答メッセージ全体になります。アプリケーションはあらゆるエラーまたは障害パーセルを含む応答メッセージを、責任を持って解釈します。