ヘッダーをスキップ
Oracle® Fusion Middleware Oracle WebLogic Serverタイプ4 JDBCドライバ
11g リリース1(10.3.5)
B61001-03
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストヘ移動
製品
目次へ移動
目次

前
 
次
 

6 MS SQL Serverドライバ

次の項では、Oracleタイプ4 JDBC SQL Serverドライバを構成および使用方法を説明します。

ドライバ・クラス

Oracleタイプ4 JDBC MS SQL Serverドライバのドライバ・クラスは次のとおりです。

XA: weblogic.jdbcx.sqlserver.SQLServerDataSource
Non-XA: weblogic.jdbc.sqlserver.SQLServerDriver

Microsoft SQL ServerのURL

Microsoft SQL Serverデータベースに接続するには、次の形式のURLを使用します。

jdbc:weblogic:sqlserver://hostname:port[;property=value[;...]]

説明:

例:

jdbc:weblogic:sqlserver://server1:1433;User=test;Password=secret

名前付きインスタンスに接続する手順については、「名前付きインスタンスへの接続」を参照してください。

名前付きインスタンスへの接続

Microsoft SQL ServerおよびMicrosoft SQL Server 2005では、SQL Serverデータベースの複数のインスタンスを同じサーバーで同時に実行することができます。各インスタンスはインスタンス名で識別されます。

接続URLを使用して名前付きのインスタンスに接続するには、次の形式でURLを指定します。

jdbc:weblogic:sqlserver://server_name\\instance_name 

注意:

\\instance_nameの最初のバックスラッシュ(\)はエスケープ文字です。

説明:

server_nameは、サーバーのIPアドレスまたはホスト名です。

instance_nameは、サーバー上の接続先インスタンスの名前です。

たとえば次の接続URLを指定すると、server1上のinstance1に接続されます。

jdbc:weblogic:sqlserver://server1\\instance1;User=test;Pasword=secret

SQL Serverの接続プロパティ

表6-1に、SQL ServerドライバでサポートされるJDBC接続プロパティを示し、各プロパティについて説明します。WebLogic ServerドメインのJDBCデータ・ソースの構成でこれらの接続プロパティを使用できます。プロパティを指定するには、JDBCデータ・ソースの構成で、property=valueの形式を使用します。


注意:

すべての接続文字列プロパティ名で、大文字と小文字は区別されません。たとえば、Passwordはpasswordと同じです。

表6-1 SQL Serverの接続プロパティ

プロパティ 説明

AccountingInfo

データベースに格納する会計情報。この値がローカルに格納され、データベースの管理/監視に使用されます。

データ型: string

有効な値: string(ここで、stringは会計情報です)。デフォルトは、空の文字列です。

AlternateServers

選択したフェイルオーバー・メソッドに基づいて、新しい接続または失った接続をフェイルオーバーするのに使用する代替データベース・サーバーのリスト。フェイルオーバー・メソッドの選択の詳細は、FailoverModeプロパティを参照してください。

データ型: String

有効な値:

(servername1[:port1][;property=value[;...]

,servername2[:port2][;property=value[;...]]]...]

各代替サーバーのエントリについてサーバー名(servername1servername2など)が必要です。ポート番号(port1port2など)および接続プロパティ(property=value)は、各代替サーバーのエントリのためのオプションです。ポートが指定されていない場合、プライマリ・サーバーのポート番号が使用されます。プライマリ・サーバーのポート番号が指定されていない場合、デフォルトのポート番号1433を使用します。ドライバは1つオプションの接続プロパティDatabaseNameのみを許可します。注意: ドライバのかわりにフェイルオーバーの代替サーバーを指定するMicrosoft Cluster Server (MSCS)でフェイルオーバーを使用した場合、指定されたいずれかの代替サーバーはプライマリ・サーバーと同じである必要があります。例:

jdbc:datadirect:sqlserver://server1:1433;DatabaseName=TEST;User=test;Password=secret;AlternateServers=(server1:1433; DatabaseName=TEST)

たとえば、次のURLはserver2およびserver3の代替サーバーのエントリが含まれています。代替サーバーのエントリにはオプションのDatabaseNameプロパティが含まれています。

jdbc:datadirect:sqlserver://server1:1433;DatabaseName=TEST;User=test;Password=secret;AlternateServers=(server2:1433; DatabaseName=TEST2,server2:1433;DatabaseName=TEST3)

デフォルト: なし

データ型: String

AlwaysReportTriggerResults

データベース・トリガー(データベースに格納されており、表が修正されたときに実行または起動されるプロシージャ)によって生成された結果を、ドライバがどのように報告するかを指定します。Microsoft SQL Server 2005では、データ定義言語(DDL)イベントによって起動されたトリガーが含まれます。

有効な値: trueまたはfalse

trueの場合、ドライバはトリガーによって生成された結果を含むすべての結果を戻します。この場合、複数のトリガ結果が同時に戻されます。個別のトリガー結果を取得するには、Statement.getMoreResults()メソッドを使用します。発生した警告やエラーは結果内に報告されます。

false(デフォルト)の場合:

  • Microsoft SQL Server 2005では、単一のINSERT、UPDATE、DELETE、CREATE、ALTER、DROP、GRANT、REVOKE、またはDENY文の場合、ドライバはトリガー結果を報告しません。

  • 他のMicrosoft SQL Serverデータベースでは、単一のINSERT、UPDATE、またはDELETE文の場合、ドライバはトリガー結果を報告しません。

この場合、実行した文によって生成された更新件数のみが結果として返されます(エラーが発生していない場合)。トリガー結果は無視されますが、トリガーによって生成されたエラーは報告されます。トリガーによって生成された警告はキューに入れられます。エラーが報告される場合は、更新件数は報告されません。

デフォルトはfalseです。

ApplicationName

データベースに格納されるアプリケーションの名前。Microsoft SQL Server 2000以上では、この値によりデータベースのsysprocesses表にあるprogram_name値が設定されます。Microsoft SQL Server 7の場合、この値はローカルに保存されます。この値は、データベースの管理および監視のために使用されます。

有効な値: string(ここで、stringはアプリケーション名です)。

注意: データベースによって値に文字列の長さが制限される場合があります。値が制限を超えていると、ドライバによって切り捨てられます。

デフォルト: 空の文字列

データ型: String

別名: ProgramName property

AuthenticationMethod

ドライバが接続を確立する際に使用する認証方法を指定します。指定された認証方法がデータベース・サーバーでサポートされていない場合は、接続に失敗してドライバから例外がスローされます。

有効な値: auto | kerberos | ntlm | userIdPassword

autoの場合、ドライバは接続を確立する際にSQL Server認証、Kerberos認証、またはNTLM認証を使用します。アプリケーションがユーザーIDを提供しているか、ドライバがWindowsプラットフォームで実行されているか、ドライバがNTLM認証に必要なDLLをロードできるかどうかなどの条件の組合せに基づいて、認証方法が選択されます。このデフォルト値の使用の詳細は、「AuthenticationMethodプロパティの使用」を参照してください。

kerberosの場合、ドライバはKerberos認証を使用します。ドライバでは、指定されたあらゆるユーザーIDまたはパスワードが無視されます。この値はMicrosoft SQL Server 2000以上に接続する場合にのみサポートされます。

ntlmの場合、NTLM認証に必要なDLLをロードできる場合、ドライバはNTLM認証を使用します。DLLをロードできない場合は、ドライバから例外がスローされます。ドライバでは、指定されたあらゆるユーザーIDまたはパスワードが無視されます。

userIdPasswordの場合、ドライバは、接続を確立する際にSQL Server認証を使用します。ユーザーIDが指定されていない場合は、ドライバから例外がスローされます。

UserプロパティはユーザーIDを提供します。Passwordプロパティはパスワードを提供します。

注意: type4、type2、およびnoneの値は、非推奨になりましたが、下位互換性のために認識されます。代わりにkerberos、ntlm、およびuserIdPasswordの使用を推奨します。

SQL Serverドライバによる認証の使用方法については、「認証」を参照してください。

デフォルト: userIdPassword

データ型: String

BulkLoadBatchSize

データをバルク・ロードするときにデータベースに一度にロードする行数に関して、ドライバに提案します。少数のネットワーク・ラウンド・トリップが必要となるため、ドライバから一度にロードされる行数を増やすことでパフォーマンスが改善されます。ロードされる行数を増やすと、ドライバからクライアントのより多くのメモリーが消費される場合があります。

注意:

  • このプロパティによって、DDBulkLoadオブジェクトの使用またはバッチ挿入のバルク・ロードの使用のような使用したバルク・ロード・メソッドに関係なく、行数を提示します。

  • DDBulkObject.setBatchSize()メソッドはこのプロパティによって設定された値をオーバーライドします。メソッドの説明は、603ページのDDBulkLoadインタフェースを参照してください。

有効な値: x(ここで、xは正の整数です)。

デフォルト: 2048

BulkLoadOptions

ドライバを利用できる一括ロード・プロトコルのオプションを有効にします。有効な値は、すべての有効にされたオプションの累積値です。次のリストには、値および有効にする対応オプションが記載されています。

  • 1: KeepIdentityオプションではアイデンティティ値を維持します。指定しないと、アイデンティティ値はソースで無視され、宛先により割り当てられます。注意: バッチ挿入で一括ロード機能を使用する場合、このオプションを有効にしても効果はありません。

    2: TableLockオプションでは、一括コピー操作の期間に対して表のロックを割り当てます。操作が完了するまで他アプリケーションは表を更新できません。指定しないと、データベース・サーバーによって指定されたデフォルト一括ロック・メカニズムが使用されます。

    16: CheckConstraintsオプションでは、データのコピー中に整合性制約をチェックします。指定しないと、制約はチェックされません。

    32: FireTriggersオプションでは、データベース・サーバーにデータベースに挿入されている行に対して挿入トリガーを起動させます。指定しないと、トリガーが起動されません。

    64: KeepNullsオプションでは、デフォルト値の設定に関係なく宛先表にNULL値を維持します。指定しないと、NULL値を適用可能な場合は、列デフォルト値で置換します。

0の場合、すべてのオプションは無効になります。

例: 67の値は、KeepIdentityTableLockおよびKeepNullsオプションが有効であることを意味します(1 +2 + 64)。

デフォルト: 0

データ型: long

ClientHostName

データベースに格納されるクライアント・マシン上のホスト名またはワークステーションID。Microsoft SQL Server 2000以上では、この値はデータベースにあるsysprocesses表のホスト名の値を設定します。Microsoft SQL Server 7の場合、この値はローカルに保存されます。この値は、データベースの管理および監視のために使用されます。

有効な値: string(ここで、stringはクライアント・マシンのホスト名です)。

注意: データベースによって値に文字列の長さが制限される場合があります。値が制限を超えていると、ドライバによって切り捨てられます。

デフォルト: 空の文字列

データ型: String

別名: WSIDプロパティ

CodePageOverride

ドライバが文字データの変換に使用するコード・ページを指定します。指定したコード・ページによって、デフォルトのデータベース・コード・ページがオーバーライドされます。データベースとやり取り(取得および書込み)するすべての文字データは、指定したコード・ページを使用して変換されます。値としては、使用しているJVMでサポートされている有効なコード・ページの名前(たとえばCodePageOverride=CP950)を含む文字列を指定する必要があります。

デフォルトでは、文字データの変換に使用するコード・ページがドライバにより自動的に識別されます。このプロパティは、ドライバのデフォルト動作を変更する必要がある場合にのみ使用します。

CodePageOverrideプロパティとSendStringParametersAsUnicodeプロパティの両方をtrueに設定した場合は、ドライバはプロパティが無視されて警告が生成されます。ドライバは、常にCodePageOverrideプロパティに指定されたコード・ページを使用してパラメータを送信します。

ConnectionRetryCount

ドライバからのプライマリ・データベース・サーバーへの接続再試行数。指定されている場合、正常な接続を確立するまで代替サーバーへの接続を再試行します。

注意: アプリケーションはログイン・タイムアウト値(たとえば、DataSource.loginTimeoutまたはDriverManager.loginTimeoutを使用します)を設定した場合、およびログインがタイムアウトすると、ドライバは接続試行でなくなります。

有効な値: 0|x (xは正の整数)。

0の場合、最初の試行が失敗したら再接続は試行されません。

xの場合、ドライバは、指定された回数文接続を再試行します。接続が再試行中に確立されないと、ドライバは、最後に接続使用としたデータベース・サーバーで生成された例外を戻します。

注意: 試行の待機間隔は、ConnectionRetryDelayプロパティで秒単位で指定します。

例: このプロパティを2に設定し、AlternateServersプロパティで代替サーバーを指定した場合、最初の再試行の後、ドライバはサーバー(プライマリ・サーバーおよび代替サーバー)のリストを2回再試行します。

デフォルト: 5 (秒)

データ型: int

ConnectionRetryDelay

ConnectionRetryCountが正の整数に設定されている場合に、ドライバがそれぞれの接続の再試行の間に待機する秒数。

有効な値: 0|x (xは秒数)。

0に設定すると、ドライバでは再試行の間に遅延がありません。

xの場合、ドライバは、指定された秒数、接続再試行間に待機します。

例: ConnectionRetryCountを2に設定し、このプロパティを3に設定し、代替サーバーをAlternateServersプロパティを使用して指定すると、最初の再試行の後にドライバはサーバー(プライマリ・サーバーと代替サーバー)のリストを2回再試行します。ドライバは、再試行の間、3秒間待機します。

デフォルト: 1 (秒)

データ型: int

ConvertNull

データ変換におけるnull値の処理方法を制御します。

有効な値: 0 | 1

1の場合、ドライバは、リクエストされたデータ型とデータを格納する表列のデータ型を照合します。リクエストした型および列の型間の変換が定義されていない場合、ドライバから、列の値のデータ型にかかわらず、「サポートされないデータ変換」例外が生成されます。

0の場合、列の値がnullであると、ドライバでデータ型がチェックされません。これによって、リクエストされた型と列型の間の変換が定義されていない場合でもnull値を返すことが可能になります。

デフォルト: 1

データ型: int

データベース

DatabaseNameプロパティの別名。

DatabaseName

接続先のデータベースの名前。

有効な値: stringstringはMicrosoft SQL Serverデータベースの名前です。

デフォルト: なし

別名: Databaseプロパティです。DatabaseおよびDatabaseNameの両方のプロパティが接続URLに指定されている場合は、接続URL内で最後に指定されているプロパティが使用されます。たとえば、アプリケーションで次のようなURLを指定した場合、DatabaseName接続プロパティの値ではなく、Database接続プロパティの値が使用されます。

jdbc:weblogic:sqlserver://server1:1433;DatabaseName=jdbc;Database=acct;User=test;Password=secret

DescribeParameters

ドライバが実行時にデータベースのデータ型に基づいて、Stringパラメータのサーバーへの送信方法を決定するかどうかを制御します。Stringパラメータをデータベースが予期する型で送信すると、パフォーマンスが向上し、データ型の不一致による予期しないロックの問題を防止できます。

デフォルト値: noDescribe | describeIfString

SendStringParametersAsUnicodeプロパティは、ドライバがStringパラメータ値をUnicode (nvarcharなど)として送信するか、Unicode以外(varcharなど)として送信するかを制御します。このプロパティは、文字列のすべてがUnicodeまたはUnicode以外であるアプリケーションで役立ちます。Unicodeの列とUnicode以外の列の両方にアクセスするアプリケーションでは、ドライバが常に1つのフォーマットのみでStringパラメータ値をサーバーに送信する場合、一部の列でデータ型の不一致が発生します。

noDescribeの場合、ドライバはデータベースのデータ型を判断するためのSQLパラメータの記述を試行しません。ドライバはSendStringParametersAsUnicodeプロパティの設定に基づいて、Stringパラメータ値をサーバーに送信します。

describeIfStringに設定した場合、1つまたは複数のパラメータがStringとしてバインドされている場合に、(PreparedStatementメソッドのsetString()、setCharacterStream()およびsetAsciiStream()を使用して)ドライバはデータベースのデータ型を判断するためにSQLパラメータの記述を試みます。ドライバがデータベースのデータ型を判断できたときは、データベースのデータ型がn-型(nvarcharなど)の場合、ドライバはStirngパラメータ・データをUnicodeとしてサーバーに送信します。データベースのデータ型がn-型ではない場合、ドライバはパラメータの照合によって定義された文字エンコーディングにデータを変換し、その文字エンコーディングでサーバーにデータを送信します。ドライバがデータベースのデータ型を判断できないときは、SendStringParametersAsUnicodeプロパティの設定に基づいて、Stringパラメータ値をサーバーに送信します。

デフォルト値: noDescribe

データ型: String

EnableBulkLoad

ドライバから、バッチ挿入のためにバッチ・メカニズムのかわりにデータベース内のネイティブな一括ロード・プロトコルが使用されるかどうかを指定します。一括ロードは通常データベースが行うデータの解析処理をバイパスするため、バッチ操作ではよりパフォーマンスが向上します。このプロパティを使用すると、アプリケーション・コードを変更せずに、バッチ挿入がある既存のアプリケーションでバルク・ロードを利用できます。有効な値: true | false

trueの場合、ドライバから、バッチ挿入のためにネイティブな一括ロード・プロトコルが使用されます。

falseの場合、ドライバから、バッチ挿入のためにバッチ・メカニズムが使用されます。

デフォルト: false

データ型: boolean

EnableCancelTimeout

問合せタイムアウトの結果として送信された取消しリクエストが、その取消しリクエストによって取り消された文と同じ問合せタイムアウト値で制限されるかどうかを決定します。

有効な値: true | false

trueの場合、取消しリクエストは、取消し文のために設定した値と同じタイムアウト値(秒単位)を使用してタイムアウトします。たとえば、アプリケーションが、文にStatement.setQueryTimeout(5)を設定し、タイムアウト値を超えたため、その文が取り消された場合、取消しリクエストが送信されます。また、実行時間が5秒を超えると、その取消しリクエストもタイムアウトされます。たとえばサーバーが停止していることにより取消しリクエストがタイムアウトした場合、ドライバは、取消しリクエストがタイムアウトになり、接続が無効であることを示す例外をスローします。

falseの場合、取消しリクエストはタイムアウトしません。

デフォルト: false

データ型: boolean

EncryptionMethod

データがドライバとデータベース・サーバー間のネットワークで送信される場合、データを暗号化および復号化するどうかを決定します。

注意: ドライバがSSL用に構成されているのにデータベース・サーバーでSSLがサポートされていないと、接続のハングが発生する可能性があります。SSLをサポートしていないサーバーに接続した場合に発生する問題を回避するには、LoginTimeoutプロパティを使用してログイン・タイムアウトを設定します。

デフォルト値: noEncryption | SSL | requestSSL | loginSSL

noEncryptionに設定された場合、データは暗号化または復号化されません。

SSLに設定した場合、SSLを使用してデータが暗号化されます。データベース・サーバーがSSLをサポートしない場合、接続に失敗し、ドライブは例外をスローします。requestSSLに設定した場合、SSLを使用してログイン・リクエストとデータが暗号化されます。データベース・サーバーがSSLをサポートしない場合、ドライバは暗号化されていない接続を確立します。

loginSSLに設定した場合、ログイン・リクエストがSSLで暗号化されます。データベース・サーバーがSSLを要求するように構成されている場合、データはSSLで暗号化されます。データベース・サーバーがSSLをリクエストしない場合、データは暗号化されず、ログイン・リクエストのみが暗号化されます。

SSLが有効の場合、次のプロパティも適用されます。

HostNameInCertificate

TrustStore

TrustStorePassword

ValidateServerCertificate

注: SSLが有効の場合、ドライバは、サーバーのデフォルトのパケット・サイズにより設定されたデータベース・プロトコル・パケットと通信します。

PacketSizeプロパティで設定された値は無視されます。

デフォルト値: noEncryption

データ型: String

FailoverGranularity

接続が失われたときに接続の再確立の試行中に例外が発生した場合、ドライバがプロセスを続行するか全体のフェイルオーバー・プロセスに失敗するかを指定します。FailoverMode=connectの場合、このプロパティは無視されます。

デフォルト値: nonAtomic| atomic | atomicWithRepositioning | disableIntegrityCheck

nonAtomicに設定すると、ドライバでフェイルオーバー・プロセスが続行され、例外が発生する文にこの例外がポストされます。

atomicに設定すると、例外が接続状態のリストアの結果として発生した場合、ドライバは全体のフェイルオーバー・プロセスに失敗します。例外が、進行中の作業状態のリストアの結果として発生した場合、ドライバでフェイルオーバー・プロセスが続行されるがSelect文が再発行される必要があることを示す例外警告が発生します。

atomicWithRepositioningに設定すると、いずれかの例外が接続状態または進行中の作業状態のリストアの結果として発生した場合、ドライバは全体のフェイルオーバー・プロセスに失敗します。

disableIntegrityCheckに設定された場合は、ドライバは、フェイルオーバー・プロセス中にリストアされた行数が元の行数と一致するかどうかを確認しません。この値はFailoverMode=selectの場合のみ適用できます。

デフォルト値: nonAtomic

データ型: String

FailoverMode

ドライバから使用されるフェイルオーバー・メソッドのタイプを指定します。

有効な値: connect | extended | select

connectに設定すると、ドライバによって、新規接続のみにフェイルオーバー保護が提供されます。

extendedに設定すると、ドライバによって、新規接続および古い接続にフェイルオーバー保護が提供されるが進行中の作業に提供されません。

selectに設定した場合、ドライバは新しい接続および失われた接続にフェイルオーバー保護を提供します。また、Statementオブジェクトで実行した最後のSelect文による動作の状態を保持します。

注意:

  • AlternateServersプロパティは、すべてのフェイルオーバー・メソッドに必要であり、フェイルオーバーのために1つまたは複数の代替サーバーを指定します。

  • FailoverGranularityプロパティは、フェイルオーバー・プロセス中に例外が発生した場合にドライバが実行するアクションを決定します。

  • FailoverPreconnectプロパティは、ドライバが同時に複数のデータベース・サーバー(プライマリ・サーバーと代替サーバー)への接続を試行するかどうかを指定します。

デフォルト値: connect

データ型: String

FailoverPreconnect

ドライバが同時にプライマリ・サーバーと代替サーバーへの接続を試みるかどうかを指定します。FailoverMode=connectの場合、このプロパティが無視されます。有効な値: true | false

trueに設定すると、ドライバは同時にプライマリおよび代替サーバーに接続しようとします。アプリケーションが時間を区別し、フェイルオーバー接続を正常に実行するまで待機できない場合に役立ちます。

falseに設定すると、ドライバは接続欠落または失敗した接続試行が原因で発生したフェイルオーバーの場合のみ代替サーバーに接続しようとします。この値でパフォーマンスが向上しますが、フェイルオーバー接続を試行するときにアプリケーションに少し時間がかかる場合があります。

注意: AlternateServersプロパティでは、フェイルオーバーのための1つまたは複数の代替サーバーが指定されます。

デフォルト: false

データ型: boolean

HostNameInCertificate

SSL暗号化が有効(EncryptionMethod=SSL)になっていて、証明書の検証が有効(ValidateServerCertificate=true)になっている場合に、証明書の検証に使用するホスト名を指定します。このプロパティはオプションであり、ドライバが接続されているサーバーが実際にリクエストされたサーバーであることを保証することにより、介在者の攻撃(man-in-the-middle attack(MITM))を防ぐための追加のセキュリティを提供します。

有効な値: host_name | #SERVERNAME#(ここで、host_nameは有効なホスト名です)。

ホスト名が指定されている場合は、指定されたホスト名が、証明書内のSubjectAlternativeNameDNSName値と比較されます。DNSName値が存在しない場合、ホスト名は証明書のサブジェクト名の共通名(CN)部分と比較されます。値が一致しない場合は、接続に失敗して、ドライバから例外がスローされます。

#SERVERNAME#が指定されている場合は、接続URL内に指定されたサーバー名または接続のデータ・ソースが、証明書内のSubjectAlternativeNameDNSName値と比較されます。DNSName値が存在しない場合、ホスト名は証明書のサブジェクト名のCN部分と比較されます。値が一致しない場合は、接続に失敗して、ドライバから例外がスローされます。

注意: 複数のCN部分が存在する場合、ドライバによってホスト名がそれぞれのCN部分と照合されます。検証が1つでも一致すれば、接続が確立されます。

指定しない場合、ドライバは証明書のホスト名を検証しません。

SSL暗号化または証明書の検証が有効になっていない場合、このプロパティで指定された値は無視されます。

認証の構成の詳細は、「データの暗号化」を参照してください。

デフォルトは空の文字列です。

HostProcess

ProgramIDプロパティの別名。

ImportStatementPool

文プールの内容をロードするために使用されるファイルのファイル名およびパスを指定します。このプロパティが指定される場合、文が、指定されたファイルから文プールにインポートされます。接続を確立するとき、ドライバが指定されたファイルを見つけられない場合、接続に失敗して例外がスローされます。

有効な値: string(ここで、stringは、文プールの内容をロードするために使用するファイルのファイル名およびパスです)。

デフォルト: 空の文字列

データ型: String

InitializationString

ドライバがデータベースへの接続を確立し、その接続のすべての初期化を実行した後に実行する1つまたは複数のSQLコマンドを指定します。SQLコマンドの実行が失敗した場合、接続試行も失敗し、どのSQLコマンドが失敗したかを示す例外が、ドライバからスローされます。

有効な値: stringstringは1つまたは複数のSQLコマンドです。

複数のコマンドは、セミコロンで区切る必要があります。また、このプロパティが接続URLで指定されると、複数のコマンドを指定するときは値全体をカッコで囲む必要があります。

例: 次の接続URLでは、Microsoft SQL Serverデフォルトにnull値が設定され、デリミタ付き識別子を指定できます。

jdbc:datadirect:sqlserver://server1:1433;

InitializationString=(set ANSI_NULLS off;

set QUOTED_IDENTIFIER on);DatabaseName=test

Default: None

データ型: String

InsensitiveResultSetBufferSize

ドライバがインセンシティブな結果セット・データのキャッシュに使用するメモリーの量を指定します。

有効な値: -1 | 0 | xxは正の整数です。

-1に設定した場合、ドライバはインセンシティブな結果セット・データをメモリーにキャッシュします。結果セットのサイズが使用可能メモリーを超えると、OutOfMemoryExceptionが生成されます。結果セット・データをディスクに書き込む必要がないため、ドライバはデータを効率的に処理します。

0に設定した場合、ドライバは2GBを限度としてインセンシティブな結果セット・データをメモリーにキャッシュします。結果セット・データのサイズが使用可能メモリーを超えると、その結果セット・データがディスクにページングされます。結果セット・データがディスクに書き込まれる可能性があるため、ディスクに正しく書き込むためにデータの再フォーマットが必要になることがあります。

xに設定した場合、ドライバはインセンシティブな結果セット・データをメモリーにキャッシュし、その値を使用してインセンシティブな結果セット・データのキャッシュに使用するメモリー・バッファのサイズ(KB単位)を設定します。結果セット・データのサイズが使用可能メモリーを超えると、その結果セット・データがディスクにページングされます。結果セット・データがディスクに書き込まれる可能性があるため、ディスクに正しく書き込むためにデータの再フォーマットが必要になることがあります。バッファ・サイズとして2の累乗を指定すると、メモリーを効率的に使用できます。

デフォルト: 2048

データ型: int

JavaDoubleToString

double値やfloat値をstring値に変換する際に、ドライバによって、どのアルゴリズムが使用されるかを指定します。デフォルトでは、ドライバの内部アルゴリズムが使用されます。これにより、パフォーマンスが向上します。

有効な値: true | false

trueに設定した場合、ドライバはJVMアルゴリズムを使用してdouble値やfloat値を文字列値に変更します。アプリケーションで丸め誤差が受け入れられず、パフォーマンスを犠牲にする場合、この値をtrueに設定してJVM変換アルゴリズムを使用します。

falseに設定した場合、double値やfloat値をstring値を文字列値に変換する際にドライバの内部アルゴリズムが使用されます。この値はパフォーマンスを向上させますが、JVMアルゴリズムを使用した変換との間で、丸めによる多少の誤差が生じる可能性があります。ただし、これらの誤差はdoubleおよびfloatデータ型の誤差としては許容範囲内です。

デフォルト: false

データ型: boolean

JDBCBehavior

ドライバが、NCHARNVARCHARNLONGVARCHAR、NCLOBおよびSQLXMLのJDBC 4.0データ型にマップするデータベース・データ型について説明する方法を決定します。このプロパティは、アプリケーションがJava SE 6を使用する場合のみ適用されます。

有効な値: 0 | 1

0に設定した場合、ドライバはJava SE 6を使用するときのデータ型をJDBC 4.0データ型として説明します。

1に設定した場合、JVMにかかわらず、ドライバはJDBC 3.0同等のデータ型を使用してデータ型について説明します。これにより、アプリケーションはJava SE 6環境で継続してJDBC 3.0データ型を使用できます。また、PROCEDURE_NAME列にはプロシージャ名修飾子が含まれます。

たとえば、完全修飾プロシージャnamed 1.sp_productaddには、ドライバはsp_productadd;1を戻します。

デフォルト: 1

データ型: int

LoadBalancing

ドライバでのデータベース・サーバー(プライマリおよび代替)への接続試行にクライアント・ロード・バランシングが使用されるかどうかを指定します。AlternateServersプロパティを設定して1つ以上の代替サーバーを指定できます。

有効な値: true | false

trueに設定した場合、ドライバはクライアント・ロード・バランシングを使用してデータベース・サーバー(プライマリ・サーバーおよび代替サーバー)にランダムに接続を試行します。ドライバはプライマリ・サーバーおよび代替サーバーのリストから最初に接続するサーバーをランダムに選択します。その接続に失敗した場合、ドライバは、リストのすべてのサーバーに接続を試行するか、接続が正常に確立されるまでこのリストからサーバーを再選択します。

falseに設定した場合、ドライバはクライアント・ロード・バランシングを使用せず、連続した順序で各サーバーに接続します(最初にプライマリ・サーバー、次に指定されている順番で代替サーバー)。

デフォルト: false

データ型: boolean

LoadLibraryPath

NTLM認証のためのDLLのディレクトリを指定します。ドライバは指定されたディレクトリでDLLを検索します。

注: ドライバをインストールすると、NTLM認証DLLがinstall_dir/libサブディレクトリにインストールされます。install_dirは製品インストール・ディレクトリです。

有効な値: stringstringは、NTLM認証のためのDLLを含むディレクトリの完全修飾パスです。

指定されていない場合、ドライバは、環境変数PATHにより定義されたWindowsシステム・パスでのディレクトリ内でDLLを探します。stringに設定した場合、ドライバは指定されたディレクトリでDLLを探します。Windowsシステム・パスに存在しないディレクトリにドライバをインストールした場合、この値を使用します。

デフォルト: なし データ型: String

LoginTimeout

接続リクエストがタイムアウトする前にドライバが接続が確立されるのを待機する時間(秒単位)。

有効な値: 0| xxは秒数です。

0に設定した場合、ドライバは接続リクエストをタイムアウトしません。

xに設定した場合、ドライバは指定した秒数の間待機してから、コントロールをアプリケーションに戻してタイムアウト例外をスローします。

デフォルト: 0

データ型: int

LongDataCacheSize

ドライバが結果セット内で長いデータ(イメージ、画像、長いテキストまたはバイナリ・データ)をキャッシュするかどうかを決定します。パフォーマンスを向上するために、アプリケーションが結果セット内の定義順に列を取得する場合に長いデータ・キャッシュを無効化できます。

有効な値: -1 | 0 | xxは正の整数です。

-1に設定した場合、ドライバは結果セット内の長いデータをキャッシュしません。それはサーバーでキャッシュされます。アプリケーションでは結果セットに定義された順序で列を取得する場合のみ、この値を指定します。

0に設定した場合、ドライバは結果セット内の長いデータをメモリーにキャッシュします。結果セット・データのサイズが使用可能メモリーを超えると、その結果セット・データがディスクにページングされます。

x(xは正の整数)を設定した場合、ドライバは結果セット内の長いデータをメモリーにキャッシュし、この値を使用して、結果セット・データのキャッシュに使用するメモリー・バッファのサイズ(KB単位)を設定します。結果セット・データのサイズが使用可能メモリーを超えると、その結果セット・データがディスクにページングされます。

このプロパティを構成して最適なパフォーマンスを実現する方法については、「パフォーマンスに関する考慮事項」を参照してください。

デフォルト: 2048

データ型: int

MaxPooledStatements

この接続のプールされたプリペアド文の最大数。MaxPooledStatementsをゼロ(0)以上の整数に設定すると、ドライバの内部のプリペアド文プーリングが実行できます。この内部のプリペアド文プーリングは、アプリケーション・サーバーまたは独自のプリペアド文プーリングを提供する別のアプリケーション内部で実行されないドライバの場合に役立ちます。

有効な値: 0 | xxは正の整数です。

0に設定されている場合は、ドライバ内のプリペアド文のプールが無効です。

xに設定した場合、ドライバはプール・モニターを有効にし、指定された値を使用してアプリケーションで作成された一定のプリペアド文をキャッシュします。たとえば、このプロパティの値を「20」に設定した場合、ドライバはアプリケーションで作成された最後の20個のプリペアド文をキャッシュします。このプロパティに設定された値がアプリケーションで使用されるプリペアド文より大きい場合、アプリケーションで作成されたすべてのプリペアド文がキャッシュされます。CallableStatementPreparedStatementのサブクラスであるため、CallableStatementsもキャッシュされます。

デフォルト: 0

データ型: int

別名: MaxStatements property

MaxStatements

MaxPooledStatementsプロパティの別名。

NetAddress

Microsoft SQL Serverに接続するアプリケーションのネットワーク・インタフェース・カードのメディア・アクセス制御(MAC)アドレス。この値は最大12文字の文字列。このプロパティの値はデータベース管理に有用となります。この値は以下のnet_address列に格納されます。

  • sys.sysprocesses表(Microsoft SQL Server 2005)

  • master.dbo.sysprocesses表(Microsoft SQL Server 2000)

デフォルトは000000000000です。

PacketSize

データベース・サーバーからクライアント・マシンに転送される各データベース・プロトコル・パケットのバイト数を決定します(Microsoft SQL Serverではこのパケットのことを「ネットワーク・パケット」と呼びます)。

パケット・サイズを調整するとパフォーマンスを向上できます。最適なサイズは、アプリケーションやその実行環境によって挿入、更新、または戻されるデータの一般的なサイズによって異なります。通常は、パケット・サイズを大きくするほど大量のデータを処理しやすくなります。たとえば、アプリケーションが10,000文字の長さの値を定期的に戻す場合は、一般的に32(16 KB)の値を使用するとパフォーマンスが向上します。

有効な値: -1 | 0 | xxは1から128までの整数です。

-1、ドライバはデータベース・サーバーで使用されているデフォルトの最大パケット・サイズを使用します。

0 (デフォルト)に設定した場合、ドライバは64KBのパケット・サイズを使用します。

x (1 - 128の整数)に設定した場合、ドライバは512バイトの倍数のパケット・サイズを使用します。たとえば、PacketSize=8の場合は、パケット・サイズが8 * 512バイト(4096バイト)に設定されます。

このプロパティを構成して最適なパフォーマンスを実現する方法については、「パフォーマンスに関する考慮事項」を参照してください。

デフォルトは0です。

Password

Microsoft SQL Serverデータベースに接続する場合に使用するパスワード。大文字と小文字は区別されません。パスワードは、データベースでSQL Server認証が有効化されている場合にのみ必要となります。その場合は、システム管理者に連絡してパスワードを取得します。

有効な値: string(ここで、stringは、有効なパスワードです)。パスワードは大文字と小文字を区別しません。

デフォルト: なし

データ型: String

認証の構成の詳細は、「認証」を参照してください。

PortNumber

Microsoft SQL Serverデータベースへの接続をリスニングするプライマリ・データベース・サーバーのTCPポート。

このプロパティは、データ・ソース接続でのみサポートされます。

有効な値: portportはポート番号です。

デフォルト: 1433

データ型: int

ProgramID

データベースに格納されるクライアント上のドライバの製品とバージョン情報。Microsoft SQL Server 2000以上の場合、この値はhostprocessをsysprocesses表に設定します。Microsoft SQL Server 7の場合、この値はローカルに保存されます。この値は、データベースの管理および監視のために使用されます。

有効な値: DDJVVRRM。ここで:

  • DDJはJDBCドライバの識別子です。

  • VVでは、2桁のバージョン番号が識別されます(1桁のバージョンの場合、高位0)。

  • RRでは、2桁のリリース番号が識別されます(1桁のリリースの場合、高位0)。

  • Mでは、1文字の変更レベルが識別されます(0-9またはA-Z)。

例: DDJ04100

デフォルト: 空の文字列

データ型: String

別名: HostProcessプロパティ

ProgramName

ApplicationNameプロパティの別名。

QueryTimeout

接続で作成されたすべてのstatementsのデフォルト問合せタイムアウト(秒単位)を設定します。

有効な値: -1 |0 | xxは秒数です。

xに設定した場合、ドライバは接続で作成されたすべてのstatementのデフォルト・タイムアウトとしてこの値を使用します。この接続オプションでデフォルト・タイムアウトをオーバーライドするには、Statement.setQueryTimeout()メソッドを呼んで、特定のstatementのためにタイムアウト値を設定します。

-1に設定した場合、問合せタイムアウト機能が無効になります。ドライバは、通知なしでStatement.setQueryTimeout()メソッドへの呼出しを無視します。

0 (デフォルト)に設定した場合、デフォルトの問合せタイムアウトは無限大となります(問合せはタイムアウトしません)。

デフォルト: 0

データ型: int

ReceiveStringParameterType

ドライバがStringのストアド・プロシージャの出力パラメータをデータベースに記述する方法を指定します。

有効な値: NVARCHAR | VARCHAR | DESCRIBE

NVARCHAR (デフォルト)に設定した場合、ドライバはStringのストアド・プロシージャの出力パラメータをnvarchar (4000)として記述します。接続によって戻されるすべての出力パラメータがncharまたはnvarcharの場合は、この値を使用します。出力パラメータがcharまたはvarcharの場合、ドライバは出力パラメータ値を戻しますが、戻される値は4000文字に制限されます。

VARCHARに設定した場合、ドライバはStringのストアド・プロシージャの出力パラメータをvarchar (8000)として記述します。接続によって戻されるすべての出力パラメータがcharまたはvarcharの場合は、この値を使用します。出力パラメータがncharまたはnvarcharの場合は、データが適切に戻されない可能性があります。この問題は、戻されたデータがデータベースのデフォルトのコード・ページ以外のコード・ページを使用している場合に発生します。

DESCRIBEに設定した場合、ドライバはストアド・プロシージャのパラメータを記述するリクエストをデータベースに送信します。ドライバはドライバによって戻されるパラメータのデータ型を使用して、Stringの出力パラメータをnvarcharとvarcharのどちらで記述するかどうかを決定します。nvarcharとvarcharの出力パラメータの組合せがあり、varchar出力パラメータが4000文字よりも大きな値を戻す可能性がある場合は、この値を使用します。このメソッドはいつでも機能しますが、出力パラメータを記述する分の負荷が生じます。

デフォルト: NVARCHAR

データ型: String

ResultSetMetaDataOptions

アプリケーションで表名情報が必要な場合は、Select文のResultSetメタデータに表名情報を含めて戻せます。

有効な値: 0 | 1

0 (デフォルト)に設定した場合は、ResultSetMetaData.getTableName()メソッドが呼び出されても、結果セットの各列の正しい表名を特定するための追加処理は実行されません。この場合、getTableName()メソッドは結果セット内の列ごとに空の文字列を返す可能性があります。

1に設定した場合は、ResultSetMetaData.getTableName()メソッドが呼び出されると、結果セットの各列の正しい表名を特定するための追加処理が実行されます。ResultSetMetaData.getSchemaName()メソッドとResultSetMetaData.getCatalogName()メソッドが呼び出された場合、スキーマ名とカタログ名の情報を返すこともできます(ドライバがこの情報を判別できる場合)。

ResultSetメタデータを戻す方法の詳細は、「ResultSetメタデータのサポート」を参照してください。

デフォルト: 0

データ型: int

SelectMethod

ドライバが、Select文でデータベース・カーソルをリクエストするかどうかを判定するためのヒント。ドライバがリクエストされたメソッドを常に満たすとは限らないのでヒントとして定義されるこのプロパティによって、ドライバのパフォーマンスと動作は影響を受けます。

有効な値: direct | cursor

direct (デフォルト)に設定した場合、データベース・サーバーは問合せにレスポンスするときに、1つのレスポンスでドライバへすべての結果セットを送信します。要求された結果セット型が前方専用の結果セットである場合、サーバー側のデータベース・カーソルは作成されません。通常、レスポンスはドライバによってキャッシュされません。このメソッドでは、ドライバは問合せのレスポンス全体を処理してからでないと、次の問合せを送信できません。同じ接続で別の文を使うなどして問合せがもう1つ送信された場合、ドライバは2番目の問合せを送信する前に最初の問合せのレスポンスをキャッシュします。通常、cursorメソッドよりもdirectメソッドのほうがパフォーマンスがよくなります。

cursorに設定した場合、サーバー側のカーソルがリクエストされます。送信専用の結果セットを戻すときに、サーバーからブロック単位で行が取得されます。送信専用の結果セットが戻される場合、setFetchSize()メソッドを使用すると、各リクエストで取得する行数を制御できます。パフォーマンス・テストの結果から、送信専用の結果セットを戻す場合、Statement.setFetchSize()の値がパフォーマンスに大きく影響することがわかっています。setFetchSize()の値を決定するための簡単なルールがありません。様々なsetFetchSize()の値で実験して、アプリケーションで最高のパフォーマンスが得られる値を特定することをお薦めします。Cursorメソッドは、大量のデータが得られる問合せ、特に複数のオープン結果セットを使用する場合に効果的です。

このプロパティを構成して最適なパフォーマンスを実現する方法については、「パフォーマンスに関する考慮事項」を参照してください。

デフォルト: direct

データ型: String

SendStringParametersAsUnicode

文字列パラメータをMicrosoft SQLサーバー・データベースにデータベースのデフォルトの文字エンコーディングまたはUnicodeで送信するかどうかを決定します。

有効な値: true | false

true (デフォルト)に設定した場合、文字列パラメータはMicrosoft SQL ServerにUnicodeで送信されます。

falseに設定した場合、ドライバは文字列パラメータをデータベースのデフォルト文字エンコーディングで送信します。サーバーはUnicode文字をデフォルト・エンコーディングに変換する必要がないので、パフォーマンスは向上します。

CodePageOverrideプロパティに値が設定されている場合にこのプロパティをtrueに設定した場合、このプロパティが無視されて警告が生成されます。

このプロパティを構成して最適なパフォーマンスを実現する方法については、「パフォーマンスに関する考慮事項」を参照してください。

デフォルト: true

データ型: boolean

ServerName (必須)

プライマリ・データベース・サーバーまたは名前付きのインスタンスのIPv4またはIPv6形式のIPアドレスを指定するか、ネットワークで名前付きのサーバーがサポートされている場合はサーバー名を指定します。たとえば、122.23.15.12またはSQLServerServerのように指定します。

有効な値: string(ここで、stringは、有効なIPアドレスまたはサーバー名です)。

名前付きインスタンスに接続するには、このプロパティにserver_name\\instance_nameと指定します。server_nameは、指定したサーバー上の接続先インスタンスのIPアドレスで、instance_nameはそのインスタンスの名前。

このプロパティは、データ・ソース接続でのみサポートされます。

名前付きインスタンスへの接続の詳細は、「名前付きインスタンスへの接続」を参照してください。

デフォルト: なし

データ型: String

SnapshotSerializable

Microsoft SQL Server 2005以降でのみサポートされます。アプリケーションで接続にSnapshot分離を使用できるようにします。

このプロパティはSerializable分離レベルが設定されているアプリケーションで有用です。SnapshotSerializableプロパティを使用すると、コードの変更を回避するか最小限に抑えてSnapshot分離を使用できます。新しいアプリケーションを開発している場合は、TRANSACTION_SNAPSHOT定数の方が適している場合もあります。

有効な値: true | false

true (デフォルト)に設定し、アプリケーションでトランザクション分離レベルをSerializableに設定した場合、アプリケーションは接続にSnapshot Isolationレベルを使用します。

注意: Snapshot Isolationを使用するには、データベースもSnapshot Isolation用に構成する必要があります。

false (デフォルト)に設定し、アプリケーションでトランザクション分離レベルをSerializableに設定した場合、アプリケーションはSerializable分離レベルを使用します。デフォルト: false

データ型: boolean

SpyAttributes

Spyを有効にして、アプリケーションのかわりにドライバで発行された呼出しの詳細情報をログします。Spyはデフォルトで有効になりません。

有効な値: (spy_attribute[;spy_attribute]...)。spy_attributeは任意の有効なSpy属性です。

付録D「WebLogic JDBC SpyでJDBCコールのトラッキング」を参照してください。

注意: Java文字列でファイルを記録するために、Windowsでパスをコーディングする場合、バックスラッシュ文字(\)の前にJavaエスケープ文字(バックスラッシュ)が必要です。例:

log=(file)C:\\temp\\spy.log。例: 次の値は、1つの行に80文字以内を入力して、ドライバがファイルにすべてのJDBCアクティビティをログすることを指示します。

(log=(file)/tmp/spy.log;linelimit=80)デフォルト: None

データ型: String

TransactionMode

ドライバがローカル・トランザクションの開始を区切る方法を制御します。

有効な値: implicit | explicit

implicitに設定した場合、ドライバはimplicitトランザクション・モードを使用します。この場合、トランザクション対応の文が実行されると、ドライバではなくMicrosoft SQL Serverが自動的にトランザクションを開始します。通常、暗黙のトランザクション・モードではトランザクションを開始するためにドライバがコマンドを送信する必要がなく、必要になるまでトランザクションが開始されないため、暗黙のトランザクション・モードの方が明示的なトランザクション・モードよりも効率的になります。implicitトランザクション・モードでTRUNCATE TABLE文が使用された場合、エラーが発生するとMicrosoft SQL Serverはトランザクションをロールバックします。この状況が起きた場合は、このプロパティの値にexplicitを使用します。

explicitに設定した場合、ドライバはexplicitトランザクション・モードを使用します。この場合、前のトランザクションがコミットまたはロールバックされると、Microsoft SQL Serverではなくドライバが新しいトランザクションを開始します。

デフォルト: implicit

データ型: String

TruncateFractionalSeconds

ドライバがタイムスタンプの値を3桁の小数の秒で切り捨てるかどうかを決定します。たとえば、datetime2データ型の値は、最大7桁の少数の秒を持つことができます。

有効な値: true | false

trueに設定した場合、ドライバはすべてのタイムスタンプの値を3桁の少数の秒で切り捨てます。

falseに設定した場合、ドライバは少数の秒を切り捨てません。

デフォルト: true

データ型: boolean

TrustStore

SSLサーバー認証を使用している場合に、使用するトラスト・ストア・ファイルのディレクトリを指定します。トラストストア・ファイルには、クライアントが信頼する認証局(CA)のリストが格納されています。

この値によって、javax.net.ssl.trustStore Javaシステム・プロパティに指定されたトラストストア・ファイルのディレクトリがオーバーライドされます。このプロパティが指定されていない場合は、javax.net.ssl.trustStore Javaシステム・プロパティに指定されたトラスト・ストア・ファイルのディレクトリが使用されます。

このプロパティは、ValidateServerCertificate=falseに設定されている場合は無視されます。

有効な値: string(ここで、stringは、トラストストア・ファイルの有効なディレクトリです)。

デフォルト: なし

データ型: String

TrustStorePassword

SSLサーバー認証を使用している場合に、使用するトラスト・ストア・ファイルのパスワードを指定します。トラストストア・ファイルには、クライアントが信頼する認証局(CA)のリストが格納されています。

この値によって、javax.net.ssl.trustStorePassword Javaシステム・プロパティに指定されたトラスト・ストア・ファイルのパスワードがオーバーライドされます。このプロパティが指定されていない場合は、トラストストア・パスワードがjavax.net.ssl.trustStorePassword Javaシステム・プロパティによって指定されます。

このプロパティは、ValidateServerCertificate=falseに設定されている場合は無視されます。

有効な値: stringstringはトラストストア・ファイルの有効なパスワードです。

デフォルト: なし

データ型: String

User

Microsoft SQL Serverデータベースに接続する場合に使用するユーザー名。大文字と小文字は区別されません。ユーザー名は、データベースでSQL Server認証が有効化されている場合にのみ必要となります。その場合は、システム管理者に連絡してユーザー名を取得します。

有効な値: string(ここで、stringは有効なユーザー名です)。ユーザー名は大文字と小文字を区別しません。

デフォルト: なし

データ型: String

UseServerSideUpdatableCursors

更新可能な結果セットをリクエストされた場合、ドライバがサーバー側カーソルを使用するかどうかを決定します。

有効な値: true | false

trueに設定した場合、更新可能な結果セットがリクエストされたときにサーバー側の更新可能なカーソルが作成されます。

falseに設定した場合、デフォルトの更新可能結果セット機能が使用されます。

サーバー側で更新可能なカーソルの使用方法については、「サーバー側で更新可能なカーソル」を参照してください。

このプロパティを構成して最適なパフォーマンスを実現する方法については、「パフォーマンスに関する考慮事項」を参照してください。

デフォルト: false

データ型: boolean

ValidateServerCertificate

SSL暗号化が有効になっている場合(EncryptionMethod=SSL)、ドライバがデータベース・サーバーから送信された証明書を検証するかどうかを決定します。SSLサーバー認証を使用する場合、サーバーから送信されるすべての証明書は、信頼性のある証明局(CA)で発行される必要があります。テスト環境においては、信頼性のあるCAが発行した証明書でなくても、サーバーから戻されたすべての証明書をドライバが信頼するようにすることで、テスト環境内の各クライアントでトラストストア情報を指定する必要がなくなります。

有効な値: true | false

false (デフォルト)に設定した場合、ドライバはデータベース・サーバーから送信された証明書を検証しません。TrustStoreおよびTrustStorePasswordプロパティ(または対応するJavaシステム・プロパティ)で指定されたトラストストア情報は無視されます。

trueに設定した場合、ドライバはデータベース・サーバーから送信された証明書を検証します。サーバーから送信されるすべての証明書は、トラストストア・ファイル内の信頼性のあるCAによって発行されたものである必要があります。HostNameInCertificateプロパティを指定した場合は、ホスト名による証明書の検証も行われます。HostNameInCertificateプロパティはオプションであり、ドライバが接続されているサーバーが実際にリクエストされたサーバーであることを保証することにより、介在者の攻撃(man-in-the-middle attack)を防ぐための追加のセキュリティを提供します。

トラスト・ストア情報は、TrustStoreおよびTrustStorePasswordプロパティ(または対応するJavaシステム・プロパティ)を使用して指定します。

認証の構成の詳細は、「データの暗号化」を参照してください。

デフォルト: true

データ型: boolean

WSID

ClientHostNameプロパティの別名。

XATransactionGroup

接続によって開始された各トランザクションを特定するためのトランザクション・グループID。このIDは、分散トランザクションのクリーン・アップに使用できます。

有効な値: stringstringは有効なトランザクション・グループIDです。

XAResource.recoverメソッドを使用すると、準備されていない状態のままのトランザクションをロールバックできます。XAResource.recoverを呼び出すと、XAResource.recoverを呼び出す際の接続のIDと一致し、準備されていない状態のトランザクションはロールバックされます。たとえば、XAResource.recoverを指定し、同じ接続上でXATransactionGroup=ACCT200を呼び出した場合、トランザクション・グループID「ACCT200」で識別され、準備されていない状態のままのトランザクションはロールバックされます。

分散トランザクションのクリーン・アップの詳細は、「分散トランザクションのクリーン・アップ」を参照してください。

デフォルト: なし

データ型: String

XMLDescribeType

ドライバがXMLデータをONGVARCHARまたはLONGVARBINARYのデータ型にマップするかどうかを決定します。

有効の値: longvarchar | longvarbinary

longvarchar (デフォルト)に設定した場合、XMLデータ型はLONGVARCHARデータ型にマップされます。

longvarbinaryに設定した場合、XMLデータ型はLONGVARBINARYデータ型にマップされます。

詳細は、「返されるXMLデータとその挿入/更新」を参照してください。

デフォルト: なし

データ型: String


パフォーマンスに関する考慮事項

以下に示すようにSQL Serverドライバの接続プロパティを設定すると、アプリケーションのパフォーマンスを向上させることができます。

EnableBulkLoad

バッチ挿入のために、ドライバによって、バッチ・メカニズムのかわりにネイティブな一括ロード・プロトコルを使用できます。一括ロードは通常データベースが行うデータの解析処理をバイパスするため、バッチ操作ではよりパフォーマンスが向上します。このプロパティをtrueに設定すると、バッチ挿入との既存のアプリケーションに、コードを変更しないで一括ロードが使用できます。

EncryptionMethod

データの暗号化と復号化により余分なオーバーヘッド(主にCPUの使用率)がかかるため、パフォーマンスが低下する場合があります。

InsensitiveResultSetBufferSize

スクロール・インセンシティブな結果セットを使用する場合のパフォーマンスを向上させるため、ドライバは結果セット・データをディスクに書き込む代わりに、メモリーにキャッシュできます。デフォルトでは、ドライバはインセンシティブな結果セット・データを2 MBまでメモリーにキャッシュし、残りの結果セット・データをディスクに書き込みます。パフォーマンスを向上させるには、ドライバがデータをディスクに書き込む前に使用するメモリーの量を増やすか、ドライバがインセンシティブな結果セット・データをディスクに書込めないようにします。最大キャッシュ・サイズの設定は2 GBです。

LongDataCacheSize

アプリケーションが画像、ピクチャ、長いテキスト、またはバイナリ・データを取得するときのパフォーマンスを向上させるために、アプリケーションが長いデータ列値を結果セット内での定義順に取得する場合は、クライアントで長いデータのキャッシュを無効にすることができます。アプリケーションが長いデータ列値を順不同で取得する場合は、長いデータ値をクライアントでキャッシュする必要があります。この場合は、データをディスクに書き込む前にドライバによって使用されるメモリーの容量を増やすことで、パフォーマンスを改善できます。

MaxPooledStatements

ドライバがアプリケーション・サーバー内部から実行されない場合、または独自のプリペアド文のプールを提供しない別のアプリケーション内部から実行されない場合は、パフォーマンスを向上させるため、ドライバ独自の内部プリペアド文のプールを有効にする必要があります。ドライバの内部プリペアド文のプールを有効にすると、ドライバはアプリケーションによって作成された一定数のプリペアド文をキャッシュします。たとえば、MaxPooledStatementsプロパティを20に設定した場合、ドライバは、アプリケーションによって作成された最後の20個のプリペアド文をキャッシュします。このプロパティに設定された値が、アプリケーションが使用するプリペアド文の数よりも大きい場合、すべてのプリペアド文がキャッシュされます。

PacketSize

通常、クライアントはサーバーで許可されている最大パケット・サイズを使用するのが適しています。これにより、クライアントへデータを返すために必要な往復回数が減るため、パフォーマンスが向上します。つまり、このプロパティにデータベース・サーバーの最大パケット・サイズを設定すると、パフォーマンスを向上させることができます。

ResultSetMetaDataOptions

デフォルトでは、ResultSetMetaData.getTableName()メソッドが呼び出された場合、SQL Serverドライバは、結果セット内の各列の正しい表名を返すために必要な追加の処理を省略します。このため、getTableName()メソッドは結果セット内の列ごとに空の文字列を戻す可能性があります。アプリケーションで表名情報が必要ない場合は、この設定によって最適なパフォーマンスが得られます。

ResultSetメタデータを戻す方法の詳細は、「ResultSetメタデータのサポート」を参照してください。

SelectMethod

ほとんどの場合、サーバー側のデータベース・カーソルを使用するとパフォーマンスに悪影響を与えます。ただし、アプリケーションが次のような条件に該当する場合は、このプロパティの最適な設定はcursorです。この設定は、サーバー側のデータベース・カーソルを使用することを表します。

  • アプリケーションに大量のデータを返す問合せが含まれています。

  • アプリケーションが、以前の大きな結果セットを処理する前または閉じる前にSQL文を実行し、これを複数回行います。

  • アプリケーションによって返される大きな結果セットが前方専用のカーソルを使用しています。

SendStringParametersAsUnicode

アプリケーションによってアクセスされるすべてのデータが、デフォルトのデータベースの文字エンコーディングを使用してデータベースに格納される場合、SendStringParametersAsUnicodeの設定をfalseにするとパフォーマンスを向上させることができます。

SnapshotSerializable

この接続プロパティを操作するには、スナップショット分離に対してMicrosoft SQL Server 2005以上のデータベースが構成されている必要があります。詳細は、「スナップショット分離レベルの使用(Microsoft SQL Server 2005以上)」を参照してください。

スナップショット分離は、データを変更するまでデータのロックを取得しないことにより、トランザクションレベルの読取り一貫性およびデータ変更に対するオプティミスティックなアプローチを提供します。他のトランザクションがデータを変更していても、同じ結果セットを戻す場合、1)アプリケーションが多くの読取り操作を実行する場合、または2)ユーザーによりデータの読取りをブロックされる可能性のある実行時間の長いトランザクションがアプリケーションにある場合、このMicrosoft SQL Server 2005以上の機能が役立ちます。この機能を使用することにより、読取り操作と更新操作間のデータ競合を排除できます。この接続プロパティをtrueに設定した場合(それによって、スナップショット分離を使用します)、高い同時実行性によりパフォーマンスが向上されます。

UseServerSideUpdatableCursors

ほとんどの場合、サーバー側で更新可能なカーソルを使用するとパフォーマンスが向上します。ただし、このタイプのカーソルは、インセンシティブな結果セット、または主キーを含むデータベース表から生成されていないセンシティブな結果セットで使用することはできません。

サーバー側で更新可能なカーソルの使用方法については、「サーバー側で更新可能なカーソル」を参照してください。

データ型

表6-2には、SQLドライバでサポートされているデータ型とJDBCデータ型へのマッピング方法を示します。

表6-2 Microsoft SQL Serverデータ型

Microsoft SQL Server Serverデータ型 JDBCのデータ型

bigint脚注1

BIGINT

bigint identity 脚注2

BIGINT

binary

BINARY

bit

BIT

char

CHAR

date

DATE

datetime

TIMESTAMP

datetime2

TIMESTAMP

datetimeoffset

VARCHAR

decimal

DECIMAL

decimal() identity

DECIMAL

float

FLOAT

image

LONGVARBINARY

int

INTEGER

int identity

INTEGER

money

DECIMAL

nchar

CHAR

注意: JDBCBehavior=0の場合、データ型は、アプリケーション: NCHAR(Java SE 6を使用する場合)またはCHAR(別のJVMを使用する場合)で使用されるJVMに依存します。

ntext

LONGVARCHAR

注意: JDBCBehavior=0の場合、データ型は、LONGNVARCHAR (Java SE 6を使用する場合)またはLONGVARCHAR (その他のJVMを使用する場合)などのアプリケーションで使用されるJVMによって異なります。

数値

NUMERIC

numeric() identity

NUMERIC

nvarchar

VARCHAR

注意: JDBCBehavior=0の場合、データ型は、NVARCHAR (Java SE 6を使用する場合)またはVARCHAR (その他のJVMを使用する場合)などのアプリケーションで使用されるJVMによって異なります。

nvarchar(max)脚注3

LONGVARCHAR

注意: JDBCBehavior=0の場合、データ型は、LONGNVARCHAR (Java SE 6を使用する場合)またはLONGVARCHAR (その他のJVMを使用する場合)などのアプリケーションで使用されるJVMによって異なります。

real

REAL

smalldatetime

TIMESTAMP

smallint

SMALLINT

smallint identity

SMALLINT

smallmoney

DECIMAL

sql_variant 脚注4

VARCHAR

sysname

VARCHAR

text

LONGVARCHAR

time

TIMESTAMP

timestamp

BINARY

tinyint

TINYINT

tinyint identity

TINYINT

uniqueidentifier

CHAR

varbinary

VARBINARY

varbinary(max) 脚注5

LONGVARBINARY

varchar

VARCHAR

varchar(max) 脚注 6 

LONGVARCHAR

xml 脚注7

LONGVARCHAR

注意: JDBCBehavior=0の場合、データ型は、SQLXML (Java SE 6を使用する場合)またはLONGVARCHAR (その他のJVMを使用する場合)などのアプリケーションで使用されるJVMによって異なります。


脚注1 Microsoft SQL Server 2000以上でのみサポートされます。

脚注2 Microsoft SQL Server 2000以上でのみサポートされます。

脚注3 Microsoft SQL Server 2005でのみサポートされます。

脚注4 Microsoft SQL Server 2000以上でのみサポートされます。

脚注5 Microsoft SQL Server 2005でのみサポートされます。

脚注6 Microsoft SQL Server 2005でのみサポートされます。

脚注7 Microsoft SQL Server 2005でのみサポートされます。

データ型の詳細は、付録B「GetTypeInfo」を参照してください。

返されるXMLデータとその挿入/更新

Microsoft SQL Server 2005以上の場合、SQL Serverのドライバはxmlデータ型をサポートします。xmlデータ型がどのJDBCデータ型にマップされるかは、JDBCBehaviorプロパティおよびXMLDescribeTypeプロパティが設定されているかによって決まります。

返されるXMLデータ

XMLDescribeTypeプロパティを設定すると、XMLデータが文字またはバイナリ・データのどちらとして返されるかを指定できます。たとえば、次のように定義されたデータベース表について検討します。

CREATE TABLE xmlTable (id int, xmlCol xml NOT NULL)

そして、次のようにコーディングしたとします。

String sql="SELECT xmlCol FROM xmlTable";
ResultSet rs=stmt.executeQuery(sql);

アプリケーションがLONGVARBINARYデータ型にマップするXMLデータ型を指定する次の接続URLを使用している場合、ドライバはXMLデータをバイナリ・データとして戻します。

jdbc:weblogic:sqlserver://server1:1433;DatabaseName=jdbc;User=test;
Password=secret;XMLDescribeType=longvarbinary

文字データ

XMLDescribeType=longvarcharに設定した場合、XMLデータは文字データとして返されます。結果セット列は、列型のLONGVARCHARで表現され、列型名はxmlとなります。

XMLDescribeType=longvarcharに設定した場合は、アプリケーションで以下のメソッドを使用することで、XML列に文字データとして格納されているデータを返すことができます。

ResultSet.getString()
ResultSet.getCharacterStream()
ResultSet.getClob()
CallableStatement.getString()
CallableStatement.getClob()

データベース・サーバーから返されたXMLデータは、データベース・サーバーで使用するUTF-8エンコーディングから、UTF-16 Java文字列エンコーディングに変換されます。

アプリケーションで次のメソッドを使用することで、XML列にASCIIデータとして格納されているデータを返すことができます。

ResultSet.getAsciiStream()

データベース・サーバーから返されたXMLデータは、データベース・サーバーで使用するUTF-1エンコーディングから、ISO-8859-1 (latin1)エンコーディングに変換されます。


注意:

getAsciiStream()メソッドを使用して変換を行う場合に、コンテンツ・エンコーディングがデフォルト・エンコーディングではなく、コンテンツ・エンティティを指定するXML宣言が含まれていないと、整形式でないXMLが作成される場合があります。アプリケーションで整形式のXMLが必要になる場合は、getAsciiStream()メソッドを使用しないようにしてください。

XMLDescribeType=longvarbinaryに設定した場合は、この項で説明した文字データ用のメソッドを使用しないでください。使用すると、JDBC文字からバイナリへの標準の変換がデータに適用され、文字データの16進表現が返されます。

バイナリ・データ

XMLDescribeType=longvarbinaryに設定した場合、XMLデータはバイナリ・データとして返されます。結果セット列は、列型のLONGVARBINARYで表現され、列型名はxmlとなります。

アプリケーションで以下のメソッドを使用して、XMLデータをバイナリ・データとして返すことができます。

ResultSet.getBytes()
ResultSet.getBinaryStream()
ResultSet.getBlob()
ResultSet.getObject()
CallableStatement.getBytes()
CallableStatement.getBlob()
CallableStatement.getObject()

データベース・サーバーから返されるXMLデータにはデータ変換は適用されません。これらのメソッドは、UTF-8としてエンコードされたXMLデータを格納するバイト配列またはバイナリ・ストリームを返します。

XMLDescribeType=longvarcharに設定した場合は、この項で説明した文字データ用のメソッドを使用しないでください。使用すると、JDBCバイナリから文字への標準の変換がデータに適用され、バイナリ・データの16進表現が返されます。

XMLデータの挿入と更新

ドライバからは、XMLデータを文字データまたはバイナリ・データとして挿入または更新できます。

文字データ

アプリケーションで以下のメソッドを使用することで、XMLデータを文字データとして挿入または更新できます。

PreparedStatement.setString()
PreparedStatement.setCharacterStream()
PreparedStatement.setClob()
PreparedStatement.setObject()
ResultSet.updateString()
ResultSet.updateCharacterStream()
ResultSet.updateClob()
ReultSet.updateObject()

データの文字表現がデータベース・サーバーで使用するXML文字セットに変換され、変換後のXMLデータがサーバーに送信されます。XML処理手順が、ドライバによって解析されたり削除されたりすることはありません。

アプリケーションで以下のメソッドを使用することで、XMLデータをASCIIデータとして更新できます。

PreparedStatement.setAsciiStream()
ResultSet.updateAsciiStream()

これらのメソッドに返すデータは、ISO-8859-1 (latin 1)エンコーディングで解釈されます。ISO-8859-1のデータがデータベース・サーバーで使用するXML文字セットに変換され、変換後のXMLデータがサーバーに送信されます。

バイナリ・データ

アプリケーションで以下のメソッドを使用することで、XMLデータをバイナリ・データとして挿入または更新できます。

PreparedStatement.setBytes()
PreparedStatement.setBinaryStream()
PreparedStatement.setBlob()
PreparedStatement.setObject()
ResultSet.updateBytes()
ResultSet.updateBinaryStream()
ResultSet.updateBlob()
ReultSet.updateObject()

XMLデータがデータベース・サーバーに送信される際に、データ変換が適用されることはありません。

認証

認証では、ユーザーの識別情報を保護することで、悪意のあるハッカーが転送中のユーザー資格証明を傍受できないようになっています。概要については「認証」を参照してください。

SQL Serverドライバでは、以下の認証方法がサポートされます。

NTLM認証(Windowsクライアントの認証のみを提供)を除いて、ドライバがサポート対象のプラットフォームで実行されている場合、これらの認証方法で認証が提供されます。

AuthenticationMethod接続プロパティは、ドライバが接続を確立する際に使用する認証メカニズムを制御するために使用します。このプロパティに設定する値の詳細は、「AuthenticationMethodプロパティの使用」を参照してください。

AuthenticationMethodプロパティの使用

AuthenticationMethod接続プロパティは、ドライバが接続を確立する際に使用する認証メカニズムを制御するために使用します。AuthenticationMethod=autoの場合、ドライバは以下の条件に基づいて、接続を確立する際にSQL Server認証、Kerberos認証、またはNTLM認証を使用します。

  • IDとパスワードが指定された場合は、接続を確立する際にSQL Server認証が使用されます。UserプロパティはユーザーIDを提供します。Passwordプロパティはパスワードを提供します。

  • ユーザーIDとパスワードが指定されず、ドライバがWindowsプラットフォーム上で実行されていない場合、ドライバは接続を確立する際にKerberos認証を使用します。

  • ユーザーIDとパスワードが指定されず、ドライバがWindowsプラットフォーム上で実行されている場合で、ドライバがNTLM認証に必要なDLLをロードできる場合、ドライバは接続を確立する際にNTLM認証を使用します。DLLをロードできない場合は、Kerberos認証を使用します。

AuthenticationMethod=kerberosに設定すると、接続を確立する際にKerberos認証が使用されます。UserプロパティとPasswordプロパティに指定された値は無視されます。

AuthenticationMethod=ntlmの場合は、ドライバがNTLM認証に必要なDLLをロードできる場合、ドライバは接続を確立する際にNTLM認証を使用します。DLLをロードできない場合は、ドライバから例外がスローされます。UserプロパティとPasswordプロパティに指定された値は無視されます。

AuthenticationMethod=userIdPassword (デフォルト)に設定すると、接続を確立する際にSQL Server認証が使用されます。UserプロパティはユーザーIDを提供します。Passwordプロパティはパスワードを提供します。ユーザーIDが指定されていない場合は、ドライバから例外がスローされます。

SQL Server認証の構成

  1. AuthenticationMethodプロパティをautoまたはuserIdPassword (デフォルト)に設定します。このプロパティに設定する値の詳細は、「AuthenticationMethodプロパティの使用」を参照してください。

  2. UserプロパティにユーザーIDを設定します。

  3. Passwordプロパティにパスワードを設定します。

Kerberos認証の構成

この項では、Microsoft SQL ServerドライバにKerberos認証を構成する場合の要件と手順について説明します。

製品要件

ドライバにKerberos認証を構成する前に、使用している環境が表6-3の要件を満たしていることを確認してください。

表6-3 SQL ServerドライバにKerberos認証を構成する場合の要件

コンポーネント 要件

Microsoft SQL Serverデータベース・サーバー

データベース・サーバーは、クライアントの管理に使用するドメイン・コントローラで管理する必要があります。また、データベース・サーバーを以下のいずれかのデータベースで実行する必要があります。

  • Microsoft SQL Server 2008

  • Microsoft SQL Server 2008

  • Microsoft SQL Server 2000

  • Microsoft SQL Server 2000 Enterprise Edition (64ビット) Service Pack 2以上

Kerberosサーバー

Kerberosサーバーは、認証に使用するユーザーIDを管理します。Kerberos KDCもKerberosサーバーで管理します。

ネットワーク認証は、以下のいずれかのオペレーティング・システム上のWindows Active Directoryから提供する必要があります。

  • Windows Server 2003

  • Windows 2000 Server Service Pack 3以上

クライアント

クライアントはデータベース・サーバーを管理している同じドメイン・コントローラによって管理される必要があります。また、J2SE 1.4.2以上がインストールされている必要があります。


ドライバの構成

WebLogic Server JDBCドライバのインストールでは、以下のKerberos認証に必要なファイルがWL_HOME/server/libフォルダにインストールします。WL_HOMEは、WebLogic Serverのインストール先ディレクトリです。

  • krb5.conf。KerberosレルムやそのレルムのKDC名を保持するKerberos構成ファイルです。WebLogic Serverでは汎用ファイルがインストールされるため、使用している環境に合わせて変更する必要があります。

  • JDBCDriverLogin.confファイルは、Kerberos認証に使用するJAAS (Java Authentication and Authorization Service)ログイン・モジュールを指定する構成ファイルです。java.security.auth.login.configシステム・プロパティで別の構成ファイルをロードするように設定されていない限り、このファイルが自動的にロードされます。このファイルを変更することは可能ですが、JAASログイン・モジュールを構成するためには、このファイル内、または指定されている他のログイン構成ファイル内に、JDBC_DRIVER_01エントリが含まれていなければなりません。このファイルの構成オプションの設定については、使用しているJDKのドキュメントを参照してください。

ドライバを構成するには:

  1. ドライバのAuthenticationMethodプロパティをauto (デフォルト)またはkerberosに設定します。このプロパティに設定する値の詳細は、「AuthenticationMethodプロパティの使用」を参照してください。

  2. krb5.confファイルを変更して、Kerberosレルム名とそのKerberosレルムのKDC名を指定します。テキスト・エディタで編集するか、java.security.krb5.realmおよびjava.security.krb5.kdcシステム・プロパティを指定して、krb5.confファイルを変更します。


    注意:

    Windows Active Directoryでは、Kerberosレルム名はWindowsドメイン名、KDC名はWindowsドメイン・コントローラ名となります。

    たとえば、Kerberosレルム名がXYZ.COM、KDC名がkdc1である場合、krb5.confファイルは次のようになります。

    [libdefaults] 
       default_realm = XYZ.COM
    
    [realms]
       XYZ.COM = {
       kdc = kdc1
       }
    

    krb5.confファイルに有効なKerberosレルム名とKDC名が指定されていない場合は、次の例外がスローされます。

    Message:[OWLS][SQLServer JDBC Driver]Could not establish a connection using integrated security: No valid credentials provided
    

    java.security.krb5.confシステム・プロパティで別のKerberos構成ファイルをロードするように設定されていないかぎり、WebLogic JDBCと一緒にインストールされたkrb5.confファイルが自動的にロードされます。

  3. Java 2プラットフォームのセキュリティ・マネージャでKerberos認証を使用する場合は、アプリケーションとドライバにセキュリティ権限を付与する必要があります。詳細は、「Kerberos認証のための権限」を参照してください。

SQL ServerドライバでのWindows認証用に環境を構成およびテストする方法については、以下のURLを参照してください。

http://www.datadirect.com/developer/jdbc/index.ssp

Kerberos認証のユーザー資格証明の指定

デフォルトでは、オペレーティング・システムに保持されているユーザーIDとパスワードを使用して、データベースにアクセスするユーザーの認証が行われます。オペレーティング・システムで使用されているユーザー名とパスワードをデータベースでも使用できるため、有効なオペレーティング・システム・アカウントにログインしているユーザーであれば、ユーザー名とパスワードを入力せずにデータベースにログインできます。

オペレーティング・システムのユーザー名とパスワード以外のユーザー資格証明セットを使用したい場合もあります。たとえば、アプリケーション・サーバーやWebサーバーの多くは、サーバー・ユーザーとしてではなく、アプリケーションが実行されているマシンにログオンしたクライアント・ユーザーの代理として処理を実行します。

オペレーティング・システムのユーザー名とパスワード以外のユーザー資格証明セットを使用する場合は、次のようなコードをアプリケーションに追加し、認証に使用するjavax.security.auth.Subjectを取得してドライバに渡します。

import javax.security.auth.Subject;
import javax.security.auth.login.LoginContext;
import java.sql.*;

// The following code creates a javax.security.auth.Subject instance
// used for authentication. Refer to the Java Authentication 
// and Authorization Service documentation for details on using a 
// LoginContext to obtain a Subject.

LoginContext lc = null;
Subject subject = null;

try {

    lc = new LoginContext("JaasSample", new TextCallbackHandler());
    lc.login();
    subject = lc.getSubject();
} 
catch (Exception le) {
    ... // display login error
}

//  This application passes the javax.security.auth.Subject
//  to the driver by executing the driver code as the subject

Connection con = 
   (Connection) Subject.doAs(subject, new PrivilegedExceptionAction() {
    
    public Object run() {
    
        Connection con = null;
    try {

         Class.forName("com.ddtek.jdbc.sqlserver.SQLServerDriver");
         String url = "jdbc:weblogic:sqlserver://myServer:1433";
         con = DriverManager.getConnection(url);
        }
     catch (Exception except) {

     ... //log the connection error
           return null;
        }
        
        return con;
    }
});

//  This application now has a connection that was authenticated with 
//  the subject. The application can now use the connection.
Statement   stmt = con.createStatement();
String      sql = "SELECT * FROM employee";
ResultSet   rs = stmt.executeQuery(sql);

... // do something with the results

Kerberosチケット認可チケットの取得

アプリケーション・ユーザーがKerberos認証を使用する場合は、まずKerberosサーバーからKerberosチケット認可チケット(TGT)を取得する必要があります。Kerberosサーバーでは、TGTに格納されている資格証明を使用して、ユーザーの識別情報を検証し、サービスへのアクセスを制御します。

アプリケーションがWindowsクライアントからKerberos認証を使用する場合は、アプリケーション・ユーザーがKerberosサーバーにログオンして明示的にTGTを取得する必要はありません。ユーザーのTGTは、Windows Active Directoryによって自動的に取得されます。

アプリケーションがUNIXまたはLinuxクライアントからKerberos認証を使用する場合、ユーザーはkinitコマンドを使用してKerberosサーバーにログオンし、明示的にTGTを取得する必要があります。たとえば、次に示すコマンドは、存続期間が10時間で5日間更新可能なTGTをサーバーにリクエストしています。

kinit -l 10h -r 5d user

ここで、userはアプリケーション・ユーザーです。

kinitコマンドの使用とユーザーのTGTの取得については、Kerberosドキュメントを参照してください。

NTLM認証の構成

この項では、DBドライバにNTLM認証を構成する場合の要件と手順について説明します。

製品要件

NTLM認証のための環境を構成する前に、ご使用の環境が表6-4の要件を満たしていることを確認してください。

表6-4 SQL ServerドライバのNTLM認証の要件

コンポーネント 要件

データベース・サーバー

データベース・サーバーはクライアントを管理している同じドメイン・コントローラによって管理され、以下のいずれかのデータベースを実行している必要があります。

  • Microsoft SQL Server 2008

  • Microsoft SQL Server 2005

  • Microsoft SQL Server 2000 Service Pack 3以上

  • Microsoft SQL Server 2000 Enterprise Edition (64ビット) Service Pack 2以上

ドメイン・コントローラ

ドメイン・コントローラはデータベース・サーバーとクライアントの両方を管理している必要があります。以下のいずれかのオペレーティング・システム上のNTLMがネットワーク認証を提供する必要があります。

  • Windows Server 2003

  • Windows 2000 Server Service Pack 3以上

クライアント

クライアントはデータベース・サーバーを管理している同じドメイン・コントローラによって管理され、以下のいずれかのオペレーティング・システムで実行されている必要があります。

  • Windows Vista

  • Windows Server 2003

  • Windows XP Service Pack 2以上

  • Windows 2000 Service Pack 4以上

  • Windows NT 4.0

また、J2SE 1.4以上がインストールされている必要があります。


ドライバの構成

Oracleタイプ4 JDBCドライバは次のNTLM認証DLLを提供しています。

  • DDJDBCAuthxx.dll (32ビット)

  • DDJDBC64Authxx.dll (Itanium 64ビット)

  • DDJDBCx64Authxx.dll (AMD64およびIntel EM64T 64ビット)

xxは2桁の数字です。

DLLは、WL_HOME/server/libディレクトリにあります(WL_HOMEはWebLogic Serverのインストール先ディレクトリ)。NTLM認証を使用するアプリケーションが32ビットJVMで実行されている場合は、自動的にDDJDBCAuthxx.dllが使用されます。同様に、アプリケーションが64ビットJVMで実行されている場合は、DDJDBC64Authxx.dllまたはDDJDBCx64Authxx.dllが使用されます。

ドライバを構成するには:

  1. AuthenticationMethodプロパティをauto (デフォルト)またはntlmに設定します。このプロパティに設定する値の詳細は、「AuthenticationMethodプロパティの使用」を参照してください。

  2. デフォルトでは、ドライバはPATH環境変数で定義されているWindowsシステム・パスのディレクトリでNTLM認証DLLを検索します。Windowsシステム・パスにないディレクトリにドライバをインストールした場合は、以下のいずれかの手順を行ってドライバがDLLをロードできるようにします。

    • WindowsシステムのパスにWL_HOME/server/libディレクトリを追加します。WL_HOMEは、WebLogic Serverのインストール先ディレクトリです。

    • WL_HOME/server/libから システム・パス上のディレクトリにNTLM認証DLLをコピーします。WL_HOMEは、WebLogic Serverのインストール先ディレクトリです。

    • LoadLibraryPathプロパティを設定して、NTLM認証DLLの場所を指定します。たとえば、Windowsシステム・パスにない「DataDirect」というディレクトリにドライバをインストールした場合、LoadLibraryPathプロパティを使用してNTLM認証DLLを含むディレクトリを指定できます。

      jdbc:weblogic:sqlserver://server3:1521;
      DatabaseName=test;LoadLibraryPath=C:\DataDirect\lib;User=test;Password=secret
      
  3. Java 2プラットフォームのセキュリティ・マネージャでNTLM認証を使用する場合は、ドライバが接続を確立できるようにセキュリティ権限を付与する必要があります。例については、「接続を確立するための権限」を参照してください。

データの暗号化

SQL Serverドライバでは、データ暗号化でSSLがサポートされます。SSLが提供する暗号化と認証によって、データの整合性を確保できます。詳細は、「ネットワーク上でのデータの暗号化」を参照してください。

Microsoft SQL Serverの構成に応じて、ログイン・リクエストを含むすべてのデータを暗号化するか、ログイン・リクエストのみを暗号化するかを選択できます。データではなくログイン・リクエストを暗号化する方法は、以下のシナリオで有用です。

Microsoft SQL ServerでのSSLの使用

Microsoft SQL Serverデータベース・サーバーで信頼性のあるCAによって署名されたSSL証明書が構成されている場合、サーバーではSSL暗号化を省略可能または必須として構成できます。必須の場合、SSL暗号化をサポートしていないクライアントからの接続は失敗します。

最高水準のセキュリティには署名済みの信頼性のあるSSL証明書をお勧めしますが、Microsoft SQL Server 2005では、サーバーでSSL証明書が構成されていない場合でも、限定的なセキュリティ保護を提供できます。信頼性のある証明書がインストールされていない場合、サーバーは自己署名証明書を使用してデータではなくログイン・リクエストを暗号化します。

表6-5では、EncryptionMethodプロパティの各値とMicrosoft SQL Server構成に応じた動作を示します。

表6-5 EncryptionMethodプロパティとMicrosoft SQL Server構成

SSL証明書なし SSL証明書(SSLは省略可能) SSL証明書(SSLは必須)

noEncryption

ログイン・リクエストとデータは暗号化されません。

ログイン・リクエストとデータは暗号化されません。

接続の試行は失敗します。

SSL

接続の試行は失敗します。

ログイン・リクエストとデータは暗号化されます。

ログイン・リクエストとデータは暗号化されます。

requestSSL

ログイン・リクエストとデータは暗号化されません。

ログイン・リクエストとデータは暗号化されます。

ログイン・リクエストとデータは暗号化されます。

loginSSL

Microsoft SQL Server 2005 :ログイン・リクエストは暗号化されますが、データは暗号化されません。

Microsoft SQL Server 2000 :接続の試行は失敗します。

ログイン・リクエストは暗号化されますが、データは暗号化されません。

ログイン・リクエストとデータは暗号化されます。


SSL暗号化の構成

  1. アプリケーション用の暗号化のタイプを選択します。

    • ドライバでログイン・リクエストを含めてすべてのデータを暗号化するには、EncryptionMethodプロパティをSSLまたはrequestSSLに設定します。

    • ドライバでログイン・リクエストのみを暗号化するには、EncryptionMethodプロパティをloginSSLに設定します。

  2. SSLサーバー認証に使用するトラスト・ストア・ファイルの場所とパスワードを指定します。TrustStoreおよびTrustStorePasswordプロパティ、またはそれぞれに対応するJavaシステム・プロパティ(javax.net.ssl.trustStoreおよびjavax.net.ssl.trustStorePassword)を設定します。

  3. データベース・サーバーから送信された証明書を検証する場合は、ValidateServerCertificateプロパティをtrueに設定します。

  4. 必要に応じて、証明書の検証に使用するホスト名をHostNameInCertificateプロパティに設定します。HostNameInCertificateプロパティは、ドライバが接続されているサーバーが実際にリクエストされたサーバーであることを保証することにより、介在者の攻撃(man-in-the-middle attack)を防ぐための追加のセキュリティを提供します。

結果を戻すDML (Microsoft SQL Server 2005以上)

SQL Serverドライバでは、Insert、Update、およびDelete文についてMicrosoft SQL Server 2005以上のOutput句をサポートします。たとえば、次の文で表を作成したと仮定します。

CREATE TABLE table1(id int, name varchar(30))

以下のUpdate文では、table1のid列の値を更新し、古いID (新しいIDで置換されます)、新しいID、これらのIDに関連付けられた名前を含む結果セットを返します。

UPDATE table1 SET id=id*10 OUTPUT deleted.id as oldId, inserted.id as newId, inserted.name

ドライバは別の結果セットでInsert、Update、またはDelete文の結果と更新回数を返します。出力結果セットが最初に返され、続いてInsert、Update、またはDelete文の結果が返されます。結果を返すDMLをアプリケーション内で実行するには、Statement.execute()またはPreparedStatement.execute()メソッドを使用します。その後にStatement.getMoreResults ()を使用して、出力結果セットと更新回数を取得します。例:

String sql = "UPDATE table1 SET id=id*10 OUTPUT deleted.id as oldId,
   inserted.id as newId, inserted.name";
boolean isResultSet = stmt.execute(sql);

int   updateCount = 0;
while (true) {

   if (isResultSet) {
         resultSet = stmt.getResultSet();
         while (resultSet.next()) {

            System.out.println("oldId: " + resultSet.getInt(1) + 
                               "newId: " + resultSet.getInt(2) + 
                               "name: " + resultSet.getString(3));
         }
         resultSet.close();
   }
   else {
         updateCount = stmt.getUpdateCount();
         if (updateCount == -1) {
            break;
         }

         System.out.println("Update Count: " + updateCount);
   }

   isResultSet = stmt.getMoreResults();
}

再認証

SQL ServerドライバはMicrosoft SQL Server 2005以上の再認証をサポートします。スイッチを実行するユーザーには、データベース権限IMPERSONATEが付与されている必要があります。注意: 再認証を実行する前に、アプリケーションは、他ユーザーへの接続に切替える前に1人のユーザーとして作成したすべての文または結果セットが閉じられていることを確認する必要があります。アプリケーションは、接続にユーザーを切替えるためにExtConnectionインタフェースにあるsetCurrentUser()メソッドを使用できます。setCurrentUser()メソッドは、ドライバ固有の再認証オプションを受け入れます。SQL Serverドライバでサポートされる再認証オプションは次のとおりです。

接続用のクライアント情報

SQL Serverドライバにより、アプリケーションは、特定の接続に関連付けられた次のタイプのクライアント情報を保存し、戻すことができます。

この情報は、データベースの管理と監視に使用されます。

SQLエスケープ・シーケンス

SQL ServerドライバでサポートされるSQLエスケープ・シーケンスについては、付録C「JDBCのSQLエスケープ・シーケンス」を参照してください。

分離レベル

SQL ServerドライバはMicrosoft SQL Serverの以下の分離レベルをサポートします。

デフォルトはRead Committed with Locks (Microsoft SQL Server 2005)またはRead Committedです。

スナップショット分離レベルの使用(Microsoft SQL Server 2005以上)

Snapshot分離レベルは以下のいずれかの方法で使用できます。

スクロール可能なカーソルの使用

SQL Serverドライバは、スクロール・センシティブな結果セット、スクロール・インセンシティブな結果セット、および更新可能な結果セットをサポートしています。


注意:

SQL Serverドライバが、リクエストされた結果セットのタイプまたは同時実行性をサポートできない場合は、カーソルを自動的にダウングレードして詳細情報の入ったSQLWarningを生成します。

サーバー側で更新可能なカーソル

SQL Serverドライバでは、クライアント側のカーソルまたはサーバー側のカーソルを使用して、更新可能な結果セットをサポートすることができます。デフォルトのSQL Serverドライバでは、どのタイプの結果セットでも動作するため、クライアント側のカーソルを使用します。通常、サーバー側のカーソルを使用するとパフォーマンスを向上させることができますが、サーバー側のカーソルは、スクロール・インセンシティブな結果セット、または主キーを含むデータベース表から生成されていないスクロール・センシティブな結果セットで使用することはできません。サーバー側のカーソルを使用するには、UseServerSideUpdatableCursorsプロパティをtrueに設定します。

UseServerSideUpdatableCursorsプロパティをtrueに設定している場合に、スクロール・インセンシティブで更新可能な結果セットがリクエストされると、ドライバはそのリクエストをスクロール・インセンシティブで読取り専用の結果セットにダウングレードします。同様に、スクロール・センシティブで更新可能な結果セットがリクエストされ、結果セットの生成元の表に主キーが含まれていない場合、ドライバはそのリクエストをスクロール・センシティブで読取り専用の結果セットにダウングレードします。いずれの場合も警告が生成されます。

サーバー側で更新可能なカーソルを、主キーを含むデータベースから生成されたセンシティブな結果セットで使用する場合、結果セットに対して行う以下のような変更は参照可能になります。

ドライバのデフォルトの動作を使用すると(UseServerSideUpdatableCursors=false)、変更は参照可能になりません。

JTA用ストアド・プロシージャのインストール

JTAでJDBC分散トランザクションを使用するには、システム管理者が次の手順に従って、Microsoft SQL Server JDBC XAプロシージャをインストールする必要があります。この手順は、分散トランザクションに関与するMS SQL Serverごとに繰り返す必要があります。

JTA用ストアド・プロシージャをインストールするには:

  1. 適切なsqljdbc.dllおよびinstjdbc.sqlファイルをWL_HOME\server\libディレクトリからMS SQL Serverデータベース・サーバーのSQL_Server_Root/binディレクトリにコピーします。WL_HOMEはWebLogic Serverのインストール先ディレクトリ(通常はc:\Oracle\Middleware\wlserver_10.x)です。


    注意:

    複数のMicrosoft SQL Serverインスタンスがあるデータベース・サーバーにストアド・プロシージャをインストールする場合、実行中の各SQLサーバー・インスタンスがsqljdbc.dllファイルを見つけられる必要があります。そのため、sqljdbc.dllファイルはグローバル・パスまたはアプリケーション固有のパス上に格納されている必要があります。アプリケーション固有のパスの場合は、各インスタンスの<drive>:\Program Files\Microsoft SQL Server\MSSQL$<Instance 1 Name>\Binnディレクトリにsqljdbc.dllファイルを配置します。

  2. データベース・サーバーから、ISQLユーティリティを使用してinstjdbc.sqlスクリプトを実行します。万一に備えて、instjdbc.sqlを実行する前に、システム管理者にマスター・データベースのバックアップを依頼します。コマンド・プロンプトで、次の構文に従ってinstjdbc.sqlを実行します。

    ISQL -Usa -Psa_password -Sserver_name -ilocation\instjdbc.sql
    

    説明:

    sa_passwordはシステム管理者のパスワード。

    server_nameはSQL Serverが存在するサーバーの名前。

    locationは、instjdbc.sqlのフルパスです。(このスクリプトは、ステップ1でSQL_Server_Root/binディレクトリにコピーしたものです。)

    instjdbc.sqlスクリプトでは、多数のメッセージが生成されます。通常、これらのメッセージは無視できますが、システム管理者は実行エラーを示すメッセージがないかどうかスキャンする必要があります。最後のメッセージは、instjdbc.sqlが正常に実行されたことを示すメッセージになります。JDBC XAプロシージャを格納したり、既存のプロシージャの変更をログに記録したりするための容量がマスター・データベースで不足していると、スクリプトは失敗します。

分散トランザクションのクリーン・アップ

トランザクションが完了する前にサーバーへの接続が失われると、分散トランザクションに関連付けられている接続が孤立する可能性があります。分散トランザクションに関連付けられた接続が孤立すると、そのトランザクションのデータベースによって保持されているロックが維持されるため、データが使用できなくなる可能性があります。分散トランザクションをクリーン・アップすると、それらのトランザクションに関連付けられている接続が解放され、データベースによって保持されているロックも解放されます。

XAResource.recoverメソッドを使用すると、準備済でコミットやロールバックはされていない分散トランザクションをクリーン・アップできます。このメソッドを呼び出すと、準備済でコミットやロールバックはされていないアクティブな分散トランザクションのリストが返されます。アプリケーションはXAResource.recoverから返されたリストを使用し、それらを明示的にコミットまたはロールバックすることでトランザクションをクリーン・アップできます。XAResource.recoverによって返されるトランザクションのリストには、アクティブなトランザクションや準備済でないトランザクションは含まれません。

また、SQL Serverドライバでは、分散トランザクションのクリーン・アップに関する以下の方法をサポートしています。

トランザクション・タイムアウト

トランザクション・タイムアウトのタイムアウト値を設定するには、XAResource.setTransactionTimeoutメソッドを使用します。この値を設定すると、サーバー側のsqljdbc.dllではアクティブなトランザクションのリストを保持します。分散トランザクションは、開始されるときにアクティブなトランザクションのリストに配置され、該当するXAResourceメソッドを使用して準備、ロールバック、コミット、または無視されるときにこのリストから削除されます。

XAResource.setTransactionTimeoutメソッドを使用してトランザクション・クリーン・アップのタイムアウト値が設定されている場合、sqljdbc.dllはアクティブなトランザクションのリストを定期的に監査して、期限切れのトランザクションがないか調べます。タイムアウト値より有効期間が長いアクティブなトランザクションはロールバックされます。トランザクションのロールバック時に例外が生成された場合は、sqljdbc.dllファイルと同じディレクトリにあるsqljdbc.logファイルに例外が書き込まれます。

トランザクションのタイムアウト値を小さすぎる値に設定すると、正常に完了していない限りトランザクションがロールバックされてしまう危険性があります。一般的なガイドラインとしては、トラフィックの負荷が大きい状況でもトランザクションが十分完了できる時間にタイムアウト値を設定してください。

値を0 (デフォルト値)に設定すると、トランザクション・タイムアウトのクリーン・アップは無効になります。

明示的なトランザクションのクリーン・アップ

SQL Serverドライバでは、XATransactionGroup接続プロパティを使用して、IDをトランザクションのグループに関連付けることができます。トランザクションのグループIDを指定すると、その接続で開始されたすべての分散トランザクションはこのIDで識別されます。

この値を設定すると、サーバー側のsqljdbc.dllではアクティブなトランザクションのリストを保持します。分散トランザクションは、開始されるときにアクティブなトランザクションのリストに配置され、該当するXAResourceメソッドを使用して準備、ロールバック、コミット、または無視されるときにこのリストから削除されます。

XAResource.recoverメソッドを使用すると、XAResource.recoverを呼び出す際に使用された接続上に、トランザクションのグループIDが一致し、準備されていない状態のままのトランザクションがあれば、ロールバックすることができます。たとえば、XATransactionGroup=ACCT200を指定し、同じ接続上でXAResource.recoverメソッドを呼び出した場合、トランザクション・グループIDがACCT200で、準備されていない状態のままのトランザクションはロールバックされます。

トランザクションのロールバック時に例外が生成された場合は、sqljdbc.dllファイルと同じディレクトリにあるsqljdbc.logファイルに例外が書き込まれます。

明示的なトランザクションのクリーン・アップを使用する場合、孤立した接続に関連付けられている分散トランザクションと、その接続で保持されているロックは、アプリケーションが明示的にクリーン・アップを呼び出すまで残されます。一般的なルールとして、アプリケーションは起動時と、サーバーへの接続が失われたことを通知された場合に、孤立した接続をクリーン・アップする必要があります。

Large Object (LOB)のサポート

Microsoft SQL ServerではBlobまたはClobデータ型は定義されていませんが、SQL Serverドライバによって、BlobおよびClob用に設計されたJDBCメソッドを使用して長いデータ(特にLONGVARBINARYデータおよびLONGVARCHARデータ)を返したり更新したりできます。これらのメソッドを使用して長いデータをBlobまたはClobとして更新すると、更新はBlobまたはClobオブジェクト内のデータのローカル・コピーに対して行われます。

BlobおよびClob用のJDBCメソッドを使用して長いデータを取得および更新すると、BlobおよびClobを操作した場合と同じメリットが得られます。たとえばBlobおよびClobを使用した場合、

BlobおよびClobを使用した場合のこうしたメリットを得るには、データをキャッシュする必要があります。データをキャッシュするので、特に一度にデータの逐次読出しを行う場合に、パフォーマンスが低下します。長いデータのサイズが使用可能なメモリーよりも大きいと、パフォーマンスが著しく低下することがあります。

バッチ挿入とバッチ更新

バッチ挿入およびバッチ更新用のSQL Serverドライバ実装はJDBC 3.0に準拠しています。SQL Serverドライバは、バッチ挿入またはバッチ更新で文またはパラメータ・セットのエラーを検出すると、BatchUpdateExceptionを生成し、残りの文またはパラメータ・セットのバッチ処理を続行します。BatchUpdateException内の更新カウントの配列には、文またはパラメータごとに1つのエントリが含まれます。失敗した文またはパラメータ・セットのエントリには、Statement.EXECUTE_FAILED値が含まれます。

パラメータ・メタデータのサポート

SQL Serverドライバでは、この項で説明するようにパラメータ・メタデータを返すことができます。

Insert文およびUpdate文

SQL Serverドライバは、以下の形式のInsert文およびUpdate文のパラメータ・メタデータを返すことができます。

  • INSERT INTO foo VALUES (?, ?, ?)

  • INSERT INTO foo (col1, col2, col3) VALUES (?, ?, ?)

  • UPDATE foo SET col1=?, col2=?, col3=?WHERE col1 operator? [{AND | OR} col2 operator ?]

ここで、operatorはSQL演算子(=、<、>、<=、>=、または<>)です。

Select文

SQL Serverドライバでは、ANSI SQL 92エントリ・レベルの述語(比較、BETWEEN、IN、LIKE、EXISTSなどの述語構文)にパラメータを含んでいるSelect文に対してパラメータ・メタデータを返すことができます。詳細な構文については、ANSI SQLリファレンスを参照してください。

以下のいずれかの条件に該当する場合は、Select文に対してパラメータ・メタデータを返すことができます。

  • 文に、関連するFROM句内のソース表を対象とする、述語の値式が含まれている場合。例:

    SELECT * FROM foo WHERE bar > ?
    

    この場合、値式「bar」は表「foo」を対象として、パラメータの適切なメタデータを決定することができます。

  • 文に、ネストされた問合せとなっている述語の値式が含まれている場合。ネストされた問合せのメタデータでは単一の列を記述する必要があります。例:

    SELECT * FROM foo WHERE (SELECT x FROM y 
       WHERE z = 1) < ?
    

以下のSelect文では、パラメータ・メタデータを返すことができる例をさらに示しています。

SELECT col1, col2 FROM foo WHERE col1 = ? and col2 > ?
SELECT ... WHERE colname = (SELECT col2 FROM t2  
   WHERE col3 = ?)
SELECT ... WHERE colname LIKE ?
SELECT ... WHERE colname BETWEEN ? and ?
SELECT ... WHERE colname IN (?, ?, ?)
SELECT ... WHERE EXISTS(SELECT ... FROM T2 WHERE col1 < ?)

GROUP BY、HAVING、またはORDER BYを含むWHERE句でANSI SQL 92エントリ・レベルの述語を使用する文がサポートされます。例:

SELECT * FROM t1 WHERE col = ? ORDER BY 1

結合がサポートされます。例:

SELECT * FROM t1,t2 WHERE t1.col1 = ?

完全修飾名と別名がサポートされます。例:

SELECT a, b, c, d FROM T1 AS A, T2 AS B WHERE A.a = ? and B.b = ?"

ストアド・プロシージャ

SQL Serverドライバでは、ストアド・プロシージャの引数に対してパラメータ・メタデータを返すことはできません。

ResultSetメタデータのサポート

アプリケーションで表名情報が必要な場合、SQL ServerドライバはSelect文のResultSetメタデータに含めて表名情報を返すことができます。ResultSetMetaDataOptionsプロパティを1に設定した場合、ResultSetMetaData.getTableName()メソッドが呼び出されたとき、SQL Serverドライバは結果セット内の各列の正しい表名を決定する追加の処理を実行します。それ以外の場合、getTableName()メソッドは結果セット内の列ごとに空の文字列を返す可能性があります。

ResultSetMetaDataOptionsプロパティが1に設定されていて、ResultSetMetaData.getTableName()メソッドが呼び出された場合、SQL Serverドライバが戻す表名情報は、結果セット内の列がデータベース表内の列にマップされているかどうかによって異なります。結果セット内の各列がデータベース表内の列にマップされている場合、SQL Serverドライバはその列に関連付けられている表名を戻します。結果セット内の各列が表内の列にマップされていない場合(集約やリテラルなど)、SQL Serverドライバは空の文字列を戻します。

ResultSetメタデータが返されるSelect文には、別名、結合、および完全修飾名を含めることができます。以下の問合せは、ResultSetMetaData.getTableName()メソッドによってSelectリスト内の各列の正しい表名が返される、Select文の例です。

SELECT id, name FROM Employee
SELECT E.id, E.name FROM Employee E 
SELECT E.id, E.name AS EmployeeName FROM Employee E
SELECT E.id, E.name, I.location, I.phone FROM Employee E, 
   EmployeeInfo I WHERE E.id = I.id
SELECT id, name, location, phone FROM Employee,
   EmployeeInfo WHERE id = empId
SELECT Employee.id, Employee.name, EmployeeInfo.location, 
   EmployeeInfo.phone FROM Employee, EmployeeInfo 
   WHERE Employee.id = EmployeeInfo.id

生成された列の場合、ドライバによって返される表名は空の文字列です。以下の問合せは、生成された列(「upper」という名前の列)を含む結果セットを返すSelect文の例です。

SELECT E.id, E.name as EmployeeName, {fn UCASE(E.name)} 
   AS upper FROM Employee E

SQL Serverドライバは、ResultSetMetaData.getSchemaName()メソッドとResultSetMetaData.getCatalogName()メソッドが呼び出された場合、スキーマ名とカタログ名の情報を返すこともできます(ドライバがこの情報を判別できる場合)。たとえば、以下の文の場合、SQL Serverドライバはカタログ名として「test」、スキーマ名として「test1」、表名として「foo」を返します。

SELECT * FROM test.test1.foo 

表名、スキーマ名、およびカタログ名の情報を返すために必要な追加の処理は、ResultSetMetaData.getTableName()ResultSetMetaData.getSchemaName()、またはResultSetMetaData.getCatalogName()メソッドが呼び出された場合にのみ実行されます。

Rowsetのサポート

SQL Serverドライバは、以下のようなRowSetインタフェースのJSR 114実装をサポートします。

ドライバでRowSetを使用するには、J2SE 1.4以上が必要です。

JSR 114の詳細は、http://www.jcp.org/en/jsr/detail?id=114を参照してください。

自動生成キーのサポート

SQL Serverドライバは自動生成キーの値の取得をサポートします。SQL Serverドライバから返される自動生成キーは、identity列の値です。

自動生成キーの値を返すことができるのは、アプリケーションでInsert文を実行するときです。値を返す方法は、パラメータを含むInsert文を使用しているかどうかによって異なります。

自動生成キーの値は、Statement.getGeneratedKeys()メソッドを使用して取得できます。このメソッドは、各自動生成キーの列とともにResultSetオブジェクトを返します。

Null値

Microsoft SQL Serverドライバは接続を確立するときに、Microsoft SQL Serverのデータベース・オプションansi_nullsをonに設定します。これでドライバがANSI SQL標準に準拠するようになり、データベース間を横断するアプリケーションの開発が容易になります。

デフォルトでは、Microsoft SQL ServerはSQLの等価比較(=)または不等価比較(<>)や集約関数におけるnull値の評価を、ANSI SQL準拠の方法では行いません。たとえば、ANSI SQL仕様では、次のSelect文のようにcol1=nullを常にfalseと評価するように定義されています。

SELECT * FROM table WHERE col1 = NULL

デフォルトのデータベース設定(ansi_nulls=off)を使用した同じ比較では、falseではなくtrueと評価されます。

ansi_nullsをonに設定すると、データベースによるnull値の処理方法が変わり、=NULLではなくIS NULLの使用が強制されます。たとえば、以下のSelect文のcol1の値がnullである場合、比較の評価はtrueになります。

SELECT * FROM table WHERE col1 IS NULL

アプリケーションでは以下の方法で、接続に関するMicrosoft SQL Serverのデフォルトの動作に戻すことができます。

フェイルオーバーの構成

次の手順に従って、フェイルオーバーを構成します。

  1. プライマリ・サーバーと代替サーバーを指定します。

    • 接続URLまたはデータ・ソースを使用してプライマリ・サーバーを指定します。

    • AlternateServersプロパティを設定して、1つまたは複数の代替サーバーを指定します。

    注意: ドライバのかわりにフェイルオーバーの代替サーバーを決定するMicrosoft Cluster Server (MSCS)によるフェイルオーバーを使用する場合、指定した代替サーバーがプライマリ・サーバーと同じである必要があります。例:

    jdbc:datadirect:sqlserver://server1:1433; DatabaseName=TEST;User=test;Password=secret; AlternateServers=(server1:1433;DatabaseName=TEST)

  2. FailoverMode接続プロパティを設定して、フェイルオーバー・メソッドを選択します。デフォルト・メソッドは、接続フェイルオーバー(FailoverMode=connect)です。

  3. FailoverMode=extendedまたはFailoverMode=selectの場合、FailoverGranularityプロパティを設定して、失われた接続の再確立を試行しているときに例外が発生した場合のドライバの動作を指定します。ドライバのデフォルトの動作では、フェイルオーバー処理が続行され、例外が発生した文にその例外がポストされます(FailoverGranularity=nonAtomic)。

  4. オプションで、接続再試行の機能を構成します。

  5. オプションで、ドライバによって、一度にプライマリ・サーバーおよび代替サーバーへの接続を確立する場合、FailoverPreconnectプロパティを設定します。デフォルトの動作では、失敗した接続試行または失われた接続で発生したフェイルオーバーの場合、代替サーバーのみへ接続されます。(FailoverPreconnect=false)。

プライマリ・サーバーと代替サーバーの指定

次のいずれかのメソッドを実行して、プライマリ・サーバーと代替サーバーの接続情報を指定できます。

たとえば、次に示すSQL Serverドライバの接続URLでは、接続URLを使用することでプライマリ・サーバーと代替サーバーの接続情報を指定しています。

jdbc:weblogic:sqlserver://server1:1433;DatabaseName=TEST;User=test; Password=secret;AlternateServers=(server2:1433;DatabaseName=TEST2, server3:1433;DatabaseName=TEST3)

この例では:

...server1:1433;DatabaseName=TEST...

これは、プライマリ・サーバー用の接続情報を指定する接続URLの一部です。代替サーバーがAlternateServersプロパティで指定されます。例:

...;AlternateServers=(server2:1433;DatabaseName=TEST2, server3:1433;DatabaseName=TEST3)

同様に、JDBCデータ・ソースを使用したプライマリ・サーバーと代替サーバーの同一の接続情報は、次のようになります。

SQLServerDataSource mds = new SQLServerDataSource();

mds.setDescription("My SQLServerDataSource");

mds.setServerName("server1");

mds.setPortNumber(1433);

mds.setDatabaseName("TEST");

mds.setUser("test");

mds.setPassword("secret");

mds.setAlternateServers(server2:1433;DatabaseName=TEST2,

server3:1433;DatabaseName=TEST3)

この例では、ServerNamePortNumber、およびDatabaseNameプロパティを使用して、プライマリ・サーバーの接続情報を指定します。代替サーバーの接続情報がAlternateServersプロパティで指定されます。

SQL Serverドライバにより、同じサーバーで同時に実行されているMicrosoft SQL Serverデータベースの名前付きの複数のインスタンスへの接続も指定できます。名前付きインスタンスをプライマリ・サーバーと代替サーバーに指定する場合、接続URLは次のようになります。

jdbc:weblogic:sqlserver://server1\\instance1;User=test;Password=secret; AlternateServers=(server2\\instance2:1433;DatabaseName=TEST2, server3\\instance3:1433;DatabaseName=TEST3)

同様に、JDBCデータ・ソースを使用したプライマリ・サーバーと代替サーバーへの名前付きインスタンスの同一の接続情報は、次のようになります。

SQLServerDataSource mds = new SQLServerDataSource();

mds.setDescription("My SQLServerDataSource");

mds.setServerName("server1\\instance1");

mds.setPortNumber(1433);

mds.setDatabaseName("TEST");

mds.setUser("test");

mds.setPassword("secret");

mds.setAlternateServers(server2\\instance2:1433;

DatabaseName=TEST2,server3\\instance3:1433;

DatabaseName=TEST3)

データ・ソースを使用して名前付きインスタンスに接続するには、ServerNameプロパティを使用してプライマリ・サーバーに名前付きインスタンスを指定します。

AlternateServersプロパティの値は、次のような形式の文字列です。

(servername1[:port1][;property=value][,servername2[:port2] [;property=value]]...)

または、名前付きインスタンスに接続する場合は次のようになります。

(servername1\\instance1[;property=value][,servername2\\instance2 [;property=value

説明:

接続の再試行の指定

接続の再試行によって、SQL Serverドライバはプライマリ・データベース・サーバーへの接続を再試行できます。また、指定している場合は、接続が確立されるまで代替サーバーへの接続を再試行します。ConnectionRetryCountおよびConnectionRetryDelayプロパティを使用して、接続再試行を有効にでき、その動作を制御できます。例:

jdbc:datadirect:sqlserver://server1:1433;DatabaseName=TEST;

User=test;

Password=secret;

AlternateServers=(server2:1433;

DatabaseName=TEST2, server3:1433;DatabaseName=TEST3);

ConnectionRetryCount=2; ConnectionRetryDelay=5

この例では、データベース・サーバー(プライマリ・サーバーと代替サーバー)のリストを介してSQL Serverドライバの最初のパスで接続がまだ確立されていない場合、ドライバによってサーバーのリストが同じ順番で2回再試行されします(ConnectionRetryCount=2)。接続再試行の遅延が5秒に設定されているため(ConnectionRetryDelay=5)、ドライバは再試行パスの間に5秒まで待機します。

フェイルオーバー・プロパティ

次の項には、SQL Serverドライバでのフェイルオーバーの機能を制御する接続プロパティが要約されています。

バルク・ロード

ドライバでは、バルク・ロードの機能がサポートされます。この機能を使用すると、アプリケーションでは大量のデータ行を、多数の小さいデータベース・プロトコル・パケットではなく連続ストリームとしてデータベースに送信できます。バッチ操作と同様に、ネットワーク上のラウンド・トリップが少なくなるので、パフォーマンスが向上します。一括ロードは通常データベースが行うデータの解析処理をバイパスするため、バッチ操作ではよりパフォーマンスが向上します。