グリッドおよびデータベースのデプロイ
ttGridRollout
ユーティリティは、構成ファイルで定義されたパラメータを使用して、ユーザーによる入力を必要とせずにグリッドとデータベースのデプロイを最初から最後まで実行します。このユーティリティは各種のttGridAdmin
コマンドを使用して、グリッドとデータベースの初期構成とデプロイメントに関連する操作を実行します。ttGridRollout
ユーティリティは、TimesTen Scaleoutのインストール先のbin
ディレクトリにあります。
ttGridRollout
ユーティリティの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のttGridRolloutを参照してください。
データベース定義ファイルの作成
データベース定義ファイル(.dbdef
という接尾辞)には、データベースのデータ・ストア属性と初回接続属性が含まれています。このファイルには、database_name
.dbdef
という形式の名前を付ける必要があります。たとえば、database1
という名前のデータベースの場合、データベース定義ファイルの名前はdatabase1.dbdef
となります。
次に示すように、アクティブ管理インスタンスのホストとして定義されているシステム上の任意のディレクトリ内に、データベース定義ファイルを作成します。
% vi /mydir/database1.dbdef
[database1]
DataStore=/disk1/databases/database1
LogDir=/disk2/logs
DatabaseCharacterSet=AL32UTF8
Durability=0
PermSize=32768
TempSize=4096
LogBufMB=1024
Connections=2048
「データベース定義ファイルの作成」を参照してください。
接続可能オブジェクト・ファイルの作成
接続可能オブジェクト・ファイル(.connect
という接尾辞)には、データベースへの接続に関する全般的な接続属性が含まれています。TimesTen Scaleoutでは、このデータベースへの直接接続用またはクライアント/サーバー接続用の接続可能オブジェクトがサポートされています。
次に示すように、アクティブ管理インスタンスのホストとして定義されているシステム上の任意のディレクトリ内に、接続可能オブジェクト・ファイルを作成します。
% vi /mydir/database1CS.connect
ConnectionCharacterSet=AL32UTF8
「接続可能オブジェクト・ファイルの作成」を参照してください。
データベース用のSQLスクリプト・ファイルの作成
SQLスクリプト・ファイルには、該当するデータベース用のSQLオブジェクトを作成するためのSQL文が含まれています。
次に示すように、アクティブ管理インスタンスのホストとして定義されているシステム上の任意のディレクトリ内に、SQLスクリプト・ファイルを作成します。
ノート:
database1.sql
ファイルに含まれているCREATE TABLE
文とこれらの文の分散スキームの詳細は、「表の分散スキームの定義」を参照してください。
% vi /mydir/database1.sql
CREATE USER terry IDENTIFIED BY password;
GRANT CREATE SESSION TO terry;
CREATE TABLE terry.account_type
(
type CHAR(1) NOT NULL PRIMARY KEY,
description VARCHAR2(100) NOT NULL
)
DUPLICATE;
CREATE TABLE terry.account_status
(
status NUMBER(2,0) NOT NULL PRIMARY KEY,
description VARCHAR2(100) NOT NULL
)
DUPLICATE;
CREATE TABLE terry.customers
(
cust_id NUMBER(10,0) NOT NULL PRIMARY KEY,
first_name VARCHAR2(30) NOT NULL,
last_name VARCHAR2(30) NOT NULL,
addr1 VARCHAR2(64),
addr2 VARCHAR2(64),
zipcode VARCHAR2(5),
member_since DATE NOT NULL
)
DISTRIBUTE BY HASH;
CREATE TABLE terry.accounts
(
account_id NUMBER(10,0) NOT NULL PRIMARY KEY,
phone VARCHAR2(16) NOT NULL,
account_type CHAR(1) NOT NULL,
status NUMBER(2,0) NOT NULL,
current_balance NUMBER(10,2) NOT NULL,
prev_balance NUMBER(10,2) NOT NULL,
date_created DATE NOT NULL,
cust_id NUMBER(10,0) NOT NULL,
CONSTRAINT fk_customer
FOREIGN KEY (cust_id)
REFERENCES terry.customers(cust_id),
CONSTRAINT fk_acct_type
FOREIGN KEY (account_type)
REFERENCES terry.account_type(type),
CONSTRAINT fk_acct_status
FOREIGN KEY (status)
REFERENCES terry.account_status(status)
)
DISTRIBUTE BY REFERENCE (fk_customer);
CREATE TABLE terry.transactions
(
transaction_id NUMBER(10,0) NOT NULL,
account_id NUMBER(10,0) NOT NULL ,
transaction_ts TIMESTAMP NOT NULL,
description VARCHAR2(60),
optype CHAR(1) NOT NULL,
amount NUMBER(6,2) NOT NULL,
PRIMARY KEY (account_id, transaction_id, transaction_ts),
CONSTRAINT fk_accounts
FOREIGN KEY (account_id)
REFERENCES terry.accounts(account_id)
)
DISTRIBUTE BY REFERENCE (fk_accounts);
CREATE SEQUENCE terry.txn_seq CACHE 100 BATCH 1000000;
ttGridRolloutユーティリティの構成ファイルの作成
ttGridRollout
ユーティリティの構成ファイルでは、TimesTen Scaleout内でグリッドとデータベースを正常に作成してデプロイするために必要となるすべてのパラメータが定義されます。
次に示すように、ttGridRollout
ユーティリティの構成ファイルを作成します。次のような構成ファイルです。
-
グリッドには
grid1
という名前を付けます。 -
membership.conf
ファイルで指定されたメンバーシップ・サーバーを定義します。 -
各インストール・オブジェクトのインストール・ファイルの場所として、それぞれのホスト上の
/grid/tt22.1.1.27.0
を定義します。 -
各インスタンス・オブジェクトのインスタンス・ファイルの場所を、それぞれのホスト上の
/grid
として定義します。 -
database1.dbdef
ファイルで指定されたデータベース定義を作成します。 -
database1CS.connect
ファイルで指定されたクライアント/サーバー接続可能オブジェクトを作成します。 -
database1.sql
ファイルで指定されたSQLスキーマをdatabase1
データベースに追加します。 -
2つの管理インスタンスを作成します(各インスタンスのホストとインストール内容を含む)。
-
6つのデータ・インスタンスを作成します(2つのデータ・スペース・グループに均等に割り当てられた、各インスタンスのホストとインストール内容を含む)。
ttGridRollout
ユーティリティにより、グリッドの作成時に、3つのデータ領域グループの必要性を満たすためにK-safetyが3
に設定されます。ノート:
この例の各インスタンスで使用されている属性の詳細は、「それぞれのホストおよびメンバーシップ・サーバーのネットワーク・パラメータの定義」を参照してください。
% vi /mydir/grid1.conf
grid_name = grid1
zoo_conf = /mydir/membership.conf
instance_location = /grid
installation_location = /grid
dbdef_file = /mydir/database1.dbdef
cs_connect_files = /mydir/database1CS.connect
init_script = /mydir/database1.sql
mgmt_instances = [
{ "host":"host1", "address":"int-host1", "instance":"instance1",
"daemonport":6624, "csport":6625, "mgmtport":3574},
{ "host":"host2", "address":"int-host2", "instance":"instance1",
"daemonport":6624, "csport":6625, "mgmtport":3574}
]
data_instances = [
{ "host":"host3", "internalAddress":"int-host3",
"externalAddress":"ext-host3.example.com", "dataspacegroup":1,
"instance":"instance1", "daemonport":6624, "csport":6625},
{ "host":"host4", "internalAddress":"int-host4",
"externalAddress":"ext-host4.example.com", "dataspacegroup":2,
"instance":"instance1", "daemonport":6624, "csport":6625},
{ "host":"host5", "internalAddress":"int-host5",
"externalAddress":"ext-host5.example.com", "dataspacegroup":3,
"instance":"instance1", "daemonport":6624, "csport":6625},
{ "host":"host6", "internalAddress":"int-host6",
"externalAddress":"ext-host6.example.com", "dataspacegroup":1,
"instance":"instance1", "daemonport":6624, "csport":6625},
{ "host":"host7", "internalAddress":"int-host7",
"externalAddress":"ext-host7.example.com", "dataspacegroup":2,
"instance":"instance1", "daemonport":6624, "csport":6625},
{ "host":"host8", "internalAddress":"int-host8",
"externalAddress":"ext-host8.example.com", "dataspacegroup":3,
"instance":"instance1", "daemonport":6624, "csport":6625}
]
グリッドとデータベースの作成
ttGridRollout
ユーティリティを使用して、作成した構成ファイルに基づいてグリッドとデータベースを作成します。
% /grid/tt22.1.1.27.0/bin/ttGridRollout /mydir/grid1.conf
INFO: Checking Zookeeper on ms-host1!2181 -- OK
INFO: Checking Zookeeper on ms-host2!2181 -- OK
INFO: Checking Zookeeper on ms-host3!2181 -- OK
INFO: Checking the address for the management database -- OK
INFO: Checking connectivity to int-host1 -- OK
================================================================================
/grid/tt22.1.1.27.0/bin/ttInstanceCreate -grid -location /grid -name
instance1 -daemonport 6624 -csport 6625
Creating instance in /grid/instance1 ...
NOTE: The TimesTen daemon startup/shutdown scripts have not been installed.
The startup script is located here :
'/grid/instance1/startup/tt_instance1'
Run the 'setuproot' script :
/grid/instance1/bin/setuproot -install
This will move the TimesTen startup script into its appropriate location.
The 22.1 Release Notes are located here :
'/grid/tt22.1.1.27.0/README.html'
/grid/instance1/bin/ttenv ttGridAdmin gridCreate grid1 -k 3 -host host1 -address
int-host1 -membership zookeeper -membershipConfig /mydir/membership.conf
-mgmtport 3754
/grid/instance1/bin/ttenv ttGridAdmin hostCreate host2 -address int-host2
/grid/instance1/bin/ttenv ttGridAdmin installationCreate host2 -location /grid
/grid/instance1/bin/ttenv ttGridAdmin instanceCreate host2.instance1 -location
/grid -type management -daemonport 6624 -csport 6625 -mgmtport 3754
/grid/instance1/bin/ttenv ttGridAdmin modelApply
/grid/instance1/bin/ttenv ttGridAdmin hostCreate host3 -externaladdress int-host3
-internaladdress ext-host3.example.com -dataspacegroup 1
/grid/instance1/bin/ttenv ttGridAdmin installationCreate host3 -location /grid
/grid/instance1/bin/ttenv ttGridAdmin hostCreate host4 -externaladdress int-host4
-internaladdress ext-host4.example.com -dataspacegroup 2
/grid/instance1/bin/ttenv ttGridAdmin installationCreate host4 -location /grid
/grid/instance1/bin/ttenv ttGridAdmin hostCreate host5 -externaladdress int-host5
-internaladdress ext-host5.example.com -dataspacegroup 3
/grid/instance1/bin/ttenv ttGridAdmin installationCreate host5 -location /grid
/grid/instance1/bin/ttenv ttGridAdmin hostCreate host6 -externaladdress int-host6
-internaladdress ext-host6.example.com -dataspacegroup 1
/grid/instance1/bin/ttenv ttGridAdmin installationCreate host6 -location /grid
/grid/instance1/bin/ttenv ttGridAdmin hostCreate host7 -externaladdress int-host7
-internaladdress ext-host7.example.com -dataspacegroup 2
/grid/instance1/bin/ttenv ttGridAdmin installationCreate host7 -location /grid
/grid/instance1/bin/ttenv ttGridAdmin hostCreate host8 -externaladdress int-host8
-internaladdress ext-host8.example.com -dataspacegroup 3
/grid/instance1/bin/ttenv ttGridAdmin installationCreate host8 -location
/grid
/grid/instance1/bin/ttenv ttGridAdmin instanceCreate host3.instance1 -location
/grid -daemonport 6624 -csport 6625
/grid/instance1/bin/ttenv ttGridAdmin instanceCreate host4.instance1 -location
/grid -daemonport 6624 -csport 6625
/grid/instance1/bin/ttenv ttGridAdmin instanceCreate host5.instance1 -location
/grid -daemonport 6624 -csport 6625
/grid/instance1/bin/ttenv ttGridAdmin instanceCreate host6.instance1 -location
/grid -daemonport 6624 -csport 6625
/grid/instance1/bin/ttenv ttGridAdmin instanceCreate host7.instance1 -location
/grid -daemonport 6624 -csport 6625
/grid/instance1/bin/ttenv ttGridAdmin instanceCreate host8.instance1 -location
/grid -daemonport 6624 -csport 6625
/grid/instance1/bin/ttenv ttGridAdmin dbdefCreate /mydir/database1.dbdef
/grid/instance1/bin/ttenv ttGridAdmin modelApply
/grid/instance1/bin/ttenv ttGridAdmin dbCreate -wait 180 database1
/grid/instance1/bin/ttenv ttGridAdmin dbDistribute database1 -add all -apply
/grid/instance1/bin/ttenv ttGridAdmin dbOpen -wait 180 database1
/grid/instance1/bin/ttenv ttGridAdmin connectableCreate -dbdef database1 -cs
/mydir/database1CS.connect
/grid/instance1/bin/ttenv ttGridAdmin modelApply
/grid/instance1/bin/ttenv ttGridAdmin instanceExec -only host3.instance1 "ttIsql
database1 <<EOF
CREATE USER terry IDENTIFIED BY password;
GRANT CREATE SESSION TO terry;
CREATE TABLE terry.account_type
(
type CHAR(1) NOT NULL PRIMARY KEY,
description VARCHAR2(100) NOT NULL
)
DUPLICATE;
CREATE TABLE terry.account_status
(
status NUMBER(2,0) NOT NULL PRIMARY KEY,
description VARCHAR2(100) NOT NULL
)
DUPLICATE;
CREATE TABLE terry.customers
(
cust_id NUMBER(10,0) NOT NULL PRIMARY KEY,
first_name VARCHAR2(30) NOT NULL,
last_name VARCHAR2(30) NOT NULL,
addr1 VARCHAR2(64),
addr2 VARCHAR2(64),
zipcode VARCHAR2(5),
member_since DATE NOT NULL
)
DISTRIBUTE BY HASH;
CREATE TABLE terry.accounts
(
account_id NUMBER(10,0) NOT NULL PRIMARY KEY,
phone VARCHAR2(16) NOT NULL,
account_type CHAR(1) NOT NULL,
status NUMBER(2,0) NOT NULL,
current_balance NUMBER(10,2) NOT NULL,
prev_balance NUMBER(10,2) NOT NULL,
date_created DATE NOT NULL,
cust_id NUMBER(10,0) NOT NULL,
CONSTRAINT fk_customer
FOREIGN KEY (cust_id)
REFERENCES terry.customers(cust_id),
CONSTRAINT fk_acct_type
FOREIGN KEY (account_type)
REFERENCES terry.account_type(type),
CONSTRAINT fk_acct_status
FOREIGN KEY (status)
REFERENCES terry.account_status(status)
)
DISTRIBUTE BY REFERENCE (fk_customer);
CREATE TABLE terry.transactions
(
transaction_id NUMBER(10,0) NOT NULL,
account_id NUMBER(10,0) NOT NULL ,
transaction_ts TIMESTAMP NOT NULL,
description VARCHAR2(60),
optype CHAR(1) NOT NULL,
amount NUMBER(6,2) NOT NULL,
PRIMARY KEY (account_id, transaction_id, transaction_ts),
CONSTRAINT fk_accounts
FOREIGN KEY (account_id)
REFERENCES terry.accounts(account_id)
)
DISTRIBUTE BY REFERENCE (fk_accounts);
CREATE SEQUENCE terry.txn_seq CACHE 100 BATCH 1000000;
EOF"
================================================================================
6-instance (2x3) grid successfully created.
Management Instance Locations
-----------------------------
- int-host1:/grid/instance1
- int-host2:/grid/instance1
Please source ttenv script under Management Instances for grid management via
"ttGridAdmin" commands.
For example, to use the first management instance, on int-host1:
sh: . /grid/instance1/bin/ttenv.sh
csh: source /grid/instance1/bin/ttenv.csh
Data Instance Locations
-----------------------
- host3.instance1 ==> int-host3:/grid/instance1
- host4.instance1 ==> int-host4:/grid/instance1
- host5.instance1 ==> int-host5:/grid/instance1
- host6.instance1 ==> int-host6:/grid/instance1
- host7.instance1 ==> int-host7:/grid/instance1
- host8.instance1 ==> int-host8:/grid/instance1
Please source ttenv script under Data Instances for database operations.
For example, to use instance1, on int-host3:
sh: . /grid/instance1/bin/ttenv.sh
csh: source /grid/instance1/bin/ttenv.csh
データベースへの接続
直接接続またはクライアント接続を介してデータベースに接続します。直接接続の場合は、使用する環境をいずれかのデータ・インスタンス(host3.instance1
など)に設定して、database1
接続可能オブジェクトを使用してデータベースに接続します。
% source /grid/instance1/bin/ttenv.csh
...
% ttIsql -connStr "DSN=database1;UID=terry"
「データベースへの接続」を参照してください。