JDBC データソース¶
JDBC データソースを作成するには、CREATE DATASOURCE JDBC ステートメントを使用します。
CREATE [ OR REPLACE ] DATASOURCE JDBC <name:identifier>[EMBEDDED_MPP]
[ ID = <literal> ]
[ FOLDER = <literal> ]
[ VAULT_SECRET = <literal> ]
DRIVERCLASSNAME = <literal>
DATABASEURI = <literal>
[
<credentials>
| USE_KERBEROS ( <kerberos_credentials> )
| <credentials> USE_KERBEROS_AT_RUNTIME ( <kerberos_credentials> )
| <credentials> USE_KERBEROS_AT_INTROSPECTION ( <kerberos_credentials> )
| USE_OAUTH ( <oauth_configuration> )
| <credentials> USE_OAUTH_AT_RUNTIME ( <oauth_configuration> )
| <credentials> USE_OAUTH_AT_INTROSPECTION ( <oauth_configuration> )
| WITH PASS-THROUGH SESSION CREDENTIALS ( <pass_through_options> )
| WITH PASS-THROUGH SESSION CREDENTIALS (
[
PASS-THROUGH_KERBEROS_TARGET_PRINCIPAL = <literal>
| CONSTRAINED_DELEGATION_PROPERTY_NAME = <literal>
]
) [
USE_KERBEROS_AT_INTROSPECTION ( <kerberos_credentials> )
| USE_AWS_IAM_CREDENTIALS_AT_INTROSPECTION ( <aws_iam_credentials> )
]
| WITH PASS-THROUGH SESSION CREDENTIALS (
[ REQUIRE_OAUTH ]
[ USE_OAUTH_AT_INTROSPECTION ]
[
USING_TOKEN_PASS_THROUGH
| USING_TOKEN_EXCHANGE_FLOW
| USING_OBO_FLOW
] ( <oauth_configuration> )
)
| USE_AWS_IAM_CREDENTIALS ( <aws_iam_credentials> )
| <credentials> USE_AWS_IAM_CREDENTIALS_AT_RUNTIME ( <aws_iam_credentials> )
| <credentials> USE_AWS_IAM_CREDENTIALS_AT_INTROSPECTION ( <aws_iam_credentials> )
| <gcp_credentials>
]
[ WITH PROXY_CONNECTIONS ]
[ CLASSPATH = <literal> ]
[ DATABASENAME = <literal> DATABASEVERSION = <literal>]
[ ISOLATIONLEVEL =
{ TRANSACTION_NONE
| TRANSACTION_READ_COMMITTED
| TRANSACTION_READ_UNCOMMITTED
| TRANSACTION_REPEATABLE_READ
| TRANSACTION_SERIALIZABLE
}
]
[ IGNORETRAILINGSPACES = { TRUE | FALSE } ]
[ FETCHSIZE = <integer> ]
[ <data load configuration> ]
[ CREDENTIALS_VAULT (
STATUS { ON | DEFAULT }
[ PROVIDER
{ CYBERARK (
APPLICATION_ID = <literal>
{ AGENT
| AGENT_LESS (
CLIENT_KEY = <literal> [ ENCRYPTED ]
[ CLIENT_KEY_PASSWORD = <literal> [ ENCRYPTED ] ]
)
}
)
}
]
)
]
[
<pool configuration 1>
| <pool configuration 2>
| <pool configuration 3>
]
[ <external data configuration> ]
[ PROPERTIES ( <literal> = <literal> [ VAR ] [, <literal> = <literal> [ VAR ] ]* ) ]
[ KERBEROSPROPERTIES ( <literal> = <literal> [, <literal> = <literal> ]* ) ]
[ OAUTHPROPERTIES ( <literal> = <literal> [, <literal> = <literal> ]* ) ]
[ TRANSFER_RATE_FACTOR = <double> ]
[ PROCESSING_UNITS = <integer> ]
[ CPUS_PER_PROCESSING_UNIT = <integer> ]
[ INTERNAL_TRANSFER_RATE = <double> ]
[ <data infrastructure> ]
[ DESCRIPTION = <literal> ]
[ SOURCECONFIGURATION ( [ <source configuration property>
[, <source configuration property> ]* ] ) ]
<pass_through_options> ::=
[ <credentials> ]
[ USE_KERBEROS ]
[ PASSTHROUGH_KERBEROS_TARGET_PRINCIPAL = <literal> ]
[ CONSTRAINED_DELEGATION_PROPERTY_NAME = <literal> ]
<credentials> ::=
USERNAME = <literal> USERPASSWORD = <literal> [ ENCRYPTED ]
| <vault_credentials>
<kerberos_credentials> ::=
KRB_USERNAME = <literal> KRB_USERPASSWORD = <literal> [ ENCRYPTED ]
| KRB_USERNAME = <literal> KRB_KEYTAB = <literal>
<aws_iam_credentials> ::=
AWS_ACCESS_KEY_ID = <literal> AWS_SECRET_ACCESS_KEY = <literal> [ ENCRYPTED ] [ AWS_DATABASE_USER = <literal> ]
| AWS_ACCESS_KEY_ID = <literal> AWS_SECRET_ACCESS_KEY = <literal> [ ENCRYPTED ] AWS_IAM_ROLE_ARN = <literal> [ AWS_DATABASE_USER = <literal> ]
| AWS_IAM_ROLE_ARN = <literal> [ AWS_DATABASE_USER = <literal> ]
| [ AWS_DATABASE_USER = <literal> ]
<gcp_credentials> ::=
GCP (
OAUTH_TYPE = <literal>
PRIVATE_KEY = <literal> [ ENCRYPTED ]
PROJECT_ID = <literal>
SERVICE_ACCOUNT_EMAIL = <literal>
)
<vault_credentials> ::=
FROM_VAULT
| FROM_VAULT (VAULT_SECRET = <literal>, FIELD_AT_SECRET = DEFAULT)
<oauth_configuration> ::=
TOKEN_ENDPOINTURL = <literal>
CLIENT_IDENTIFIER = <literal>
CLIENT_SECRET = <literal> [ ENCRYPTED ]
OAUTH_USER = { <literal> | <vault_credentials> }
OAUTH_PASSWORD = { <literal> [ ENCRYPTED ] | <vault_credentials> }
SCOPE = <literal>
[ OAUTH_TOKEN_PROPERTY_NAME = <literal> ]
<pool configuration 1> ::=
VALIDATIONQUERY = <literal>
INITIALSIZE = <integer>
MAXACTIVE = <integer>
<pool configuration 2> ::=
VALIDATIONQUERY = <literal>
INITIALSIZE = <integer>
MAXACTIVE = <integer>
EXHAUSTEDACTION = <integer>
<pool configuration 3> ::=
VALIDATIONQUERY = <literal>
INITIALSIZE = <integer>
MAXIDLE = <integer>
MINIDLE = <integer>
MAXACTIVE = <integer>
EXHAUSTEDACTION = <integer>
TESTONBORROW = <boolean>
TESTONRETURN = <boolean>
TESTWHILEIDLE = <boolean>
[ <pool sub-configuration 1> ]
<pool sub-configuration 1> ::=
TIMEBETWEENEVICTION = <integer>
NUMTESTPEREVICTION = <integer>
MINEVICTABLETIME = <integer>
[ <pool sub-configuration 2>]
<pool sub-configuration 2> ::=
POOLPREPAREDSTATEMENTS = <boolean>
MAXOPENPREPAREDSTATEMENTS = <integer>
<data infrastructure> ::=
DATA_INFRASTRUCTURE (
[ PROVIDER = <literal> ]
[ REGION = <literal> ]
)
<source configuration property> ::=
ALLOWLITERALASPARAMETER = <property value>
| DELEGATE_BINARY_ORDERBY_COLLATION = <property value>
| DELEGATE_ORDERBY_COLLATION_MODIFIER = <property value>
| DELEGATEAGGREGATEFUNCTIONS = {
DEFAULT
| ( <function:identifier> [, <function:identifier> ]* ] )
}
| DELEGATEALLOPERATORS = <property value>
| DELEGATEANALYTICFUNCTIONSLIST = {
DEFAULT
| ( <function:identifier> [, <function:identifier> ]* ] )
}
| DELEGATEARRAYLITERAL = <property value>
| DELEGATECOMPOUNDFIELDPROJECTION = <property value>
| DELEGATEGROUPBY = <property value>
| DELEGATEHAVING = <property value>
| DELEGATEINNERJOIN = <property value>
| DELEGATEINTERSECTION = <property value>
| DELEGATEINVALIDNUMBERLITERALSASNULL = <property value>
| DELEGATEJOIN = <property value>
| DELEGATELEFTFUNCTION = <property value>
| DELEGATELEFTLITERAL = <property value>
| DELEGATELITERALEXPRESSION = <property value>
| DELEGATEMIXEDAGGREGATEEXPRESSION = <property value>
| DELEGATENATURALOUTERJOIN = <property value>
| DELEGATENOTCONDITION = <property value>
| DELEGATE_OFFSET_RESTRICTION = <delegate offset restriction value>
| DELEGATEOPERATORSLIST = {
DEFAULT
| ( <operator:identifier> [, <operator:identifier> ]* ] )
}
| DELEGATEORCONDITION = <property value>
| DELEGATEORDERBY = <property value>
| DELEGATEPROJECTION = <property value>
| DELEGATEREGISTERLITERAL = <property value>
| DELEGATERIGHTFIELD = <property value>
| DELEGATERIGHTFUNCTION = <property value>
| DELEGATERIGHTLITERAL = <property value>
| DELEGATESCALARFUNCTIONS = {
DEFAULT
| ( <function:identifier> [, <function:identifier> ]* ] )
}
| DELEGATESELECTDISTINCT = <property value>
| DELEGATESELECTION = <property value>
| DELEGATEUNION = <property value>
| SUPPORTSAGGREGATEFUNCTIONSOPTIONS = <property value>
| SUPPORTSBRANCHOUTERJOIN = <property value>
| SUPPORTSEQOUTERJOINOPERATOR = <property value>
| SUPPORTSEXPLICITCROSSJOIN = <property value>
| SUPPORTSFULLEQOUTERJOIN = <property value>
| SUPPORTSFULLNOTEQOUTERJOIN = <property value>
| SUPPORTSFUSINGINUSINGANDNATURALJOIN = <property value>
| SUPPORTSJOINONCONDITION = <property value>
| SUPPORTSNATURALJOIN = <property value>
| SUPPORTSPREPAREDSTATEMENT = <property value>
| SUPPORTSUSINGJOIN = <property value>
<property value> ::=
true
| false
| DEFAULT
<delegate offset restriction value> ::=
DEFAULT
| 'NONE'
| 'FETCH'
| 'ORDER_BY'
| 'FETCH_ORDER_BY'
| 'NO_ORDER_BY'
| 'FETCH_NO_ORDER_BY'
<data load configuration> ::=
DATA_LOAD_CONFIGURATION (
[ USE_FOR_QUERY_OPTIMIZATION = { false | DATA_MOVEMENT | PARALLEL_PROCESSING } ]
[ BATCHINSERTSIZE = <integer> ]
[ BULK_LOAD_CONFIGURATION (
<workdir configuration>
| <athena configuration>
| <redshift configuration 1>
| <redshift configuration 2>
| <hdfs configuration>
| <databricks configuration>
| <oracle configuration>
| <SQL Server configuration>
| <db2 configuration>
| <gcp bulk credentials>
)
]
[ TARGET_CATALOG = <literal> [ ESCAPE ] ]
[ TARGET_SCHEMA = <literal> [ ESCAPE ] ]
[ USE_EXTERNAL_TABLES (
ON_MOVE_READ = <boolean>,
ON_MOVE_WRITE = <boolean>
)
]
[ CREATE_TABLE_TEMPLATES ( <create_table_template> [, <create_table_template> ]* )
<default_create_table_templates> ]
)
<external data configuration> ::=
EXTERNAL_DATA_CONFIGURATION (
FILE_SYSTEM { HDFS | S3 | ADLS }
AUTHENTICATION ( <aws_authentication> | <azure_authentication> )
[HADOOP_CUSTOM_PROPERTIES = ( <literal> = <literal> [, <literal> = <literal> ]* ) ]
EXTERNAL_DATA_ROUTES (
<external_data_routes_list>
)
)
<aws_authentication> ::=
[ AWS_ACCESS_KEY_ID = { <literal> | <vault_credentials> }]
[ AWS_SECRET_ACCESS_KEY = { <literal> [ ENCRYPTED ] | <vault_credentials> } ]
[ AWS_IAM_ROLE_ARN = <literal> ]
[ AWS_VAULT_SECRET = <literal> ]
<azure_authentication> ::= <azure_authentication_shared_key> |
<azure_authentication_oauth_client> |
<azure_authentication_oauth_managed_identity>
<azure_authentication_shared_key> ::=
AZURE_AUTH_TYPE = SHARED_KEY
SHARED_KEY = <literal> [ ENCRYPTED ]
<azure_authentication_oauth_client> ::=
AZURE_AUTH_TYPE = OAUTH_CLIENT_CREDENTIALS
OAUTH_CLIENT_ID = <literal> | <vault_credentials>
[ OAUTH_CLIENT_SECRET = <literal> [ ENCRYPTED ] | <vault_credentials> ]
OAUTH_TOKEN_ENDPOINT = <literal>
OAUTH_VAULT_SECRET = <literal>
<azure_authentication_oauth_managed_identity> ::=
AZURE_AUTH_TYPE = OAUTH_MANAGED_IDENTITY
[ OAUTH_CLIENT_ID = <literal> | <vault_credentials> ]
[ OAUTH_TENANT_ID = <literal> ]
[ OAUTH_TOKEN_ENDPOINT = <literal> ]
<external_data_routes_list> ::=
<external_data_routes_template> |
<external_data_routes_list> COMMA <external_data_routes_template>
<external_data_routes_template> ::= <identifier_name> EQ <literal>
<create_table_template> ::=
<template_name:identifier> = <template_definition:literal>
[ DEFAULT( <parameter_default_value> [, <parameter_default_value> ]* ) ]
Note: You can use parameters within the template definition. Syntax: @{parameter_name}
<parameter_default_value> ::= <parameter_name:literal> = <parameter_value:literal>
<default_create_table_templates> ::=
DEFAULT CREATE_TABLE_TEMPLATE <template_name:identifier>
| DEFAULT CREATE_TABLE_TEMPLATES (
[ DATA_MOVEMENT = { DATA_SOURCE_DEFAULT | <data_movement_template_name:identifier> }, ]
[ CACHE = { DATA_SOURCE_DEFAULT | <cache_template_name:identifier> }, ]
[ CACHE_MANAGEMENT = { DATA_SOURCE_DEFAULT | <cache_management_template_name:identifier> }, ]
[ REMOTE_TABLE = { DATA_SOURCE_DEFAULT | <remote_table_template_name:identifier> }, ]
[ SUMMARY = { DATA_SOURCE_DEFAULT | <summary_template_name:identifier> } ]
)
JDBC データソースを変更するには、ALTER DATASOURCE JDBC ステートメントを使用します。
ALTER DATASOURCE JDBC <name:identifier>
[ ID = <literal> ]
[ FOLDER = <literal> ]
[ VAULT_SECRET = <literal> ]
[ DRIVERCLASSNAME = <literal> ]
[ DATABASEURI = <literal> ]
[
<credentials>
| USE_KERBEROS ( <kerberos_credentials> )
| <credentials> USE_KERBEROS_AT_RUNTIME ( <kerberos_credentials> )
| <credentials> USE_KERBEROS_AT_INTROSPECTION ( <kerberos_credentials> )
| WITH PASS-THROUGH SESSION CREDENTIALS ( <pass_through_options> )
| WITH PASS-THROUGH SESSION CREDENTIALS ( )
[ USE_KERBEROS_AT_INTROSPECTION ( <kerberos_credentials> )
| USE_AWS_IAM_CREDENTIALS_AT_INTROSPECTION ( <aws_iam_credentials> ) ]
| USE_AWS_IAM_CREDENTIALS ( <aws_iam_credentials> )
| <credentials> USE_AWS_IAM_CREDENTIALS_AT_RUNTIME ( <aws_iam_credentials> )
| <credentials> USE_AWS_IAM_CREDENTIALS_AT_INTROSPECTION ( <aws_iam_credentials> )
| <gcp_credentials>
[ WITH PROXY_CONNECTIONS ]
]
[ CLASSPATH = <literal> ]
[
DATABASENAME = <literal>
DATABASEVERSION = <literal>
]
[ ISOLATIONLEVEL =
TRANSACTION_NONE
| TRANSACTION_READ_COMMITTED
| TRANSACTION_READ_UNCOMMITTED
| TRANSACTION_REPEATABLE_READ
| TRANSACTION_SERIALIZABLE
]
[ IGNORETRAILINGSPACES = { true | false } ]
[ FETCHSIZE = <integer> ]
[ BATCHINSERTSIZE = <integer> ]
[ CREDENTIALS_VAULT (
STATUS { ON | DEFAULT }
[ PROVIDER
{ CYBERARK (
APPLICATION_ID = <literal>
{ AGENT
| AGENT_LESS (
CLIENT_KEY = <literal> [ ENCRYPTED ]
[ CLIENT_KEY_PASSWORD = <literal> [ ENCRYPTED ] ]
)
}
)
}
]
)
]
[
<pool configuration 1>
| <pool configuration 2>
| <pool configuration 3>
]
[ <external data configuration> ]
[ PROPERTIES ( <literal> = <literal> [ VAR ] [, <literal> = <literal> [ VAR ] ]* ) ]
[ KERBEROSPROPERTIES ( <literal> = <literal> [, <literal> = <literal> ]* ) ]
[ USEEXTERNALTABLES (
ONMOVEREAD = <boolean>,
ONMOVEWRITE = <boolean>
)
]
[ DATAMOVEMENT_TARGET = { true | false } ]
[ TARGET_CATALOG = <literal> [ ESCAPE ] ]
[ TARGET_SCHEMA = <literal> [ ESCAPE ] ]
[ TRANSFER_RATE_FACTOR = <double> ]
[ PROCESSING_UNITS = <integer> ]
[ CPUS_PER_PROCESSING_UNIT = <integer> ]
[ INTERNAL_TRANSFER_RATE = <double> ]
[ CREATE_TABLE_TEMPLATES ( <create_table_template> [, <create_table_template> ]* ) ]
[ <default_create_table_templates> ]
[ <data infrastructure> ]
[ DESCRIPTION = <literal> ]
[ SOURCECONFIGURATION ( [ <source configuration property>
[, <source configuration property> ]* ] ) ]
<pool configuration 1> ::= (「 CREATE DATASOURCE JDBC 」を参照)
<pool configuration 2> ::= (「 CREATE DATASOURCE JDBC 」を参照)
<pool configuration 3> ::= (「 CREATE DATASOURCE JDBC 」を参照)
<pool sub-configuration 1> ::= (「 CREATE DATASOURCE JDBC 」を参照)
<pool sub-configuration 2> ::= (「 CREATE DATASOURCE JDBC 」を参照)
<source configuration property> ::= (「 CREATE DATASOURCE JDBC 」を参照)
<credentials> ::= (「 CREATE DATASOURCE JDBC 」を参照)
<create_table_template> ::= (「 CREATE DATASOURCE JDBC 」を参照)
<default_create_table_templates> ::= (「 CREATE DATASOURCE JDBC 」を参照)
これらのステートメントで利用する一部のパラメータの説明 :
OR REPLACE
: 指定されている場合、同じ名前のデータソースが存在すれば、現在の定義が新しい定義で置き換えられます。FOLDER
: データソースが保存されるフォルダの名前。DRIVERCLASSNAME
: データソースへのコネクションに使用されるドライバークラス。DATABASEURI
: データベースへの接続 URL。データベースに接続するために使用できる認証方法は以下のとおりです。
<credentials>
: クエリの実行およびイントロスペクションプロセス (データソースの [Create base view] ダイアログでデータベースのテーブルやビューを表示するプロセス) 用に、データベースに接続する際にUSERNAME
とPASSWORD
を使用します。USE_KERBEROS ( <kerberos_credentials> )
: クエリの実行およびイントロスペクションプロセス (データソースの [Create base view] ダイアログでデータベースのテーブルやビューを表示するプロセス) 用に、データベースに接続する際に Kerberos を使用します。<credentials> USE_KERBEROS_AT_RUNTIME ( <kerberos_credentials> )
: クエリを実行するために、データベースに接続する際に Kerberos を使用しますが、イントロスペクションプロセスにはログインとパスワードを使用します。<credentials> USE_KERBEROS_AT_INTROSPECTION ( <kerberos_credentials> )
: クエリを実行するために、データベースに接続する際にログインとパスワードを使用しますが、イントロスペクションプロセスには Kerberos を使用します。WITH PASS-THROUGH SESSION CREDENTIALS ( <pass_through_options> )
: イントロスペクションプロセスにはログインとパスワードまたは AWS IAM 資格情報を使用し、クエリを実行するためには Virtual DataPort サーバーに接続されたクライアントの資格情報を使用します。クエリを実行するための資格情報は、Virtual DataPort サーバーに接続するために使用されるクライアントの認証方法に応じて Kerberos またはログイン/パスワードを使用できます。<pass_through_options>
がUSE_KERBEROS
を指定している場合、サーバーはログイン/パスワードを使用して Kerberos チケットを作成します。USE_AWS_IAM_CREDENTIALS ( <aws_iam_credentials> )
: クエリの実行およびイントロスペクションプロセス (データソースの [Create base view] ダイアログでデータベースのテーブルやビューを表示するプロセス) 用に、データベースに接続する際に AWS IAM 資格情報を使用します。<credentials> USE_AWS_IAM_CREDENTIALS_AT_RUNTIME ( <aws_iam_credentials> )
: クエリを実行するために、データベースに接続する際に AWS IAM 資格情報を使用しますが、イントロスペクションプロセスにはログインとパスワードを使用します。<credentials> USE_AWS_IAM_CREDENTIALS_AT_INTROSPECTION ( <aws_iam_credentials> )
: クエリを実行するために、データベースに接続する際にログインとパスワードを使用しますが、イントロスペクションプロセスには AWS IAM 資格情報を使用します。このオプションを使用するデータソースを作成し、Virtual DataPort サーバーへの接続に使用した資格情報とは別の資格情報でそのデータソースのビューにクエリを実行する場合は、
USERNAME
とPASSWORD
の各パラメータをCONTEXT
に追加します。この 2 つのパラメータは、WITH PASS-THROUGH SESSION CREDENTIALS
オプションを使用して作成したデータソースの場合のみ考慮されます。たとえば、
WITH PASS-THROUGH SESSION CREDENTIALS
オプションを使用してview1
を作成し、以下を実行するとします。SELECT * FROM view1 CONTEXT( USERNAME = 'admin' , PASSWORD = 'd4GvpKA5BiwoGUFrnH92DNq5TTNKWw58I86PVH2tQIs/q1RH9CkCoJj57NnQUlmvgvvVnBvlaH8NFSDM0x5fWCJiAvyia70oxiUWbToKkHl3ztgH1hZLcQiqkpXT/oYd' ENCRYPTED , DOMAIN = 'ACME_DOMAIN')
Virtual DataPort サーバーは、ユーザーが Virtual DataPort サーバーへの接続に使用した資格情報を無効にし、ユーザー名
admin
、パスワードpassword
、ドメインacme_domain
を使用して Web サービスに接続します。トークン
ENCRYPTED
を追加して、必ず暗号化したパスワードを入力する必要があります。パスワードを暗号化するには、ENCRYPT_PASSWORD
ステートメントを実行します。以下に例を示します。ENCRYPT_PASSWORD 'my_secret_password';
WITH PASS-THROUGH SESSION CREDENTIALS () USE_KERBEROS_AT_INTROSPECTION ( <kerberos_credentials> )
: イントロスペクションプロセスには Kerberos 認証を使用し、クエリを実行するためには Virtual DataPort サーバーに接続されたクライアントの資格情報を使用します。クエリを実行するための資格情報は、Virtual DataPort サーバーに接続するために使用されるクライアントの認証方法に応じて Kerberos またはログイン/パスワードを使用できます。
重要
「パススルーセッション資格情報」の使用には重要な意味があります。説明を読むには、管理ガイドの「 JDBC ソースのインポート 」で「パススルーセッション資格情報」を検索してください。
WITH PROXY_CONNECTIONS
: 指定されている場合、データソースは Oracle の「プロキシ認証」機能を使用します。この機能の仕組みについては、管理ガイドの「 Oracle プロキシ認証の仕組み 」を参照してください。CLASSPATH
: 指定されたソース用の JDBC ドライバーを含む JAR ファイルへのパス (オプション)。DATABASENAME
とDATABASEVERSION
: アクセスするデータベースの名前とバージョン。ISOLATIONLEVEL
: データベース内で実行されるクエリとトランザクションに必要な分離レベルを設定します。このパラメータが指定されていない場合、データソースはデータベースのデフォルトの分離レベルを使用します。IGNORETRAILINGSPACES
:true
の場合、データソースのビューから返される結果のうち、text
型の値の末尾にある空白文字が Virtual DataPort サーバーによって削除されます。FETCHSIZE
: 多くの行をデータベースからフェッチする必要がある場合に、その行数に関するヒントを JDBC ドライバーに示します。CREDENTIALS_VAULT
句を使用すると、データソースレベルで資格情報ボールトの構成をカスタマイズできます。これは、さまざまな構成で複数のデータベースの資格情報を管理する必要がある場合に特に役立ちます。データソースごとに異なる構成を可能にすることで、資格情報管理プロセスのセキュリティと効率を高めることができます。BATCHINSERTSIZE
: データソースが、このデータソースのデータベースに複数行を挿入する必要がある場合に、それらをバッチ単位で挿入できます。この数値によって、バッチごとのクエリ数を設定します。この値は、他のデータソースからデータソースにデータを移動した結果として、このデータソースのデータベースに行を挿入する場合にのみ使用されます。詳細については、管理ガイドの「 データ移動 」を参照してください。
「<pool configuration 1>」、「<pool configuration 2>」および「<pool configuration 3>」の各パラメータについては、後述の「 JDBC データソースのコネクションプール 」を参照してください。
ストアドプロシージャのプールのパラメータ :
POOLPREPAREDSTATEMENTS
:true
の場合、準備済みステートメントのプールが有効になります。MAXOPENPREPAREDSTATEMENTS
: 開いている準備済みステートメントの最大数。POOLPREPAREDSTATEMENTS
がtrue
の場合に限り考慮されます。
USEEXTERNALTABLES
: データベースとの間でデータの読み取りと書き込みを行うための、このデータベース独自の API の使用に関するオプション。この独自 API を使用したデータベースへのデータの書き込みは、「一括読み込み」と呼ばれています。
Virtual DataPort サーバーがデータベースの一括読み込み API を使用してデータを書き込むのには、2 つの理由があります。
データの移動を実行する場合。詳細については、管理ガイドの「 データ移動 」を参照してください。
テーブルのキャッシュをロードする場合。
このプロセスの仕組みの詳細については、管理ガイドの「 データ一括読み込み 」を参照してください。
ONMOVEREAD
(データベースが Netezza の場合のみ考慮):true
の場合、実行エンジンはデータの移動を実行するために、Netezza データベースからデータを読み取る際、「外部テーブル」機能を使用します。これをtrue
に設定するのは、データソースの [Read & Write] タブで [Read settings] の [Use external tables for data movement] チェックボックスをチェックするのと同じことです。ONMOVEWRITE
:true
の場合、実行エンジンはデータの移動を実行するために、目的のデータベースにデータを書き込む際、データベース独自の API を使用します。これをyes
に設定するのは、データソースの [Read & Write] タブで [Write settings] の [Use Bulk Data Load APIs] チェックボックスをチェックするのと同じことです。
DATAMOVEMENT_TARGET
:true
の場合、データソースをデータの移動先にすることができます。これをtrue
に設定するのは、データソースの [Read & Write] タブで [Write settings] の [Can be data movement target] チェックボックスをチェックするのと同じことです。BULK_LOAD_CONFIGURATION
: データベースの一括読み込み API の設定。指定できる設定はデータベースアダプターによって異なります。そのため、管理ツールから設定を変更することをお勧めします。CREATE_TABLE_TEMPLATES
: VDP がキャッシュテーブル、データ移動テーブル、リモートテーブル、サマリ、一時ビュー、およびマテリアライズドビューを作成するために実行する SQL コマンドを構成するプロパティ。DATA_SOURCE_DEFAULT
は、ユーザーがカスタムテーブル作成コマンドを設定しなかった場合に Denodo が使用するデフォルトのテーブル作成コマンドです。詳細については、「 キャッシュテーブル作成テンプレート 」のセクションを参照してください。
ALTER DATASOURCE コマンドを使用してテーブル作成テンプレートを変更するための規則を以下に示します。
ALTER DATASOURCE
コマンドにCREATE_TABLE_TEMPLATES
トークンが含まれない場合、VDP サーバーはテンプレートの現在の値を維持します。
ALTER DATASOURCE
コマンドに空のセクション``CREATE_TABLE_TEMPLATES ()`` が含まれる場合、VDP サーバーはデータソーステンプレートをすべて削除し、データソース VQL にCREATE_TABLE_TEMPLATES
セクションは出現しません。
ALTER DATASOURCE
コマンドにCREATE_TABLE_TEMPLATES
セクションが含まれ、そこで 1 つまたは複数のテンプレートが指定されている場合、データソースの既存のテンプレートがそれらのテンプレートで置き換えられます。
データソース構成パラメータ (
SOURCECONFIGURATION
): Virtual DataPort では、基盤となるデータソースに固有の特性を指定できます。これらは、データソースに対してステートメントを実行する際に考慮されます。詳細については、「 データソース構成プロパティ 」を参照してください。PROPERTIES
: データベースとのコネクションを作成するときに JDBC ドライバーに渡される名前/値ペアのリスト。トークンVAR
が存在する場合、そのプロパティはリテラルではなく式であると見なされます。KERBEROSPROPERTIES
: データベースとのコネクションを作成するときに JDBC ドライバーに渡される名前/値ペアのリスト。このリストのプロパティは、Virtual DataPort サーバーとデータベースの間で Kerberos 認証メカニズムを構成することを意図しています。JDBC データソースにおける Kerberos 認証の詳細については、管理ガイドの「 Kerberos 認証による JDBC ソースへの接続 」を参照してください。以下のオプションパラメータは、データソースに関する情報を指定します。コストオプティマイザーは、実行計画のコストを評価するときにこれらの値を使用します。通常はデフォルト値が適正に設定されているため、コストオプティマイザーに精通していないかぎり、これらのパラメータは指定しないでください。
TRANSFER_RATE_FACTOR
: Denodo サーバーとデータソース間のネットワーク接続速度の相対的な測定値。従来の 100 Mbps LAN を介してデータソースにアクセス可能な場合は、デフォルト値 (1) を使用します。より高速なネットワークの場合はより大きな値を、WAN 経由でアクセス可能なデータソースの場合はより小さな値を使用します。PROCESSING_UNITS
: 並列データベースにおける SPU の数。CPUS_PER_PROCESSING_UNIT
: 並列データベースにおける SPU あたりの CPU の数。INTERNAL_TRANSFER_RATE
: ミリ秒あたりの KB 単位の転送速度。
JDBC データソースのコネクションプール¶
Denodo の JDBC データソースはコネクションプールと一緒に作成されます。コネクションプールは、データベースへのコネクションのキャッシュです。実行時に、アプリケーションによるクエリの送信に伴ってこのデータソースにクエリを送信する場合、実行エンジンはデータソースのプールにコネクションをリクエストします。プール内にアイドル状態のコネクションがある場合は、それが返されます。アイドル状態のコネクションがない場合は、プールがコネクションを作成します。その後、実行エンジンはこのコネクションを使用してクエリを実行し、クエリが終了すると、コネクションはプールに戻されます。この時点で、このコネクションは次のクエリで使用可能になります。
コネクションプールを使用すると、データベースを扱うクエリのパフォーマンスが大幅に向上します。その理由は、新しいコネクションの作成は時間とリソースの点でコストがかかるからです。新しいコネクションごとに、Denodo はデータベースとのネットワーク接続を確立する必要があり、データベースはクライアントを認証し、新しいコネクションに新しいメモリを割り当てる必要があります。コネクションがすでに作成されていれば、このプロセスは回避されます。
コネクションプールは以下の利点をもたらします。
新しいコネクションを作成する回数の削減。
クエリを実行するためにコネクションを取得する時間の短縮。
データベースに対して開かれているコネクション数を制限する方法の提供。
以上が、新しい JDBC データソースがコネクションプールを備えている理由です。一般に、コネクションプールは無効にするべきではありません。
コネクションプールの正確な動作は、設定によって異なります。
JDBC データソースのコネクションプールのパラメータ¶
JDBC データソースのコネクションプールは、以下のパラメータを用いて構成されます。それらの大半は管理ツールからは変更できず、 ALTER DATA SOURCE JDBC
ステートメントによってのみ変更できます。
MAXACTIVE
(デフォルト値 : 20): 一度に開くことができる最大コネクション数。クエリを実行するために現在使用されているコネクションと、プール内のアイドル状態のコネクションの合計です。MAXACTIVE
コネクション制限は、XA コネクションプールと非 XA コネクションプールに別々に適用されることに注意してください。そのため、デフォルト値 20 を指定すると、最大コネクションプールの制限は合計で 40 (XA コネクションが 20、非 XA コネクションが 20) になります。このパラメータは、[Connection Pool Configuration] ダイアログの Maximum number of active connections フィールドで、 GUI を使用して変更できます。
負の値 (-1 など) の場合、ある時点でのプール内のコネクション数に制限はありません。
データソースのコネクションプールを無効にするには 0 を入力します。この場合、コネクションプールのその他のパラメータは無効になります。
この場合、データソースは、クエリごとにデータベースへのコネクションを新たに開き、クエリが終了すると、コネクションを閉じます。クエリがトランザクションの一部である (クライアントがすでに
BEGIN
を実行したが、COMMIT
またはROLLBACK
をまだ実行していない) 場合、実行エンジンはトランザクションが終了するまでコネクションを開いたまま保持します。Denodo のトランザクションは分散されるため、クエリで扱うすべてのデータベースでトランザクションの確定またはロールバックを行う必要があるからです。トランザクションの詳細については、「 Virtual DataPort のトランザクション 」を参照してください。
Denodo は、トランザクションクエリには、別のコネクションプール (XA プール) を使用します。Denodo には、XA コネクションプールを明確に制御して制限するための追加のプロパティパラメータがあります。
MAXACTIVE
パラメータとXA.MAXACTIVE
パラメータがどちらも設定されている場合、下限値が適用されます。データソースレベルでこの挙動を変更するプロパティを指定することで、それを変更できます。-- This command changes the maximum number of XA connections to 10 for the data source 'dataSourceName' in the database 'databaseName'. SET 'com.denodo.vdb.misc.datasource.JDBCDataSource.pool.databaseName.dataSourceName.xa.maxActive' = '10';
EXHAUSTEDACTION
が 2 に設定されるとMAXACTIVE
は無効になります (後述の説明を参照)。MAXIDLE
(デフォルト値 : -1): 一度にプール内でアイドル状態にできる最大コネクション数。-1 以下の場合、ある時点でアイドル状態にできるコネクション数に制限はありません。
この値が 0 以上で、
TIMEBETWEENEVICTION
パラメータとMINEVICTABLETIME
パラメータが 0 より大きい場合、一定時間を経過したアイドル状態のコネクションは閉じられます。
MINIDLE
(デフォルト値 : 0): コネクションプール内でアイドル状態の最小コネクション数。プールが新しいコネクションを開くまでクエリが待機する必要がないように、プール内に常にアイドル状態のコネクションを確保するために役立ちます。MINIDLE
を満たすために、プールはMAXACTIVE
を超えるコネクションを作成しません。XA プール構成では、MINIDLE
の値はINITIALSIZE
と同じです。EXHAUSTEDACTION
(デフォルト値 : 1): プールが空 (すべてのコネクションがクエリを実行中) の場合のプールの動作を指定します。指定可能な値は以下のとおりです。0
: データソースはエラーを返し、クエリは失敗します。1
: プールはコネクションが使用可能になるか、最大待機時間に達するまで待機します。最大待機時間に達すると、クエリは失敗します。デフォルトの最大待機時間は 30 秒ですが、変更は可能です。最大待機時間が
-1
の場合、データソースはコネクションが使用可能になるまで無期限に待機します。このプロパティを変更するには、VQL シェルから以下のコマンドを実行して、Virtual DataPort サーバーを再起動します。-- This represents 20 seconds because the value of this property is in milliseconds. SET 'com.denodo.vdb.misc.datasource.JDBCDataSource.pool.maxWait' = '20000';
最大待機時間を変更して再起動した後、既存の JDBC データソースは引き続き同じ最大待機時間を保持しますが、最大待機時間が変更されたデータソースの場合はそれぞれの最大待機時間が新しい値に変更されます。
2
: アイドル状態のコネクションがない場合、データソースは新しいコネクションを作成します。これによってMAXACTIVE
は無効になります。
XA コネクションプールが有効な場合、値
1
(EXHAUSTED_BLOCK
) のみがサポートされます。INITIALSIZE
(デフォルト値 : 4): プールが初期化されたときのコネクション数。認証オプションの「パススルーセッション資格情報」を使用してデータソースが作成されている場合、この値は無効になります。このオプションでは、Virtual DataPort サーバーは、このデータベースに接続するユーザーアカウントごとにコネクションプールを 1 つずつ作成します。プールに最初に用意されるコネクションは、
INITIALSIZE
の値に関係なく 1 つのみです。これは、不要なコネクションが過剰に作成されるのを防ぐためです。このプロパティを変更して、XA コネクションの場合に別の値を指定できます。
-- This command changes the number of XA connections with which the pool is initialized to 1 for the data source 'dataSourceName' in the database 'databaseName'. SET 'com.denodo.vdb.misc.datasource.JDBCDataSource.pool.databaseName.dataSourceName.xa.initialIdle' = '1';
VALIDATIONQUERY
(デフォルト値 : アダプターによって異なる): コネクションが引き続き有効であるかどうかをチェックするためにコネクションプールによって実行される SQL クエリ。「ping クエリ」とも呼ばれています。TESTONBORROW
、TESTONRETURN
、TESTWHILEIDLE
の少なくとも 1 つがtrue
の場合にのみ使用されます。このパラメータは、[Connection Pool Configuration] ダイアログの Ping query フィールドで GUI を使用して変更できます。
管理ツールを使用して JDBC データソースを作成し、 Generic 以外のデータベースアダプターを選択した場合、そのデータベースに適した検証クエリによってデータソースが自動的に作成されます。ただし、 Generic を選択した場合は、有効な ping クエリを提供する必要があります。このクエリは、リソースの使用量を可能なかぎり小さくするために頻繁に実行されます。さらに、プールによってクエリされるテーブルが存在している必要があり、ユーザーはそれを実行する権限を持っている必要があります。
ping クエリの例 :
SELECT 1 SELECT 1 FROM dual SELECT 1 FROM view LIMIT 0
ping クエリには、補間変数
USER_NAME
を含めることができます。実行時に、この変数はクエリを実行する Virtual DataPort ユーザーのユーザー名で置き換えられます。たとえば、JDBC データソースの ping クエリが
CALL DBMS_SESSION.SET_IDENTIFIER('@{USER_NAME}')
であるとします。ユーザー
scott
がこのデータソースを扱うクエリを実行した場合、Virtual DataPort はクエリCALL DBMS_SESSION.SET_IDENTIFIER('scott')
をプールから返されたコネクションに対して実行し、このコネクションが引き続き有効で期限切れになっていないことを確認します。TESTONBORROW
が true の場合、ping クエリは実際のクエリがデータベースに送信される前に毎回実行されます。このクエリには、現在クエリを実行しているユーザー名を挿入できるため、データベースでのステートメントの実行や監査目的に役立てることができます。TESTONBORROW
(デフォルト値 : true): 値が true で、VALIDATIONQUERY
パラメータが空でない場合、プールは選択したコネクションでVALIDATIONQUERY
を実行してから、そのコネクションを実行エンジンに返します。VALIDATIONQUERY
が失敗した場合、プールはコネクションを破棄し、別のコネクションを選択します。それ以上アイドル状態のコネクションがない場合は、コネクションを作成します。このプロパティを変更して、XA コネクションの場合に別の値を指定できます。
-- This command disables the ping query for XA connections for the data source 'dataSourceName' in the database 'databaseName'. SET 'com.denodo.vdb.misc.datasource.JDBCDataSource.pool.databaseName.dataSourceName.xa.testOnBorrow' = 'false';
TESTONRETURN
(デフォルト値 : false): 値が true で、VALIDATIONQUERY
パラメータが空でない場合、プールはプールに返されたコネクションに対してVALIDATIONQUERY
を実行します。VALIDATIONQUERY
が失敗した場合、プールはコネクションを破棄します。このパラメータは XA コネクションプールではサポートされていません。
プールは、プール内のコネクションが引き続き有効であるかを定期的に確認したり、一定期間を経過した後もプール内でアイドル状態のままのコネクションを閉じたりするように構成できます。コネクションが引き続き有効かどうかを確認するため、プールは VALIDATIONQUERY
を実行します。これに失敗した場合、プールはコネクションを破棄します。検証クエリが失敗する主な理由は、以下のとおりです。
データベースには、アクティビティがないまま一定期間が経過したコネクションを閉じるメカニズムがあります。
Denodo サーバーとデータベース間のファイアウォールは、アクティビティがないまま一定期間が経過したコネクションを自動的に閉じます。
このオプションを有効にする主な目的は、以下のとおりです。
プールのコネクションを常に有効にします。このようにすれば、コネクションが必要なときに、プールのコネクションは常に有効です。
しばらく使用されていないコネクションを閉じて、データベース内のリソースを解放します。
コネクションを検証してアイドル状態のコネクションを閉じるタスクは、コネクションプールごとに 1 つずつある「コネクションエビクションスレッド」 によって実行されます。このスレッドは定期的に起動し、これらのチェックを実行します。
コネクションエビクションスレッドを制御するパラメータは、以下のとおりです。
TIMEBETWEENEVICTION
(デフォルト値 : -1): エビクションスレッドがアイドル状態のコネクションの調査を「実行」する前にスリープしている期間 (ミリ秒単位)。負の値の場合、エビクションスレッドは起動しません。プールへのアクセスのために、エビクションの実行と実行エンジンは競合します。そのため、このスレッドを過剰に実行すると、パフォーマンスの問題が生じることがあります。
XA コネクションの場合、このパラメータの固定値は 300000 ミリ秒です。
MINEVICTABLETIME
(デフォルト値 : 1800000 - 30 分): コネクションがエビクションの対象となる前にプール内でアイドル状態のままでいる最小時間 (ミリ秒単位)。1 未満の場合、アイドル時間が原因でコネクションがプールからエビクションされることはありません。この場合、エビクションスレッドは検証クエリの実行時にエラーを返すコネクションのみを破棄します。
コネクションが
MINEVICTABLETIME
を超えてアイドル状態のままであっても、そのコネクションを閉じた後にアイドル状態のコネクション数がMINIDLE
未満の場合、コネクションは閉じられません。TIMEBETWEENEVICTION
が 1 未満の場合、このパラメータは有効ではありません。XA コネクションの場合、このパラメータの固定値は 600000 ミリ秒です。
TESTWHILEIDLE
(デフォルト値 : false): 値が true で、VALIDATIONQUERY
パラメータが空でない場合、コネクションエビクションスレッドによってコネクションが検証されます。コネクションを検証するため、スレッドはコネクションに対して検証クエリを実行します。失敗すると、プールはそのコネクションをプールから削除します。TIMEBETWEENEVICTION
が 1 未満の場合、このパラメータは有効ではありません。このパラメータは XA コネクションプールではサポートされていません。
NUMTESTPEREVICTION
(デフォルト値 : 3): コネクションエビクションスレッドの実行ごとに調査されるコネクション数。スレッドを実行する都度、プール内のすべてのコネクションを調査しない理由は、クエリが調査中のコネクションを使用できなくなるからです。TIMEBETWEENEVICTION
が 1 未満の場合、このパラメータは有効ではありません。XA 構成でこのパラメータを使用しない場合、プール内のすべてのオブジェクトがエビクションの対象となります。
ファイアウォールを用いた環境におけるコネクションプールの推奨設定¶
Denodo サーバーが稼働するホストとデータベースの間にファイアウォールが存在し、アクティビティがないまま一定期間を経過した非アクティブなコネクションを閉じるようにファイアウォールが設定されている場合は、データソースの「コネクションエビクション」スレッドを有効にする必要があります。有効にすることにより、コネクションプールは検証クエリを定期的に実行し、コネクションのアクティブな状態を維持します。それ以外の場合は、ファイアウォールがこれらのコネクションを閉じます。ファイアウォールがコネクションを閉じても、通常、そのコネクションの参加者にはコネクションが閉じられることは通知されません。問題は、すでにファイアウォールによって削除されたコネクションに対してプールが検証クエリを実行した場合、プールは引き続きこれが有効なコネクションであるとみなしており、タイムアウトでクエリが失敗するまで数分かかる場合があることです。この間、実行エンジンはプールがコネクションを返すのを待機します。このため、エビクションスレッドを実行し、アイドル状態のコネクションに対してテストを行うように設定することをお勧めします。
コネクションエビクションスレッドを有効にするには、以下の手順に従います。
管理ツールで VQL シェルを開きます。
DESC VQL DATASOURCE JDBC <name of the data source>;
を実行します。VALIDATIONQUERY
からMINEVICTABLETIME
までの部分をコピーします。ALTER DATASOURCE JDBC <name of the data source>
に続けて前の手順でコピーした内容を指定し、以下の変更を加えて、実行します。TESTWHILEIDLE
をtrue
に設定TIMEBETWEENEVICTION
を300000
(5 分) に設定
以下に例を示します。
ALTER DATASOURCE JDBC ds_jdbc_oracle_finance
VALIDATIONQUERY = 'Select 1'
INITIALSIZE = 4
MAXIDLE = -1
MINIDLE = 0
MAXACTIVE = 20
EXHAUSTEDACTION = 1
TESTONBORROW = true
TESTONRETURN = false
TESTWHILEIDLE = true
TIMEBETWEENEVICTION = 300000
NUMTESTPEREVICTION = 3
MINEVICTABLETIME = 1800000;
この変更により、プールは、5 分 (300,000 ミリ秒) ごとにプール内のアイドル状態の 3 つのコネクションを調査します (NUMTESTPEREVICTION
)。これら 3 つのコネクションのそれぞれについて、プールは以下を実行します。
コネクションが 30 分 (1,800,000 ミリ秒) を超えてアイドル状態の場合、プールはコネクションを閉じます。
アイドル状態が 30 分未満のコネクションの場合、クエリ
Select 1
(VALIDATIONQUERY
) をこのコネクションに対して実行します。検証クエリが失敗すると、このコネクションを削除します。
ファイアウォールが非アクティブなコネクションを閉じる場合の代替方法は、コネクションプールを無効にすることです。ただし、これを実行すると、コネクションを再利用する代わりに、データソースがクエリごとに新しいコネクションを開く必要があるため、パフォーマンスに影響が及びます。この結果、すべてのクエリの実行時間が長くなります。
データソースのコネクションプールを無効にするには、上記と同じ手順に従い、データソースのパラメータ MAXACTIVE
を 0 に設定します。